diff --git a/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php b/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php index f458e709d..2903384b4 100644 --- a/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php @@ -123,17 +123,24 @@ class TransactionController extends Controller $transactionData['payment_method'] = $request->payment_method; $transactionData['invoice_id'] = $invoice->id; $transactionData['order_id'] = $invoice->order_id; + $transactionData['amount'] = $request->amount; $transactionData['status'] = 'paid'; $transactionData['data'] = json_encode($data); $this->orderTransactionRepository->create($transactionData); - if ($invoice->base_grand_total == $request->amount) { - $this->orderRepository->updateOrderStatus($order, 'processing'); - $update = $this->invoiceRepository->updateState($invoice, "paid"); - } else { - $this->orderRepository->updateOrderStatus($order, 'pending'); - $update = $this->invoiceRepository->updateState($invoice, "pending"); + $transactionTotal = $this->orderTransactionRepository->where('invoice_id', $invoice->id)->sum('amount'); + + if ($transactionTotal >= $invoice->base_grand_total) { + $shipments = $this->shipmentRepository->where('order_id', $invoice->order_id); + + if ($shipments) { + $this->orderRepository->updateOrderStatus($order, 'completed'); + } else { + $this->orderRepository->updateOrderStatus($order, 'processing'); + } + + $this->invoiceRepository->updateState($invoice, "paid"); } session()->flash('success', trans('admin::app.sales.transactions.response.transaction-saved')); @@ -187,4 +194,4 @@ class TransactionController extends Controller return $detailsData; } -} \ No newline at end of file +} diff --git a/packages/Webkul/Sales/src/Database/Migrations/2021_10_23_125017_add_transaction_amount_column.php b/packages/Webkul/Sales/src/Database/Migrations/2021_10_23_125017_add_transaction_amount_column.php new file mode 100644 index 000000000..2615e84b9 --- /dev/null +++ b/packages/Webkul/Sales/src/Database/Migrations/2021_10_23_125017_add_transaction_amount_column.php @@ -0,0 +1,32 @@ +decimal('amount', 12, 4)->default(0)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('order_transactions', function (Blueprint $table) { + $table->dropColumn('amount'); + }); + } +} diff --git a/packages/Webkul/Sales/src/Models/Order.php b/packages/Webkul/Sales/src/Models/Order.php index 2b21ba4f4..42b79f1d0 100755 --- a/packages/Webkul/Sales/src/Models/Order.php +++ b/packages/Webkul/Sales/src/Models/Order.php @@ -273,6 +273,24 @@ class Order extends Model implements OrderContract return false; } + + /** + * Verify if a invoice is still unpaid + * + * @return bool + */ + public function hasOpenInvoice(): bool + { + $pendingInvoice = $this->invoices()->where('state', 'pending') + ->orWhere('state', 'pending_payment') + ->get(); + + if ($pendingInvoice) { + return true; + } + + return false; + } /** * Checks if order can be canceled or not diff --git a/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php b/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php index c8bd5b0cf..c8bdf2225 100755 --- a/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php +++ b/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php @@ -158,6 +158,8 @@ class ShipmentRepository extends Repository if (isset($orderState)) { $this->orderRepository->updateOrderStatus($order, $orderState); + } elseif ($order->hasOpenInvoice()) { + $this->orderRepository->updateOrderStatus($order, 'pending_payment'); } else { $this->orderRepository->updateOrderStatus($order); }