HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/teamdemo.sports-crowd.com/app/Console/Commands/ErpSync.php
<?php

namespace App\Console\Commands;

use App\AcademyPurchase;
use App\AcademyTournamentPayment;
use App\Core\Payment\PaymentStatusEnum;
use App\Order;
use App\ErpParameter;
use App\Http\Controllers\AcademyPurchaseController;
use App\Http\Controllers\AcademyTournamentPaymentController;
use Illuminate\Console\Command;
use App\Http\Controllers\OrderController;
use App\Http\Controllers\ErpLogController;
use App\Http\Controllers\InventoryController;
use Carbon\Carbon;

class ErpSync extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sportscrowd:erpSync';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Sincroniza los pedidos al ERP';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $origin = [];
        $erpSync = ErpParameter::where('key', 'shop_sync')->first();
        if ($erpSync && $erpSync->value == 'true') {
            array_push($origin, 'shop');
            array_push($origin, 'shopify');
        }

        $erpSync = ErpParameter::where('key', 'academy_sync')->first();
        if ($erpSync && $erpSync->value == 'true') {
            array_push($origin, 'academy_tournament');
            array_push($origin, 'academy');
            array_push($origin, 'shop_sportscrowd');

            $inventoryController = new InventoryController;
            $inventoryController->syncInventoryERP('012', 'academy', false, $this, 'AC017', null, null);

            // Resincroniza los pedidos y pagos de academias que no se han sincronizado
            // en los ultimos (X=30) dias
            $this->resyncAcademyOrdersNotSynchronized(30);
            $this->resyncAcademyPaymentsNotSynchronized(30);
        }

        $erpAutomaticLogSync = ErpParameter::where('key', 'automatic_sync_erp_log')->first();
        if (count($origin) && $erpAutomaticLogSync->value == 'true') {
            $controller = new ErpLogController();
            $controller->syncPending($origin);
        }
    }

    private function resyncAcademyOrdersNotSynchronized($days)
    {
        $pendingOrders = Order::select('orders.*')
            ->leftJoin('erp_logs', function ($join) {
                $join->on('orders.id', '=', 'erp_logs.transaction_id')
                    ->where('erp_logs.resolved', false)
                    ->where('erp_logs.origin', 'shop_sportscrowd');
            })
            ->where('store_type', 'academy')
            ->where('orders.creation_date', '>=', Carbon::now()->subDays($days))
            ->where('orders.gw_state', PaymentStatusEnum::CONFIRMED)
            ->where('orders.sync_with_erp', false)
            ->whereNull('erp_logs.id')
            ->get();

        $orderController = new OrderController();
        foreach ($pendingOrders as $order) {
            $orderController->syncERP($order);
        }
    }

    private function resyncAcademyPaymentsNotSynchronized($days)
    {
        $pendingPayments = AcademyPurchase::select('academy_purchases.*')
            ->join('payment_transactions', 'academy_purchases.payment_transaction_id', '=', 'payment_transactions.id')
            ->leftJoin('erp_logs', function ($join) {
                $join->on('academy_purchases.id', '=', 'erp_logs.transaction_id')
                    ->where('erp_logs.resolved', false)
                    ->where('erp_logs.origin', 'academy');
            })
            ->where('academy_purchases.created_at', '>=', Carbon::now()->subDays($days))
            ->where('payment_transactions.state', PaymentStatusEnum::CONFIRMED)
            ->where('academy_purchases.sync_with_erp', false)
            ->whereNull('erp_logs.id')
            ->get();

        $controller = new AcademyPurchaseController();
        foreach ($pendingPayments as $payment) {
            $controller->syncERP($payment);
        }

        $pendingPayments = AcademyTournamentPayment::select('academy_tournament_payments.*')
            ->join('payment_transactions', 'academy_tournament_payments.payment_transaction_id', '=', 'payment_transactions.id')
            ->leftJoin('erp_logs', function ($join) {
                $join->on('academy_tournament_payments.id', '=', 'erp_logs.transaction_id')
                    ->where('erp_logs.resolved', false)
                    ->where('erp_logs.origin', 'academy');
            })
            ->where('academy_tournament_payments.created_at', '>=', Carbon::now()->subDays($days))
            ->where('payment_transactions.state', PaymentStatusEnum::CONFIRMED)
            ->where('academy_tournament_payments.sync_with_erp', false)
            ->whereNull('erp_logs.id')
            ->get();

        $controller = new AcademyTournamentPaymentController();
        foreach ($pendingPayments as $payment) {
            $controller->syncERP($payment);
        }
    }
}