HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/conmeq.komma.pro/app/Komma/Shop/seeds/SampleOrders.php
<?php
namespace App\Komma\Shop\seeds;

use App\Komma\Addresses\Models\Address;
use App\Komma\Shop\Cart\ShoppingCartService;
use App\Komma\Shop\Checkout\CheckoutService;
use App\Komma\Shop\Orders\OrderStatus;
use App\Komma\Shop\Payment\Transaction;
use App\Komma\Shop\Payment\TransactionStatus;
use App\Komma\Shop\Products\Product\Product;
use App\Komma\Shop\Products\ProductComposite\ProductComposite;
use App\Komma\Shop\Products\ProductGroup\ProductGroup;
use App\Komma\Users\Models\KmsUser;
use App\Komma\Users\Models\SiteUser;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;

class SampleOrders extends Seeder
{
    /**
     * @throws \Throwable
     */
    public function run()
    {
        $checkoutService = new CheckoutService();
        $shoppingCartService = new ShoppingCartService();

        $sampleOrderAmount = 30;
//        $sampleOrderAmount = 50000; //A real life situation

        for($index = 0; $index < $sampleOrderAmount; $index++) {
            /** @var KmsUser $user */
            $user = factory(SiteUser::class)->create();

            $items = 3;
            $products = Product::inRandomOrder()->take($items)->get();
            $group = ProductGroup::inRandomOrder()->take(1)->first();
            $composite = ProductComposite::inRandomOrder()->take(1)->first();

            $shoppingCartService->clear();
            $products->each(function(Product $product) use ($shoppingCartService) {
                $shoppingCartService->addProductable($product);
            });
            $shoppingCartService->addProductable($group);
            $shoppingCartService->addProductable($composite);

            $status = Arr::random(TransactionStatus::getAsArray());


            $addressForShipping = factory(Address::class)->create();
            $addressForInvoice = factory(Address::class)->create();
            $order = $checkoutService->createOrderFromShoppingCartItems($shoppingCartService->getItems(), $user, $addressForShipping, $addressForInvoice);
            $fakeTransaction = new Transaction([
                'order_id' => $order->id,
                'amount' => $order->total_price,
                'psp_payment_reference' => Str::random(),
                'psp' => 'example PSP',
                'psp_id' => mt_rand(10000, 99999),
                'ip' => request()->ip(),
                'currency_iso_4217_code' => 'EUR',
                'error_code' => '',
                'account_reference' => '',
                'account_holder_name' => $user->first_name.' '.$user->last_name,
                'acccount_brand' => 'fake',
                'issuer_id' => 'somebank',
                'payment_method' => 'KommaPal',
                'status' => $status,
                'payment_link' => route('fakepsp', ['order' => $order]),
                'expire_date' => Carbon::now()->addMinutes(15)->toDateTimeString(),
                'payment_date' => ($status == OrderStatus::COMPLETED) ? Carbon::now()->addMinutes(1)->toDateTimeString() : null
            ]);
            $fakeTransaction->save();

            /** @var Transaction $transaction */
            $transaction = $order->transactions()->save($fakeTransaction);
        }
    }
}