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/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')
|