diff --git a/app/Classes/Modules/Billplzs/Processors/CallbackBillplzProcessor.php b/app/Classes/Modules/Billplzs/Processors/CallbackBillplzProcessor.php index e4ba38bf..79b81452 100644 --- a/app/Classes/Modules/Billplzs/Processors/CallbackBillplzProcessor.php +++ b/app/Classes/Modules/Billplzs/Processors/CallbackBillplzProcessor.php @@ -6,10 +6,9 @@ use Illuminate\Http\Request; use App\Models\Wallet; use App\Models\Group; use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\ValueObjects\Constants\PaymentMethodType; use App\Classes\Modules\Transactions\Processors\CreatePaymentTransactionProcessor; -use App\Classes\Modules\Transactions\Processors\CreateStorageInvoiceDocTransactionProcessor; +use App\Classes\Modules\Transactions\Processors\ReleaseGoodsToCustomerProcessor; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance; use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor; @@ -33,8 +32,8 @@ class CallbackBillplzProcessor /** @var CreatePaymentTransactionProcessor */ private $createPaymentTransactionProcessor; - /** @var CreateStorageInvoiceDocTransactionProcessor */ - private $ceateStorageInvoiceDocTransactionProcessor; + /** @var ReleaseGoodsToCustomerProcessor */ + private $releaseGoodsToCustomerProcessor; /** * CreateUserProcessor constructor. @@ -43,16 +42,16 @@ class CallbackBillplzProcessor * @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor * @param UpdatesWalletBalance $updatesWalletBalance * @param CreatePaymentTransactionProcessor $createPaymentTransactionProcessor - * @param CreateStorageInvoiceDocTransactionProcessor $ceateStorageInvoiceDocTransactionProcessor + * @param ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor */ - public function __construct(UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesWalletBalance $updatesWalletBalance, CreatePaymentTransactionProcessor $createPaymentTransactionProcessor, CreateStorageInvoiceDocTransactionProcessor $ceateStorageInvoiceDocTransactionProcessor) + public function __construct(UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesWalletBalance $updatesWalletBalance, CreatePaymentTransactionProcessor $createPaymentTransactionProcessor, ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor) { $this->updatesTransactionStatus = $updatesTransactionStatus; $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; $this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor; $this->updatesWalletBalance = $updatesWalletBalance; $this->createPaymentTransactionProcessor = $createPaymentTransactionProcessor; - $this->ceateStorageInvoiceDocTransactionProcessor = $ceateStorageInvoiceDocTransactionProcessor; + $this->releaseGoodsToCustomerProcessor = $releaseGoodsToCustomerProcessor; } @@ -86,7 +85,7 @@ class CallbackBillplzProcessor if($paymentTransaction && $paymentTransaction->status == ApprovalStatus::APPROVED){ $pL = $invoice->owner; - $this->processPackingListAndInvoice($pL, $invoice); + $this->releaseGoodsToCustomerProcessor->execute($pL, $invoice); } } @@ -96,7 +95,7 @@ class CallbackBillplzProcessor } if (!$transaction->owner instanceof Wallet) { - $this->processPackingListAndInvoice($packingList, $invoice); + $this->releaseGoodsToCustomerProcessor->execute($packingList, $invoice); } return true; @@ -126,49 +125,4 @@ class CallbackBillplzProcessor } return true; } - - private function processPackingListAndInvoice($packingList, $invoice = null){ - $result = false; - $totalInvoicesAmountPaid = 0.00; - $totalInvoicesAmount = 0.00; - $invoiceTransactions = $packingList->transactions()->where('status', [ApprovalStatus::APPROVED])->whereIn('type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])->get(); - - //Part 1: Process each single invoice type and get the total of all invoices - foreach($invoiceTransactions as $invoiceTransaction){ - - $totalInvoiceAmountPaid = $invoiceTransaction->transactions->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount'); - if ($invoice && $invoice->type == $invoiceTransaction->type) { - if(($invoice->amount - $totalInvoiceAmountPaid) < 0.01){ - $this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED); - - if($invoice->type == TransactionType::STORAGE_INVOICE){ - $this->ceateStorageInvoiceDocTransactionProcessor->execute($packingList); - } - } - } - - $totalInvoicesAmount = $totalInvoicesAmount + $invoiceTransaction->amount; - $totalInvoicesAmountPaid = $totalInvoicesAmountPaid + $totalInvoiceAmountPaid; - } - - Log::channel('storage_invoices')->info('Total invoice amount paid 1: '.$totalInvoicesAmount); //cief todo: to be removed - Log::channel('storage_invoices')->info('Total invoice amount paid 2: '.$totalInvoicesAmountPaid); //cief todo: to be removed - - //Part 2: Based on the collected info for all the total of all invoices - if (($totalInvoicesAmount - $totalInvoicesAmountPaid) < 0.01) { - Log::channel('storage_invoices')->info('Total invoice amount paid 3: '.$totalInvoicesAmountPaid); //cief todo: to be removed - - $packingList->status = ApprovalStatus::APPROVED; - $packingList->save(); - - if (app()->environment('production')) { - $this->updateDoFromVTPortalProcessor->execute($packingList); - $this->updateDoFromYDPortalProcessor->execute($packingList); - } - - $result = true; - } - - return $result; - } } diff --git a/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php b/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php index 2273e10b..a035c053 100644 --- a/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php +++ b/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php @@ -38,6 +38,7 @@ class UpdateDoFromYDPortalProcessor */ public function execute(PackingList $packingList) { Log::info('Trying to Call UpdateDoFromYDPortalProcessor'); + Log::channel('storage_invoices')->info('UpdateDoFromYDPortalProcessor: '.json_encode($packingList)); if(!app()->environment(['production'])){ return; diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateGroupsLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateGroupsLogic.php index 49a59f05..c064cc4e 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreateGroupsLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateGroupsLogic.php @@ -21,6 +21,8 @@ use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Models\GroupTransaction; use App\Http\Resources\WalletTransactionResource; use App\Models\Wallet; +use App\Classes\Modules\Transactions\Processors\ReleaseGoodsToCustomerProcessor; + class CreateGroupsLogic extends AbstractControllerLogic { @@ -55,13 +57,18 @@ class CreateGroupsLogic extends AbstractControllerLogic /** @var CreatesGroup */ private $createsGroup; + /** @var ReleaseGoodsToCustomerProcessor */ + private $releaseGoodsToCustomerProcessor; + + public function __construct( - FetchesTransaction $fetchesTransaction, - GeneratesTransactionBillNumber $generatesTransactionBillNumber, + FetchesTransaction $fetchesTransaction, + GeneratesTransactionBillNumber $generatesTransactionBillNumber, FetchesCompanyModule $fetchesCompanyModule, CreateWalletTopUpTransactionProcessor $createWalletTopUpTransactionProcessor, CreatePaymentTransactionProcessor $createPaymentTransactionProcessor, - CreatesGroup $createsGroup + CreatesGroup $createsGroup, + ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor ) { $this->fetchesTransaction = $fetchesTransaction; @@ -70,6 +77,7 @@ class CreateGroupsLogic extends AbstractControllerLogic $this->createWalletTopUpTransactionProcessor = $createWalletTopUpTransactionProcessor; $this->createPaymentTransactionProcessor = $createPaymentTransactionProcessor; $this->createsGroup = $createsGroup; + $this->releaseGoodsToCustomerProcessor = $releaseGoodsToCustomerProcessor; } public function logic(Request $request) : JsonResponse @@ -146,7 +154,12 @@ class CreateGroupsLogic extends AbstractControllerLogic foreach ($invoices as $invoice) { if ($payment_method == PaymentMethodType::WALLET) { - $this->createPaymentTransactionProcessor->execute($invoice, PaymentMethodType::WALLET, $request->input('bank_code')); + $paymentTransaction = $this->createPaymentTransactionProcessor->execute($invoice, PaymentMethodType::WALLET, $request->input('bank_code'), false); + + if($paymentTransaction && $paymentTransaction->status == ApprovalStatus::APPROVED){ + $pL = $invoice->owner; + $this->releaseGoodsToCustomerProcessor->execute($pL, $invoice); + } } $issuer = $invoice->issuer; diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentTransactionLogic.php index ae10403a..ab5fa2a6 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentTransactionLogic.php @@ -10,6 +10,8 @@ use App\Http\Resources\TransactionResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use App\Classes\Modules\Transactions\Processors\CreatePaymentTransactionProcessor; +use App\Classes\Modules\Transactions\Processors\ReleaseGoodsToCustomerProcessor; +use App\Classes\ValueObjects\Constants\ApprovalStatus; class CreatePaymentTransactionLogic extends AbstractControllerLogic { @@ -30,13 +32,18 @@ class CreatePaymentTransactionLogic extends AbstractControllerLogic /** @var CreatePaymentTransactionProcessor */ private $createPaymentTransactionProcessor; + /** @var ReleaseGoodsToCustomerProcessor */ + private $releaseGoodsToCustomerProcessor; + public function __construct( FetchesTransaction $fetchesTransaction, - CreatePaymentTransactionProcessor $createPaymentTransactionProcessor + CreatePaymentTransactionProcessor $createPaymentTransactionProcessor, + ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor ) { $this->fetchesTransaction = $fetchesTransaction; $this->createPaymentTransactionProcessor = $createPaymentTransactionProcessor; + $this->releaseGoodsToCustomerProcessor = $releaseGoodsToCustomerProcessor; } public function logic(Request $request) : JsonResponse @@ -45,7 +52,12 @@ class CreatePaymentTransactionLogic extends AbstractControllerLogic $invoice_transaction = $this->fetchesTransaction->execute(['id' => $request->input('transaction_id')]); - $payment_transaction = $this->createPaymentTransactionProcessor->execute($invoice_transaction, $payment_method , $request->input('bank_code')); + $payment_transaction = $this->createPaymentTransactionProcessor->execute($invoice_transaction, $payment_method , $request->input('bank_code'), false); + + if($payment_transaction && $payment_transaction->status == ApprovalStatus::APPROVED){ + $pL = $invoice_transaction->owner; + $this->releaseGoodsToCustomerProcessor->execute($pL, $invoice_transaction); + } //cief todo: at exchange there is a transition step - starts // if(PaymentMethodType::PAYMENT_METHODS[$request->input('payment_method')] == PaymentMethodType::PAYMENT_GATEWAY){ @@ -63,4 +75,7 @@ class CreatePaymentTransactionLogic extends AbstractControllerLogic return $this->resourceResponse(new TransactionResource($payment_transaction)); } + + + } diff --git a/app/Classes/Modules/Transactions/Processors/ReleaseGoodsToCustomerProcessor.php b/app/Classes/Modules/Transactions/Processors/ReleaseGoodsToCustomerProcessor.php new file mode 100644 index 00000000..766947c6 --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/ReleaseGoodsToCustomerProcessor.php @@ -0,0 +1,94 @@ +updatesTransactionStatus = $updatesTransactionStatus; + $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; + $this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor; + $this->createStorageInvoiceDocTransactionProcessor = $createStorageInvoiceDocTransactionProcessor; + } + + + /** + * @param $packingList + * @param $invoice + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute($packingList, $invoice = null) + { + $result = false; + $totalInvoicesAmountPaid = 0.00; + $totalInvoicesAmount = 0.00; + $invoiceTransactions = $packingList->transactions()->where('status', [ApprovalStatus::APPROVED])->whereIn('type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])->get(); + + //Part 1: Process each single invoice type and get the total of all invoices + foreach($invoiceTransactions as $invoiceTransaction){ + + $totalInvoiceAmountPaid = $invoiceTransaction->transactions->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount'); + if ($invoice && $invoice->type == $invoiceTransaction->type) { + if(($invoice->amount - $totalInvoiceAmountPaid) < 0.01){ + $this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED); + + if($invoice->type == TransactionType::STORAGE_INVOICE){ + $this->createStorageInvoiceDocTransactionProcessor->execute($packingList); + } + } + } + + $totalInvoicesAmount = $totalInvoicesAmount + $invoiceTransaction->amount; + $totalInvoicesAmountPaid = $totalInvoicesAmountPaid + $totalInvoiceAmountPaid; + } + + Log::channel('storage_invoices')->info('Total invoice amount paid 1: '.$totalInvoicesAmount); //cief todo: to be removed + Log::channel('storage_invoices')->info('Total invoice amount paid 2: '.$totalInvoicesAmountPaid); //cief todo: to be removed + + //Part 2: Based on the collected info for all the total of all invoices + if (($totalInvoicesAmount - $totalInvoicesAmountPaid) < 0.01 && $totalInvoicesAmountPaid > 0.01) { + Log::channel('storage_invoices')->info('Total invoice amount paid 3: '.$totalInvoicesAmountPaid); //cief todo: to be removed + + $packingList->status = ApprovalStatus::APPROVED; + $packingList->save(); + + if (app()->environment('production')) { + $this->updateDoFromVTPortalProcessor->execute($packingList); + $this->updateDoFromYDPortalProcessor->execute($packingList); + } + + $result = true; + } + + return $result; + } +} diff --git a/app/Console/Commands/FixGroupPaymentProblem.php b/app/Console/Commands/FixGroupPaymentProblem.php new file mode 100644 index 00000000..50aafba2 --- /dev/null +++ b/app/Console/Commands/FixGroupPaymentProblem.php @@ -0,0 +1,85 @@ +listsGroups = $listsGroups; + $this->releaseGoodsToCustomerProcessor = $releaseGoodsToCustomerProcessor; + } + + + /** + * Execute the console command. + * + * @return int + */ + public function handle() + { + ini_set('memory_limit', '-1'); + + $this->info(Carbon::now() . ': Start data patch.'); + $start = new Carbon(); + + $newfilters['id'] = 325; + $groups = $this->listsGroups->execute($newfilters); + + foreach ($groups as $group){ + $this->info('CheckForStorageInvoiceByTransactions group: '.json_encode($group)); + if ($group) { + foreach ($group->groupTransactions as $groupTransaction) { + $invoice = $groupTransaction->transaction; + $this->info('CheckForStorageInvoiceByTransactions group: '.json_encode($invoice)); + //$paymentTransaction = $this->createPaymentTransactionProcessor->execute($invoice, PaymentMethodType::WALLET, null); + + //if($paymentTransaction && $paymentTransaction->status == ApprovalStatus::APPROVED){ + $pL = $invoice->owner; + $this->releaseGoodsToCustomerProcessor->execute($pL, $invoice); + //} + } + // $group->status = $status; + // $group->save(); + } + } + + $end = new Carbon(); + $elapsedTime = $start->diff($end)->format('%H:%I:%S'); + + $this->info(Carbon::now() . ': Done data patch. ElapsedTime: ' . $elapsedTime . '.'); + } +}