110 lines
4.3 KiB
PHP
110 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\User;
|
|
use App\Models\Project;
|
|
use App\Models\Product;
|
|
use App\Models\Customer;
|
|
use App\Models\Contract;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
class DatabaseSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
// 1. Xóa sạch dữ liệu cũ
|
|
Schema::disableForeignKeyConstraints();
|
|
Contract::query()->delete();
|
|
Customer::query()->delete();
|
|
Product::query()->delete();
|
|
Project::query()->delete();
|
|
Schema::enableForeignKeyConstraints();
|
|
|
|
// 2. Tạo tài khoản Admin mặc định
|
|
User::updateOrCreate(
|
|
['email' => 'admin@phuongtc.com'],
|
|
[
|
|
'name' => 'Administrator',
|
|
'password' => Hash::make('1Qazxsw2@!321'),
|
|
]
|
|
);
|
|
|
|
// 3. Tạo 1 Dự án cố định và 1 Sản phẩm cố định STH-6535 để test
|
|
$specialProject = Project::factory()->create(['name' => 'Dự án HQLand Center']);
|
|
$specialProduct = Product::factory()->create([
|
|
'project_id' => $specialProject->id,
|
|
'code' => 'STH-6535',
|
|
'status' => 'Đang mở bán'
|
|
]);
|
|
|
|
// 4. Tạo thêm các Dự án và Sản phẩm ngẫu nhiên khác
|
|
Project::factory(2)
|
|
->has(Product::factory()->count(15), 'products')
|
|
->create();
|
|
|
|
// 5. Tạo 20 Khách hàng
|
|
Customer::factory(20)->create();
|
|
|
|
// 6. Tạo dữ liệu Lịch sử chuyển nhượng cho 10 sản phẩm (bao gồm cả STH-6535)
|
|
$transferProducts = Product::limit(10)->get();
|
|
$allCustomers = Customer::all();
|
|
|
|
foreach ($transferProducts as $product) {
|
|
$baseValue = $product->total_price;
|
|
|
|
// --- Lần 1: Hợp đồng gốc (Mua từ CĐT) ---
|
|
$contract1 = Contract::factory()->create([
|
|
'product_id' => $product->id,
|
|
'contract_type' => 'HĐMB',
|
|
'transfer_order' => 1,
|
|
'total_value' => $baseValue,
|
|
'status' => 'Đã chuyển nhượng',
|
|
'signing_date' => now()->subYears(2),
|
|
]);
|
|
$allCustomers->random()->contracts()->attach($contract1->id, ['role' => 'CHỦ CŨ', 'transfer_order' => 1]);
|
|
|
|
// --- Lần 2: Chuyển nhượng F1 ---
|
|
$valueF1 = $baseValue * 1.1;
|
|
$contract2 = Contract::factory()->create([
|
|
'product_id' => $product->id,
|
|
'contract_type' => 'VBCN',
|
|
'transfer_order' => 2,
|
|
'total_value' => $valueF1,
|
|
'status' => 'Đã chuyển nhượng',
|
|
'signing_date' => now()->subYear(),
|
|
]);
|
|
$allCustomers->random()->contracts()->attach($contract2->id, ['role' => 'CHỦ CŨ', 'transfer_order' => 2]);
|
|
|
|
// --- Lần 3: Chủ hiện tại (Sở hữu cuối cùng) ---
|
|
$valueFinal = $valueF1 * 1.1;
|
|
$contract3 = Contract::factory()->create([
|
|
'product_id' => $product->id,
|
|
'contract_type' => 'VBCN',
|
|
'transfer_order' => 0,
|
|
'total_value' => $valueFinal,
|
|
'status' => 'Đang hiệu lực',
|
|
'signing_date' => now(),
|
|
]);
|
|
$allCustomers->random()->contracts()->attach($contract3->id, ['role' => 'CHỦ SỞ HỮU', 'transfer_order' => 0]);
|
|
|
|
// Cập nhật trạng thái sản phẩm cuối cùng
|
|
$product->update(['status' => 'Đã bán', 'total_price' => $valueFinal]);
|
|
}
|
|
|
|
// 7. Tạo thêm 5 hợp đồng lẻ cho các sản phẩm còn lại để đa dạng hóa
|
|
$remainingProducts = Product::where('status', 'Đang mở bán')->inRandomOrder()->limit(5)->get();
|
|
foreach ($remainingProducts as $product) {
|
|
$contract = Contract::factory()->create([
|
|
'product_id' => $product->id,
|
|
'transfer_order' => 0,
|
|
'total_value' => $product->total_price,
|
|
]);
|
|
$allCustomers->random()->contracts()->attach($contract->id, ['role' => 'CHỦ SỞ HỮU', 'transfer_order' => 0]);
|
|
$product->update(['status' => 'Đã bán']);
|
|
}
|
|
}
|
|
}
|