From ec330069840d6f1e9327cefdbcc030ae4c2a30cb Mon Sep 17 00:00:00 2001 From: Mekan1206 Date: Fri, 13 Feb 2026 22:51:43 +0500 Subject: [PATCH] Update DatabaseSeeder to include MediaSeeder and enhance 404 error page localization - Added MediaSeeder to DatabaseSeeder for improved data seeding. - Updated 404 error page to use localized string for "Page not found" and added links for navigation. - Added new translation for "Page not found" in tk.json. --- app/Models/Ecommerce/Product/Order/Order.php | 2 + .../Product/Category/CategoryRepository.php | 14 +- app/Services/Order/CreateOrderService.php | 1 - ..._13_174450_add_options_to_orders_table.php | 28 ++++ database/seeders/DatabaseSeeder.php | 7 +- database/seeders/PaymentTypeSeeder.php | 43 +++++++ database/seeders/new/OrderAddressSeeder.php | 31 +++++ database/seeders/new/OrderSeeder.php | 120 ++++++++++++++++++ 8 files changed, 235 insertions(+), 11 deletions(-) create mode 100644 database/migrations/2026_02_13_174450_add_options_to_orders_table.php create mode 100644 database/seeders/PaymentTypeSeeder.php create mode 100644 database/seeders/new/OrderAddressSeeder.php create mode 100644 database/seeders/new/OrderSeeder.php diff --git a/app/Models/Ecommerce/Product/Order/Order.php b/app/Models/Ecommerce/Product/Order/Order.php index 25e397e..a8f2468 100644 --- a/app/Models/Ecommerce/Product/Order/Order.php +++ b/app/Models/Ecommerce/Product/Order/Order.php @@ -6,6 +6,7 @@ use App\Models\Ecommerce\Product\Order\Concerns\HasPayments; use App\Models\Ecommerce\Product\Order\Concerns\HasShipping; use App\Models\Ecommerce\Product\Order\Concerns\HasStatus; use App\Models\Ecommerce\Product\Order\Status\OrderStatus; +use App\Models\Concerns\HasSchemalessAttributes; use App\Models\System\Settings\Location\Province; use App\Models\System\Settings\Payments\PaymentType; use App\Models\User; @@ -22,6 +23,7 @@ class Order extends Model use HasShipping; use HasStatus; use SoftDeletes; + use HasSchemalessAttributes; /** * The attributes that are mass assignable. diff --git a/app/Repositories/Ecommerce/Product/Category/CategoryRepository.php b/app/Repositories/Ecommerce/Product/Category/CategoryRepository.php index 8c2e68e..1aa59b0 100644 --- a/app/Repositories/Ecommerce/Product/Category/CategoryRepository.php +++ b/app/Repositories/Ecommerce/Product/Category/CategoryRepository.php @@ -126,15 +126,11 @@ class CategoryRepository */ public static function namesWithTaxes(): mixed { - return CacheRepository::make( - time: 5, - name: 'cs-nova-models-categories', - value: fn () => static::maskParentName( - Category::tree() - ->where('is_visible', true) - ->get(['id', 'slug', 'name', 'tax_percentage', 'parent_id', 'is_visible']) - ->toTree() - ) + return static::maskParentName( + Category::tree() + ->where('is_visible', true) + ->get(['id', 'slug', 'name', 'tax_percentage', 'parent_id', 'is_visible']) + ->toTree() ); } diff --git a/app/Services/Order/CreateOrderService.php b/app/Services/Order/CreateOrderService.php index 79be39e..df2b4ce 100644 --- a/app/Services/Order/CreateOrderService.php +++ b/app/Services/Order/CreateOrderService.php @@ -18,7 +18,6 @@ class CreateOrderService { return DB::transaction(function () use ($user, $data) { // 1. Create the order - info(['service' => $data]); $order = Order::create($data); // 2. Process Cart Items diff --git a/database/migrations/2026_02_13_174450_add_options_to_orders_table.php b/database/migrations/2026_02_13_174450_add_options_to_orders_table.php new file mode 100644 index 0000000..13f6990 --- /dev/null +++ b/database/migrations/2026_02_13_174450_add_options_to_orders_table.php @@ -0,0 +1,28 @@ +jsonb('options')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('orders', function (Blueprint $table) { + $table->dropColumn('options'); + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 4ee9e1d..776be96 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -8,6 +8,8 @@ use Database\Seeders\New\CategoriesTableSeeder; use Database\Seeders\New\CustomersTableSeeder; use Database\Seeders\New\FavoritesSeeder; use Database\Seeders\New\MediaSeeder; +use Database\Seeders\New\OrderAddressSeeder; +use Database\Seeders\New\OrderSeeder; use Database\Seeders\New\ProductBarcodesSeeder; use Database\Seeders\New\ProductCategoryRelationshipsSeeder; use Database\Seeders\New\ProductPricesSeeder; @@ -31,6 +33,7 @@ class DatabaseSeeder extends Seeder public function run(): void { $this->call([ + // PaymentTypeSeeder::class, // UsersTableSeeder::class, // BrandsSeeder::class, // CustomersTableSeeder::class, @@ -47,7 +50,9 @@ class DatabaseSeeder extends Seeder // ProductPropertiesSeeder::class, // ProductPropertyValuesSeeder::class, // ProductStocksSeeder::class, - MediaSeeder::class, + // MediaSeeder::class, + // OrderSeeder::class, + OrderAddressSeeder::class, ]); } } diff --git a/database/seeders/PaymentTypeSeeder.php b/database/seeders/PaymentTypeSeeder.php new file mode 100644 index 0000000..222a4b1 --- /dev/null +++ b/database/seeders/PaymentTypeSeeder.php @@ -0,0 +1,43 @@ + 1, + 'code' => 'cash', + 'name' => ['en' => 'Cash', 'tk' => 'Nagt', 'ru' => 'Näliçni'], + 'tax' => 0, + 'is_enabled' => true, + 'options' => null, + ], + [ + 'id' => 2, + 'code' => 'atm', + 'name' => ['en' => 'ATM', 'tk' => 'Terminal', 'ru' => 'ATM'], + 'tax' => 0, + 'is_enabled' => true, + 'options' => null, + ], + [ + 'id' => 3, + 'code' => 'online_halkbank', + 'name' => ['en' => 'Online (halkbank)', 'tk' => 'Onlaýn (halkbank)', 'ru' => 'Onlaýn (halkbank)'], + 'tax' => 0, + 'is_enabled' => true, + 'options' => null, + ], + ])->each(fn($data) => PaymentType::create($data)); + } +} \ No newline at end of file diff --git a/database/seeders/new/OrderAddressSeeder.php b/database/seeders/new/OrderAddressSeeder.php new file mode 100644 index 0000000..3bb3261 --- /dev/null +++ b/database/seeders/new/OrderAddressSeeder.php @@ -0,0 +1,31 @@ + new ExtJsonDecoder(true)] + ); + + foreach ($items as $data) { + DB::table('orders')->where('id', $data['order_id'])->update([ + 'customer_address' => $data['address'], + ]); + } + }); + } +} diff --git a/database/seeders/new/OrderSeeder.php b/database/seeders/new/OrderSeeder.php new file mode 100644 index 0000000..13ccbd0 --- /dev/null +++ b/database/seeders/new/OrderSeeder.php @@ -0,0 +1,120 @@ +fillOrders(); + $this->fillOrderItems(); + } + + private function fillOrderItems() + { + DB::transaction(function () { + $table = 'order_items'; + + DB::table($table)->truncate(); + + $items = Items::fromFile( + database_path('data/order_items.json'), + ['decoder' => new ExtJsonDecoder(true)] + ); + + foreach ($items as $data) { + $channel_id = DB::table('channel_product')->where('product_id', $data['item_id'])->first()->channel_id ?? tmpostChannel()->id; + + DB::table($table)->insert([ + 'id' => $data['id'], + 'order_id' => $data['order_id'], + 'product_id' => $data['item_id'], + 'quantity' => $data['quantity'], + 'unit_price_amount' => $data['price'], + + 'channel_id' => $channel_id, + + 'created_at' => $data['created_at'], + 'updated_at' => $data['updated_at'], + ]); + } + + DB::statement(" + SELECT setval('{$table}_id_seq', (SELECT MAX(id) from {$table})) + "); + }); + } + + private function fillOrders() + { + DB::transaction(function () { + $table = 'orders'; + + DB::table($table)->truncate(); + + $items = Items::fromFile( + database_path('data/orders.json'), + ['decoder' => new ExtJsonDecoder(true)] + ); + + foreach ($items as $data) { + DB::table($table)->insert([ + 'id' => $data['id'], + 'number' => Str::random(30), + 'user_id' => $data['customer_id'], + 'options' => sprintf('{"seller_id":"%s","warehouse_id":"%s"}', $data['seller_id'], $data['warehouse_id']), + 'status' => $this->formatStatus($data['status']), + 'shipping_method' => $this->formatShippingMethod($data['delivery_type']), + 'payment_type_id' => $this->formatPaymentType($data['payment_type']), + 'notes' => $data['note'], + 'created_at' => $data['created_at'], + 'updated_at' => $data['updated_at'], + 'deleted_at' => $data['deleted_at'], + ]); + } + + DB::statement(" + SELECT setval('{$table}_id_seq', (SELECT MAX(id) from {$table})) + "); + }); + } + + private function formatStatus(string $status): string + { + return match ($status) { + 'DRAFT' => OrderStatus::PENDING, + 'COMPLETED' => OrderStatus::COMPLETED, + 'DELIVERED' => OrderStatus::COMPLETED, + 'CANCELLED' => OrderStatus::CANCELLED, + default => OrderStatus::default(), + }; + } + + private function formatShippingMethod($shippingMethod): string + { + return match ($shippingMethod) { + 'PICK_UP' => OrderShipping::SELF_PICKUP, + 'EXPRESS_DELIVERY' => OrderShipping::EXPRESS, + 'SELECTED_DELIVERY' => OrderShipping::STANDART, + default => OrderShipping::default(), + }; + } + + private function formatPaymentType($paymentType): int + { + return match ($paymentType) { + 'CASH' => 1, + 'CARD' => 2, + default => 1, + }; + } +} \ No newline at end of file