• File: PaymentSeeder.php
  • Full Path: /var/www/html/back/database/seeders/PaymentSeeder.php
  • File size: 4.26 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?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
//                                )
                            ]
                        ])
                    );
            }
        }
    }
}