From 390fcc11bc025efd6c628e86ae46986cdc28d6b0 Mon Sep 17 00:00:00 2001 From: Glenn Hermans Date: Sat, 19 Jun 2021 04:32:00 +0200 Subject: [PATCH] fixed #3453 --- .../InvoicesTransactionsDataGrid.php | 72 ++++ .../src/DataGrids/OrderInvoicesDataGrid.php | 32 +- .../DataGrids/OrderTransactionsDataGrid.php | 12 +- .../Sales/TransactionController.php | 100 ++++- packages/Webkul/Admin/src/Http/routes.php | 6 + .../Admin/src/Resources/lang/ar/app.php | 15 +- .../Admin/src/Resources/lang/de/app.php | 15 +- .../Admin/src/Resources/lang/en/app.php | 15 +- .../Admin/src/Resources/lang/es/app.php | 35 +- .../Admin/src/Resources/lang/fa/app.php | 35 +- .../Admin/src/Resources/lang/it/app.php | 15 +- .../Admin/src/Resources/lang/nl/app.php | 19 +- .../Admin/src/Resources/lang/pl/app.php | 15 +- .../Admin/src/Resources/lang/pt_BR/app.php | 31 +- .../Admin/src/Resources/lang/tr/app.php | 15 +- .../views/sales/invoices/view.blade.php | 391 +++++++++--------- .../views/sales/transactions/create.blade.php | 57 +++ .../views/sales/transactions/index.blade.php | 2 + .../views/sales/transactions/view.blade.php | 18 +- packages/Webkul/Payment/src/Config/system.php | 120 +++++- .../Payment/src/Listeners/GenerateInvoice.php | 78 ++++ .../src/Providers/EventServiceProvider.php | 19 + .../src/Providers/PaymentServiceProvider.php | 3 +- .../src/Repositories/InvoiceRepository.php | 16 +- 24 files changed, 878 insertions(+), 258 deletions(-) create mode 100644 packages/Webkul/Admin/src/DataGrids/InvoicesTransactionsDataGrid.php create mode 100644 packages/Webkul/Admin/src/Resources/views/sales/transactions/create.blade.php create mode 100644 packages/Webkul/Payment/src/Listeners/GenerateInvoice.php create mode 100644 packages/Webkul/Payment/src/Providers/EventServiceProvider.php diff --git a/packages/Webkul/Admin/src/DataGrids/InvoicesTransactionsDataGrid.php b/packages/Webkul/Admin/src/DataGrids/InvoicesTransactionsDataGrid.php new file mode 100644 index 000000000..b6f46819e --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/InvoicesTransactionsDataGrid.php @@ -0,0 +1,72 @@ +leftJoin('invoices as inv', 'order_transactions.invoice_id', '=', 'inv.id') + ->select('order_transactions.id as id', 'order_transactions.transaction_id as transaction_id', 'order_transactions.invoice_id as invoice_id', 'order_transactions.created_at as created_at') + ->where('order_transactions.invoice_id', request('id')); + + + $this->addFilter('id', 'order_transactions.id'); + $this->addFilter('transaction_id', 'order_transactions.transaction_id'); + $this->addFilter('order_id', 'ors.increment_id'); + $this->addFilter('created_at', 'order_transactions.created_at'); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'transaction_id', + 'label' => trans('admin::app.datagrid.transaction-id'), + 'type' => 'string', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.transaction-date'), + 'type' => 'datetime', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + } + + public function prepareActions() + { + $this->addAction([ + 'title' => trans('admin::app.datagrid.view'), + 'method' => 'GET', + 'route' => 'admin.sales.transactions.view', + 'icon' => 'icon eye-icon', + ]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php index 11b545ef7..9de32bacc 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php @@ -29,7 +29,7 @@ class OrderInvoicesDataGrid extends DataGrid { $this->addColumn([ 'index' => 'id', - 'label' => trans('admin::app.datagrid.id'), + 'label' => trans('admin::app.datagrid.invoice-id'), 'type' => 'number', 'searchable' => false, 'sortable' => true, @@ -45,6 +45,15 @@ class OrderInvoicesDataGrid extends DataGrid 'filterable' => true, ]); + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.invoice-date'), + 'type' => 'datetime', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + $this->addColumn([ 'index' => 'base_grand_total', 'label' => trans('admin::app.datagrid.grand-total'), @@ -55,13 +64,26 @@ class OrderInvoicesDataGrid extends DataGrid ]); $this->addColumn([ - 'index' => 'created_at', - 'label' => trans('admin::app.datagrid.invoice-date'), - 'type' => 'datetime', - 'searchable' => true, + 'index' => 'state', + 'label' => trans('admin::app.datagrid.status'), + 'type' => 'string', 'sortable' => true, + 'searchable' => true, + 'closure' => true, 'filterable' => true, + 'wrapper' => function ($value) { + if ($value->state == 'paid') { + return '' . trans('admin::app.sales.invoices.status-paid') . ''; + } elseif ($value->state == 'pending' || $value->state == 'pending_payment') { + return '' . trans('admin::app.sales.invoices.status-pending') . ''; + } elseif ($value->state == 'overdue') { + return '' . trans('admin::app.sales.invoices.status-overdue') . ''; + } else { + return $value->state; + } + }, ]); + } public function prepareActions() diff --git a/packages/Webkul/Admin/src/DataGrids/OrderTransactionsDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderTransactionsDataGrid.php index 29b587dfb..252778b78 100644 --- a/packages/Webkul/Admin/src/DataGrids/OrderTransactionsDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderTransactionsDataGrid.php @@ -15,10 +15,11 @@ class OrderTransactionsDataGrid extends DataGrid { $queryBuilder = DB::table('order_transactions') ->leftJoin('orders as ors', 'order_transactions.order_id', '=', 'ors.id') - ->select('order_transactions.id as id', 'order_transactions.transaction_id as transaction_id', 'ors.increment_id as order_id', 'order_transactions.created_at as created_at'); + ->select('order_transactions.id as id', 'order_transactions.transaction_id as transaction_id', 'order_transactions.invoice_id as invoice_id', 'ors.increment_id as order_id', 'order_transactions.created_at as created_at'); $this->addFilter('id', 'order_transactions.id'); $this->addFilter('transaction_id', 'order_transactions.transaction_id'); + $this->addFilter('invoice_id', 'order_transactions.invoice_id'); $this->addFilter('order_id', 'ors.increment_id'); $this->addFilter('created_at', 'order_transactions.created_at'); @@ -45,6 +46,15 @@ class OrderTransactionsDataGrid extends DataGrid 'filterable' => true, ]); + $this->addColumn([ + 'index' => 'invoice_id', + 'label' => trans('admin::app.datagrid.invoice-id'), + 'type' => 'number', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + $this->addColumn([ 'index' => 'order_id', 'label' => trans('admin::app.datagrid.order-id'), diff --git a/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php b/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php index d4b875e99..f0fe2c463 100644 --- a/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php @@ -2,9 +2,15 @@ namespace Webkul\Admin\Http\Controllers\Sales; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Event; + use Webkul\Admin\Http\Controllers\Controller; +use Webkul\Payment\Facades\Payment; + +use Webkul\Sales\Repositories\OrderRepository; use Webkul\Sales\Repositories\OrderTransactionRepository; +use Webkul\Sales\Repositories\InvoiceRepository; class TransactionController extends Controller { @@ -15,6 +21,13 @@ class TransactionController extends Controller */ protected $_config; + /** + * OrderRepository object + * + * @var \Webkul\Sales\Repositories\OrderRepository + */ + protected $orderRepository; + /** * OrderRepository object * @@ -22,19 +35,35 @@ class TransactionController extends Controller */ protected $orderTransactionRepository; + /** + * InvoiceRepository object + * + * @var \Webkul\Sales\Repositories\InvoiceRepository + */ + protected $invoiceRepository; + /** * Create a new controller instance. * + * @param \Webkul\Sales\Repositories\OrderRepository $orderRepository * @param \Webkul\Sales\Repositories\OrderTransactionRepository $orderTransactionRepository + * @param \Webkul\Sales\Repositories\InvoiceRepository $invoiceRepository * @return void */ - public function __construct(OrderTransactionRepository $orderTransactionRepository) + public function __construct( + OrderRepository $orderRepository, + OrderTransactionRepository $orderTransactionRepository, + InvoiceRepository $invoiceRepository) { $this->middleware('admin'); $this->_config = request('_config'); + $this->orderRepository = $orderRepository; + $this->orderTransactionRepository = $orderTransactionRepository; + + $this->invoiceRepository = $invoiceRepository; } /** @@ -47,6 +76,75 @@ class TransactionController extends Controller return view($this->_config['view']); } + /** + * Display a form to save the tranaction. + * + * @return \Illuminate\View\View + */ + public function create() + { + $payment_methods = Payment::getSupportedPaymentMethods(); + return view($this->_config['view'], compact('payment_methods')); + } + + /** + * Save the tranaction. + * + * @return \Illuminate\View\View + */ + public function store(Request $request) + { + $validate = $this->validate(request(), [ + 'invoice_id' => 'required', + 'payment_method' => 'required', + 'amount' => 'required|numeric' + ]); + + $invoice = $this->invoiceRepository->find($request->invoice_id); + + if ($invoice) { + + if ($invoice->state == 'paid') { + session()->flash('info', trans('admin::app.sales.transactions.response.already-paid')); + return redirect(route('admin.sales.transactions.index')); + } + + $order = $this->orderRepository->find($invoice->id); + + $data = [ + "paidAmount" => $request->amount, + ]; + + $randomId = random_bytes(20); + $transactionId = bin2hex($randomId); + + $transactionData['transaction_id'] = $transactionId; + $transactionData['type'] = $request->payment_method; + $transactionData['payment_method'] = $request->payment_method; + $transactionData['invoice_id'] = $request->invoice_id; + $transactionData['order_id'] = $invoice->order_id; + $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"); + } + + session()->flash('success', trans('admin::app.sales.transactions.response.transaction-saved')); + return redirect(route('admin.sales.transactions.index')); + + } else { + session()->flash('error', trans('admin::app.sales.transactions.response.invoice-missing')); + return redirect()->back(); + } + } + /** * Show the view for the specified resource. * diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index 01c8c9b31..2bd12a221 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -264,6 +264,12 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { 'view' => 'admin::sales.transactions.index', ])->name('admin.sales.transactions.index'); + Route::get('/transactions/create', 'Webkul\Admin\Http\Controllers\Sales\TransactionController@create')->defaults('_config', [ + 'view' => 'admin::sales.transactions.create', + ])->name('admin.sales.transactions.create'); + + Route::post('/transactions/create', 'Webkul\Admin\Http\Controllers\Sales\TransactionController@store')->name('admin.sales.transactions.store'); + Route::get('/transactions/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\TransactionController@view')->defaults('_config', [ 'view' => 'admin::sales.transactions.view', ])->name('admin.sales.transactions.view'); diff --git a/packages/Webkul/Admin/src/Resources/lang/ar/app.php b/packages/Webkul/Admin/src/Resources/lang/ar/app.php index d53031e43..dd232ae76 100644 --- a/packages/Webkul/Admin/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/ar/app.php @@ -197,6 +197,7 @@ return [ 'billed-to' => 'فاتورة إلى', 'shipped-to' => 'تم شحنها إلي', 'order-id' => 'رقم التعريف الخاص بالطلب', + 'invoice-id' => 'رقم الفاتورة', 'invoice-date' => 'تاريخ الفاتورة', 'total-qty' => 'إجمالي الكمية', 'inventory-source' => 'مصدر الجرد', @@ -479,16 +480,24 @@ return [ 'transactions' => [ 'title' => 'Transactions', + 'create-title' => 'Add transaction', 'id' => 'Id', 'transaction-id' => 'Transaction Id', 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', 'action' => 'Action', 'view-title' => 'Transaction #:transaction_id', 'transaction-data' => 'Transaction Data', 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', 'status' => 'Status', 'created-at' => 'Created At', - 'transaction-details' => 'Transaction Details' + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1495,6 +1504,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/de/app.php b/packages/Webkul/Admin/src/Resources/lang/de/app.php index c9c50d950..414bf9a7f 100755 --- a/packages/Webkul/Admin/src/Resources/lang/de/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/de/app.php @@ -196,6 +196,7 @@ return [ 'billed-to' => 'Rechnung an', 'shipped-to' => 'Versendet an', 'order-id' => 'Auftragsnummer', + 'invoice-id' => 'Rechnungsnummer', 'invoice-date' => 'Rechnungsdatum', 'total-qty' => 'Gesamtmenge', 'inventory-source' => 'Inventar Quelle', @@ -472,16 +473,24 @@ return [ 'transactions' => [ 'title' => 'Transactions', + 'create-title' => 'Add transaction', 'id' => 'Id', 'transaction-id' => 'Transaction Id', 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', 'action' => 'Action', 'view-title' => 'Transaction #:transaction_id', 'transaction-data' => 'Transaction Data', 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', 'status' => 'Status', 'created-at' => 'Created At', - 'transaction-details' => 'Transaction Details' + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], 'catalog' => @@ -1471,6 +1480,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ], ], ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 1a468c912..1677df477 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -203,6 +203,7 @@ return [ 'billed-to' => 'Billed To', 'shipped-to' => 'Shipped To', 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice number', 'invoice-date' => 'Invoice Date', 'total-qty' => 'Total Qty', 'inventory-source' => 'Inventory Source', @@ -489,16 +490,24 @@ return [ 'transactions' => [ 'title' => 'Transactions', + 'create-title' => 'Add transaction', 'id' => 'Id', 'transaction-id' => 'Transaction Id', 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', 'action' => 'Action', 'view-title' => 'Transaction #:transaction_id', 'transaction-data' => 'Transaction Data', 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', 'status' => 'Status', 'created-at' => 'Created At', - 'transaction-details' => 'Transaction Details' + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1509,6 +1518,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/es/app.php b/packages/Webkul/Admin/src/Resources/lang/es/app.php index 67673af90..f75a61f5a 100644 --- a/packages/Webkul/Admin/src/Resources/lang/es/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/es/app.php @@ -203,6 +203,7 @@ return [ 'billed-to' => 'Facturado a', 'shipped-to' => 'Enviado a', 'order-id' => 'Pedido #', + 'invoice-id' => 'Número de factura', 'invoice-date' => 'Fecha de factura', 'total-qty' => 'Cantidad total', 'inventory-source' => 'Fuente de inventario', @@ -488,17 +489,25 @@ return [ ], 'transactions' => [ - 'title' => 'Transacciones', - 'id' => 'ID', - 'transaction-id' => 'Transacción #', - 'payment-method' => 'Método de Pago', - 'action' => 'Accción', - 'view-title' => 'Transacciónn #:transaction_id', - 'transaction-data' => 'Fecha de Transacción', - 'order-id' => 'Pedido #', - 'status' => 'Estado', - 'created-at' => 'Creado En', - 'transaction-details' => 'Detalles de la Transacción' + 'title' => 'Transactions', + 'create-title' => 'Add transaction', + 'id' => 'Id', + 'transaction-id' => 'Transaction Id', + 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', + 'action' => 'Action', + 'view-title' => 'Transaction #:transaction_id', + 'transaction-data' => 'Transaction Data', + 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', + 'status' => 'Status', + 'created-at' => 'Created At', + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1502,6 +1511,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index d676cb226..39ec80012 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -196,6 +196,7 @@ return [ 'billed-to' => 'صورت حساب داده شده برای', 'shipped-to' => 'فرستاده شده به', 'order-id' => 'شناسه سفارش', + 'invoice-id' => 'Invoice number', 'invoice-date' => 'تاریخ فاکتور', 'total-qty' => 'کل مقدار', 'inventory-source' => 'منابع موجودی', @@ -481,17 +482,25 @@ return [ ], 'transactions' => [ - 'title' => 'پرداختی ها', + 'title' => 'Transactions', + 'create-title' => 'Add transaction', 'id' => 'Id', - 'transaction-id' => 'شناسه پرداخت', - 'payment-method' => 'پرداخت با', - 'action' => 'عملیات', - 'view-title' => 'پرداخت #:transaction_id', - 'transaction-data' => 'اطلاعات پرداخت', - 'order-id' => 'شمار سفارش', - 'status' => 'وضعیت', - 'created-at' => 'ایجاد شده در', - 'transaction-details' => 'جزئیات پرداخت' + 'transaction-id' => 'Transaction Id', + 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', + 'action' => 'Action', + 'view-title' => 'Transaction #:transaction_id', + 'transaction-data' => 'Transaction Data', + 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', + 'status' => 'Status', + 'created-at' => 'Created At', + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1481,7 +1490,11 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', - 'all-customer-groups' => 'همه گروه های مشتری' + 'all-customer-groups' => 'همه گروه های مشتری', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/it/app.php b/packages/Webkul/Admin/src/Resources/lang/it/app.php index 6257de629..a1455b3af 100644 --- a/packages/Webkul/Admin/src/Resources/lang/it/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/it/app.php @@ -196,6 +196,7 @@ return [ 'billed-to' => 'Fatturato a', 'shipped-to' => 'Spedito a', 'order-id' => 'Id Ordine', + 'invoice-id' => 'numero di fattura', 'invoice-date' => 'Data Fattura', 'total-qty' => 'Qtà Totale', 'inventory-source' => 'Magazzino', @@ -479,16 +480,24 @@ return [ 'transactions' => [ 'title' => 'Transactions', + 'create-title' => 'Add transaction', 'id' => 'Id', 'transaction-id' => 'Transaction Id', 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', 'action' => 'Action', 'view-title' => 'Transaction #:transaction_id', 'transaction-data' => 'Transaction Data', 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', 'status' => 'Status', 'created-at' => 'Created At', - 'transaction-details' => 'Transaction Details' + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1492,6 +1501,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/nl/app.php b/packages/Webkul/Admin/src/Resources/lang/nl/app.php index 433396a41..8e1820d82 100644 --- a/packages/Webkul/Admin/src/Resources/lang/nl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/nl/app.php @@ -196,6 +196,7 @@ return [ 'billed-to' => 'Gefactureerd aan', 'shipped-to' => 'Verzonden naar', 'order-id' => 'Order Id', + 'invoice-id' => 'Factuurnummer', 'invoice-date' => 'Factuur datum', 'total-qty' => 'Totale hoeveelheid', 'inventory-source' => 'Voorraad bron', @@ -476,16 +477,24 @@ return [ 'transactions' => [ 'title' => 'Transacties', + 'create-title' => 'Transactie toevoegen', 'id' => 'Id', 'transaction-id' => 'Transactie Id', 'payment-method' => 'Betalingswijze', + 'transaction-amount' => 'Transactiebedrag', 'action' => 'Actie', 'view-title' => 'Transactie #:transaction_id', - 'transaction-data' => 'Transacatie data', + 'transaction-data' => 'Transactie Data', 'order-id' => 'Order Id', + 'invoice-id' => 'Factuurnummer', 'status' => 'Status', - 'created-at' => 'Datum aangemaakt', - 'transaction-details' => 'Transactie Details' + 'created-at' => 'Toegevoegd op', + 'transaction-details' => 'Transactie details', + 'response' => [ + 'invoice-missing' => 'Dit factuurnummer bestaat niet', + 'transaction-saved' => 'De transactie is geregistreerd', + 'already-paid' => 'Dit factuur is al voldaan' + ] ] ], @@ -1485,6 +1494,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/pl/app.php b/packages/Webkul/Admin/src/Resources/lang/pl/app.php index 153bf5664..e4cdcf67e 100644 --- a/packages/Webkul/Admin/src/Resources/lang/pl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pl/app.php @@ -194,6 +194,7 @@ return [ 'billed-to' => 'Zapłacono za', 'shipped-to' => 'Wysłane do', 'order-id' => 'Identyfikator zamówienia', + 'invoice-id' => 'numer faktury', 'invoice-date' => 'Data faktury', 'total-qty' => 'Ilość Całkowita', 'inventory-source' => 'Źródło zapasów', @@ -478,16 +479,24 @@ return [ 'transactions' => [ 'title' => 'Transactions', + 'create-title' => 'Add transaction', 'id' => 'Id', 'transaction-id' => 'Transaction Id', 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', 'action' => 'Action', 'view-title' => 'Transaction #:transaction_id', 'transaction-data' => 'Transaction Data', 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', 'status' => 'Status', 'created-at' => 'Created At', - 'transaction-details' => 'Transaction Details' + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1476,6 +1485,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php index 8d865421e..792047577 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -195,6 +195,7 @@ return [ 'billed-to' => 'Cobrado de', 'shipped-to' => 'Enviado para', 'order-id' => 'Pedido Id', + 'invoice-id' => 'Número da fatura', 'invoice-date' => 'Data da Fatura', 'total-qty' => 'Total Qtd', 'inventory-source' => 'Fonte do Estoque', @@ -476,17 +477,25 @@ return [ ], 'transactions' => [ - 'title' => 'Transações', - 'id' => 'ID', - 'transaction-id' => 'ID da Transação', - 'payment-method' => 'Método de pagamento', - 'action' => 'Ação', - 'view-title' => 'Transação #:transaction_id', + 'title' => 'Transactions', + 'create-title' => 'Add transaction', + 'id' => 'Id', + 'transaction-id' => 'Transaction Id', + 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', + 'action' => 'Action', + 'view-title' => 'Transaction #:transaction_id', 'transaction-data' => 'Transaction Data', - 'order-id' => 'ID do Pedido', + 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', 'status' => 'Status', - 'created-at' => 'Criado em', - 'transaction-details' => 'Detalhes da transação' + 'created-at' => 'Created At', + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1490,6 +1499,10 @@ return [ 'cache-small-image' => 'Imagem pequena', 'cache-medium-image' => 'Imagem média', 'cache-large-image' => 'Imagem grande', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/lang/tr/app.php b/packages/Webkul/Admin/src/Resources/lang/tr/app.php index 0baf071d1..d15a31540 100644 --- a/packages/Webkul/Admin/src/Resources/lang/tr/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/tr/app.php @@ -193,6 +193,7 @@ return [ 'billed-to' => 'Fatura Bilgileri', 'shipped-to' => 'Kargo Bilgileri', 'order-id' => 'Sipariş ID', + 'invoice-id' => 'Fatura numarası', 'invoice-date' => 'Fatura Tarihi', 'total-qty' => 'Toplam Miktar', 'inventory-source' => 'Envanter Kaynağı', @@ -476,16 +477,24 @@ return [ 'transactions' => [ 'title' => 'Transactions', + 'create-title' => 'Add transaction', 'id' => 'Id', 'transaction-id' => 'Transaction Id', 'payment-method' => 'Payment method', + 'transaction-amount' => 'Transaction amount', 'action' => 'Action', 'view-title' => 'Transaction #:transaction_id', 'transaction-data' => 'Transaction Data', 'order-id' => 'Order Id', + 'invoice-id' => 'Invoice Id', 'status' => 'Status', 'created-at' => 'Created At', - 'transaction-details' => 'Transaction Details' + 'transaction-details' => 'Transaction Details', + 'response' => [ + 'invoice-missing' => 'This invoice id does not exist', + 'transaction-saved' => 'The transaction has been saved', + 'already-paid' => 'This invoice has already been paid' + ] ] ], @@ -1473,6 +1482,10 @@ return [ 'cache-small-image' => 'Small Image', 'cache-medium-image' => 'Medium Image', 'cache-large-image' => 'Large Image', + 'generate-invoice' => 'Automatically generate the invoice after placing an order', + 'set-invoice-status' => 'Set the invoice status after creating the invoice to', + 'set-order-status' => 'Set the order status after creating the invoice to', + 'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled' ] ] ]; diff --git a/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php index 0d27ad1ae..e0e63e2b8 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php @@ -34,225 +34,246 @@
-
+ - -
+ +
+ +
-
-
- {{ __('admin::app.sales.orders.order-info') }} -
- -
-
- - {{ __('admin::app.sales.invoices.order-id') }} - - - - #{{ $order->increment_id }} - -
- - {!! view_render_event('sales.invoice.increment_id.after', ['order' => $order]) !!} - -
- - {{ __('admin::app.sales.orders.order-date') }} - - - - {{ $order->created_at }} - -
- - {!! view_render_event('sales.invoice.created_at.after', ['order' => $order]) !!} - -
- - {{ __('admin::app.sales.orders.order-status') }} - - - - {{ $order->status_label }} - -
- - {!! view_render_event('sales.invoice.status_label.after', ['order' => $order]) !!} - -
- - {{ __('admin::app.sales.orders.channel') }} - - - - {{ $order->channel_name }} - -
- - {!! view_render_event('sales.invoice.channel_name.after', ['order' => $order]) !!} -
-
- -
-
- {{ __('admin::app.sales.orders.account-info') }} -
- -
-
- {{ __('admin::app.sales.orders.customer-name') }} - {{ $invoice->order->customer_full_name }} -
- - {!! view_render_event('sales.invoice.customer_name.after', ['order' => $order]) !!} - -
- {{ __('admin::app.sales.orders.email') }} - {{ $invoice->order->customer_email }} -
- - {!! view_render_event('sales.invoice.customer_email.after', ['order' => $order]) !!} -
-
- -
-
- - @if ($order->billing_address || $order->shipping_address) - -
- - @if ($order->billing_address)
-
- {{ __('admin::app.sales.orders.billing-address') }} +
+ {{ __('admin::app.sales.orders.order-info') }}
-
- @include ('admin::sales.address', ['address' => $order->billing_address]) +
+
+ + {{ __('admin::app.sales.invoices.order-id') }} + - {!! view_render_event('sales.invoice.billing_address.after', ['order' => $order]) !!} + + #{{ $order->increment_id }} + +
+ + {!! view_render_event('sales.invoice.increment_id.after', ['order' => $order]) !!} + +
+ + {{ __('admin::app.sales.orders.order-date') }} + + + + {{ $order->created_at }} + +
+ + {!! view_render_event('sales.invoice.created_at.after', ['order' => $order]) !!} + +
+ + {{ __('admin::app.sales.orders.order-status') }} + + + + {{ $order->status_label }} + +
+ + {!! view_render_event('sales.invoice.status_label.after', ['order' => $order]) !!} + +
+ + {{ __('admin::app.sales.invoices.status') }} + + + + {{ $invoice->status_label }} + +
+ +
+ + {{ __('admin::app.sales.orders.channel') }} + + + + {{ $order->channel_name }} + +
+ + {!! view_render_event('sales.invoice.channel_name.after', ['order' => $order]) !!}
- @endif - @if ($order->shipping_address) -
-
- {{ __('admin::app.sales.orders.shipping-address') }} +
+
+ {{ __('admin::app.sales.orders.account-info') }}
-
- @include ('admin::sales.address', ['address' => $order->shipping_address]) +
+
+ {{ __('admin::app.sales.orders.customer-name') }} + {{ $invoice->order->customer_full_name }} +
- {!! view_render_event('sales.invoice.shipping_address.after', ['order' => $order]) !!} + {!! view_render_event('sales.invoice.customer_name.after', ['order' => $order]) !!} + +
+ {{ __('admin::app.sales.orders.email') }} + {{ $invoice->order->customer_email }} +
+ + {!! view_render_event('sales.invoice.customer_email.after', ['order' => $order]) !!}
- @endif -
- - @endif - -
+
+
-
- - - - - - - - - - @if ($invoice->base_discount_amount > 0) - - @endif - - - - + @if ($order->billing_address || $order->shipping_address) + +
- @foreach ($invoice->items as $item) -
- + @if ($order->billing_address) +
+
+ {{ __('admin::app.sales.orders.billing-address') }} +
-
+ + + + +
{{ __('admin::app.sales.orders.SKU') }}{{ __('admin::app.sales.orders.product-name') }}{{ __('admin::app.sales.orders.price') }}{{ __('admin::app.sales.orders.qty') }}{{ __('admin::app.sales.orders.subtotal') }}{{ __('admin::app.sales.orders.tax-amount') }}{{ __('admin::app.sales.orders.discount-amount') }}{{ __('admin::app.sales.orders.grand-total') }}
{{ $item->getTypeInstance()->getOrderedItem($item)->sku }} - {{ $item->name }} +
+ @include ('admin::sales.address', ['address' => $order->billing_address]) - @if (isset($item->additional['attributes'])) -
+ {!! view_render_event('sales.invoice.billing_address.after', ['order' => $order]) !!} +
+
+ @endif - @foreach ($item->additional['attributes'] as $attribute) - {{ $attribute['attribute_name'] }} : {{ $attribute['option_label'] }}
- @endforeach + @if ($order->shipping_address) +
+
+ {{ __('admin::app.sales.orders.shipping-address') }} +
-
+
+ @include ('admin::sales.address', ['address' => $order->shipping_address]) + + {!! view_render_event('sales.invoice.shipping_address.after', ['order' => $order]) !!} +
+ + @endif + + + @endif + + +
+ +
+ + + + + + + + + + @if ($invoice->base_discount_amount > 0) + @endif - + + + - + - + @foreach ($invoice->items as $item) + + - + + @if (isset($item->additional['attributes'])) +
- @if ($invoice->base_discount_amount > 0) -
- @endif + @foreach ($item->additional['attributes'] as $attribute) + {{ $attribute['attribute_name'] }} : {{ $attribute['option_label'] }}
+ @endforeach - + + @endif + + + + + + + + + + + @if ($invoice->base_discount_amount > 0) + + @endif + + + + @endforeach + + +
{{ __('admin::app.sales.orders.SKU') }}{{ __('admin::app.sales.orders.product-name') }}{{ __('admin::app.sales.orders.price') }}{{ __('admin::app.sales.orders.qty') }}{{ __('admin::app.sales.orders.subtotal') }}{{ __('admin::app.sales.orders.tax-amount') }}{{ __('admin::app.sales.orders.discount-amount') }}{{ __('admin::app.sales.orders.grand-total') }}
{{ core()->formatBasePrice($item->base_price) }}
{{ $item->qty }}
{{ $item->getTypeInstance()->getOrderedItem($item)->sku }}{{ core()->formatBasePrice($item->base_total) }} + {{ $item->name }} - {{ core()->formatBasePrice($item->base_tax_amount) }}{{ core()->formatBasePrice($item->base_discount_amount) }}{{ core()->formatBasePrice($item->base_total + $item->base_tax_amount - $item->base_discount_amount) }}{{ core()->formatBasePrice($item->base_price) }}{{ $item->qty }}{{ core()->formatBasePrice($item->base_total) }}{{ core()->formatBasePrice($item->base_tax_amount) }}{{ core()->formatBasePrice($item->base_discount_amount) }}{{ core()->formatBasePrice($item->base_total + $item->base_tax_amount - $item->base_discount_amount) }}
+
+ + + + + + + + + + + + + + + + + + + + + @if ($invoice->base_discount_amount > 0) + + + + - @endforeach + @endif - -
{{ __('admin::app.sales.orders.subtotal') }}-{{ core()->formatBasePrice($invoice->base_sub_total) }}
{{ __('admin::app.sales.orders.shipping-handling') }}-{{ core()->formatBasePrice($invoice->base_shipping_amount) }}
{{ __('admin::app.sales.orders.tax') }}-{{ core()->formatBasePrice($invoice->base_tax_amount) }}
{{ __('admin::app.sales.orders.discount') }}-{{ core()->formatBasePrice($invoice->base_discount_amount) }}
-
- - - - - - - - - - - - - - - - - - - - - @if ($invoice->base_discount_amount > 0) - - - - - - @endif - - - - - - -
{{ __('admin::app.sales.orders.subtotal') }}-{{ core()->formatBasePrice($invoice->base_sub_total) }}
{{ __('admin::app.sales.orders.shipping-handling') }}-{{ core()->formatBasePrice($invoice->base_shipping_amount) }}
{{ __('admin::app.sales.orders.tax') }}-{{ core()->formatBasePrice($invoice->base_tax_amount) }}
{{ __('admin::app.sales.orders.discount') }}-{{ core()->formatBasePrice($invoice->base_discount_amount) }}
{{ __('admin::app.sales.orders.grand-total') }}-{{ core()->formatBasePrice($invoice->base_grand_total) }}
+
{{ __('admin::app.sales.orders.grand-total') }}-{{ core()->formatBasePrice($invoice->base_grand_total) }}
+
+
- + -
+ +
+ @inject('InvoicesTransactionsDatagrid', 'Webkul\Admin\DataGrids\InvoicesTransactionsDatagrid') + {!! $InvoicesTransactionsDatagrid->render() !!} +
+
+
diff --git a/packages/Webkul/Admin/src/Resources/views/sales/transactions/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/transactions/create.blade.php new file mode 100644 index 000000000..d1955a16b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sales/transactions/create.blade.php @@ -0,0 +1,57 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.sales.transactions.create-title') }} +@stop + +@section('content') +
+ + +
+ +
+
+ @csrf + +
+ + + + @{{ errors.first('invoice_id') }} +
+ +
+ + + @{{ errors.first('payment_method') }} +
+ +
+ + + @{{ errors.first('amount') }} +
+ + +
+
+ +
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/sales/transactions/index.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/transactions/index.blade.php index 214885c00..692c009f0 100644 --- a/packages/Webkul/Admin/src/Resources/views/sales/transactions/index.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/transactions/index.blade.php @@ -18,6 +18,8 @@ {{ __('admin::app.export.export') }}
+ + {{ __('admin::app.sales.transactions.create-title') }}
diff --git a/packages/Webkul/Admin/src/Resources/views/sales/transactions/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/transactions/view.blade.php index 5b12f43c2..f219d817e 100644 --- a/packages/Webkul/Admin/src/Resources/views/sales/transactions/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/transactions/view.blade.php @@ -53,6 +53,20 @@
+ @if($transaction->invoice_id) +
+ + {{ __('admin::app.sales.transactions.invoice-id') }} + + + + + {{ $transaction->invoice_id }} + + +
+ @endif +
{{ __('admin::app.sales.transactions.payment-method') }} @@ -63,7 +77,7 @@
- {{--
+
{{ __('admin::app.sales.transactions.status') }} @@ -71,7 +85,7 @@ {{ $transaction->status }} -
--}} +
diff --git a/packages/Webkul/Payment/src/Config/system.php b/packages/Webkul/Payment/src/Config/system.php index 0febb44a7..8b7eb3918 100755 --- a/packages/Webkul/Payment/src/Config/system.php +++ b/packages/Webkul/Payment/src/Config/system.php @@ -20,28 +20,71 @@ return [ 'type' => 'depends', 'depend' => 'active:1', 'validation' => 'required_if:active,1', - 'channel_based' => false, + 'channel_based' => true, 'locale_based' => true, ], [ 'name' => 'description', 'title' => 'admin::app.admin.system.description', 'type' => 'textarea', - 'channel_based' => false, - 'locale_based' => true, - ], [ - 'name' => 'active', - 'title' => 'admin::app.admin.system.status', - 'type' => 'boolean', - 'validation' => 'required', - 'channel_based' => false, + 'channel_based' => true, 'locale_based' => true, ], [ 'name' => 'instructions', 'title' => 'admin::app.admin.system.instructions', 'type' => 'textarea', - 'channel_based' => false, + 'channel_based' => true, 'locale_based' => true, - ], [ + ], [ + 'name' => 'generate_invoice', + 'title' => 'admin::app.admin.system.generate-invoice', + 'type' => 'boolean', + 'default_value' => false, + 'channel_based' => true, + 'locale_based' => false, + ], [ + 'name' => 'invoice_status', + 'title' => 'admin::app.admin.system.set-invoice-status', + 'validation' => 'required_if:generate_invoice,1', + 'type' => 'select', + 'options' => [ + [ + 'title' => 'admin::app.sales.invoices.status-pending', + 'value' => 'pending' + ], [ + 'title' => 'admin::app.sales.invoices.status-paid', + 'value' => 'paid' + ], + ], + 'info' => 'admin::app.admin.system.generate-invoice-applicable', + 'channel_based' => true, + 'locale_based' => false, + ], [ + 'name' => 'order_status', + 'title' => 'admin::app.admin.system.set-order-status', + 'type' => 'select', + 'options' => [ + [ + 'title' => 'admin::app.sales.orders.order-status-pending', + 'value' => 'pending' + ], [ + 'title' => 'admin::app.sales.orders.order-status-pending-payment', + 'value' => 'pending_payment' + ], [ + 'title' => 'admin::app.sales.orders.order-status-processing', + 'value' => 'processing' + ] + ], + 'info' => 'admin::app.admin.system.generate-invoice-applicable', + 'channel_based' => true, + 'locale_based' => false, + ], [ + 'name' => 'active', + 'title' => 'admin::app.admin.system.status', + 'type' => 'boolean', + 'validation' => 'required', + 'channel_based' => true, + 'locale_based' => true, + ], [ 'name' => 'sort', 'title' => 'admin::app.admin.system.sort_order', 'type' => 'select', @@ -73,28 +116,63 @@ return [ 'type' => 'depends', 'depend' => 'active:1', 'validation' => 'required_if:active,1', - 'channel_based' => false, + 'channel_based' => true, 'locale_based' => true, ], [ 'name' => 'description', 'title' => 'admin::app.admin.system.description', 'type' => 'textarea', - 'channel_based' => false, + 'channel_based' => true, + 'locale_based' => true, + ], [ + 'name' => 'generate_invoice', + 'title' => 'Automatically generate the invoice after placing an order', + 'type' => 'boolean', + 'default_value' => false, + 'channel_based' => true, + 'locale_based' => false, + ], [ + 'name' => 'invoice_status', + 'title' => 'Invoice status after creating the invoice', + 'type' => 'select', + 'options' => [ + [ + 'title' => 'Pending', + 'value' => 'pending' + ], [ + 'title' => 'Paid', + 'value' => 'paid' + ] + ], + 'info' => 'admin::app.admin.system.generate-invoice-applicable', + ], [ + 'name' => 'order_status', + 'title' => 'Order status after creating the invoice', + 'type' => 'select', + 'options' => [ + [ + 'title' => 'Pending', + 'value' => 'pending' + ], [ + 'title' => 'Processing', + 'value' => 'processing' + ] + ], + 'info' => 'admin::app.admin.system.generate-invoice-applicable', + ], [ + 'name' => 'mailing_address', + 'title' => 'admin::app.admin.system.mailing-address', + 'type' => 'textarea', + 'channel_based' => true, 'locale_based' => true, ], [ 'name' => 'active', 'title' => 'admin::app.admin.system.status', 'type' => 'boolean', 'validation' => 'required', - 'channel_based' => false, + 'channel_based' => true, 'locale_based' => true, - ], [ - 'name' => 'mailing_address', - 'title' => 'admin::app.admin.system.mailing-address', - 'type' => 'textarea', - 'channel_based' => false, - 'locale_based' => true, - ], [ + ],[ 'name' => 'sort', 'title' => 'admin::app.admin.system.sort_order', 'type' => 'select', diff --git a/packages/Webkul/Payment/src/Listeners/GenerateInvoice.php b/packages/Webkul/Payment/src/Listeners/GenerateInvoice.php new file mode 100644 index 000000000..cd352fa88 --- /dev/null +++ b/packages/Webkul/Payment/src/Listeners/GenerateInvoice.php @@ -0,0 +1,78 @@ +orderRepository = $orderRepository; + $this->invoiceRepository = $invoiceRepository; + } + + /** + * Generate a new invoice. + * + * @param object $order + * @return void + */ + public function handle($order) + { + if ($order->payment->method == 'cashondelivery' && core()->getConfigData('sales.paymentmethods.cashondelivery.generate_invoice')) { + $this->invoiceRepository->create($this->prepareInvoiceData($order), core()->getConfigData('sales.paymentmethods.cashondelivery.invoice_status'), core()->getConfigData('sales.paymentmethods.cashondelivery.order_status')); + } + + if ($order->payment->method == 'moneytransfer' && core()->getConfigData('sales.paymentmethods.moneytransfer.generate_invoice')) { + $this->invoiceRepository->create($this->prepareInvoiceData($order), core()->getConfigData('sales.paymentmethods.moneytransfer.invoice_status'), core()->getConfigData('sales.paymentmethods.moneytransfer.order_status')); + } + } + + /** + * Prepares order's invoice data for creation. + * + * @return array + */ + protected function prepareInvoiceData($order) + { + $invoiceData = ['order_id' => $order->id]; + + foreach ($order->items as $item) { + $invoiceData['invoice']['items'][$item->id] = $item->qty_to_invoice; + } + + return $invoiceData; + } +} \ No newline at end of file diff --git a/packages/Webkul/Payment/src/Providers/EventServiceProvider.php b/packages/Webkul/Payment/src/Providers/EventServiceProvider.php new file mode 100644 index 000000000..17db1ca29 --- /dev/null +++ b/packages/Webkul/Payment/src/Providers/EventServiceProvider.php @@ -0,0 +1,19 @@ +app->register(EventServiceProvider::class); } /** @@ -44,7 +45,7 @@ class PaymentServiceProvider extends ServiceProvider return new Payment(); }); } - + /** * Register package config. * diff --git a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php index 4be69dffe..e114be08d 100755 --- a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php +++ b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php @@ -80,7 +80,7 @@ class InvoiceRepository extends Repository } /** - * @param array $data + * @param array $data * @param string $invoiceState * @param string $orderState * @return \Webkul\Sales\Contracts\Invoice @@ -95,7 +95,7 @@ class InvoiceRepository extends Repository $order = $this->orderRepository->find($data['order_id']); $totalQty = array_sum($data['invoice']['items']); - + if (isset($invoiceState)) { $state = $invoiceState; } else { @@ -268,4 +268,16 @@ class InvoiceRepository extends Repository return $invoice; } + + /** + * @param \Webkul\Sales\Contracts\Invoice $invoice + * @return void + */ + public function updateState($invoice, $status) + { + $invoice->state = $status; + $invoice->save(); + + return true; + } }