Đóng gói cuối tuần

This commit is contained in:
2026-04-18 04:46:01 +00:00
parent 761b34916b
commit 3cef1c40df
37 changed files with 1266 additions and 301 deletions

View File

@@ -3,10 +3,6 @@
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;
@@ -15,95 +11,21 @@ class DatabaseSeeder extends Seeder
{
public function run(): void
{
// 1. Xóa sạch dữ liệu cũ
// 1. Dọn dẹp an toàn
Schema::disableForeignKeyConstraints();
Contract::query()->delete();
Customer::query()->delete();
Product::query()->delete();
Project::query()->delete();
User::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'
// 2. Tạo tài khoản quản trị Admin
User::create([
'name' => 'chanphuong',
'email' => 'admin@phuongtc.com',
'password' => Hash::make('1Qazxsw2@!321'),
]);
// 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']);
}
// 3. Gọi bộ nạp dữ liệu Test chuyên sâu
$this->call([
TestDataSeeder::class,
]);
}
}