<?php
declare(strict_types=1);
namespace Database\Seeders;
use App\Domain\Payment\Enums\PaymentStatusEnum;
use App\Domain\Payment\Enums\PaymentTypeEnum;
use App\Domain\Payment\PaymentService;
use App\Domain\Payment\Requests\CreatePaymentRequest;
use App\Enums\ModelsEnum;
use App\Models\Account;
use App\Models\Article;
use App\Models\Counterparty;
use App\Models\Organization;
use App\Models\Project;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Http\UploadedFile;
class PaymentSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$service = app()->make(PaymentService::class);
$users = User::query()->pluck('id')->toArray();
foreach (ModelsEnum::cases() as $case) {
$contragents = Counterparty::where('model_id', $case->value)->pluck('id')->toArray();
$accounts = Account::where('model_id', $case->value)->pluck('id')->toArray();
$projects = Project::where('model_id', $case->value)->pluck('id')->toArray();
$articles = Article::where('model_id', $case->value)->pluck('id')->toArray();
$accounts = Account::where('model_id', $case->value)->pluck('id')->toArray();
$organizations = Organization::where('model_id', $case->value)->pluck('id')->toArray();
for ($i = 0; $i < 10; $i++) {
$fakeFile = storage_path('fake_file.txt');
file_put_contents($fakeFile, "Fake file " . $i);
$service
->setUserID(fake()->randomElement($users))
->createNew(
$case->value,
new CreatePaymentRequest([
'amount' => random_int(1000, 10000),
'name' => 'Платеж ' . $case->value . '-' . ($i + 1),
'description' => 'Оплата для проекта ' . $case->value . '-' . ($i + 1),
'status' => fake()->randomElement([
PaymentStatusEnum::STATUS_DRAFT->value,
PaymentStatusEnum::STATUS_PAID->value,
PaymentStatusEnum::STATUS_ISSUED->value,
PaymentStatusEnum::STATUS_RECEIVED->value,
PaymentStatusEnum::STATUS_FINALIZE_TWO_TWO->value,
PaymentStatusEnum::STATUS_FINALIZE->value,
PaymentStatusEnum::STATUS_APPROVE->value,
PaymentStatusEnum::STATUS_SENT->value,
]),
'payment_type' => fake()->randomElement([
PaymentTypeEnum::PAYMENT_TYPE_PAYMENT->value,
PaymentTypeEnum::PAYMENT_TYPE_ISSUEANCE->value,
]),
'payment_date' => fake()->dateTimeBetween('-10 days', '+10 days'),
'counterparty_id' => fake()->randomElement($contragents),
'account_id' => fake()->randomElement($accounts),
'project_id' => fake()->randomElement($projects),
'organization_id' => fake()->randomElement($organizations),
'article_id' => fake()->randomElement($articles),
'payment_distribution' => [
[
'project_id' => fake()->randomElement($projects),
'article_id' => fake()->randomElement($articles),
'amount' => random_int(10000, 1000000) / 100,
]
],
'files' => [
// new UploadedFile(
// $fakeFile,
// 'fakefile.txt',
// 'text/plain',
// null,
// true,
// true
// )
]
])
);
}
}
}
}