diff --git a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php index 11b545ef7..0570987c3 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php @@ -45,6 +45,19 @@ class OrderInvoicesDataGrid extends DataGrid 'filterable' => true, ]); + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.invoice-date'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + 'closure' => true, + 'wrapper' => function ($value) { + return \Carbon\Carbon::parse($value->created_at)->format('d-m-Y'); + } + ]); + $this->addColumn([ 'index' => 'base_grand_total', 'label' => trans('admin::app.datagrid.grand-total'), @@ -55,12 +68,22 @@ class OrderInvoicesDataGrid extends DataGrid ]); $this->addColumn([ - 'index' => 'created_at', - 'label' => trans('admin::app.datagrid.invoice-date'), - 'type' => 'datetime', + 'index' => 'state', + 'label' => trans('admin::app.datagrid.state'), + 'type' => 'string', + 'closure' => true, 'searchable' => true, 'sortable' => true, 'filterable' => true, + 'wrapper' => function ($value) { + if ($value->state == 'paid') { + return ''. trans('admin::app.sales.orders.invoice-status-paid') .''; + } elseif ($value->state == "pending") { + return ''. trans('admin::app.sales.orders.invoice-status-pending') .''; + } elseif ($value->state == "overdue") { + return ''. trans('admin::app.sales.orders.invoice-status-overdue') . ''; + } + } ]); } diff --git a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php index 18ec38400..4c4de66c7 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php @@ -64,12 +64,12 @@ class CustomerController extends Controller CustomerGroupRepository $customerGroupRepository, ChannelRepository $channelRepository ) - + { $this->_config = request('_config'); $this->middleware('admin'); $this->customerRepository = $customerRepository; - + $this->customerAddressRepository = $customerAddressRepository; $this->customerGroupRepository = $customerGroupRepository; $this->channelRepository = $channelRepository; @@ -200,12 +200,19 @@ class CustomerController extends Controller $customer = $this->customerRepository->findorFail($id); try { - $this->customerRepository->delete($id); + + if (! $this->customerRepository->checkIfCustomerHasOrderPendingOrProcessing($customer)) { + + $this->customerRepository->delete($id); + } else { + + return response()->json(['message' => false], 400); + } session()->flash('success', trans('admin::app.response.delete-success', ['name' => 'Customer'])); - return response()->json(['message' => true], 200); } catch (\Exception $e) { + session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Customer'])); } @@ -279,12 +286,18 @@ class CustomerController extends Controller { $customerIds = explode(',', request()->input('indexes')); - foreach ($customerIds as $customerId) { - $this->customerRepository->deleteWhere(['id' => $customerId]); + if (!$this->customerRepository->checkBulkCustomerIfTheyHaveOrderPendingOrProcessing($customerIds)) { + + foreach ($customerIds as $customerId) { + $this->customerRepository->deleteWhere(['id' => $customerId]); + } + + session()->flash('success', trans('admin::app.customers.customers.mass-destroy-success')); + + return redirect()->back(); } - session()->flash('success', trans('admin::app.customers.customers.mass-destroy-success')); - + session()->flash('error', trans('admin::app.response.order-pending', ['name' => 'Customers'])); return redirect()->back(); } } \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php b/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php index 3931fc268..2d346bf2a 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php @@ -2,9 +2,12 @@ namespace Webkul\Admin\Http\Controllers\Sales; +use Illuminate\Http\Request; + use Webkul\Admin\Http\Controllers\Controller; use Webkul\Sales\Repositories\OrderRepository; use Webkul\Sales\Repositories\InvoiceRepository; + use PDF; class InvoiceController extends Controller @@ -97,7 +100,7 @@ class InvoiceController extends Controller $data = request()->all(); $haveProductToInvoice = false; - + foreach ($data['invoice']['items'] as $itemId => $qty) { if ($qty) { $haveProductToInvoice = true; @@ -145,4 +148,29 @@ class InvoiceController extends Controller return $pdf->download('invoice-' . $invoice->created_at->format('d-m-Y') . '.pdf'); } + + /** + * Update the invoice state. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function updateState($id, Request $request) + { + $invoice = $this->invoiceRepository->findOrFail($id); + $task = $this->invoiceRepository->updateInvoiceState($invoice, $request->state); + + if($request->state == 'paid'){ + $order = $this->orderRepository->findOrFail($invoice->order->id); + $this->orderRepository->updateOrderStatus($order); + } + + if ($task){ + session()->flash('success', trans('admin::app.sales.orders.invoice-status-confirmed')); + } else { + session()->flash('success', trans('admin::app.sales.orders.invoice-status-error')); + } + + return back(); + } } diff --git a/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php b/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php index 4611ad6b5..3eb339d75 100644 --- a/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php +++ b/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php @@ -29,9 +29,17 @@ class ConfigurationForm extends FormRequest if (request()->has('general.design.admin_logo.logo_image') && ! request()->input('general.design.admin_logo.logo_image.delete') ) { - $this->rules = [ - 'general.design.admin_logo.logo_image' => 'required|mimes:jpeg,bmp,png,jpg', - ]; + $this->rules = array_merge($this->rules, [ + 'general.design.admin_logo.logo_image' => 'required|mimes:jpeg,bmp,png,jpg|max:5000', + ]); + } + + if (request()->has('general.design.admin_logo.favicon') + && ! request()->input('general.design.admin_logo.favicon.delete') + ) { + $this->rules = array_merge($this->rules, [ + 'general.design.admin_logo.favicon' => 'required|mimes:jpeg,bmp,png,jpg|max:5000', + ]); } return $this->rules; @@ -48,4 +56,15 @@ class ConfigurationForm extends FormRequest 'general.design.admin_logo.logo_image.mimes' => 'Invalid file format. Use only jpeg, bmp, png, jpg.', ]; } -} + + /** + * Set the attribute name. + */ + public function attributes() + { + return [ + 'general.design.admin_logo.logo_image' => 'Logo Image', + 'general.design.admin_logo.favicon' => 'Favicon Image' + ]; + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index b4f9cce62..07ab2fc32 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -211,6 +211,10 @@ Route::group(['middleware' => ['web']], function () { 'view' => 'admin::sales.invoices.print', ])->name('admin.sales.invoices.print'); + Route::post('/invoices/update/state/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\InvoiceController@updateState')->defaults('_config', [ + 'redirect' => 'admin.sales.orders.view', + ])->name('admin.sales.invoices.update.state'); + // Sales Shipments Routes Route::get('/shipments', 'Webkul\Admin\Http\Controllers\Sales\ShipmentController@index')->defaults('_config', [ diff --git a/packages/Webkul/Admin/src/Resources/lang/de/app.php b/packages/Webkul/Admin/src/Resources/lang/de/app.php index 881147964..192909b92 100755 --- a/packages/Webkul/Admin/src/Resources/lang/de/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/de/app.php @@ -320,6 +320,14 @@ return array ( 'invoice-btn-title' => 'Rechnung', 'info' => 'Informationen', 'invoices' => 'Rechnungen', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Sendungen', 'order-and-account' => 'Bestellung und Rechnung', 'order-info' => 'Bestellinformationen', diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index ac7a8ad25..fd1c381bf 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -319,6 +319,14 @@ return [ 'invoice-btn-title' => 'Invoice', 'info' => 'Information', 'invoices' => 'Invoices', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Shipments', 'order-and-account' => 'Order and Account', 'order-info' => 'Order Information', @@ -1219,7 +1227,7 @@ return [ 'cancel-success' => ':name canceled successfully.', 'cancel-error' => ':name can not be canceled.', 'already-taken' => 'The :name has already been taken.', - 'order-pending' => 'Cannot delete account because some Order(s) are pending or processing state.' + 'order-pending' => 'Cannot delete :name account because some Order(s) are pending or processing state.' ], 'footer' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index 6f88bc54e..410af2d47 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'صورت حساب', 'info' => 'اطلاعات', 'invoices' => 'صورت حساب ها', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'حمل و نقل ها', 'order-and-account' => 'سفارش و حساب', 'order-info' => 'اطلاعات سفارش', diff --git a/packages/Webkul/Admin/src/Resources/lang/it/app.php b/packages/Webkul/Admin/src/Resources/lang/it/app.php index 580ab92d2..fca9749c8 100644 --- a/packages/Webkul/Admin/src/Resources/lang/it/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/it/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'Fattura', 'info' => 'Informazoni', 'invoices' => 'Fatture', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Spedizioni', 'order-and-account' => 'Ordine e Account', 'order-info' => 'informazioni Ordine', diff --git a/packages/Webkul/Admin/src/Resources/lang/nl/app.php b/packages/Webkul/Admin/src/Resources/lang/nl/app.php index 3c67966f2..f7ca87ef7 100644 --- a/packages/Webkul/Admin/src/Resources/lang/nl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/nl/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'Factuur', 'info' => 'Informatie', 'invoices' => 'Facturen', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Verzendingen', 'order-and-account' => 'Order and Account', 'order-info' => 'Order Information', diff --git a/packages/Webkul/Admin/src/Resources/lang/pl/app.php b/packages/Webkul/Admin/src/Resources/lang/pl/app.php index a714a24b3..960202a88 100644 --- a/packages/Webkul/Admin/src/Resources/lang/pl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pl/app.php @@ -317,6 +317,14 @@ return [ 'invoice-btn-title' => 'Faktura', 'info' => 'Informacje', 'invoices' => 'Faktury', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Przesyłki', 'order-and-account' => 'Zamówienie i konto', 'order-info' => 'Informacje o zamówieniu', 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 fb31ad0dc..4043e01f3 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'Faturar', 'info' => 'Informação', 'invoices' => 'Faturas', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Envios', 'order-and-account' => 'Pedido e Conta', 'order-info' => 'Informação do Pedido', diff --git a/packages/Webkul/Admin/src/Resources/lang/tr/app.php b/packages/Webkul/Admin/src/Resources/lang/tr/app.php index b9bd5afd2..f1c7b8103 100644 --- a/packages/Webkul/Admin/src/Resources/lang/tr/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/tr/app.php @@ -316,6 +316,14 @@ return [ 'invoice-btn-title' => 'Fatura', 'info' => 'Bilgi', 'invoices' => 'Faturalar', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Kargo', 'order-and-account' => 'Sipariş ve Hesap', 'order-info' => 'Sipariş Bilgisi', diff --git a/packages/Webkul/Admin/src/Resources/views/sales/invoices/index.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/invoices/index.blade.php index 42b871faf..ef1dd4412 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/invoices/index.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/invoices/index.blade.php @@ -13,10 +13,7 @@
- - - {{ __('admin::app.export.export') }} - + {{ __('admin::app.export.export') }}
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 0666ce986..06fb088b8 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 @@ -1,10 +1,10 @@ -@extends('admin::layouts.master') +@extends('admin::layouts.content') @section('page_title') {{ __('admin::app.sales.invoices.view-title', ['invoice_id' => $invoice->id]) }} @stop -@section('content-wrapper') +@section('content') order; ?> @@ -15,11 +15,18 @@ {!! view_render_event('sales.invoice.title.before', ['order' => $order]) !!} - {{ __('admin::app.sales.invoices.view-title', ['invoice_id' => $invoice->id]) }} {!! view_render_event('sales.invoice.title.after', ['order' => $order]) !!} + + @if($invoice->state == 'paid') + {{ __('admin::app.sales.orders.invoice-status-paid') }} + @elseif($invoice->state == 'pending') + {{ __('admin::app.sales.orders.invoice-status-pending') }} + @else + {{ __('admin::app.sales.orders.invoice-status-overdue') }} + @endif
@@ -29,6 +36,10 @@ {{ __('admin::app.sales.invoices.print') }} + @if($invoice->state == "pending" || $invoice->state == "overdue") + {{ __('admin::app.sales.orders.invoices-change-title') }} + @endif + {!! view_render_event('sales.invoice.page_action.after', ['order' => $order]) !!}
@@ -37,7 +48,7 @@
-
+
@@ -46,10 +57,7 @@
- - {{ __('admin::app.sales.invoices.order-id') }} - - + {{ __('admin::app.sales.invoices.order-id') }} #{{ $order->increment_id }} @@ -58,69 +66,55 @@ {!! view_render_event('sales.invoice.increment_id.after', ['order' => $order]) !!}
- - {{ __('admin::app.sales.orders.order-date') }} - - - - {{ $order->created_at }} - + {{ __('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 }} - + {{ __('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 }} - + {{ __('admin::app.sales.orders.channel') }} + {{ $order->channel_name }}
{!! view_render_event('sales.invoice.channel_name.after', ['order' => $order]) !!} + +
+ {{ __('admin::app.sales.orders.payment-method') }} + {{ core()->getConfigData('sales.paymentmethods.' . $order->payment->method . '.title') }} +
+ +
+ {{ __('admin::app.sales.orders.shipping-method') }} + {{ $order->shipping_title }} +
+ {!! view_render_event('sales.invoice.shipping-method.after', ['order' => $order]) !!}
-
+
{{ __('admin::app.sales.orders.account-info') }}
- - {{ __('admin::app.sales.orders.customer-name') }} - - - - {{ $invoice->address->name }} - + {{ __('admin::app.sales.orders.customer-name') }} + {{ $invoice->address->name }}
{!! view_render_event('sales.invoice.customer_name.after', ['order' => $order]) !!}
- - {{ __('admin::app.sales.orders.email') }} - - - - {{ $invoice->address->email }} - + {{ __('admin::app.sales.orders.email') }} + {{ $invoice->address->email }}
{!! view_render_event('sales.invoice.customer_email.after', ['order' => $order]) !!} @@ -131,14 +125,14 @@ -
+
-
+
{{ __('admin::app.sales.orders.billing-address') }}
-
+
@include ('admin::sales.address', ['address' => $order->billing_address]) {!! view_render_event('sales.invoice.billing_address.after', ['order' => $order]) !!} @@ -146,86 +140,18 @@
@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 - -
- - - -
- -
-
- {{ __('admin::app.sales.orders.payment-info') }} -
- -
-
- - {{ __('admin::app.sales.orders.payment-method') }} - - - - {{ core()->getConfigData('sales.paymentmethods.' . $order->payment->method . '.title') }} - -
- -
- - {{ __('admin::app.sales.orders.currency') }} - - - - {{ $order->order_currency_code }} - -
- - {!! view_render_event('sales.invoice.payment-method.after', ['order' => $order]) !!} -
-
- - @if ($order->shipping_address) -
-
- {{ __('admin::app.sales.orders.shipping-info') }} -
- -
-
- - {{ __('admin::app.sales.orders.shipping-method') }} - - - - {{ $order->shipping_title }} - -
- -
- - {{ __('admin::app.sales.orders.shipping-price') }} - - - - {{ core()->formatBasePrice($order->base_shipping_amount) }} - -
- - {!! view_render_event('sales.invoice.shipping-method.after', ['order' => $order]) !!} -
-
- @endif
@@ -254,9 +180,7 @@ @foreach ($invoice->items as $item) {{ $item->getTypeInstance()->getOrderedItem($item)->sku }} - - - {{ $item->name }} + {{ $item->name }} @if (isset($item->additional['attributes']))
@@ -264,19 +188,14 @@ @foreach ($item->additional['attributes'] as $attribute) {{ $attribute['attribute_name'] }} : {{ $attribute['option_label'] }}
@endforeach -
@endif {{ core()->formatBasePrice($item->base_price) }} - {{ $item->qty }} - {{ core()->formatBasePrice($item->base_total) }} - {{ core()->formatBasePrice($item->base_tax_amount) }} - @if ($invoice->base_discount_amount > 0) {{ core()->formatBasePrice($item->base_discount_amount) }} @endif @@ -284,7 +203,6 @@ {{ core()->formatBasePrice($item->base_total + $item->base_tax_amount - $item->base_discount_amount) }} @endforeach -
@@ -322,12 +240,61 @@ {{ core()->formatBasePrice($invoice->base_grand_total) }} -
-
-
-@stop \ No newline at end of file +
+ + +

{{ __('admin::app.sales.orders.invoices-change-title') }}

+
+ +
+
+@stop + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php index e7923525d..92b8cafeb 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php @@ -157,37 +157,41 @@
- -
+ @if ($order->billing_address || $order->shipping_address) + +
-
-
- {{ __('admin::app.sales.orders.billing-address') }} -
+ @if($order->billing_address) +
+
+ {{ __('admin::app.sales.orders.billing-address') }} +
-
- @include ('admin::sales.address', ['address' => $order->billing_address]) +
+ @include ('admin::sales.address', ['address' => $order->billing_address]) + + {!! view_render_event('sales.order.billing_address.after', ['order' => $order]) !!} +
+
+ @endif + + @if ($order->shipping_address) +
+
+ {{ __('admin::app.sales.orders.shipping-address') }} +
+ +
+ @include ('admin::sales.address', ['address' => $order->shipping_address]) + + {!! view_render_event('sales.order.shipping_address.after', ['order' => $order]) !!} +
+
+ @endif - {!! view_render_event('sales.order.billing_address.after', ['order' => $order]) !!} -
- - @if ($order->shipping_address) -
-
- {{ __('admin::app.sales.orders.shipping-address') }} -
- -
- @include ('admin::sales.address', ['address' => $order->shipping_address]) - - {!! view_render_event('sales.order.shipping_address.after', ['order' => $order]) !!} -
-
- @endif - -
-
+ + @endif
@@ -470,7 +474,15 @@ {{ $invoice->created_at }} #{{ $invoice->order->increment_id }} {{ $invoice->address->name }} - {{ $invoice->status_label }} + + @if($invoice->state == "paid") + {{ __('admin::app.sales.orders.invoice-status-paid') }} + @elseif($invoice->state == "overdue") + {{ __('admin::app.sales.orders.invoice-status-overdue') }} + @else + {{ __('admin::app.sales.orders.invoice-status-pending') }} + @endif + {{ core()->formatBasePrice($invoice->base_grand_total) }} diff --git a/packages/Webkul/Admin/src/Resources/views/sales/refunds/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/refunds/view.blade.php index c1d2762f2..8cefd98e8 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/refunds/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/refunds/view.blade.php @@ -107,37 +107,41 @@
- -
+ @if ($order->billing_address || $order->shipping_address) + +
-
-
- {{ __('admin::app.sales.orders.billing-address') }} -
+ @if ($order->billing_address) +
+
+ {{ __('admin::app.sales.orders.billing-address') }} +
-
+
- @include ('admin::sales.address', ['address' => $order->billing_address]) + @include ('admin::sales.address', ['address' => $order->billing_address]) + +
+
+ @endif + + @if ($order->shipping_address) +
+
+ {{ __('admin::app.sales.orders.shipping-address') }} +
+ +
+ + @include ('admin::sales.address', ['address' => $order->shipping_address]) + +
+
+ @endif -
- - @if ($order->shipping_address) -
-
- {{ __('admin::app.sales.orders.shipping-address') }} -
- -
- - @include ('admin::sales.address', ['address' => $order->shipping_address]) - -
-
- @endif - -
-
+ + @endif
diff --git a/packages/Webkul/BookingProduct/src/Repositories/BookingProductEventTicketRepository.php b/packages/Webkul/BookingProduct/src/Repositories/BookingProductEventTicketRepository.php index ce0a1a7f2..e43dd10f2 100644 --- a/packages/Webkul/BookingProduct/src/Repositories/BookingProductEventTicketRepository.php +++ b/packages/Webkul/BookingProduct/src/Repositories/BookingProductEventTicketRepository.php @@ -2,6 +2,7 @@ namespace Webkul\BookingProduct\Repositories; +use Illuminate\Support\Facades\Event; use Webkul\Core\Eloquent\Repository; use Illuminate\Support\Str; @@ -18,12 +19,16 @@ class BookingProductEventTicketRepository extends Repository } /** - * @param array $data - * @param \Webkul\BookingProduct\Contracts\BookingProduct $bookingProduct + * @param array $data + * @param \Webkul\BookingProduct\Contracts\BookingProduct $bookingProduct + * * @return void + * @throws \Prettus\Validator\Exceptions\ValidatorException */ - public function saveEventTickets($data, $bookingProduct) + public function saveEventTickets($data, $bookingProduct): void { + Event::dispatch('booking_product.booking.event-ticket.save.before', ['data' => $data, 'bookingProduct' => $bookingProduct]); + $previousTicketIds = $bookingProduct->event_tickets()->pluck('id'); if (isset($data['tickets'])) { @@ -54,7 +59,7 @@ class BookingProductEventTicketRepository extends Repository } if (Str::contains($ticketId, 'ticket_')) { - $this->create(array_merge([ + $ticket = $this->create(array_merge([ 'booking_product_id' => $bookingProduct->id, ], $ticketInputs)); } else { @@ -62,13 +67,18 @@ class BookingProductEventTicketRepository extends Repository $previousTicketIds->forget($index); } - $this->update($ticketInputs, $ticketId); + $ticket = $this->update($ticketInputs, $ticketId); } + + $savedTickets[$ticketId]['ticket'] = $ticket; + $savedTickets[$ticketId]['ticketInputs'] = $ticketInputs; } } foreach ($previousTicketIds as $previousTicketId) { $this->delete($previousTicketId); } + + Event::dispatch('booking_product.booking.event-ticket.save.after', ['tickets' => $savedTickets]); } } \ No newline at end of file diff --git a/packages/Webkul/Core/src/Helpers/Laravel5Helper.php b/packages/Webkul/Core/src/Helpers/Laravel5Helper.php index 31d7476ef..e327d76e0 100644 --- a/packages/Webkul/Core/src/Helpers/Laravel5Helper.php +++ b/packages/Webkul/Core/src/Helpers/Laravel5Helper.php @@ -7,8 +7,11 @@ namespace Webkul\Core\Helpers; use Faker\Factory; use Codeception\Module\Laravel5; +use Webkul\BookingProduct\Models\BookingProduct; +use Webkul\BookingProduct\Models\BookingProductEventTicket; use Webkul\Checkout\Models\Cart; use Webkul\Checkout\Models\CartItem; +use Webkul\Customer\Models\Customer; use Webkul\Product\Models\Product; use Webkul\Attribute\Models\Attribute; use Webkul\Checkout\Models\CartAddress; @@ -31,21 +34,19 @@ class Laravel5Helper extends Laravel5 public const SIMPLE_PRODUCT = 1; public const VIRTUAL_PRODUCT = 2; public const DOWNLOADABLE_PRODUCT = 3; + public const BOOKING_EVENT_PRODUCT = 4; /** * Returns the field name of the given attribute in which a value should be saved inside * the 'product_attribute_values' table. Depends on the type. * - * @param string $attribute + * @param string $type * * @return string|null * @part ORM */ public static function getAttributeFieldName(string $type): ?string { - - $attributes = []; - $possibleTypes = [ 'text' => 'text_value', 'select' => 'integer_value', @@ -60,7 +61,7 @@ class Laravel5Helper extends Laravel5 public function prepareCart(array $options = []): array { - $faker = \Faker\Factory::create(); + $faker = Factory::create(); $I = $this; @@ -108,7 +109,7 @@ class Laravel5Helper extends Laravel5 $cartItems = []; - $generatedCartItems = rand(3, 10); + $generatedCartItems = random_int(3, 10); for ($i = 2; $i <= $generatedCartItems; $i++) { $quantity = random_int(1, 10); @@ -178,6 +179,10 @@ class Laravel5Helper extends Laravel5 $I = $this; switch ($productType) { + case self::BOOKING_EVENT_PRODUCT: + $product = $I->haveBookingEventProduct($configs, $productStates); + break; + case self::DOWNLOADABLE_PRODUCT: $product = $I->haveDownloadableProduct($configs, $productStates); break; @@ -205,7 +210,6 @@ class Laravel5Helper extends Laravel5 $productStates = array_merge($productStates, ['simple']); } - /** @var Product $product */ $product = $I->createProduct($configs['productAttributes'] ?? [], $productStates); $I->createAttributeValues($product->id, $configs['attributeValues'] ?? []); @@ -222,7 +226,6 @@ class Laravel5Helper extends Laravel5 $productStates = array_merge($productStates, ['virtual']); } - /** @var Product $product */ $product = $I->createProduct($configs['productAttributes'] ?? [], $productStates); $I->createAttributeValues($product->id, $configs['attributeValues'] ?? []); @@ -239,7 +242,6 @@ class Laravel5Helper extends Laravel5 $productStates = array_merge($productStates, ['downloadable']); } - /** @var Product $product */ $product = $I->createProduct($configs['productAttributes'] ?? [], $productStates); $I->createAttributeValues($product->id, $configs['attributeValues'] ?? []); @@ -249,6 +251,22 @@ class Laravel5Helper extends Laravel5 return $product->refresh(); } + private function haveBookingEventProduct(array $configs = [], array $productStates = []): Product + { + $I = $this; + if (! in_array('booking', $productStates)) { + $productStates = array_merge($productStates, ['booking']); + } + + $product = $I->createProduct($configs['productAttributes'] ?? [], $productStates); + + $I->createAttributeValues($product->id, $configs['attributeValues'] ?? []); + + $I->createBookingEventProduct($product->id); + + return $product->refresh(); + } + private function createProduct(array $attributes = [], array $states = []): Product { return factory(Product::class)->states($states)->create($attributes); @@ -275,6 +293,18 @@ class Laravel5Helper extends Laravel5 ]); } + private function createBookingEventProduct(int $productId): void + { + $I = $this; + $bookingProduct = $I->have(BookingProduct::class, [ + 'product_id' => $productId, + ]); + + $I->have(BookingProductEventTicket::class, [ + 'booking_product_id' => $bookingProduct->id, + ]); + } + private function createAttributeValues(int $productId, array $attributeValues = []): void { $I = $this; @@ -295,7 +325,7 @@ class Laravel5Helper extends Laravel5 } - /** @var array $defaultAttributeValues + /** * Some defaults that should apply to all generated products. * By defaults products will be generated as saleable. * If you do not want this, this defaults can be overriden by $attributeValues. @@ -314,7 +344,7 @@ class Laravel5Helper extends Laravel5 'special_price' => null, 'price' => $faker->randomFloat(2, 1, 1000), 'weight' => '1.00', // necessary for shipping - 'brand' => AttributeOption::firstWhere('attribute_id', $brand->id)->id, + 'brand' => AttributeOption::query()->firstWhere('attribute_id', $brand->id)->id, ]; $attributeValues = array_merge($defaultAttributeValues, $attributeValues); diff --git a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php index 2e9109127..b33721b83 100755 --- a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php @@ -156,7 +156,7 @@ class CustomerController extends Controller $orders = $customerRepository->all_orders->whereIn('status', ['pending', 'processing'])->first(); if ($orders) { - session()->flash('error', trans('admin::app.response.order-pending')); + session()->flash('error', trans('admin::app.response.order-pending', ['name' => 'Customer'])); return redirect()->route($this->_config['redirect']); } else { diff --git a/packages/Webkul/Customer/src/Notifications/CustomerUpdatePassword.php b/packages/Webkul/Customer/src/Notifications/CustomerUpdatePassword.php index c12f36e97..28ce81693 100644 --- a/packages/Webkul/Customer/src/Notifications/CustomerUpdatePassword.php +++ b/packages/Webkul/Customer/src/Notifications/CustomerUpdatePassword.php @@ -11,16 +11,16 @@ class CustomerUpdatePassword extends Mailable use Queueable, SerializesModels; /** - * The admin instance. + * The customer instance. * - * @var \Webkul\User\Contracts\Admin $admin + * @var \Webkul\Customer\Models\Customer $customer */ public $customer; /** * Create a new message instance. * - * @param \Webkul\User\Contracts\Admin $admin + * @param \Webkul\Customer\Models\Customer $customer * @return void */ public function __construct($customer) diff --git a/packages/Webkul/Customer/src/Repositories/CustomerRepository.php b/packages/Webkul/Customer/src/Repositories/CustomerRepository.php index 1dc4c9ea5..1e853476a 100755 --- a/packages/Webkul/Customer/src/Repositories/CustomerRepository.php +++ b/packages/Webkul/Customer/src/Repositories/CustomerRepository.php @@ -16,4 +16,36 @@ class CustomerRepository extends Repository { return 'Webkul\Customer\Contracts\Customer'; } + + /** + * Check if customer has order pending or processing. + * + * @param Webkul\Customer\Models\Customer + * @return boolean + */ + public function checkIfCustomerHasOrderPendingOrProcessing($customer) + { + return $customer->all_orders->pluck('status')->contains(function ($val) { + return $val === 'pending' || $val === 'processing'; + }); + } + + /** + * Check if bulk customers, if they have order pending or processing. + * + * @param array + * @return boolean + */ + public function checkBulkCustomerIfTheyHaveOrderPendingOrProcessing($customerIds) + { + foreach ($customerIds as $customerId) { + $customer = $this->findorFail($customerId); + + if ($this->checkIfCustomerHasOrderPendingOrProcessing($customer)) { + return true; + } + } + + return false; + } } \ No newline at end of file diff --git a/packages/Webkul/Product/src/Database/Factories/ProductFactory.php b/packages/Webkul/Product/src/Database/Factories/ProductFactory.php index e07b3169e..d0f4240b8 100644 --- a/packages/Webkul/Product/src/Database/Factories/ProductFactory.php +++ b/packages/Webkul/Product/src/Database/Factories/ProductFactory.php @@ -6,12 +6,8 @@ use Faker\Generator as Faker; use Webkul\Product\Models\Product; $factory->define(Product::class, function (Faker $faker) { - $now = date("Y-m-d H:i:s"); - return [ 'sku' => $faker->uuid, - 'created_at' => $now, - 'updated_at' => $now, 'attribute_family_id' => 1, ]; }); @@ -26,4 +22,8 @@ $factory->state(Product::class, 'virtual', [ $factory->state(Product::class, 'downloadable', [ 'type' => 'downloadable', +]); + +$factory->state(Product::class, 'booking', [ + 'type' => 'booking', ]); \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Models/Order.php b/packages/Webkul/Sales/src/Models/Order.php index 32df169f6..8f90a3b55 100755 --- a/packages/Webkul/Sales/src/Models/Order.php +++ b/packages/Webkul/Sales/src/Models/Order.php @@ -277,6 +277,12 @@ class Order extends Model implements OrderContract return false; } + foreach ($this->invoices as $item) { + if ($item->state == "pending" || $item->state == "overdue") { + return false; + } + } + foreach ($this->items as $item) { if ($item->qty_to_refund > 0) { return true; diff --git a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php index 8f4f605e6..70a3882ca 100755 --- a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php +++ b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php @@ -97,7 +97,7 @@ class InvoiceRepository extends Repository $invoice = $this->model->create([ 'order_id' => $order->id, 'total_qty' => $totalQty, - 'state' => 'paid', + 'state' => 'pending', 'base_currency_code' => $order->base_currency_code, 'channel_currency_code' => $order->channel_currency_code, 'order_currency_code' => $order->order_currency_code, @@ -106,7 +106,7 @@ class InvoiceRepository extends Repository foreach ($data['invoice']['items'] as $itemId => $qty) { if (! $qty) { - continue; + continue; } $orderItem = $this->orderItemRepository->find($itemId); @@ -192,11 +192,8 @@ class InvoiceRepository extends Repository } $this->collectTotals($invoice); - $this->orderRepository->collectTotals($order); - $this->orderRepository->updateOrderStatus($order); - Event::dispatch('sales.invoice.save.after', $invoice); } catch (\Exception $e) { DB::rollBack(); @@ -256,4 +253,16 @@ class InvoiceRepository extends Repository return $invoice; } + + /** + * @param \Webkul\Sales\Contracts\Invoice $invoice + * @return void + */ + public function updateInvoiceState($invoice, $status) + { + $invoice->state = $status; + $invoice->save(); + + return true; + } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php b/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php index 6867c0b9f..c00754dda 100644 --- a/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php @@ -91,6 +91,13 @@ : '{{ __('velocity::app.shop.general.no') }}'" > @break; + @case('file') + + + + + __ + @break; @default @break; diff --git a/packages/Webkul/Shop/src/Resources/views/products/view/grouped-products.blade.php b/packages/Webkul/Shop/src/Resources/views/products/view/grouped-products.blade.php index e6c2259ea..1f2b36dcc 100644 --- a/packages/Webkul/Shop/src/Resources/views/products/view/grouped-products.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/products/view/grouped-products.blade.php @@ -10,22 +10,24 @@ {{ __('shop::app.products.qty') }} @foreach ($product->grouped_products as $groupedProduct) -
  • - - {{ $groupedProduct->associated_product->name }} + @if($groupedProduct->associated_product->getTypeInstance()->isSaleable()) +
  • + + {{ $groupedProduct->associated_product->name }} - @include ('shop::products.price', ['product' => $groupedProduct->associated_product]) - + @include ('shop::products.price', ['product' => $groupedProduct->associated_product]) + - - - - -
  • + + + + + + @endif @endforeach
    diff --git a/packages/Webkul/Ui/src/Resources/views/datagrid/table.blade.php b/packages/Webkul/Ui/src/Resources/views/datagrid/table.blade.php index 845658344..b1875d9a9 100644 --- a/packages/Webkul/Ui/src/Resources/views/datagrid/table.blade.php +++ b/packages/Webkul/Ui/src/Resources/views/datagrid/table.blade.php @@ -8,22 +8,9 @@ @push('scripts')