From 4f8f47009571a018d7d01d97662618387f072c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lemme=20Velle=C3=B5u?= Date: Thu, 22 Aug 2019 18:24:30 +0300 Subject: [PATCH 01/88] added configurable order numbers --- .../Admin/src/DataGrids/OrderDataGrid.php | 11 +++++- .../Admin/src/Resources/lang/en/app.php | 11 +++++- .../views/sales/orders/view.blade.php | 2 +- packages/Webkul/Sales/src/Config/system.php | 39 +++++++++++++++++++ .../src/Providers/SalesServiceProvider.php | 3 ++ .../src/Repositories/OrderRepository.php | 18 ++++++++- .../Shop/src/DataGrids/OrderDataGrid.php | 6 +-- .../views/checkout/success.blade.php | 2 +- 8 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 packages/Webkul/Sales/src/Config/system.php diff --git a/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php index 8578ecf3a..8211dc00f 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php @@ -28,7 +28,7 @@ class OrderDataGrid extends DataGrid $leftJoin->on('order_address_billing.order_id', '=', 'orders.id') ->where('order_address_billing.address_type', 'billing'); }) - ->addSelect('orders.id', 'orders.base_sub_total', 'orders.base_grand_total', 'orders.created_at', 'channel_name', 'status') + ->addSelect('orders.id','orders.increment_id', 'orders.base_sub_total', 'orders.base_grand_total', 'orders.created_at', 'channel_name', 'status') ->addSelect(DB::raw('CONCAT(order_address_billing.first_name, " ", order_address_billing.last_name) as billed_to')) ->addSelect(DB::raw('CONCAT(order_address_shipping.first_name, " ", order_address_shipping.last_name) as shipped_to')); @@ -50,7 +50,14 @@ class OrderDataGrid extends DataGrid 'sortable' => true, 'filterable' => true ]); - + $this->addColumn([ + 'index' => 'increment_id', + 'label' => trans('admin::app.datagrid.order_number'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true + ]); $this->addColumn([ 'index' => 'base_sub_total', 'label' => trans('admin::app.datagrid.sub-total'), diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index f37cd3a71..3e8464b4d 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -165,7 +165,8 @@ return [ 'ends-till' => 'Ends Till', 'per-cust' => 'Per Customer', 'usage-throttle' => 'Usage Times', - 'for-guest' => 'For Guest' + 'for-guest' => 'For Guest', + 'order_number' => 'Order Number' ], 'account' => [ @@ -1096,7 +1097,13 @@ return [ 'logo-image' => 'Logo Image', 'credit-max' => 'Customer Credit Max', 'credit-max-value' => 'Credit Max Value', - 'use-credit-max' => 'Use Credit Max' + 'use-credit-max' => 'Use Credit Max', + 'invoice-settings' => 'Invoice Settings', + 'invoiceNumber' => 'Invoice Number Settings', + 'invoice number prefix' => 'Invoice Number Prefix', + 'invoice number length' => 'Invoice Number Length', + 'invoice number suffix' => 'Invoice Number Suffix', + ] ] ]; 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 4fb15debd..a14f756ff 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 @@ -14,7 +14,7 @@

- {{ __('admin::app.sales.orders.view-title', ['order_id' => $order->id]) }} + {{ __('admin::app.sales.orders.view-title', ['order_id' => $order->increment_id]) }}

diff --git a/packages/Webkul/Sales/src/Config/system.php b/packages/Webkul/Sales/src/Config/system.php new file mode 100644 index 000000000..b811a8f6d --- /dev/null +++ b/packages/Webkul/Sales/src/Config/system.php @@ -0,0 +1,39 @@ + 'sales.invoiceSettings', + 'name' => 'admin::app.admin.system.invoice-settings', + 'sort' => 3, + ],[ + 'key' => 'sales.invoiceSettings.invoice_number', + 'name' => 'admin::app.admin.system.invoiceNumber', + 'sort' => 0, + 'fields' => [ + [ + 'name' => 'invoice_number_prefix', + 'title' => 'admin::app.admin.system.invoice number prefix', + 'type' => 'text', + 'validation' => false, + 'channel_based' => true, + 'locale_based' => true + ], + [ + 'name' => 'invoice_number_length', + 'title' => 'admin::app.admin.system.invoice number length', + 'type' => 'text', + 'validation' => false, + 'channel_based' => true, + 'locale_based' => true + ], + [ + 'name' => 'invoice_number_suffix', + 'title' => 'admin::app.admin.system.invoice number suffix', + 'type' => 'text', + 'validation' => false, + 'channel_based' => true, + 'locale_based' => true + ], + ] + ] +]; \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Providers/SalesServiceProvider.php b/packages/Webkul/Sales/src/Providers/SalesServiceProvider.php index 19375e276..ea8dddc5d 100755 --- a/packages/Webkul/Sales/src/Providers/SalesServiceProvider.php +++ b/packages/Webkul/Sales/src/Providers/SalesServiceProvider.php @@ -20,5 +20,8 @@ class SalesServiceProvider extends ServiceProvider */ public function register() { + $this->mergeConfigFrom( + dirname(__DIR__) . '/Config/system.php', 'core' + ); } } \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Repositories/OrderRepository.php b/packages/Webkul/Sales/src/Repositories/OrderRepository.php index 1d8b87e4e..a115d4dc6 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderRepository.php @@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Model; use Webkul\Core\Eloquent\Repository; use Webkul\Sales\Contracts\Order; use Webkul\Sales\Repositories\OrderItemRepository; +use Webkul\Core\Models\CoreConfig; /** * Order Reposotory @@ -143,14 +144,27 @@ class OrderRepository extends Repository /** * @inheritDoc + * @return int|string */ public function generateIncrementId() { - $lastOrder = $this->model->orderBy('id', 'desc')->limit(1)->first(); + $config = new CoreConfig(); + $invoiceNumberPrefix = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_prefix")->first()->value; + $invoiceNumberLength = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_length")->first()->value; + $invoiceNumberSuffix = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_suffix")->first()->value; + $lastOrder = $this->model->orderBy('id', 'desc')->limit(1)->first(); $lastId = $lastOrder ? $lastOrder->id : 0; - return $lastId + 1; + if($invoiceNumberLength && ( $invoiceNumberPrefix || $invoiceNumberSuffix) ){ + + $invoiceNumber = $invoiceNumberPrefix . sprintf("%0{$invoiceNumberLength}d", $lastId + 1) . $invoiceNumberSuffix; + } + else{ + $invoiceNumber = $lastId + 1; + } + + return $invoiceNumber; } /** diff --git a/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php b/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php index 15288f439..faf541cca 100644 --- a/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php +++ b/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php @@ -20,7 +20,7 @@ class OrderDataGrid extends DataGrid public function prepareQueryBuilder() { $queryBuilder = DB::table('orders as order') - ->addSelect('order.id', 'order.status', 'order.created_at', 'order.grand_total', 'order.order_currency_code') + ->addSelect('order.id','order.increment_id', 'order.status', 'order.created_at', 'order.grand_total', 'order.order_currency_code') ->where('customer_id', auth()->guard('customer')->user()->id); $this->setQueryBuilder($queryBuilder); @@ -29,9 +29,9 @@ class OrderDataGrid extends DataGrid public function addColumns() { $this->addColumn([ - 'index' => 'id', + 'index' => 'increment_id', 'label' => trans('shop::app.customer.account.order.index.order_id'), - 'type' => 'number', + 'type' => 'text', 'searchable' => false, 'sortable' => true, 'filterable' => true diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/success.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/success.blade.php index 0608ef3dc..e5d972da5 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/success.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/success.blade.php @@ -9,7 +9,7 @@

{{ __('shop::app.checkout.success.thanks') }}

-

{{ __('shop::app.checkout.success.order-id-info', ['order_id' => $order->id]) }}

+

{{ __('shop::app.checkout.success.order-id-info', ['order_id' => $order->increment_id]) }}

{{ __('shop::app.checkout.success.info') }}

From 97817c3e5dc183a026cb1284041860b1e82c47cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lemme=20Velle=C3=B5u?= Date: Fri, 23 Aug 2019 09:34:12 +0300 Subject: [PATCH 02/88] added defaults to order number config --- .../Webkul/Sales/src/Repositories/OrderRepository.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Sales/src/Repositories/OrderRepository.php b/packages/Webkul/Sales/src/Repositories/OrderRepository.php index a115d4dc6..46ab1a14a 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderRepository.php @@ -149,9 +149,12 @@ class OrderRepository extends Repository public function generateIncrementId() { $config = new CoreConfig(); - $invoiceNumberPrefix = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_prefix")->first()->value; - $invoiceNumberLength = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_length")->first()->value; - $invoiceNumberSuffix = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_suffix")->first()->value; + $invoiceNumberPrefix = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_prefix")->first() + ? $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_prefix")->first()->value : false; + $invoiceNumberLength = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_length")->first() + ? $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_length")->first()->value : false; + $invoiceNumberSuffix = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_suffix")->first() + ? $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_suffix")->value: false; $lastOrder = $this->model->orderBy('id', 'desc')->limit(1)->first(); $lastId = $lastOrder ? $lastOrder->id : 0; From ed81e13d972ed63b82ada1b34606b2cbeb7dbb8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lemme=20Velle=C3=B5u?= Date: Fri, 23 Aug 2019 10:10:40 +0300 Subject: [PATCH 03/88] fixed suffix select --- packages/Webkul/Sales/src/Repositories/OrderRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Sales/src/Repositories/OrderRepository.php b/packages/Webkul/Sales/src/Repositories/OrderRepository.php index 46ab1a14a..e03a87ae4 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderRepository.php @@ -154,7 +154,7 @@ class OrderRepository extends Repository $invoiceNumberLength = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_length")->first() ? $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_length")->first()->value : false; $invoiceNumberSuffix = $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_suffix")->first() - ? $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_suffix")->value: false; + ? $config->where('code','=',"sales.invoiceSettings.invoice_number.invoice_number_suffix")->first()->value: false; $lastOrder = $this->model->orderBy('id', 'desc')->limit(1)->first(); $lastId = $lastOrder ? $lastOrder->id : 0; From aab8bd147904567118cc63a911870d1e3f97ac54 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Wed, 11 Sep 2019 17:34:11 +0530 Subject: [PATCH 04/88] order number --- .../Admin/src/DataGrids/OrderDataGrid.php | 11 +--- .../Mail/NewInventorySourceNotification.php | 2 +- .../Admin/src/Mail/NewInvoiceNotification.php | 2 +- .../src/Mail/NewShipmentNotification.php | 2 +- .../views/sales/invoices/create.blade.php | 2 +- .../views/sales/invoices/view.blade.php | 2 +- .../views/sales/orders/view.blade.php | 6 +-- .../views/sales/shipments/create.blade.php | 2 +- .../views/sales/shipments/view.blade.php | 54 +++++++++---------- .../Webkul/Shop/src/Resources/lang/en/app.php | 3 +- .../customers/account/orders/view.blade.php | 4 +- .../emails/sales/new-admin-order.blade.php | 2 +- .../new-inventorysource-shipment.blade.php | 4 +- .../views/emails/sales/new-invoice.blade.php | 4 +- .../views/emails/sales/new-order.blade.php | 2 +- .../views/emails/sales/new-shipment.blade.php | 4 +- .../views/emails/sales/order-cancel.blade.php | 2 +- 17 files changed, 51 insertions(+), 57 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php index 0a68c7d80..62433d785 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php @@ -43,21 +43,14 @@ class OrderDataGrid extends DataGrid public function addColumns() { $this->addColumn([ - 'index' => 'id', + 'index' => 'increment_id', 'label' => trans('admin::app.datagrid.id'), 'type' => 'number', 'searchable' => false, 'sortable' => true, 'filterable' => true ]); - $this->addColumn([ - 'index' => 'increment_id', - 'label' => trans('admin::app.datagrid.order_number'), - 'type' => 'string', - 'searchable' => true, - 'sortable' => true, - 'filterable' => true - ]); + $this->addColumn([ 'index' => 'base_sub_total', 'label' => trans('admin::app.datagrid.sub-total'), diff --git a/packages/Webkul/Admin/src/Mail/NewInventorySourceNotification.php b/packages/Webkul/Admin/src/Mail/NewInventorySourceNotification.php index 8ef0a5f56..4ed66f352 100644 --- a/packages/Webkul/Admin/src/Mail/NewInventorySourceNotification.php +++ b/packages/Webkul/Admin/src/Mail/NewInventorySourceNotification.php @@ -46,7 +46,7 @@ class NewInventorySourceNotification extends Mailable $inventory = $this->shipment->inventory_source; return $this->to($inventory->contact_email, $inventory->name) - ->subject(trans('shop::app.mail.shipment.subject', ['order_id' => $order->id])) + ->subject(trans('shop::app.mail.shipment.subject', ['order_id' => $order->increment_id])) ->view('shop::emails.sales.new-inventorysource-shipment'); } } diff --git a/packages/Webkul/Admin/src/Mail/NewInvoiceNotification.php b/packages/Webkul/Admin/src/Mail/NewInvoiceNotification.php index f74f331b7..a816d0d05 100755 --- a/packages/Webkul/Admin/src/Mail/NewInvoiceNotification.php +++ b/packages/Webkul/Admin/src/Mail/NewInvoiceNotification.php @@ -46,7 +46,7 @@ class NewInvoiceNotification extends Mailable return $this->to($order->customer_email, $order->customer_full_name) ->from(env('SHOP_MAIL_FROM')) - ->subject(trans('shop::app.mail.invoice.subject', ['order_id' => $order->id])) + ->subject(trans('shop::app.mail.invoice.subject', ['order_id' => $order->increment_id])) ->view('shop::emails.sales.new-invoice'); } } diff --git a/packages/Webkul/Admin/src/Mail/NewShipmentNotification.php b/packages/Webkul/Admin/src/Mail/NewShipmentNotification.php index ae51be5d8..1a90aa5f9 100755 --- a/packages/Webkul/Admin/src/Mail/NewShipmentNotification.php +++ b/packages/Webkul/Admin/src/Mail/NewShipmentNotification.php @@ -46,7 +46,7 @@ class NewShipmentNotification extends Mailable return $this->to($order->customer_email, $order->customer_full_name) ->from(env('SHOP_MAIL_FROM')) - ->subject(trans('shop::app.mail.shipment.subject', ['order_id' => $order->id])) + ->subject(trans('shop::app.mail.shipment.subject', ['order_id' => $order->increment_id])) ->view('shop::emails.sales.new-shipment'); } } diff --git a/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php index 1a9eb9c87..1b3d98dc9 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php @@ -43,7 +43,7 @@ - #{{ $order->id }} + #{{ $order->increment_id }}
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 d02d3b38c..bde2c0e74 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 @@ -43,7 +43,7 @@ - #{{ $order->id }} + #{{ $order->increment_id }} 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 a14f756ff..910177260 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 @@ -1,7 +1,7 @@ @extends('admin::layouts.master') @section('page_title') - {{ __('admin::app.sales.orders.view-title', ['order_id' => $order->id]) }} + {{ __('admin::app.sales.orders.view-title', ['order_id' => $order->increment_id]) }} @stop @section('content-wrapper') @@ -375,7 +375,7 @@ #{{ $invoice->id }} {{ $invoice->created_at }} - #{{ $invoice->order->id }} + #{{ $invoice->order->increment_id }} {{ $invoice->address->name }} {{ $invoice->status_label }} {{ core()->formatBasePrice($invoice->base_grand_total) }} @@ -419,7 +419,7 @@ #{{ $shipment->id }} {{ $shipment->created_at }} - #{{ $shipment->order->id }} + #{{ $shipment->order->increment_id }} {{ $shipment->order->created_at }} {{ $shipment->address->name }} {{ $shipment->total_qty }} diff --git a/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php index bdd82af4f..6f4fdc0cd 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php @@ -43,7 +43,7 @@ - #{{ $order->id }} + #{{ $order->increment_id }} diff --git a/packages/Webkul/Admin/src/Resources/views/sales/shipments/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/shipments/view.blade.php index 825f8221d..22fb78e3a 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/shipments/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/shipments/view.blade.php @@ -34,21 +34,21 @@
- + {{ __('admin::app.sales.shipments.order-id') }} - #{{ $order->id }} + #{{ $order->increment_id }}
- + {{ __('admin::app.sales.orders.order-date') }} - + {{ $order->created_at }}
@@ -57,7 +57,7 @@ {{ __('admin::app.sales.orders.order-status') }} - + {{ $order->status_label }} @@ -67,7 +67,7 @@ {{ __('admin::app.sales.orders.channel') }} - + {{ $order->channel_name }} @@ -82,21 +82,21 @@
- + {{ __('admin::app.sales.orders.customer-name') }} - + {{ $shipment->address->name }}
- + {{ __('admin::app.sales.orders.email') }} - + {{ $shipment->address->email }}
@@ -117,7 +117,7 @@
@include ('admin::sales.address', ['address' => $order->billing_address]) - +
@@ -128,13 +128,13 @@
- + @include ('admin::sales.address', ['address' => $order->shipping_address])
@endif - + @@ -148,21 +148,21 @@
- + {{ __('admin::app.sales.orders.payment-method') }} - + {{ core()->getConfigData('sales.paymentmethods.' . $order->payment->method . '.title') }}
- + {{ __('admin::app.sales.orders.currency') }} - + {{ $order->order_currency_code }}
@@ -176,53 +176,53 @@
- + {{ __('admin::app.sales.orders.shipping-method') }} - + {{ $order->shipping_title }}
- + {{ __('admin::app.sales.orders.shipping-price') }} - + {{ core()->formatBasePrice($order->base_shipping_amount) }}
@if ($shipment->inventory_source)
- + {{ __('admin::app.sales.shipments.inventory-source') }} - + {{ $shipment->inventory_source->name }}
@endif
- + {{ __('admin::app.sales.shipments.carrier-title') }} - + {{ $shipment->carrier_title }}
- + {{ __('admin::app.sales.shipments.tracking-number') }} - + {{ $shipment->track_number }}
diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index 739f89a5d..d496a6826 100755 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -238,7 +238,8 @@ return [ 'order_id' => 'Order ID', 'date' => 'Date', 'status' => 'Status', - 'total' => 'Total' + 'total' => 'Total', + 'order_number' => 'Order Number' ], 'view' => [ diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php index 8fd17453b..afe5dba27 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php @@ -1,7 +1,7 @@ @extends('shop::layouts.master') @section('page_title') - {{ __('shop::app.customer.account.order.view.page-tile', ['order_id' => $order->id]) }} + {{ __('shop::app.customer.account.order.view.page-tile', ['order_id' => $order->increment_id]) }} @endsection @section('content-wrapper') @@ -14,7 +14,7 @@ diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php index 778954ade..1971e89f9 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php @@ -17,7 +17,7 @@

{!! __('shop::app.mail.order.greeting-admin', [ - 'order_id' => '#' . $order->id . '', + 'order_id' => '#' . $order->increment_id . '', 'created_at' => $order->created_at ]) !!} diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php index 4007ab277..42b326f9a 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php @@ -11,7 +11,7 @@

- {{ __('shop::app.mail.shipment.inventory-heading', ['order_id' => $order->id, 'shipment_id' => $shipment->id]) }} + {{ __('shop::app.mail.shipment.inventory-heading', ['order_id' => $order->increment_id, 'shipment_id' => $shipment->id]) }}

@@ -20,7 +20,7 @@

{!! __('shop::app.mail.shipment.greeting', [ - 'order_id' => '#' . $order->id . '', + 'order_id' => '#' . $order->increment_id . '', 'created_at' => $order->created_at ]) !!} diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php index f259f68de..478cb6abe 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php @@ -10,7 +10,7 @@

- {{ __('shop::app.mail.invoice.heading', ['order_id' => $order->id, 'invoice_id' => $invoice->id]) }} + {{ __('shop::app.mail.invoice.heading', ['order_id' => $order->increment_id, 'invoice_id' => $invoice->id]) }}

@@ -19,7 +19,7 @@

{!! __('shop::app.mail.order.greeting', [ - 'order_id' => '#' . $order->id . '', + 'order_id' => '#' . $order->increment_id . '', 'created_at' => $order->created_at ]) !!} diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php index 5a7c13011..2c4a72a4e 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php @@ -17,7 +17,7 @@

{!! __('shop::app.mail.order.greeting', [ - 'order_id' => '#' . $order->id . '', + 'order_id' => '#' . $order->increment_id . '', 'created_at' => $order->created_at ]) !!} diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php index 2aa41d4a5..9ec9f61ae 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php @@ -10,7 +10,7 @@

- {{ __('shop::app.mail.shipment.heading', ['order_id' => $order->id, 'shipment_id' => $shipment->id]) }} + {{ __('shop::app.mail.shipment.heading', ['order_id' => $order->increment_id, 'shipment_id' => $shipment->id]) }}

@@ -19,7 +19,7 @@

{!! __('shop::app.mail.order.greeting', [ - 'order_id' => '#' . $order->id . '', + 'order_id' => '#' . $order->increment_id . '', 'created_at' => $order->created_at ]) !!} diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php index 2e4aa2251..ecc4d55fd 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php @@ -17,7 +17,7 @@

{!! __('shop::app.mail.order.cancel.greeting', [ - 'order_id' => '#' . $order->id . '', + 'order_id' => '#' . $order->increment_id . '', 'created_at' => $order->created_at ]) !!} From d9a0c6078ea8b276a4a2d8341c9833c29ac0dca7 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Wed, 11 Sep 2019 17:47:52 +0530 Subject: [PATCH 05/88] order number --- .../Admin/src/Resources/views/sales/invoices/create.blade.php | 2 +- .../src/Resources/views/emails/sales/order-cancel.blade.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php index 1b3d98dc9..920fda0a9 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/invoices/create.blade.php @@ -43,7 +43,7 @@ - #{{ $order->increment_id }} + #{{ $order->increment_id }}

diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php index ecc4d55fd..f75a0d49e 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php @@ -17,7 +17,7 @@

{!! __('shop::app.mail.order.cancel.greeting', [ - 'order_id' => '#' . $order->increment_id . '', + 'order_id' => '#' . $order->increment_id . '', 'created_at' => $order->created_at ]) !!} From 6c8280237181944d33863ada50a14f352455fdc2 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Wed, 11 Sep 2019 20:10:59 +0530 Subject: [PATCH 06/88] Fixed issues #1444 & #1434 --- .../Admin/src/Resources/views/sales/invoices/view.blade.php | 2 +- .../Admin/src/Resources/views/sales/orders/view.blade.php | 2 +- .../Shop/src/Resources/views/checkout/total/summary.blade.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) 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 d02d3b38c..d7836493b 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 @@ -280,7 +280,7 @@ {{ __('admin::app.sales.orders.discount') }} - - -{{ core()->formatBasePrice($invoice->base_discount_amount) }} + {{ core()->formatBasePrice($invoice->base_discount_amount) }} @endif 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 4fb15debd..00d46c003 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 @@ -312,7 +312,7 @@ {{ __('admin::app.sales.orders.discount') }} - - -{{ core()->formatBasePrice($order->base_discount_amount) }} + {{ core()->formatBasePrice($order->base_discount_amount) }} @endif diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php index 6c5e903e9..bbab890a3 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php @@ -25,13 +25,13 @@ @endif -

discount_amount && $cart->discount_amount > 0) style="display: block;" @else style="display: none;" @endif> +
base_discount_amount && $cart->base_discount_amount > 0) style="display: block;" @else style="display: none;" @endif>
From d5bbc0230dae22c4f9e6224debd3ae7efc189de2 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Wed, 11 Sep 2019 20:15:41 +0530 Subject: [PATCH 07/88] Fixed issue #1288 --- .../Webkul/Discount/src/Helpers/Cart/ConvertXToProductId.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/Webkul/Discount/src/Helpers/Cart/ConvertXToProductId.php b/packages/Webkul/Discount/src/Helpers/Cart/ConvertXToProductId.php index 9f596b845..7aec6ea26 100644 --- a/packages/Webkul/Discount/src/Helpers/Cart/ConvertXToProductId.php +++ b/packages/Webkul/Discount/src/Helpers/Cart/ConvertXToProductId.php @@ -126,7 +126,7 @@ class ConvertXToProductId foreach ($attributeOptions as $attributeOption) { $selectedOptions = $attributeOption->value; - if ($attributeOption->type == 'select' || $attributeOption->type == 'multiselect') { + if (isset($attributeOption->type) && ($attributeOption->type == 'select' || $attributeOption->type == 'multiselect')) { $attribute = $this->attribute->findWhere([ 'code' => $attributeOption->attribute ]); @@ -164,6 +164,8 @@ class ConvertXToProductId $selectedAttributeValues = collect(); + $foundProducts = collect(); + if ($attributeOption->attribute == 'sku') { $testValue = $attributeOption->value; $testCondition = $attributeOption->condition; From 90a965a537bebdaa8ac376125087d868b317479a Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Thu, 12 Sep 2019 11:51:11 +0530 Subject: [PATCH 08/88] Command line installer fix --- app/Console/Commands/BagistoInstall.php | 43 ++++++++++++++----------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/app/Console/Commands/BagistoInstall.php b/app/Console/Commands/BagistoInstall.php index 72b27b5d8..14369cac6 100644 --- a/app/Console/Commands/BagistoInstall.php +++ b/app/Console/Commands/BagistoInstall.php @@ -62,41 +62,41 @@ class BagistoInstall extends Command $APP_URL = $this->ask('[KEY = "APP_URL"] Please enter application URL (Optional, default = localhost)?'); $this->comment($APP_URL ?? 'localhost'); - $this->changeEnvironmentVariable('APP_URL', $APP_URL); + $this->changeEnvironmentVariable('APP_URL', $APP_URL ?? 'http://localhost'); $DB_CONNECTION = $this->ask('[KEY = "DB_CONNECTION"] Enter database connection (Optional, default = mysql)?'); $this->comment($DB_CONNECTION ?? 'mysql'); - $this->changeEnvironmentVariable('DB_CONNECTION', $DB_CONNECTION); + $this->changeEnvironmentVariable('DB_CONNECTION', $DB_CONNECTION ?? 'mysql'); $DB_HOST = $this->ask('[KEY = "DB_HOST"] Enter database host (Optional, default = 127.0.0.1)?'); $this->comment($DB_HOST ?? '127.0.0.1'); - $this->changeEnvironmentVariable('DB_HOST', $DB_HOST); + $this->changeEnvironmentVariable('DB_HOST', $DB_HOST ?? '127.0.0.1'); $DB_PORT = $this->ask('[KEY = "DB_PORT"] Enter database port (Optional, default = 3306)?'); $this->comment($DB_PORT ?? '3306'); - $this->changeEnvironmentVariable('DB_PORT', $DB_PORT); + $this->changeEnvironmentVariable('DB_PORT', $DB_PORT ?? '3306'); $DB_DATABASE = null; - while(! isset($DB_DATABASE)) { + while (!isset($DB_DATABASE)) { $DB_DATABASE = $this->ask('[KEY = "DB_DATABASE"] Enter name of database?'); $this->comment($DB_DATABASE ?? 'forge'); } - $this->changeEnvironmentVariable('DB_DATABASE', $DB_DATABASE); + $this->changeEnvironmentVariable('DB_DATABASE', $DB_DATABASE ?? 'forge'); $DB_USERNAME = null; - while(! isset($DB_USERNAME)) { + while (!isset($DB_USERNAME)) { $DB_USERNAME = $this->ask('Enter database username?'); $this->comment($DB_USERNAME ?? 'root'); } - $this->changeEnvironmentVariable('[KEY = "DB_USERNAME"] DB_USERNAME', $DB_USERNAME); + $this->changeEnvironmentVariable('DB_USERNAME', $DB_USERNAME ?? root); $DB_PASSWORD = $this->ask('Please enter database password?'); $this->comment($DB_PASSWORD); - $this->changeEnvironmentVariable('[KEY = "DB_PASSWORD"] DB_PASSWORD', $DB_PASSWORD); + $this->changeEnvironmentVariable('DB_PASSWORD', $DB_PASSWORD); $this->info('We are done with application and database params, good job!'); @@ -116,11 +116,11 @@ class BagistoInstall extends Command $MAIL_USERNAME = $this->ask('[KEY = "MAIL_USERNAME"] Enter MAIL_USERNAME?'); $this->comment($MAIL_USERNAME ?? null); - $this->changeEnvironmentVariable('MAIL_USERNAME', $MAIL_USERNAME); + $this->changeEnvironmentVariable('MAIL_USERNAME', $MAIL_USERNAME ?? null); $MAIL_PASSWORD = $this->ask('[KEY = "MAIL_PASSWORD"] Enter MAIL_PASSWORD?'); $this->comment($MAIL_PASSWORD ?? null); - $this->changeEnvironmentVariable('MAIL_PASSWORD', $MAIL_PASSWORD); + $this->changeEnvironmentVariable('MAIL_PASSWORD', $MAIL_PASSWORD ?? null); $MAIL_ENCRYPTION = $this->ask('[KEY = "MAIL_ENCRYPTION"] Enter MAIL_ENCRYPTION (default = tls)?'); $this->comment($MAIL_ENCRYPTION ?? 'tls'); @@ -128,18 +128,18 @@ class BagistoInstall extends Command $SHOP_MAIL_FROM = $this->ask('[KEY = "SHOP_MAIL_FROM"] Enter SHOP_MAIL_FROM?'); $this->comment($SHOP_MAIL_FROM ?? null); - $this->changeEnvironmentVariable('SHOP_MAIL_FROM', $SHOP_MAIL_FROM); + $this->changeEnvironmentVariable('SHOP_MAIL_FROM', $SHOP_MAIL_FROM ?? null); $ADMIN_MAIL_TO = $this->ask('[KEY = "ADMIN_MAIL_TO"] Enter ADMIN_MAIL_TO?'); $this->comment($ADMIN_MAIL_TO ?? null); - $this->changeEnvironmentVariable('ADMIN_MAIL_TO', $ADMIN_MAIL_TO); + $this->changeEnvironmentVariable('ADMIN_MAIL_TO', $ADMIN_MAIL_TO ?? null); - $this->info('We are done setting all the configuration in the env file, now we will proceed by running the commands necessary for Bagisto'); - - \Artisan::call('config:cache'); + $this->line('We are done setting all the configuration in the env file, now we will proceed by running the commands necessary for Bagisto'); $this->info('Running migrations...'); + \Artisan::call('key:generate'); + \Artisan::call('migrate'); $this->info('Migration completed.'); @@ -160,13 +160,16 @@ class BagistoInstall extends Command $this->info('Installation completed.'); - $this->info('Please write us: SUPPORT@BAGISTO.COM'); + $this->Line('Please write us: SUPPORT@BAGISTO.COM'); - $this->info('Thank you!!!'); + $this->Line('Thank you!!!'); } public static function changeEnvironmentVariable($key, $value) { + + \Artisan::call('config:cache'); + $path = base_path('.env'); if (file_exists($path)) { @@ -177,5 +180,7 @@ class BagistoInstall extends Command file_get_contents($path) )); } + + \Artisan::call('config:cache'); } -} \ No newline at end of file +} From 7a50802144181be2b021e922239bfe58335e5ece Mon Sep 17 00:00:00 2001 From: prateek srivastava Date: Thu, 12 Sep 2019 14:06:38 +0530 Subject: [PATCH 09/88] issue #1442 fixed --- .../Http/Controllers/CustomerController.php | 26 +++++++++++++ .../Controllers/RegistrationController.php | 10 +++++ .../Customer/src/Mail/RegistrationEmail.php | 38 +++++++++++++++++++ packages/Webkul/Shop/src/Http/routes.php | 6 +++ .../customers/account/profile/index.blade.php | 12 ++++++ .../emails/customer/registration.blade.php | 33 ++++++++++++++++ 6 files changed, 125 insertions(+) create mode 100644 packages/Webkul/Customer/src/Mail/RegistrationEmail.php create mode 100644 packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php diff --git a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php index 14c36e819..30d407510 100755 --- a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php @@ -133,6 +133,32 @@ class CustomerController extends Controller } } + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $id = auth()->guard('customer')->user()->id; + + $customer = $this->customer->findorFail($id); + + try { + $this->customer->delete($id); + + session()->flash('success', trans('admin::app.response.delete-success', ['name' => 'Customer'])); + + return redirect()->route($this->_config['redirect']); + } catch(\Exception $e) { + session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Customer'])); + + return redirect()->route($this->_config['redirect']); + } + } + + /** * Load the view for the customer account panel, showing approved reviews. * diff --git a/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php b/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php index 53c72926f..d0a0e195b 100755 --- a/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php @@ -6,6 +6,7 @@ use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Mail; +use Webkul\Customer\Mail\RegistrationEmail; use Webkul\Customer\Mail\VerificationEmail; use Illuminate\Routing\Controller; use Webkul\Customer\Repositories\CustomerRepository; @@ -97,6 +98,15 @@ class RegistrationController extends Controller session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent')); } } else { + try { + Mail::queue(new RegistrationEmail(request()->all())); + + session()->flash('success', trans('shop::app.customer.signup-form.success-verify')); //customer registered successfully + } catch (\Exception $e) { + session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent')); + } + + session()->flash('success', trans('shop::app.customer.signup-form.success')); } diff --git a/packages/Webkul/Customer/src/Mail/RegistrationEmail.php b/packages/Webkul/Customer/src/Mail/RegistrationEmail.php new file mode 100644 index 000000000..4e59791ee --- /dev/null +++ b/packages/Webkul/Customer/src/Mail/RegistrationEmail.php @@ -0,0 +1,38 @@ +data = $data; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this->to($this->data['email']) + ->from(env('SHOP_MAIL_FROM')) + ->subject('Suucessfully Registered Customer') + ->view('shop::emails.customer.registration')->with('data', $this->data); + } +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/routes.php b/packages/Webkul/Shop/src/Http/routes.php index 0d13a6783..92104e47c 100755 --- a/packages/Webkul/Shop/src/Http/routes.php +++ b/packages/Webkul/Shop/src/Http/routes.php @@ -210,6 +210,12 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function Route::post('profile/edit', 'Webkul\Customer\Http\Controllers\CustomerController@update')->defaults('_config', [ 'redirect' => 'customer.profile.index' ])->name('customer.profile.edit'); + + //Customer Profile Delete Form Store + Route::post('profile/destroy', 'Webkul\Customer\Http\Controllers\CustomerController@destroy')->defaults('_config', [ + 'redirect' => 'customer.profile.index' + ])->name('customer.profile.destroy'); + /* Profile Routes Ends Here */ /* Routes for Addresses */ diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php index c6d8730ba..8bf150254 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/index.blade.php @@ -67,6 +67,18 @@
+ +
+
+
+ @csrf + +
+
+ +
+
+ {!! view_render_event('bagisto.shop.customers.account.profile.view.after', ['customer' => $customer]) !!}
diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php new file mode 100644 index 000000000..e4ffad970 --- /dev/null +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php @@ -0,0 +1,33 @@ +@component('shop::emails.layouts.master') + +
+
+ + + +
+ +
+ Welcome to Bagisto, +
+ +
+ Hi {{ $data['first_name'] }}, + + Welcome and thank you for registering at Bagisto! + + Your account has now been created successfully and you can login using your email address and password credentials. + + Upon logging in, you will be able to access other services including reviewing past orders, printing invoices and editing your account information. + + Thanks, + Bagisto + +
+ +
+ +
+
+ +@endcomponent \ No newline at end of file From 2c928ea25c66e959d074cdfced6f4b895c78991a Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Thu, 12 Sep 2019 15:23:29 +0530 Subject: [PATCH 10/88] Fixed issue #1288 --- .../Discount/src/Http/Controllers/CartRuleController.php | 8 +++++++- packages/Webkul/Shop/src/Resources/assets/js/app.js | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php index b9208aefd..a49f35471 100644 --- a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php +++ b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php @@ -175,7 +175,9 @@ class CartRuleController extends Controller // unset labels unset($data['label']); - $attribute_conditions = json_decode($attribute_conditions); + while (gettype($attribute_conditions) == 'string') { + $attribute_conditions = json_decode($attribute_conditions); + } if (! isset($attribute_conditions) || ! (count($attribute_conditions->categories) || count($attribute_conditions->attributes))) { $data['uses_attribute_conditions'] = 0; @@ -405,6 +407,10 @@ class CartRuleController extends Controller // prepare actions from data for json action $attribute_conditions = json_decode($attribute_conditions); + while (gettype($attribute_conditions) == 'string') { + $attribute_conditions = json_decode($attribute_conditions); + } + if (! isset($attribute_conditions) || ! (count($attribute_conditions->categories) || count($attribute_conditions->attributes))) { $data['uses_attribute_conditions'] = 0; diff --git a/packages/Webkul/Shop/src/Resources/assets/js/app.js b/packages/Webkul/Shop/src/Resources/assets/js/app.js index 6f47555f0..a66ae2286 100755 --- a/packages/Webkul/Shop/src/Resources/assets/js/app.js +++ b/packages/Webkul/Shop/src/Resources/assets/js/app.js @@ -14,7 +14,6 @@ Vue.component("image-slider", require("./components/image-slider.vue")); Vue.component("vue-slider", require("vue-slider-component")); $(document).ready(function () { - const app = new Vue({ el: "#app", From b0891492680ab333f69557e4fd7e3ee15ad1e466 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Thu, 12 Sep 2019 16:21:03 +0530 Subject: [PATCH 11/88] Fixed issue #1428 --- .../src/Resources/views/catalog/categories/create.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php index 374c1efb3..41f0c11b2 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php @@ -20,7 +20,7 @@
From 61da74ee2bcb7b71635272d052a000bfd2cfd064 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Thu, 12 Sep 2019 16:25:51 +0530 Subject: [PATCH 12/88] Issue #1447 --- .../Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php | 9 ++++++++- .../Admin/src/DataGrids/OrderShipmentsDataGrid.php | 2 +- .../src/Resources/views/sales/invoices/pdf.blade.php | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php index ae11bfa55..dd68697ad 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php @@ -19,7 +19,14 @@ class OrderInvoicesDataGrid extends DataGrid public function prepareQueryBuilder() { - $queryBuilder = DB::table('invoices')->select('id', 'order_id', 'state', 'base_grand_total', 'created_at'); + $queryBuilder = DB::table('invoices') + ->leftJoin('orders as ors', 'invoices.order_id', '=', 'ors.id') + ->select('invoices.id as id', 'ors.increment_id as order_id', 'invoices.state as state', 'invoices.base_grand_total as base_grand_total', 'invoices.created_at as created_at'); + + $this->addFilter('id', 'invoices.id'); + $this->addFilter('order_id', 'ors.increment_id'); + $this->addFilter('base_grand_total', 'invoices.base_grand_total'); + $this->addFilter('invoices.created_at', 'invoices.created_at'); $this->setQueryBuilder($queryBuilder); } diff --git a/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php index 55eeb9423..0a82d8706 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php @@ -26,7 +26,7 @@ class OrderShipmentsDataGrid extends DataGrid }) ->leftJoin('orders as ors', 'shipments.order_id', '=', 'ors.id') ->leftJoin('inventory_sources as is', 'shipments.inventory_source_id', '=', 'is.id') - ->select('shipments.id as shipment_id', 'shipments.order_id as shipment_order_id', 'shipments.total_qty as shipment_total_qty', 'is.name as inventory_source_name', 'ors.created_at as order_date', 'shipments.created_at as shipment_created_at') + ->select('shipments.id as shipment_id', 'ors.increment_id as shipment_order_id', 'shipments.total_qty as shipment_total_qty', 'is.name as inventory_source_name', 'ors.created_at as order_date', 'shipments.created_at as shipment_created_at') ->addSelect(DB::raw('CONCAT(order_address_shipping.first_name, " ", order_address_shipping.last_name) as shipped_to')); $this->addFilter('shipment_id', 'shipments.id'); diff --git a/packages/Webkul/Admin/src/Resources/views/sales/invoices/pdf.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/invoices/pdf.blade.php index efed8f233..ab7e1c401 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/invoices/pdf.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/invoices/pdf.blade.php @@ -90,7 +90,7 @@
{{ __('admin::app.sales.invoices.order-id') }} - - #{{ $invoice->order_id }} + #{{ $invoice->order->increment_id }}
From 1ac665067392f5d2488b27e55d6229104e02f2c7 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Thu, 12 Sep 2019 16:53:05 +0530 Subject: [PATCH 13/88] searching issue in datagrid --- packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php | 4 ++-- packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php | 2 +- .../Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php | 2 +- packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php index 62433d785..aa2d91b68 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderDataGrid.php @@ -34,7 +34,7 @@ class OrderDataGrid extends DataGrid $this->addFilter('billed_to', DB::raw('CONCAT(order_address_billing.first_name, " ", order_address_billing.last_name)')); $this->addFilter('shipped_to', DB::raw('CONCAT(order_address_shipping.first_name, " ", order_address_shipping.last_name)')); - $this->addFilter('id', 'orders.id'); + $this->addFilter('increment_id', 'orders.increment_id'); $this->addFilter('created_at', 'orders.created_at'); $this->setQueryBuilder($queryBuilder); @@ -45,7 +45,7 @@ class OrderDataGrid extends DataGrid $this->addColumn([ 'index' => 'increment_id', 'label' => trans('admin::app.datagrid.id'), - 'type' => 'number', + 'type' => 'string', 'searchable' => false, 'sortable' => true, 'filterable' => true diff --git a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php index dd68697ad..0b7f5449a 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php @@ -45,7 +45,7 @@ class OrderInvoicesDataGrid extends DataGrid $this->addColumn([ 'index' => 'order_id', 'label' => trans('admin::app.datagrid.order-id'), - 'type' => 'number', + 'type' => 'string', 'searchable' => true, 'sortable' => true, 'filterable' => true diff --git a/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php index 0a82d8706..663ca0389 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderShipmentsDataGrid.php @@ -54,7 +54,7 @@ class OrderShipmentsDataGrid extends DataGrid $this->addColumn([ 'index' => 'shipment_order_id', 'label' => trans('admin::app.datagrid.order-id'), - 'type' => 'number', + 'type' => 'string', 'searchable' => true, 'sortable' => true, 'filterable' => true diff --git a/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php b/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php index faf541cca..847098bab 100644 --- a/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php +++ b/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php @@ -31,7 +31,7 @@ class OrderDataGrid extends DataGrid $this->addColumn([ 'index' => 'increment_id', 'label' => trans('shop::app.customer.account.order.index.order_id'), - 'type' => 'text', + 'type' => 'string', 'searchable' => false, 'sortable' => true, 'filterable' => true From 5fd72de3a980cec43235a7362ec5589bb012c34b Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Thu, 12 Sep 2019 18:31:40 +0530 Subject: [PATCH 14/88] Issue #1249 --- .../Shop/src/Resources/views/checkout/onepage.blade.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php index 0e7a4f16a..5aa62ffef 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php @@ -152,6 +152,10 @@ this.new_shipping_address = true; this.new_billing_address = true; } else { + this.address.billing.first_name = this.address.shipping.first_name = customerAddress.first_name; + this.address.billing.last_name = this.address.shipping.last_name = customerAddress.last_name; + this.address.billing.email = this.address.shipping.email = customerAddress.email; + if (customerAddress.length < 1) { this.new_shipping_address = true; this.new_billing_address = true; From 6dfa36871e295fb219ea72fb244583317883a9e1 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Fri, 13 Sep 2019 00:37:58 +0530 Subject: [PATCH 15/88] github template added for support, bugs/issues, feature and security vulnerabilities. --- ISSUE_TEMPLATE.md => .github/1_Bug_report.md | 11 +++- .github/2_Feature_request.md | 12 ++++ .github/3_Support_question.md | 13 ++++ .github/4_Security_vulnerabilities.md | 9 +++ FEATURE_REQUEST_TEMPLATE.md | 66 -------------------- README.md | 5 +- SUPPORT_TEMPLATE.md | 48 -------------- 7 files changed, 46 insertions(+), 118 deletions(-) rename ISSUE_TEMPLATE.md => .github/1_Bug_report.md (56%) create mode 100644 .github/2_Feature_request.md create mode 100644 .github/3_Support_question.md create mode 100644 .github/4_Security_vulnerabilities.md delete mode 100644 FEATURE_REQUEST_TEMPLATE.md delete mode 100644 SUPPORT_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/.github/1_Bug_report.md similarity index 56% rename from ISSUE_TEMPLATE.md rename to .github/1_Bug_report.md index 8dc67d40e..a6b049288 100644 --- a/ISSUE_TEMPLATE.md +++ b/.github/1_Bug_report.md @@ -1,12 +1,17 @@ +--- +name: "🐛 Bug Report" +about: 'Report a general library issue.' +--- + # Bug report ### Title - **Title is a vital part of bug report for developer and triager to quickly identify a unique issue.** + **Just a quick sentence to brief your trouble with Bagisto or something associated with it.** - A well written title should contain a clear, brief explanation of the issue, making emphasis on the most important points. + Please be calm, short and emaphasize on points. ### Issue Description - **Bug description helps the developer to understand the bug.It describes the problem encountered.** + **Description helps the developers to understand the bug. It describes the problem encountered or some after effect of some kind.** ### Preconditions **Please provide as detailed information about your environment as possible.** diff --git a/.github/2_Feature_request.md b/.github/2_Feature_request.md new file mode 100644 index 000000000..489c97281 --- /dev/null +++ b/.github/2_Feature_request.md @@ -0,0 +1,12 @@ +--- +name: "💡 Feature Request" +about: 'For ideas or feature requests, please make a pull request, or open an issue' +--- + +This repository is only for reporting bugs or issues. If you need support, please use the forums: + +- https://forums.bagisto.com/ + +Alternatively, you may use Facebook (https://www.facebook.com/groups/bagisto/). + +We promise that more channels are coming soon!!! diff --git a/.github/3_Support_question.md b/.github/3_Support_question.md new file mode 100644 index 000000000..076335070 --- /dev/null +++ b/.github/3_Support_question.md @@ -0,0 +1,13 @@ +--- +name: "🧐 Support Question" +about: 'This repository is only for reporting bugs or problems. If you need help, see: + https://github.com/bagisto/bagisto#documentation' +--- + +This repository is only for reporting bugs or issues. If you need support, please use: + +1. Write an email - mailto:support@bagisto.com + +2. Create support ticket on https://bagisto.uvdesk.com + +Thanks! \ No newline at end of file diff --git a/.github/4_Security_vulnerabilities.md b/.github/4_Security_vulnerabilities.md new file mode 100644 index 000000000..f0b6fe77c --- /dev/null +++ b/.github/4_Security_vulnerabilities.md @@ -0,0 +1,9 @@ +--- +name: "🔒 Security Vulnerabilities" +about: 'For reporting security-related issues, see: https://github.com/bagito/bagisto#security-vulnerabilities' +--- + +PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, SEE BELOW. + +If you have security vulnerability to address related to Bagisto then please write a mail to us: +**support@bagisto.com** \ No newline at end of file diff --git a/FEATURE_REQUEST_TEMPLATE.md b/FEATURE_REQUEST_TEMPLATE.md deleted file mode 100644 index 72ac44d98..000000000 --- a/FEATURE_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,66 +0,0 @@ - - - Feature - - - - -
-

Title

-
-

- - A well written title should contain a clear, brief explanation of the Feature, making emphasis on the most important points. -

-
- -
-

Preconditions

-
-

Please provide as detailed information about your environment as possible.

-
    -
  • framework Version:
  • -
  • Commit id:
  • -
-
- -
-

Description

-
-

Description helps the developer to understand the Feature. -

-
- -
-

Steps to reproduce

-
-

It is important to provide a set of clear steps to that location where feature need to be added. If relevant please include code samples.

-
    -
  1. step1
  2. -
  3. step2
  4. -
-
- - - - - - - - - - - - - - - - - - - diff --git a/README.md b/README.md index 26df06e31..38f99db58 100755 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ 3. [Requirements](#requirements) 4. [Installation & Configuration](#installation-and-configuration) 5. [License](#license) -6. [Miscellaneous](#miscellaneous) +6. [Security Vulnerabilities](#security-vulnerabilities) +7. [Miscellaneous](#miscellaneous) ### Introduction @@ -176,6 +177,8 @@ password:admin123 ### License Bagisto is a truly opensource E-Commerce framework which will always be free under the [MIT License](https://github.com/bagisto/bagisto/blob/master/LICENSE). +### Security Vulnerabilities +Please don't disclose security vulnerabilities publicly. If you find any security vulnerability in Bagisto then please write us mail: mailto:support@bagisto.com. ### Miscellaneous diff --git a/SUPPORT_TEMPLATE.md b/SUPPORT_TEMPLATE.md deleted file mode 100644 index f692a9498..000000000 --- a/SUPPORT_TEMPLATE.md +++ /dev/null @@ -1,48 +0,0 @@ - - - Support - - - - -
-

Title

-
-

- Title is a vital part of bug report for developer and triager to quickly identify a unique issue. -
- A well written title should contain a clear, brief explanation of the issue, making emphasis on the most important points. -

-
- -
-

Preconditions

-
-

Please provide as detailed information about your environment as possible.

-
    -
  • framework Version:
  • -
  • Commit id:
  • -
-
- -
-

Description

-
-

Description helps the developer to understand the exact scenario.It describes the problem encountered.

-
- -
-

Steps to reproduce

-
-

It is important to provide a set of clear steps to reproduce that scenario. If relevant please include code samples.

-
    -
  1. step1
  2. -
  3. step2
  4. -
-
- From fa1af6f8e018e770ed6bae244fdfca8ae5e6fd60 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Fri, 13 Sep 2019 00:40:42 +0530 Subject: [PATCH 16/88] Templates moved in ISSUE_TEMPLATE directory --- .github/{ => ISSUE_TEMPLATE}/1_Bug_report.md | 0 .github/{ => ISSUE_TEMPLATE}/2_Feature_request.md | 0 .github/{ => ISSUE_TEMPLATE}/3_Support_question.md | 0 .github/{ => ISSUE_TEMPLATE}/4_Security_vulnerabilities.md | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename .github/{ => ISSUE_TEMPLATE}/1_Bug_report.md (100%) rename .github/{ => ISSUE_TEMPLATE}/2_Feature_request.md (100%) rename .github/{ => ISSUE_TEMPLATE}/3_Support_question.md (100%) rename .github/{ => ISSUE_TEMPLATE}/4_Security_vulnerabilities.md (100%) diff --git a/.github/1_Bug_report.md b/.github/ISSUE_TEMPLATE/1_Bug_report.md similarity index 100% rename from .github/1_Bug_report.md rename to .github/ISSUE_TEMPLATE/1_Bug_report.md diff --git a/.github/2_Feature_request.md b/.github/ISSUE_TEMPLATE/2_Feature_request.md similarity index 100% rename from .github/2_Feature_request.md rename to .github/ISSUE_TEMPLATE/2_Feature_request.md diff --git a/.github/3_Support_question.md b/.github/ISSUE_TEMPLATE/3_Support_question.md similarity index 100% rename from .github/3_Support_question.md rename to .github/ISSUE_TEMPLATE/3_Support_question.md diff --git a/.github/4_Security_vulnerabilities.md b/.github/ISSUE_TEMPLATE/4_Security_vulnerabilities.md similarity index 100% rename from .github/4_Security_vulnerabilities.md rename to .github/ISSUE_TEMPLATE/4_Security_vulnerabilities.md From a7b2925db438b9ee791860290c68afd22a89aacd Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Fri, 13 Sep 2019 11:01:54 +0530 Subject: [PATCH 17/88] Fixed issue #1452 --- .github/ISSUE_TEMPLATE/3_Support_question.md | 1 + packages/Webkul/Admin/src/Resources/lang/en/app.php | 1 + .../src/Resources/views/catalog/categories/create.blade.php | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/3_Support_question.md b/.github/ISSUE_TEMPLATE/3_Support_question.md index 076335070..38ecd44b6 100644 --- a/.github/ISSUE_TEMPLATE/3_Support_question.md +++ b/.github/ISSUE_TEMPLATE/3_Support_question.md @@ -10,4 +10,5 @@ This repository is only for reporting bugs or issues. If you need support, pleas 2. Create support ticket on https://bagisto.uvdesk.com +3. Visit forums to get support from our community (https://forms.bagisto.com) Thanks! \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 250caacd3..b0e9939db 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -31,6 +31,7 @@ return [ 'channel-based' => 'Channel based', 'status' => 'Status', 'select-option' => 'Select option', + 'category' => 'Category', 'common' => [ 'no-result-found' => 'We could not find any records.', diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php index 41f0c11b2..e2fdb0889 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php @@ -20,7 +20,7 @@
From d02c9034709fa7fde8c9b25618aa6d329582ac4f Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Fri, 13 Sep 2019 11:37:00 +0530 Subject: [PATCH 18/88] Support request template --- .github/ISSUE_TEMPLATE/3_Support_question.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/3_Support_question.md b/.github/ISSUE_TEMPLATE/3_Support_question.md index 38ecd44b6..1532a6e6d 100644 --- a/.github/ISSUE_TEMPLATE/3_Support_question.md +++ b/.github/ISSUE_TEMPLATE/3_Support_question.md @@ -11,4 +11,5 @@ This repository is only for reporting bugs or issues. If you need support, pleas 2. Create support ticket on https://bagisto.uvdesk.com 3. Visit forums to get support from our community (https://forms.bagisto.com) + Thanks! \ No newline at end of file From 685aedf5289b79c497ec666af3036495622e7089 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Fri, 13 Sep 2019 12:22:50 +0530 Subject: [PATCH 19/88] getEligble items in action fixed as its was not working as boolean expression --- packages/Webkul/Discount/src/Actions/Action.php | 2 +- packages/Webkul/Discount/src/Actions/Cart/FixedAmount.php | 2 +- packages/Webkul/Discount/src/Actions/Cart/PercentOfProduct.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Discount/src/Actions/Action.php b/packages/Webkul/Discount/src/Actions/Action.php index 66f95b620..308267c43 100644 --- a/packages/Webkul/Discount/src/Actions/Action.php +++ b/packages/Webkul/Discount/src/Actions/Action.php @@ -26,7 +26,7 @@ abstract class Action foreach ($items as $item) { foreach ($matchingIDs as $matchingID) { - if ($matchingID == $item->child ? $item->child->product_id : $item->product_id) { + if ($matchingID == ($item->child ? $item->child->product_id : $item->product_id)) { $matchedItems->push($item); } } diff --git a/packages/Webkul/Discount/src/Actions/Cart/FixedAmount.php b/packages/Webkul/Discount/src/Actions/Cart/FixedAmount.php index 6e469a10b..4fcfb59c8 100644 --- a/packages/Webkul/Discount/src/Actions/Cart/FixedAmount.php +++ b/packages/Webkul/Discount/src/Actions/Cart/FixedAmount.php @@ -23,7 +23,7 @@ class FixedAmount extends Action foreach ($matchIDs as $matchID) { foreach ($eligibleItems as $item) { - if ($item->child ? $item->child->product_id : $item->product_id == $matchID) { + if (($item->child ? $item->child->product_id : $item->product_id) == $matchID) { return true; } } diff --git a/packages/Webkul/Discount/src/Actions/Cart/PercentOfProduct.php b/packages/Webkul/Discount/src/Actions/Cart/PercentOfProduct.php index 55e601dcd..adfd27a10 100644 --- a/packages/Webkul/Discount/src/Actions/Cart/PercentOfProduct.php +++ b/packages/Webkul/Discount/src/Actions/Cart/PercentOfProduct.php @@ -30,7 +30,7 @@ class PercentOfProduct extends Action foreach ($matchIDs as $matchID) { foreach ($eligibleItems as $item) { - if ($item->child ? $item->child->product_id : $item->product_id == $matchID) { + if (($item->child ? $item->child->product_id : $item->product_id) == $matchID) { return true; } } From 98792912d88f4d39237c758c6b7f6c2eff026b5d Mon Sep 17 00:00:00 2001 From: prateek srivastava Date: Fri, 13 Sep 2019 12:50:06 +0530 Subject: [PATCH 20/88] translation added --- .../Webkul/Customer/src/Mail/RegistrationEmail.php | 2 +- packages/Webkul/Shop/src/Resources/lang/en/app.php | 1 + .../views/emails/customer/registration.blade.php | 14 +++++--------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/Webkul/Customer/src/Mail/RegistrationEmail.php b/packages/Webkul/Customer/src/Mail/RegistrationEmail.php index 4e59791ee..c09cabbf8 100644 --- a/packages/Webkul/Customer/src/Mail/RegistrationEmail.php +++ b/packages/Webkul/Customer/src/Mail/RegistrationEmail.php @@ -32,7 +32,7 @@ class RegistrationEmail extends Mailable { return $this->to($this->data['email']) ->from(env('SHOP_MAIL_FROM')) - ->subject('Suucessfully Registered Customer') + ->subject(trans('shop::app.customer.signup-form.customer-registration')) ->view('shop::emails.customer.registration')->with('data', $this->data); } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index d496a6826..aa634256b 100755 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -117,6 +117,7 @@ return [ 'verified' => 'Your Account Has Been Verified, Try To Login Now', 'verify-failed' => 'We Cannot Verify Your Mail Account', 'dont-have-account' => 'You Do Not Have Account With Us', + 'customer-registration' => 'Customer Registered Successfully' ], 'login-text' => [ diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php index e4ffad970..05b15548b 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php @@ -7,20 +7,16 @@
-
- Welcome to Bagisto, -
-
- Hi {{ $data['first_name'] }}, + Hi {{ $data['first_name'] }},

- Welcome and thank you for registering at Bagisto! + Welcome and thank you for registering at Bagisto!

- Your account has now been created successfully and you can login using your email address and password credentials. + Your account has now been created successfully and you can login using your email address and password credentials.
- Upon logging in, you will be able to access other services including reviewing past orders, printing invoices and editing your account information. + Upon logging in, you will be able to access other services including reviewing past orders, wishlists and editing your account information.

- Thanks, + Thanks,
Bagisto
From 5a54c02d50a0d8e9d58df9804c2f7d36ff734aa1 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Fri, 13 Sep 2019 14:34:15 +0530 Subject: [PATCH 21/88] Issue #1172 default payment & shipping method --- .../Admin/src/Resources/lang/en/app.php | 2 +- .../Payment/src/Config/paymentmethods.php | 9 ++++--- packages/Webkul/Payment/src/Config/system.php | 27 ++++++++++++++++--- packages/Webkul/Payment/src/Payment.php | 2 ++ .../Webkul/Payment/src/Payment/Payment.php | 12 ++++++++- .../Webkul/Shipping/src/Config/carriers.php | 2 ++ .../Webkul/Shipping/src/Config/system.php | 18 +++++++++++-- packages/Webkul/Shipping/src/Shipping.php | 2 ++ .../views/checkout/onepage.blade.php | 23 +++++++++++++++- 9 files changed, 86 insertions(+), 11 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 250caacd3..f95aafff7 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -1137,7 +1137,7 @@ return [ 'invoice number prefix' => 'Invoice Number Prefix', 'invoice number length' => 'Invoice Number Length', 'invoice number suffix' => 'Invoice Number Suffix', - + 'default' => 'Default', ] ] ]; diff --git a/packages/Webkul/Payment/src/Config/paymentmethods.php b/packages/Webkul/Payment/src/Config/paymentmethods.php index 864751d7a..ec7ec7e56 100755 --- a/packages/Webkul/Payment/src/Config/paymentmethods.php +++ b/packages/Webkul/Payment/src/Config/paymentmethods.php @@ -6,7 +6,8 @@ return [ 'description' => 'shop::app.checkout.onepage.cash-desc', 'class' => 'Webkul\Payment\Payment\CashOnDelivery', 'active' => true, - 'sort' => 1 + 'sort' => 1, + 'default' => 'no' ], 'moneytransfer' => [ @@ -15,7 +16,8 @@ return [ 'description' => 'shop::app.checkout.onepage.money-desc', 'class' => 'Webkul\Payment\Payment\MoneyTransfer', 'active' => true, - 'sort' => 2 + 'sort' => 2, + 'default' => 'yes' ], 'paypal_standard' => [ @@ -26,6 +28,7 @@ return [ 'sandbox' => true, 'active' => true, 'business_account' => 'test@webkul.com', - 'sort' => 3 + 'sort' => 3, + 'default' => 'no' ] ]; \ No newline at end of file diff --git a/packages/Webkul/Payment/src/Config/system.php b/packages/Webkul/Payment/src/Config/system.php index 3e1b22195..beec93f54 100755 --- a/packages/Webkul/Payment/src/Config/system.php +++ b/packages/Webkul/Payment/src/Config/system.php @@ -62,7 +62,14 @@ return [ 'value' => 4 ] ], - ] + ], [ + 'name' => 'default', + 'title' => 'admin::app.admin.system.default', + 'type' => 'boolean', + 'validation' => 'required', + 'channel_based' => false, + 'locale_based' => true + ], ] ], [ 'key' => 'sales.paymentmethods.moneytransfer', @@ -117,7 +124,14 @@ return [ 'value' => 4 ] ], - ] + ], [ + 'name' => 'default', + 'title' => 'admin::app.admin.system.default', + 'type' => 'boolean', + 'validation' => 'required', + 'channel_based' => false, + 'locale_based' => true + ], ] ], [ 'key' => 'sales.paymentmethods.paypal_standard', @@ -178,7 +192,14 @@ return [ 'value' => 4 ] ], - ] + ], [ + 'name' => 'default', + 'title' => 'admin::app.admin.system.default', + 'type' => 'boolean', + 'validation' => 'required', + 'channel_based' => false, + 'locale_based' => true + ], ] ] ]; \ No newline at end of file diff --git a/packages/Webkul/Payment/src/Payment.php b/packages/Webkul/Payment/src/Payment.php index 9f56fb521..f7ba3684d 100755 --- a/packages/Webkul/Payment/src/Payment.php +++ b/packages/Webkul/Payment/src/Payment.php @@ -18,6 +18,7 @@ class Payment return [ 'jump_to_section' => 'payment', + 'paymentMethods' => $this->getPaymentMethods(), 'html' => view('shop::checkout.onepage.payment', compact('paymentMethods'))->render() ]; } @@ -40,6 +41,7 @@ class Payment 'method_title' => $object->getTitle(), 'description' => $object->getDescription(), 'sort' => $object->getSortOrder(), + 'default' => $object->getDefaultMethod(), ]; } } diff --git a/packages/Webkul/Payment/src/Payment/Payment.php b/packages/Webkul/Payment/src/Payment/Payment.php index f2acea2d1..c695f5998 100755 --- a/packages/Webkul/Payment/src/Payment/Payment.php +++ b/packages/Webkul/Payment/src/Payment/Payment.php @@ -113,10 +113,20 @@ abstract class Payment /** * Returns payment method sort order * - * @return array + * @return int */ public function getSortOrder() { return $this->getConfigData('sort'); } + + /** + * Returns default payment method. + * + * @return boolean + */ + public function getDefaultMethod() + { + return $this->getConfigData('default'); + } } \ No newline at end of file diff --git a/packages/Webkul/Shipping/src/Config/carriers.php b/packages/Webkul/Shipping/src/Config/carriers.php index d78327e75..9a1c7d05f 100755 --- a/packages/Webkul/Shipping/src/Config/carriers.php +++ b/packages/Webkul/Shipping/src/Config/carriers.php @@ -9,6 +9,7 @@ return [ 'default_rate' => '10', 'type' => 'per_unit', 'class' => 'Webkul\Shipping\Carriers\FlatRate', + 'default' => 'yes', ], 'free' => [ @@ -18,5 +19,6 @@ return [ 'active' => true, 'default_rate' => '0', 'class' => 'Webkul\Shipping\Carriers\Free', + 'default' => 'yes', ] ]; \ No newline at end of file diff --git a/packages/Webkul/Shipping/src/Config/system.php b/packages/Webkul/Shipping/src/Config/system.php index 916d61b99..3343bf7f3 100755 --- a/packages/Webkul/Shipping/src/Config/system.php +++ b/packages/Webkul/Shipping/src/Config/system.php @@ -43,7 +43,14 @@ return [ 'validation' => 'required', 'channel_based' => false, 'locale_based' => true - ] + ], [ + 'name' => 'default', + 'title' => 'admin::app.admin.system.default', + 'type' => 'boolean', + 'validation' => 'required', + 'channel_based' => false, + 'locale_based' => true + ], ] ], [ 'key' => 'sales.carriers.flatrate', @@ -99,7 +106,14 @@ return [ 'validation' => 'required', 'channel_based' => false, 'locale_based' => true - ] + ], [ + 'name' => 'default', + 'title' => 'admin::app.admin.system.default', + 'type' => 'boolean', + 'validation' => 'required', + 'channel_based' => false, + 'locale_based' => true + ], ] ], [ 'key' => 'sales.shipping', diff --git a/packages/Webkul/Shipping/src/Shipping.php b/packages/Webkul/Shipping/src/Shipping.php index 4661f59d2..f5e554e4b 100755 --- a/packages/Webkul/Shipping/src/Shipping.php +++ b/packages/Webkul/Shipping/src/Shipping.php @@ -46,6 +46,7 @@ class Shipping return [ 'jump_to_section' => 'shipping', + 'shippingMethods' => $this->getGroupedAllShippingRates(), 'html' => view('shop::checkout.onepage.shipping', ['shippingRateGroups' => $this->getGroupedAllShippingRates()])->render() ]; } @@ -97,6 +98,7 @@ class Shipping if (! isset($rates[$rate->carrier])) { $rates[$rate->carrier] = [ 'carrier_title' => $rate->carrier_title, + 'default' => core()->getConfigData('sales.carriers.' . $rate->carrier. '.default'), 'rates' => [] ]; } diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php index 5aa62ffef..9d81d6ffc 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php @@ -103,6 +103,8 @@ var reviewHtml = ''; var summaryHtml = ''; var customerAddress = ''; + var shippingMethods = ''; + var paymentMethods = ''; @auth('customer') @if(auth('customer')->user()->addresses) @@ -230,6 +232,7 @@ if (response.data.jump_to_section == 'shipping') { shippingHtml = Vue.compile(response.data.html) + shippingMethods = response.data.shippingMethods; this_this.completedStep = 1; this_this.currentStep = 2; @@ -254,6 +257,7 @@ if (response.data.jump_to_section == 'payment') { paymentHtml = Vue.compile(response.data.html) + paymentMethods = response.data.paymentMethods; this_this.completedStep = 2; this_this.currentStep = 3; @@ -368,6 +372,16 @@ staticRenderFns: shippingTemplateRenderFns, mounted: function() { + for (method in shippingMethods) { + if (shippingMethods[method]['default'] == 'yes' || shippingMethods[method]['default'] == 1) { + for (rate in shippingMethods[method]['rates']) { + this.selected_shipping_method = shippingMethods[method]['rates'][rate]['method']; + + this.methodSelected(); + } + } + } + this.templateRender = shippingHtml.render; for (var i in shippingHtml.staticRenderFns) { shippingTemplateRenderFns.push(shippingHtml.staticRenderFns[i]); @@ -411,8 +425,15 @@ staticRenderFns: paymentTemplateRenderFns, mounted: function() { - this.templateRender = paymentHtml.render; + for (method in paymentMethods) { + if (paymentMethods[method]['default'] == 'yes' || paymentMethods[method]['default'] == 1) { + this.payment.method = paymentMethods[method]['method']; + this.methodSelected(); + } + } + + this.templateRender = paymentHtml.render; for (var i in paymentHtml.staticRenderFns) { paymentTemplateRenderFns.push(paymentHtml.staticRenderFns[i]); } From 48d86f05e8ae32ea2288331a8ecd636bd9518555 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Fri, 13 Sep 2019 15:04:29 +0530 Subject: [PATCH 22/88] Issue #1260 & mail logo --- .../Resources/views/emails/admin/forget-password.blade.php | 2 +- .../views/emails/customer/forget-password.blade.php | 2 +- .../Resources/views/emails/customer/new-customer.blade.php | 2 +- .../views/emails/customer/subscription-email.blade.php | 2 +- .../views/emails/customer/verification-email.blade.php | 2 +- .../Shop/src/Resources/views/emails/layouts/logo.blade.php | 5 +++++ .../Resources/views/emails/sales/new-admin-order.blade.php | 2 +- .../emails/sales/new-inventorysource-shipment.blade.php | 2 +- .../src/Resources/views/emails/sales/new-invoice.blade.php | 2 +- .../src/Resources/views/emails/sales/new-order.blade.php | 2 +- .../src/Resources/views/emails/sales/new-shipment.blade.php | 2 +- .../src/Resources/views/emails/sales/order-cancel.blade.php | 2 +- 12 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 packages/Webkul/Shop/src/Resources/views/emails/layouts/logo.blade.php diff --git a/packages/Webkul/Shop/src/Resources/views/emails/admin/forget-password.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/admin/forget-password.blade.php index 4eed8d45b..acf91c918 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/admin/forget-password.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/admin/forget-password.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/forget-password.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/forget-password.blade.php index a4ab936b7..685346631 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/forget-password.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/forget-password.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php index 3352a37a0..fdf044a64 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php @@ -3,7 +3,7 @@
diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php index 7d4555b75..ccf55b6a5 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php @@ -3,7 +3,7 @@
diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php index 762f81bc1..7aca44723 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php @@ -3,7 +3,7 @@
diff --git a/packages/Webkul/Shop/src/Resources/views/emails/layouts/logo.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/layouts/logo.blade.php new file mode 100644 index 000000000..febab50ee --- /dev/null +++ b/packages/Webkul/Shop/src/Resources/views/emails/layouts/logo.blade.php @@ -0,0 +1,5 @@ +@if (core()->getConfigData('general.design.admin_logo.logo_image')) + Bagisto +@else + +@endif \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php index 1971e89f9..69a7fea6c 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-admin-order.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php index 42b326f9a..0b21bfa6b 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-inventorysource-shipment.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php index 478cb6abe..fc2ec332c 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-invoice.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php index 2c4a72a4e..9ab77ac53 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-order.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php index 9ec9f61ae..4a05b1b75 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/new-shipment.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') diff --git a/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php index f75a0d49e..ee39658e8 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel.blade.php @@ -1,7 +1,7 @@ @component('shop::emails.layouts.master') From f4f5dd3b08aedef8b75908faad1bbe1924d6c988 Mon Sep 17 00:00:00 2001 From: prateek srivastava Date: Fri, 13 Sep 2019 15:41:38 +0530 Subject: [PATCH 23/88] translation added --- .../src/Mail/NewCustomerNotification.php | 2 +- .../Customer/src/Mail/RegistrationEmail.php | 2 +- .../Customer/src/Mail/VerificationEmail.php | 2 +- .../Shop/src/Mail/SubscriptionEmail.php | 2 +- .../Webkul/Shop/src/Resources/lang/en/app.php | 35 ++++++++++++++++++- .../emails/customer/new-customer.blade.php | 16 ++++++--- .../emails/customer/registration.blade.php | 27 +++++++------- .../customer/subscription-email.blade.php | 10 +++--- .../customer/verification-email.blade.php | 9 ++--- 9 files changed, 75 insertions(+), 30 deletions(-) diff --git a/packages/Webkul/Admin/src/Mail/NewCustomerNotification.php b/packages/Webkul/Admin/src/Mail/NewCustomerNotification.php index b4e47718d..4af9308e6 100644 --- a/packages/Webkul/Admin/src/Mail/NewCustomerNotification.php +++ b/packages/Webkul/Admin/src/Mail/NewCustomerNotification.php @@ -51,7 +51,7 @@ class NewCustomerNotification extends Mailable public function build() { return $this->to($this->customer->email) - ->subject(trans('shop::app.mail.customer.subject')) + ->subject(trans('shop::app.mail.customer.new.subject')) ->view('shop::emails.customer.new-customer')->with(['customer' => $this->customer, 'password' => $this->password]); } } \ No newline at end of file diff --git a/packages/Webkul/Customer/src/Mail/RegistrationEmail.php b/packages/Webkul/Customer/src/Mail/RegistrationEmail.php index c09cabbf8..ffd045e90 100644 --- a/packages/Webkul/Customer/src/Mail/RegistrationEmail.php +++ b/packages/Webkul/Customer/src/Mail/RegistrationEmail.php @@ -32,7 +32,7 @@ class RegistrationEmail extends Mailable { return $this->to($this->data['email']) ->from(env('SHOP_MAIL_FROM')) - ->subject(trans('shop::app.customer.signup-form.customer-registration')) + ->subject(trans('shop::app.mail.customer.registration.customer-registration')) ->view('shop::emails.customer.registration')->with('data', $this->data); } } \ No newline at end of file diff --git a/packages/Webkul/Customer/src/Mail/VerificationEmail.php b/packages/Webkul/Customer/src/Mail/VerificationEmail.php index 41fa0bc31..73c4b6f30 100755 --- a/packages/Webkul/Customer/src/Mail/VerificationEmail.php +++ b/packages/Webkul/Customer/src/Mail/VerificationEmail.php @@ -32,7 +32,7 @@ class VerificationEmail extends Mailable { return $this->to($this->verificationData['email']) ->from(env('SHOP_MAIL_FROM')) - ->subject('Verification email') + ->subject(trans('shop::app.mail.customer.verification.subject')) ->view('shop::emails.customer.verification-email')->with('data', ['email' => $this->verificationData['email'], 'token' => $this->verificationData['token']]); } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php b/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php index 2acf41474..96ba6a3e3 100755 --- a/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php +++ b/packages/Webkul/Shop/src/Mail/SubscriptionEmail.php @@ -32,7 +32,7 @@ class SubscriptionEmail extends Mailable { return $this->to($this->subscriptionData['email']) ->from(env('SHOP_MAIL_FROM')) - ->subject('subscription email') + ->subject(trans('shop::app.mail.customer.subscription.subject')) ->view('shop::emails.customer.subscription-email')->with('data', ['content' => 'You Are Subscribed', 'token' => $this->subscriptionData['token']]); } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index aa634256b..ed4e720aa 100755 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -544,7 +544,40 @@ return [ 'thanks' => 'Thanks!' ], 'customer' => [ - 'subject' => 'New Customer Registration' + 'new' => [ + 'dear' => 'Dear :customer_name', + 'username-email' => 'UserName/Email', + 'subject' => 'New Customer Registration', + 'password' => 'Password', + 'summary' => 'Your account has been created in bagisto. + Your account details are below: ', + 'thanks' => 'Thanks!', + ], + + 'registration' => [ + 'subject' => 'New Customer Registration', + 'customer-registration' => 'Customer Registered Successfully', + 'dear' => 'Dear :customer_name', + 'greeting' => 'Welcome and thank you for registering at Bagisto!', + 'summary' => 'Your account has now been created successfully and you can login using your email address and password credentials. Upon logging in, you will be able to access other services including reviewing past orders, wishlists and editing your account information.', + 'thanks' => 'Thanks!', + ], + + 'verification' => [ + 'heading' => 'Bagisto - Email Verification', + 'subject' => 'Verification Mail', + 'verify' => 'Verify Your Account', + 'summary' => 'This is the mail to verify that the email address you entered is yours. + Kindly click the Verify Your Account button below to verify your account.' + ], + + 'subscription' => [ + 'subject' => 'Subscription Email', + 'greeting' => ' Welcome to Bagisto - Email Subscription', + 'unsubscribe' => 'Unsubscribe', + 'summary' => 'Thanks for putting me into your inbox. It’s been a while since you’ve read Bagisto email, and we don’t want to overwhelm your inbox. If you still do not want to receive + the latest email marketing news then for sure click the button below.' + ] ] ], diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php index 3352a37a0..d5c486eca 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/new-customer.blade.php @@ -8,15 +8,23 @@
- Hi {{ $customer['name'] }}, your new account has been created in bagisto. - Your account details are below + {{ __('shop::app.mail.customer.new.dear', ['customer_name' => $customer['name']]) }}, +
- UserName/Email - {{ $customer['email'] }}
- Password - {{ $password}} + {!! __('shop::app.mail.customer.new.summary') !!} +
+
+ {!! __('shop::app.mail.customer.new.username-email') !!} - {{ $customer['email'] }}
+ {!! __('shop::app.mail.customer.new.password') !!} - {{ $password}} +
+ +

+ {{ __('shop::app.mail.customer.new.thanks') }} +

@endcomponent \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php index 05b15548b..1e5a67c30 100644 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/registration.blade.php @@ -7,22 +7,25 @@
-
- Hi {{ $data['first_name'] }},

- Welcome and thank you for registering at Bagisto!

+
+
+

+ {{ __('shop::app.mail.customer.registration.dear', ['customer_name' => $data['first_name']. ' ' .$data['last_name']]) }}, +

- Your account has now been created successfully and you can login using your email address and password credentials.
+

+ {!! __('shop::app.mail.customer.registration.greeting') !!} +

+
- Upon logging in, you will be able to access other services including reviewing past orders, wishlists and editing your account information.

- - Thanks,
- Bagisto - -
- -
+
+ {{ __('shop::app.mail.customer.registration.summary') }} +
+

+ {{ __('shop::app.mail.customer.registration.thanks') }} +

diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php index 7d4555b75..f80625e4f 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/subscription-email.blade.php @@ -8,18 +8,18 @@
- Welcome to Bagisto - Email Subscription + {!! __('shop::app.mail.customer.subscription.greeting') !!}
- Thanks for putting me into your inbox. It’s been a while since you’ve read Bagisto - email, and we don’t want to overwhelm your inbox. If you still do not want to receive - the latest email marketing news then for sure click the button below. + {!! __('shop::app.mail.customer.subscription.summary') !!}
Unsubscribe + color: #FFFFFF; text-align: center; background: #0031F0; padding: 10px 100px;text-decoration: none;"> + {!! __('shop::app.mail.customer.subscription.unsubscribe') !!} +
diff --git a/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php b/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php index 762f81bc1..75edcfb19 100755 --- a/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/emails/customer/verification-email.blade.php @@ -8,17 +8,18 @@
- Bagisto - Email Verification + {!! __('shop::app.mail.customer.verification.heading') !!}
- This is the mail to verify that the email address you entered is yours. - Kindly click the 'Verify Your Account' button below to verify your account. + {!! __('shop::app.mail.customer.verification.summary') !!}
Verify Your Account + color: #FFFFFF; text-align: center; background: #0031F0; padding: 10px 100px;text-decoration: none;"> + {!! __('shop::app.mail.customer.verification.verify') !!} +
From 00b83b1398da35f154ebed23c8ac56cdaa8128f1 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Fri, 13 Sep 2019 15:54:05 +0530 Subject: [PATCH 24/88] change defualt payment method & oderder number in customer invoice --- packages/Webkul/Payment/src/Config/paymentmethods.php | 4 ++-- .../Resources/views/customers/account/orders/pdf.blade.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Payment/src/Config/paymentmethods.php b/packages/Webkul/Payment/src/Config/paymentmethods.php index ec7ec7e56..0d78373ed 100755 --- a/packages/Webkul/Payment/src/Config/paymentmethods.php +++ b/packages/Webkul/Payment/src/Config/paymentmethods.php @@ -7,7 +7,7 @@ return [ 'class' => 'Webkul\Payment\Payment\CashOnDelivery', 'active' => true, 'sort' => 1, - 'default' => 'no' + 'default' => 'yes' ], 'moneytransfer' => [ @@ -17,7 +17,7 @@ return [ 'class' => 'Webkul\Payment\Payment\MoneyTransfer', 'active' => true, 'sort' => 2, - 'default' => 'yes' + 'default' => 'no' ], 'paypal_standard' => [ diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/pdf.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/pdf.blade.php index a3871d349..409d3ef94 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/pdf.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/pdf.blade.php @@ -92,7 +92,7 @@
{{ __('shop::app.customer.account.order.view.order-id') }} - - #{{ $invoice->order_id }} + #{{ $invoice->order->increment_id }}
From 53030b2a21f8d708059e24086d27ca7d7b737646 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Fri, 13 Sep 2019 17:02:46 +0530 Subject: [PATCH 25/88] conditon added for checkout back button --- .../checkout/onepage/customer-info.blade.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/onepage/customer-info.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/onepage/customer-info.blade.php index 87041cc53..1d6a198c3 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/onepage/customer-info.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/onepage/customer-info.blade.php @@ -71,9 +71,11 @@ @endguest @auth('customer') - - {{ __('shop::app.checkout.onepage.back') }} - + @if(count(auth('customer')->user()->addresses)) + + {{ __('shop::app.checkout.onepage.back') }} + + @endif @endauth
@@ -293,9 +295,11 @@

{{ __('shop::app.checkout.onepage.shipping-address') }}

@auth('customer') - - {{ __('shop::app.checkout.onepage.back') }} - + @if(count(auth('customer')->user()->addresses)) + + {{ __('shop::app.checkout.onepage.back') }} + + @endif @endauth From 3d03bc099c867c59bef9735f4565340645dd43ac Mon Sep 17 00:00:00 2001 From: CodeInnovers Date: Sun, 15 Sep 2019 23:33:35 +0530 Subject: [PATCH 26/88] fixed issue #1460 --- .../Webkul/Core/src/Http/Controllers/SubscriptionController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Core/src/Http/Controllers/SubscriptionController.php b/packages/Webkul/Core/src/Http/Controllers/SubscriptionController.php index 74cd058a3..b6ca92773 100755 --- a/packages/Webkul/Core/src/Http/Controllers/SubscriptionController.php +++ b/packages/Webkul/Core/src/Http/Controllers/SubscriptionController.php @@ -91,7 +91,7 @@ class SubscriptionController extends Controller $subscriber = $this->subscribers->findOrFail($id); try { - $this->subscriber->delete($id); + $this->subscribers->delete($id); session()->flash('success', trans('admin::app.response.delete-success', ['name' => 'Subscriber'])); From 62b2a3f9c31a13826850f6d4bc65ef3ca45d63fc Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Mon, 16 Sep 2019 13:51:47 +0530 Subject: [PATCH 27/88] locale based error message --- .../Webkul/Shop/publishable/assets/js/shop.js | 2 +- .../Shop/publishable/assets/mix-manifest.json | 2 +- .../Shop/src/Resources/assets/js/app.js | 18 +++++++++++-- .../Shop/src/Resources/assets/js/lang/ar.js | 26 +++++++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 packages/Webkul/Shop/src/Resources/assets/js/lang/ar.js diff --git a/packages/Webkul/Shop/publishable/assets/js/shop.js b/packages/Webkul/Shop/publishable/assets/js/shop.js index 470e08dad..aff7a0b79 100755 --- a/packages/Webkul/Shop/publishable/assets/js/shop.js +++ b/packages/Webkul/Shop/publishable/assets/js/shop.js @@ -1 +1 @@ -!function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("J66Q"),e.exports=n("MT9B")},"162o":function(e,t,n){(function(e){var i=void 0!==e&&e||"undefined"!=typeof self&&self||window,r=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(r.call(setTimeout,i,arguments),clearTimeout)},t.setInterval=function(){return new o(r.call(setInterval,i,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(i,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n("mypn"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(t,n("DuR2"))},"21It":function(e,t,n){"use strict";var i=n("FtD3");e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(i("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},"4TI/":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={props:{slides:{type:Array,required:!0,default:function(){return[]}},public_path:{type:String,required:!0}},data:function(){return{images:[],currentIndex:-1,content:[],current:!1,images_loaded:!1}},mounted:function(){this.getProps()},methods:{getProps:function(){this.setProps()},setProps:function(){var e=this;this.slides.forEach(function(t){e.images.push(e.public_path+"/storage/"+t.path),e.content.push(t.content)}),this.currentIndex=0,0==this.images.length?this.images.push="vendor/webkul/shop/assets/images/banner.png":this.images_loaded=!0},changeIndexLeft:function(){this.currentIndex>0?this.currentIndex--:0==this.currentIndex&&(this.currentIndex=this.images.length-1)},changeIndexRight:function(){this.currentIndex0&&t-1 in e)}_.fn=_.prototype={jquery:"3.4.1",constructor:_,length:0,toArray:function(){return l.call(this)},get:function(e){return null==e?l.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=_.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return _.each(this,e)},map:function(e){return this.pushStack(_.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(l.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|"+j+")"+j+"*"),V=new RegExp(j+"|>"),U=new RegExp(H),Y=new RegExp("^"+F+"$"),Z={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),TAG:new RegExp("^("+F+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+H),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+j+"*(even|odd|(([+-]|)(\\d*)n|)"+j+"*(?:([+-]|)"+j+"*(\\d+)|))"+j+"*\\)|)","i"),bool:new RegExp("^(?:"+N+")$","i"),needsContext:new RegExp("^"+j+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+j+"*((?:-\\d)?\\d*)"+j+"*\\)|)(?=[^-]|$)","i")},G=/HTML$/i,X=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+j+"?|("+j+")|.)","ig"),ne=function(e,t,n){var i="0x"+t-65536;return i!=i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},ie=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,re=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){f()},se=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{E.apply(D=W.call(x.childNodes),x.childNodes),D[x.childNodes.length].nodeType}catch(e){E={apply:D.length?function(e,t){L.apply(e,W.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function ae(e,t,i,r){var o,a,u,c,d,p,g,y=t&&t.ownerDocument,T=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return i;if(!r&&((t?t.ownerDocument||t:x)!==h&&f(t),t=t||h,v)){if(11!==T&&(d=Q.exec(e)))if(o=d[1]){if(9===T){if(!(u=t.getElementById(o)))return i;if(u.id===o)return i.push(u),i}else if(y&&(u=y.getElementById(o))&&w(t,u)&&u.id===o)return i.push(u),i}else{if(d[2])return E.apply(i,t.getElementsByTagName(e)),i;if((o=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return E.apply(i,t.getElementsByClassName(o)),i}if(n.qsa&&!$[e+" "]&&(!m||!m.test(e))&&(1!==T||"object"!==t.nodeName.toLowerCase())){if(g=e,y=t,1===T&&V.test(e)){for((c=t.getAttribute("id"))?c=c.replace(ie,re):t.setAttribute("id",c=b),a=(p=s(e)).length;a--;)p[a]="#"+c+" "+we(p[a]);g=p.join(","),y=ee.test(e)&&ge(t.parentNode)||t}try{return E.apply(i,y.querySelectorAll(g)),i}catch(t){$(e,!0)}finally{c===b&&t.removeAttribute("id")}}}return l(e.replace(P,"$1"),t,i,r)}function le(){var e=[];return function t(n,r){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function ue(e){return e[b]=!0,e}function ce(e){var t=h.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function de(e,t){for(var n=e.split("|"),r=n.length;r--;)i.attrHandle[n[r]]=t}function fe(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function he(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ve(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&se(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function me(e){return ue(function(t){return t=+t,ue(function(n,i){for(var r,o=e([],n.length,t),s=o.length;s--;)n[r=o[s]]&&(n[r]=!(i[r]=n[r]))})})}function ge(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ae.support={},o=ae.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!G.test(t||n&&n.nodeName||"HTML")},f=ae.setDocument=function(e){var t,r,s=e?e.ownerDocument||e:x;return s!==h&&9===s.nodeType&&s.documentElement?(p=(h=s).documentElement,v=!o(h),x!==h&&(r=h.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",oe,!1):r.attachEvent&&r.attachEvent("onunload",oe)),n.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ce(function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=J.test(h.getElementsByClassName),n.getById=ce(function(e){return p.appendChild(e).id=b,!h.getElementsByName||!h.getElementsByName(b).length}),n.getById?(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&v){var n=t.getElementById(e);return n?[n]:[]}}):(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&v){var n,i,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),i.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&v)return t.getElementsByClassName(e)},g=[],m=[],(n.qsa=J.test(h.querySelectorAll))&&(ce(function(e){p.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+j+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\["+j+"*(?:value|"+N+")"),e.querySelectorAll("[id~="+b+"-]").length||m.push("~="),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||m.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name"+j+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&m.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")})),(n.matchesSelector=J.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ce(function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),g.push("!=",H)}),m=m.length&&new RegExp(m.join("|")),g=g.length&&new RegExp(g.join("|")),t=J.test(p.compareDocumentPosition),w=t||J.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},A=t?function(e,t){if(e===t)return d=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(1&(i=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===i?e===h||e.ownerDocument===x&&w(x,e)?-1:t===h||t.ownerDocument===x&&w(x,t)?1:c?M(c,e)-M(c,t):0:4&i?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e===h?-1:t===h?1:r?-1:o?1:c?M(c,e)-M(c,t):0;if(r===o)return fe(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?fe(s[i],a[i]):s[i]===x?-1:a[i]===x?1:0},h):h},ae.matches=function(e,t){return ae(e,null,null,t)},ae.matchesSelector=function(e,t){if((e.ownerDocument||e)!==h&&f(e),n.matchesSelector&&v&&!$[t+" "]&&(!g||!g.test(t))&&(!m||!m.test(t)))try{var i=y.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){$(t,!0)}return ae(t,h,null,[e]).length>0},ae.contains=function(e,t){return(e.ownerDocument||e)!==h&&f(e),w(e,t)},ae.attr=function(e,t){(e.ownerDocument||e)!==h&&f(e);var r=i.attrHandle[t.toLowerCase()],o=r&&k.call(i.attrHandle,t.toLowerCase())?r(e,t,!v):void 0;return void 0!==o?o:n.attributes||!v?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},ae.escape=function(e){return(e+"").replace(ie,re)},ae.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ae.uniqueSort=function(e){var t,i=[],r=0,o=0;if(d=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(A),d){for(;t=e[o++];)t===e[o]&&(r=i.push(o));for(;r--;)e.splice(i[r],1)}return c=null,e},r=ae.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=r(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=r(t);return n},(i=ae.selectors={cacheLength:50,createPseudo:ue,match:Z,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ae.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ae.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Z.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=s(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=S[e+" "];return t||(t=new RegExp("(^|"+j+")"+e+"("+j+"|$)"))&&S(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(i){var r=ae.attr(i,e);return null==r?"!="===t:!t||(r+="","="===t?r===n:"!="===t?r!==n:"^="===t?n&&0===r.indexOf(n):"*="===t?n&&r.indexOf(n)>-1:"$="===t?n&&r.slice(-n.length)===n:"~="===t?(" "+r.replace(R," ")+" ").indexOf(n)>-1:"|="===t&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var u,c,d,f,h,p,v=o!==s?"nextSibling":"previousSibling",m=t.parentNode,g=a&&t.nodeName.toLowerCase(),y=!l&&!a,w=!1;if(m){if(o){for(;v;){for(f=t;f=f[v];)if(a?f.nodeName.toLowerCase()===g:1===f.nodeType)return!1;p=v="only"===e&&!p&&"nextSibling"}return!0}if(p=[s?m.firstChild:m.lastChild],s&&y){for(w=(h=(u=(c=(d=(f=m)[b]||(f[b]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===T&&u[1])&&u[2],f=h&&m.childNodes[h];f=++h&&f&&f[v]||(w=h=0)||p.pop();)if(1===f.nodeType&&++w&&f===t){c[e]=[T,h,w];break}}else if(y&&(w=h=(u=(c=(d=(f=t)[b]||(f[b]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===T&&u[1]),!1===w)for(;(f=++h&&f&&f[v]||(w=h=0)||p.pop())&&((a?f.nodeName.toLowerCase()!==g:1!==f.nodeType)||!++w||(y&&((c=(d=f[b]||(f[b]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]=[T,w]),f!==t)););return(w-=r)===i||w%i==0&&w/i>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ae.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ue(function(e,n){for(var i,o=r(e,t),s=o.length;s--;)e[i=M(e,o[s])]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ue(function(e){var t=[],n=[],i=a(e.replace(P,"$1"));return i[b]?ue(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:ue(function(e){return function(t){return ae(e,t).length>0}}),contains:ue(function(e){return e=e.replace(te,ne),function(t){return(t.textContent||r(t)).indexOf(e)>-1}}),lang:ue(function(e){return Y.test(e||"")||ae.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=v?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ve(!1),disabled:ve(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return K.test(e.nodeName)},input:function(e){return X.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:me(function(){return[0]}),last:me(function(e,t){return[t-1]}),eq:me(function(e,t,n){return[n<0?n+t:n]}),even:me(function(e,t){for(var n=0;nt?t:n;--i>=0;)e.push(i);return e}),gt:me(function(e,t,n){for(var i=n<0?n+t:n;++i1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function Te(e,t,n,i,r){for(var o,s=[],a=0,l=e.length,u=null!=t;a-1&&(o[u]=!(s[u]=d))}}else g=Te(g===s?g.splice(p,g.length):g),r?r(null,s,g,l):E.apply(s,g)})}function Se(e){for(var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=be(function(e){return e===t},a,!0),d=be(function(e){return M(t,e)>-1},a,!0),f=[function(e,n,i){var r=!s&&(i||n!==u)||((t=n).nodeType?c(e,n,i):d(e,n,i));return t=null,r}];l1&&xe(f),l>1&&we(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(P,"$1"),n,l0,r=e.length>0,o=function(o,s,a,l,c){var d,p,m,g=0,y="0",w=o&&[],b=[],x=u,_=o||r&&i.find.TAG("*",c),S=T+=null==x?1:Math.random()||.1,C=_.length;for(c&&(u=s===h||s||c);y!==C&&null!=(d=_[y]);y++){if(r&&d){for(p=0,s||d.ownerDocument===h||(f(d),a=!v);m=e[p++];)if(m(d,s||h,a)){l.push(d);break}c&&(T=S)}n&&((d=!m&&d)&&g--,o&&w.push(d))}if(g+=y,n&&y!==g){for(p=0;m=t[p++];)m(w,b,s,a);if(o){if(g>0)for(;y--;)w[y]||b[y]||(b[y]=O.call(l));b=Te(b)}E.apply(l,b),c&&!o&&b.length>0&&g+t.length>1&&ae.uniqueSort(l)}return c&&(T=S,u=x),w};return n?ue(o):o}(o,r))).selector=e}return a},l=ae.select=function(e,t,n,r){var o,l,u,c,d,f="function"==typeof e&&e,h=!r&&s(e=f.selector||e);if(n=n||[],1===h.length){if((l=h[0]=h[0].slice(0)).length>2&&"ID"===(u=l[0]).type&&9===t.nodeType&&v&&i.relative[l[1].type]){if(!(t=(i.find.ID(u.matches[0].replace(te,ne),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(o=Z.needsContext.test(e)?0:l.length;o--&&(u=l[o],!i.relative[c=u.type]);)if((d=i.find[c])&&(r=d(u.matches[0].replace(te,ne),ee.test(l[0].type)&&ge(t.parentNode)||t))){if(l.splice(o,1),!(e=r.length&&we(l)))return E.apply(n,r),n;break}}return(f||a(e,h))(r,t,!v,n,!t||ee.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(A).join("")===b,n.detectDuplicates=!!d,f(),n.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(h.createElement("fieldset"))}),ce(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||de("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ce(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||de("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||de(N,function(e,t,n){var i;if(!n)return!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),ae}(n);_.find=z,_.expr=z.selectors,_.expr[":"]=_.expr.pseudos,_.uniqueSort=_.unique=z.uniqueSort,_.text=z.getText,_.isXMLDoc=z.isXML,_.contains=z.contains,_.escapeSelector=z.escape;var $=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&_(e).is(n))break;i.push(e)}return i},A=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=_.expr.match.needsContext;function D(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var O=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function L(e,t,n){return y(t)?_.grep(e,function(e,i){return!!t.call(e,i,e)!==n}):t.nodeType?_.grep(e,function(e){return e===t!==n}):"string"!=typeof t?_.grep(e,function(e){return d.call(t,e)>-1!==n}):_.filter(t,e,n)}_.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?_.find.matchesSelector(i,e)?[i]:[]:_.find.matches(e,_.grep(t,function(e){return 1===e.nodeType}))},_.fn.extend({find:function(e){var t,n,i=this.length,r=this;if("string"!=typeof e)return this.pushStack(_(e).filter(function(){for(t=0;t1?_.uniqueSort(n):n},filter:function(e){return this.pushStack(L(this,e||[],!1))},not:function(e){return this.pushStack(L(this,e||[],!0))},is:function(e){return!!L(this,"string"==typeof e&&k.test(e)?_(e):e||[],!1).length}});var E,W=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(_.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||E,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:W.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof _?t[0]:t,_.merge(this,_.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:s,!0)),O.test(i[1])&&_.isPlainObject(t))for(i in t)y(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=s.getElementById(i[2]))&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(_):_.makeArray(e,this)}).prototype=_.fn,E=_(s);var M=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function j(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}_.fn.extend({has:function(e){var t=_(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&_.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?_.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?d.call(_(e),this[0]):d.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(_.uniqueSort(_.merge(this.get(),_(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),_.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return $(e,"parentNode")},parentsUntil:function(e,t,n){return $(e,"parentNode",n)},next:function(e){return j(e,"nextSibling")},prev:function(e){return j(e,"previousSibling")},nextAll:function(e){return $(e,"nextSibling")},prevAll:function(e){return $(e,"previousSibling")},nextUntil:function(e,t,n){return $(e,"nextSibling",n)},prevUntil:function(e,t,n){return $(e,"previousSibling",n)},siblings:function(e){return A((e.parentNode||{}).firstChild,e)},children:function(e){return A(e.firstChild)},contents:function(e){return void 0!==e.contentDocument?e.contentDocument:(D(e,"template")&&(e=e.content||e),_.merge([],e.childNodes))}},function(e,t){_.fn[e]=function(n,i){var r=_.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=_.filter(i,r)),this.length>1&&(N[e]||_.uniqueSort(r),M.test(e)&&r.reverse()),this.pushStack(r)}});var F=/[^\x20\t\r\n\f]+/g;function I(e){return e}function H(e){throw e}function R(e,t,n,i){var r;try{e&&y(r=e.promise)?r.call(e).done(t).fail(n):e&&y(r=e.then)?r.call(e,t,n):t.apply(void 0,[e].slice(i))}catch(e){n.apply(void 0,[e])}}_.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return _.each(e.match(F)||[],function(e,n){t[n]=!0}),t}(e):_.extend({},e);var t,n,i,r,o=[],s=[],a=-1,l=function(){for(r=r||e.once,i=t=!0;s.length;a=-1)for(n=s.shift();++a-1;)o.splice(n,1),n<=a&&a--}),this},has:function(e){return e?_.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=s=[],n||t||(o=n=""),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=[e,(n=n||[]).slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},_.extend({Deferred:function(e){var t=[["notify","progress",_.Callbacks("memory"),_.Callbacks("memory"),2],["resolve","done",_.Callbacks("once memory"),_.Callbacks("once memory"),0,"resolved"],["reject","fail",_.Callbacks("once memory"),_.Callbacks("once memory"),1,"rejected"]],i="pending",r={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return r.then(null,e)},pipe:function(){var e=arguments;return _.Deferred(function(n){_.each(t,function(t,i){var r=y(e[i[4]])&&e[i[4]];o[i[1]](function(){var e=r&&r.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this,r?[e]:arguments)})}),e=null}).promise()},then:function(e,i,r){var o=0;function s(e,t,i,r){return function(){var a=this,l=arguments,u=function(){var n,u;if(!(e=o&&(i!==H&&(a=void 0,l=[n]),t.rejectWith(a,l))}};e?c():(_.Deferred.getStackHook&&(c.stackTrace=_.Deferred.getStackHook()),n.setTimeout(c))}}return _.Deferred(function(n){t[0][3].add(s(0,n,y(r)?r:I,n.notifyWith)),t[1][3].add(s(0,n,y(e)?e:I)),t[2][3].add(s(0,n,y(i)?i:H))}).promise()},promise:function(e){return null!=e?_.extend(e,r):r}},o={};return _.each(t,function(e,n){var s=n[2],a=n[5];r[n[1]]=s.add,a&&s.add(function(){i=a},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),s.add(n[3].fire),o[n[0]]=function(){return o[n[0]+"With"](this===o?void 0:this,arguments),this},o[n[0]+"With"]=s.fireWith}),r.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,i=Array(n),r=l.call(arguments),o=_.Deferred(),s=function(e){return function(n){i[e]=this,r[e]=arguments.length>1?l.call(arguments):n,--t||o.resolveWith(i,r)}};if(t<=1&&(R(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||y(r[n]&&r[n].then)))return o.then();for(;n--;)R(r[n],s(n),o.reject);return o.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;_.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&P.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},_.readyException=function(e){n.setTimeout(function(){throw e})};var B=_.Deferred();function q(){s.removeEventListener("DOMContentLoaded",q),n.removeEventListener("load",q),_.ready()}_.fn.ready=function(e){return B.then(e).catch(function(e){_.readyException(e)}),this},_.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--_.readyWait:_.isReady)||(_.isReady=!0,!0!==e&&--_.readyWait>0||B.resolveWith(s,[_]))}}),_.ready.then=B.then,"complete"===s.readyState||"loading"!==s.readyState&&!s.documentElement.doScroll?n.setTimeout(_.ready):(s.addEventListener("DOMContentLoaded",q),n.addEventListener("load",q));var V=function(e,t,n,i,r,o,s){var a=0,l=e.length,u=null==n;if("object"===T(n))for(a in r=!0,n)V(e,t,a,n[a],!0,o,s);else if(void 0!==i&&(r=!0,y(i)||(s=!0),u&&(s?(t.call(e,i),t=null):(u=t,t=function(e,t,n){return u.call(_(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),_.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=J.get(e,t),n&&(!i||Array.isArray(n)?i=J.access(e,t,_.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=_.queue(e,t),i=n.length,r=n.shift(),o=_._queueHooks(e,t);"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,function(){_.dequeue(e,t)},o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:_.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),_.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,ge=/^$|^module$|\/(?:java|ecma)script/i,ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function we(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&D(e,t)?_.merge([e],n):n}function be(e,t){for(var n=0,i=e.length;n-1)r&&r.push(o);else if(u=ae(o),s=we(d.appendChild(o),"script"),u&&be(s),n)for(c=0;o=s[c++];)ge.test(o.type||"")&&n.push(o);return d}xe=s.createDocumentFragment().appendChild(s.createElement("div")),(Te=s.createElement("input")).setAttribute("type","radio"),Te.setAttribute("checked","checked"),Te.setAttribute("name","t"),xe.appendChild(Te),g.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",g.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue;var Ce=/^key/,ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,$e=/^([^.]*)(?:\.(.+)|)/;function Ae(){return!0}function ke(){return!1}function De(e,t){return e===function(){try{return s.activeElement}catch(e){}}()==("focus"===t)}function Oe(e,t,n,i,r,o){var s,a;if("object"==typeof t){for(a in"string"!=typeof n&&(i=i||n,n=void 0),t)Oe(e,a,n,i,t[a],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=ke;else if(!r)return e;return 1===o&&(s=r,(r=function(e){return _().off(e),s.apply(this,arguments)}).guid=s.guid||(s.guid=_.guid++)),e.each(function(){_.event.add(this,t,r,i,n)})}function Le(e,t,n){n?(J.set(e,t,!1),_.event.add(e,t,{namespace:!1,handler:function(e){var i,r,o=J.get(this,t);if(1&e.isTrigger&&this[t]){if(o.length)(_.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=l.call(arguments),J.set(this,t,o),i=n(this,t),this[t](),o!==(r=J.get(this,t))||i?J.set(this,t,!1):r={},o!==r)return e.stopImmediatePropagation(),e.preventDefault(),r.value}else o.length&&(J.set(this,t,{value:_.event.trigger(_.extend(o[0],_.Event.prototype),o.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===J.get(e,t)&&_.event.add(e,t,Ae)}_.event={global:{},add:function(e,t,n,i,r){var o,s,a,l,u,c,d,f,h,p,v,m=J.get(e);if(m)for(n.handler&&(n=(o=n).handler,r=o.selector),r&&_.find.matchesSelector(se,r),n.guid||(n.guid=_.guid++),(l=m.events)||(l=m.events={}),(s=m.handle)||(s=m.handle=function(t){return void 0!==_&&_.event.triggered!==t.type?_.event.dispatch.apply(e,arguments):void 0}),u=(t=(t||"").match(F)||[""]).length;u--;)h=v=(a=$e.exec(t[u])||[])[1],p=(a[2]||"").split(".").sort(),h&&(d=_.event.special[h]||{},h=(r?d.delegateType:d.bindType)||h,d=_.event.special[h]||{},c=_.extend({type:h,origType:v,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&_.expr.match.needsContext.test(r),namespace:p.join(".")},o),(f=l[h])||((f=l[h]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,i,p,s)||e.addEventListener&&e.addEventListener(h,s)),d.add&&(d.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),r?f.splice(f.delegateCount++,0,c):f.push(c),_.event.global[h]=!0)},remove:function(e,t,n,i,r){var o,s,a,l,u,c,d,f,h,p,v,m=J.hasData(e)&&J.get(e);if(m&&(l=m.events)){for(u=(t=(t||"").match(F)||[""]).length;u--;)if(h=v=(a=$e.exec(t[u])||[])[1],p=(a[2]||"").split(".").sort(),h){for(d=_.event.special[h]||{},f=l[h=(i?d.delegateType:d.bindType)||h]||[],a=a[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;o--;)c=f[o],!r&&v!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,d.remove&&d.remove.call(e,c));s&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,p,m.handle)||_.removeEvent(e,h,m.handle),delete l[h])}else for(h in l)_.event.remove(e,h+t[u],n,i,!0);_.isEmptyObject(l)&&J.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,s,a=_.event.fix(e),l=new Array(arguments.length),u=(J.get(this,"events")||{})[a.type]||[],c=_.event.special[a.type]||{};for(l[0]=a,t=1;t=1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(o=[],s={},n=0;n-1:_.find(r,this,null,[u]).length),s[r]&&o.push(i);o.length&&a.push({elem:u,handlers:o})}return u=this,l\x20\t\r\n\f]*)[^>]*)\/>/gi,We=/\s*$/g;function je(e,t){return D(e,"table")&&D(11!==t.nodeType?t:t.firstChild,"tr")&&_(e).children("tbody")[0]||e}function Fe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Ie(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function He(e,t){var n,i,r,o,s,a,l,u;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),s=J.set(t,o),u=o.events))for(r in delete s.handle,s.events={},u)for(n=0,i=u[r].length;n1&&"string"==typeof p&&!g.checkClone&&Me.test(p))return e.each(function(r){var o=e.eq(r);v&&(t[0]=p.call(this,r,o.html())),Re(o,t,n,i)});if(f&&(o=(r=Se(t,e[0].ownerDocument,!1,e,i)).firstChild,1===r.childNodes.length&&(r=o),o||i)){for(a=(s=_.map(we(r,"script"),Fe)).length;d")},clone:function(e,t,n){var i,r,o,s,a,l,u,c=e.cloneNode(!0),d=ae(e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||_.isXMLDoc(e)))for(s=we(c),i=0,r=(o=we(e)).length;i0&&be(s,!d&&we(e,"script")),c},cleanData:function(e){for(var t,n,i,r=_.event.special,o=0;void 0!==(n=e[o]);o++)if(X(n)){if(t=n[J.expando]){if(t.events)for(i in t.events)r[i]?_.event.remove(n,i):_.removeEvent(n,i,t.handle);n[J.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),_.fn.extend({detach:function(e){return Pe(this,e,!0)},remove:function(e){return Pe(this,e)},text:function(e){return V(this,function(e){return void 0===e?_.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(_.cleanData(we(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return _.clone(this,e,t)})},html:function(e){return V(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!We.test(e)&&!ye[(me.exec(e)||["",""])[1].toLowerCase()]){e=_.htmlPrefilter(e);try{for(;n=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-l-a-.5))||0),l}function rt(e,t,n){var i=qe(e),r=(!g.boxSizingReliable()||n)&&"border-box"===_.css(e,"boxSizing",!1,i),o=r,s=Ue(e,t,i),a="offset"+t[0].toUpperCase()+t.slice(1);if(Be.test(s)){if(!n)return s;s="auto"}return(!g.boxSizingReliable()&&r||"auto"===s||!parseFloat(s)&&"inline"===_.css(e,"display",!1,i))&&e.getClientRects().length&&(r="border-box"===_.css(e,"boxSizing",!1,i),(o=a in e)&&(s=e[a])),(s=parseFloat(s)||0)+it(e,t,n||(r?"border":"content"),o,i,s)+"px"}function ot(e,t,n,i,r){return new ot.prototype.init(e,t,n,i,r)}_.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ue(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,o,s,a=G(t),l=Qe.test(t),u=e.style;if(l||(t=Ke(a)),s=_.cssHooks[t]||_.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(r=s.get(e,!1,i))?r:u[t];"string"===(o=typeof n)&&(r=re.exec(n))&&r[1]&&(n=de(e,t,r),o="number"),null!=n&&n==n&&("number"!==o||l||(n+=r&&r[3]||(_.cssNumber[a]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&void 0===(n=s.set(e,n,i))||(l?u.setProperty(t,n):u[t]=n))}},css:function(e,t,n,i){var r,o,s,a=G(t);return Qe.test(t)||(t=Ke(a)),(s=_.cssHooks[t]||_.cssHooks[a])&&"get"in s&&(r=s.get(e,!0,n)),void 0===r&&(r=Ue(e,t,i)),"normal"===r&&t in tt&&(r=tt[t]),""===n||n?(o=parseFloat(r),!0===n||isFinite(o)?o||0:r):r}}),_.each(["height","width"],function(e,t){_.cssHooks[t]={get:function(e,n,i){if(n)return!Je.test(_.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?rt(e,t,i):ce(e,et,function(){return rt(e,t,i)})},set:function(e,n,i){var r,o=qe(e),s=!g.scrollboxSize()&&"absolute"===o.position,a=(s||i)&&"border-box"===_.css(e,"boxSizing",!1,o),l=i?it(e,t,i,a,o):0;return a&&s&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-it(e,t,"border",!1,o)-.5)),l&&(r=re.exec(n))&&"px"!==(r[3]||"px")&&(e.style[t]=n,n=_.css(e,t)),nt(0,n,l)}}}),_.cssHooks.marginLeft=Ye(g.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ue(e,"marginLeft"))||e.getBoundingClientRect().left-ce(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),_.each({margin:"",padding:"",border:"Width"},function(e,t){_.cssHooks[e+t]={expand:function(n){for(var i=0,r={},o="string"==typeof n?n.split(" "):[n];i<4;i++)r[e+oe[i]+t]=o[i]||o[i-2]||o[0];return r}},"margin"!==e&&(_.cssHooks[e+t].set=nt)}),_.fn.extend({css:function(e,t){return V(this,function(e,t,n){var i,r,o={},s=0;if(Array.isArray(t)){for(i=qe(e),r=t.length;s1)}}),_.Tween=ot,ot.prototype={constructor:ot,init:function(e,t,n,i,r,o){this.elem=e,this.prop=n,this.easing=r||_.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=o||(_.cssNumber[n]?"":"px")},cur:function(){var e=ot.propHooks[this.prop];return e&&e.get?e.get(this):ot.propHooks._default.get(this)},run:function(e){var t,n=ot.propHooks[this.prop];return this.options.duration?this.pos=t=_.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):ot.propHooks._default.set(this),this}},ot.prototype.init.prototype=ot.prototype,ot.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=_.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){_.fx.step[e.prop]?_.fx.step[e.prop](e):1!==e.elem.nodeType||!_.cssHooks[e.prop]&&null==e.elem.style[Ke(e.prop)]?e.elem[e.prop]=e.now:_.style(e.elem,e.prop,e.now+e.unit)}}},ot.propHooks.scrollTop=ot.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},_.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},_.fx=ot.prototype.init,_.fx.step={};var st,at,lt=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function ct(){at&&(!1===s.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(ct):n.setTimeout(ct,_.fx.interval),_.fx.tick())}function dt(){return n.setTimeout(function(){st=void 0}),st=Date.now()}function ft(e,t){var n,i=0,r={height:e};for(t=t?1:0;i<4;i+=2-t)r["margin"+(n=oe[i])]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function ht(e,t,n){for(var i,r=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,s=r.length;o1)},removeAttr:function(e){return this.each(function(){_.removeAttr(this,e)})}}),_.extend({attr:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?_.prop(e,t,n):(1===o&&_.isXMLDoc(e)||(r=_.attrHooks[t.toLowerCase()]||(_.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void _.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:null==(i=_.find.attr(e,t))?void 0:i)},attrHooks:{type:{set:function(e,t){if(!g.radioValue&&"radio"===t&&D(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i=0,r=t&&t.match(F);if(r&&1===e.nodeType)for(;n=r[i++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return!1===t?_.removeAttr(e,n):e.setAttribute(n,n),n}},_.each(_.expr.match.bool.source.match(/\w+/g),function(e,t){var n=mt[t]||_.find.attr;mt[t]=function(e,t,i){var r,o,s=t.toLowerCase();return i||(o=mt[s],mt[s]=r,r=null!=n(e,t,i)?s:null,mt[s]=o),r}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function wt(e){return(e.match(F)||[]).join(" ")}function bt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(F)||[]}_.fn.extend({prop:function(e,t){return V(this,_.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[_.propFix[e]||e]})}}),_.extend({prop:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&_.isXMLDoc(e)||(t=_.propFix[t]||t,r=_.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=_.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(_.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_.propFix[this.toLowerCase()]=this}),_.fn.extend({addClass:function(e){var t,n,i,r,o,s,a,l=0;if(y(e))return this.each(function(t){_(this).addClass(e.call(this,t,bt(this)))});if((t=xt(e)).length)for(;n=this[l++];)if(r=bt(n),i=1===n.nodeType&&" "+wt(r)+" "){for(s=0;o=t[s++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");r!==(a=wt(i))&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,i,r,o,s,a,l=0;if(y(e))return this.each(function(t){_(this).removeClass(e.call(this,t,bt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)for(;n=this[l++];)if(r=bt(n),i=1===n.nodeType&&" "+wt(r)+" "){for(s=0;o=t[s++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");r!==(a=wt(i))&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e,i="string"===n||Array.isArray(e);return"boolean"==typeof t&&i?t?this.addClass(e):this.removeClass(e):y(e)?this.each(function(n){_(this).toggleClass(e.call(this,n,bt(this),t),t)}):this.each(function(){var t,r,o,s;if(i)for(r=0,o=_(this),s=xt(e);t=s[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=bt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+wt(bt(n))+" ").indexOf(t)>-1)return!0;return!1}});var Tt=/\r/g;_.fn.extend({val:function(e){var t,n,i,r=this[0];return arguments.length?(i=y(e),this.each(function(n){var r;1===this.nodeType&&(null==(r=i?e.call(this,n,_(this).val()):e)?r="":"number"==typeof r?r+="":Array.isArray(r)&&(r=_.map(r,function(e){return null==e?"":e+""})),(t=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))})):r?(t=_.valHooks[r.type]||_.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(Tt,""):null==n?"":n:void 0}}),_.extend({valHooks:{option:{get:function(e){var t=_.find.attr(e,"value");return null!=t?t:wt(_.text(e))}},select:{get:function(e){var t,n,i,r=e.options,o=e.selectedIndex,s="select-one"===e.type,a=s?null:[],l=s?o+1:r.length;for(i=o<0?l:s?o:0;i-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),_.each(["radio","checkbox"],function(){_.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=_.inArray(_(e).val(),t)>-1}},g.checkOn||(_.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),g.focusin="onfocusin"in n;var _t=/^(?:focusinfocus|focusoutblur)$/,St=function(e){e.stopPropagation()};_.extend(_.event,{trigger:function(e,t,i,r){var o,a,l,u,c,d,f,h,v=[i||s],m=p.call(e,"type")?e.type:e,g=p.call(e,"namespace")?e.namespace.split("."):[];if(a=h=l=i=i||s,3!==i.nodeType&&8!==i.nodeType&&!_t.test(m+_.event.triggered)&&(m.indexOf(".")>-1&&(m=(g=m.split(".")).shift(),g.sort()),c=m.indexOf(":")<0&&"on"+m,(e=e[_.expando]?e:new _.Event(m,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),t=null==t?[e]:_.makeArray(t,[e]),f=_.event.special[m]||{},r||!f.trigger||!1!==f.trigger.apply(i,t))){if(!r&&!f.noBubble&&!w(i)){for(u=f.delegateType||m,_t.test(u+m)||(a=a.parentNode);a;a=a.parentNode)v.push(a),l=a;l===(i.ownerDocument||s)&&v.push(l.defaultView||l.parentWindow||n)}for(o=0;(a=v[o++])&&!e.isPropagationStopped();)h=a,e.type=o>1?u:f.bindType||m,(d=(J.get(a,"events")||{})[e.type]&&J.get(a,"handle"))&&d.apply(a,t),(d=c&&a[c])&&d.apply&&X(a)&&(e.result=d.apply(a,t),!1===e.result&&e.preventDefault());return e.type=m,r||e.isDefaultPrevented()||f._default&&!1!==f._default.apply(v.pop(),t)||!X(i)||c&&y(i[m])&&!w(i)&&((l=i[c])&&(i[c]=null),_.event.triggered=m,e.isPropagationStopped()&&h.addEventListener(m,St),i[m](),e.isPropagationStopped()&&h.removeEventListener(m,St),_.event.triggered=void 0,l&&(i[c]=l)),e.result}},simulate:function(e,t,n){var i=_.extend(new _.Event,n,{type:e,isSimulated:!0});_.event.trigger(i,null,t)}}),_.fn.extend({trigger:function(e,t){return this.each(function(){_.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return _.event.trigger(e,t,n,!0)}}),g.focusin||_.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){_.event.simulate(t,e.target,_.event.fix(e))};_.event.special[t]={setup:function(){var i=this.ownerDocument||this,r=J.access(i,t);r||i.addEventListener(e,n,!0),J.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=J.access(i,t)-1;r?J.access(i,t,r):(i.removeEventListener(e,n,!0),J.remove(i,t))}}});var Ct=n.location,zt=Date.now(),$t=/\?/;_.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||_.error("Invalid XML: "+e),t};var At=/\[\]$/,kt=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Lt(e,t,n,i){var r;if(Array.isArray(t))_.each(t,function(t,r){n||At.test(e)?i(e,r):Lt(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,n,i)});else if(n||"object"!==T(t))i(e,t);else for(r in t)Lt(e+"["+r+"]",t[r],n,i)}_.param=function(e,t){var n,i=[],r=function(e,t){var n=y(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!_.isPlainObject(e))_.each(e,function(){r(this.name,this.value)});else for(n in e)Lt(n,e[n],t,r);return i.join("&")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=_.prop(this,"elements");return e?_.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!_(this).is(":disabled")&&Ot.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!ve.test(e))}).map(function(e,t){var n=_(this).val();return null==n?null:Array.isArray(n)?_.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Et=/%20/g,Wt=/#.*$/,Mt=/([?&])_=[^&]*/,Nt=/^(.*?):[ \t]*([^\r\n]*)$/gm,jt=/^(?:GET|HEAD)$/,Ft=/^\/\//,It={},Ht={},Rt="*/".concat("*"),Pt=s.createElement("a");function Bt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,r=0,o=t.toLowerCase().match(F)||[];if(y(n))for(;i=o[r++];)"+"===i[0]?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function qt(e,t,n,i){var r={},o=e===Ht;function s(a){var l;return r[a]=!0,_.each(e[a]||[],function(e,a){var u=a(t,n,i);return"string"!=typeof u||o||r[u]?o?!(l=u):void 0:(t.dataTypes.unshift(u),s(u),!1)}),l}return s(t.dataTypes[0])||!r["*"]&&s("*")}function Vt(e,t){var n,i,r=_.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((r[n]?e:i||(i={}))[n]=t[n]);return i&&_.extend(!0,e,i),e}Pt.href=Ct.href,_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Vt(Vt(e,_.ajaxSettings),t):Vt(_.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Ht),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,r,o,a,l,u,c,d,f,h,p=_.ajaxSetup({},t),v=p.context||p,m=p.context&&(v.nodeType||v.jquery)?_(v):_.event,g=_.Deferred(),y=_.Callbacks("once memory"),w=p.statusCode||{},b={},x={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(c){if(!a)for(a={};t=Nt.exec(o);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return c?o:null},setRequestHeader:function(e,t){return null==c&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)S.always(e[S.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),C(0,t),this}};if(g.promise(S),p.url=((e||p.url||Ct.href)+"").replace(Ft,Ct.protocol+"//"),p.type=t.method||t.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(F)||[""],null==p.crossDomain){u=s.createElement("a");try{u.href=p.url,u.href=u.href,p.crossDomain=Pt.protocol+"//"+Pt.host!=u.protocol+"//"+u.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=_.param(p.data,p.traditional)),qt(It,p,t,S),c)return S;for(f in(d=_.event&&p.global)&&0==_.active++&&_.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!jt.test(p.type),r=p.url.replace(Wt,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(Et,"+")):(h=p.url.slice(r.length),p.data&&(p.processData||"string"==typeof p.data)&&(r+=($t.test(r)?"&":"?")+p.data,delete p.data),!1===p.cache&&(r=r.replace(Mt,"$1"),h=($t.test(r)?"&":"?")+"_="+zt+++h),p.url=r+h),p.ifModified&&(_.lastModified[r]&&S.setRequestHeader("If-Modified-Since",_.lastModified[r]),_.etag[r]&&S.setRequestHeader("If-None-Match",_.etag[r])),(p.data&&p.hasContent&&!1!==p.contentType||t.contentType)&&S.setRequestHeader("Content-Type",p.contentType),S.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Rt+"; q=0.01":""):p.accepts["*"]),p.headers)S.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(!1===p.beforeSend.call(v,S,p)||c))return S.abort();if(T="abort",y.add(p.complete),S.done(p.success),S.fail(p.error),i=qt(Ht,p,t,S)){if(S.readyState=1,d&&m.trigger("ajaxSend",[S,p]),c)return S;p.async&&p.timeout>0&&(l=n.setTimeout(function(){S.abort("timeout")},p.timeout));try{c=!1,i.send(b,C)}catch(e){if(c)throw e;C(-1,e)}}else C(-1,"No Transport");function C(e,t,s,a){var u,f,h,b,x,T=t;c||(c=!0,l&&n.clearTimeout(l),i=void 0,o=a||"",S.readyState=e>0?4:0,u=e>=200&&e<300||304===e,s&&(b=function(e,t,n){for(var i,r,o,s,a=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(r in a)if(a[r]&&a[r].test(i)){l.unshift(r);break}if(l[0]in n)o=l[0];else{for(r in n){if(!l[0]||e.converters[r+" "+l[0]]){o=r;break}s||(s=r)}o=o||s}if(o)return o!==l[0]&&l.unshift(o),n[o]}(p,S,s)),b=function(e,t,n,i){var r,o,s,a,l,u={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)u[s.toLowerCase()]=e.converters[s];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(s=u[l+" "+o]||u["* "+o]))for(r in u)if((a=r.split(" "))[1]===o&&(s=u[l+" "+a[0]]||u["* "+a[0]])){!0===s?s=u[r]:!0!==u[r]&&(o=a[0],c.unshift(a[1]));break}if(!0!==s)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:"parsererror",error:s?e:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}(p,b,S,u),u?(p.ifModified&&((x=S.getResponseHeader("Last-Modified"))&&(_.lastModified[r]=x),(x=S.getResponseHeader("etag"))&&(_.etag[r]=x)),204===e||"HEAD"===p.type?T="nocontent":304===e?T="notmodified":(T=b.state,f=b.data,u=!(h=b.error))):(h=T,!e&&T||(T="error",e<0&&(e=0))),S.status=e,S.statusText=(t||T)+"",u?g.resolveWith(v,[f,T,S]):g.rejectWith(v,[S,T,h]),S.statusCode(w),w=void 0,d&&m.trigger(u?"ajaxSuccess":"ajaxError",[S,p,u?f:h]),y.fireWith(v,[S,T]),d&&(m.trigger("ajaxComplete",[S,p]),--_.active||_.event.trigger("ajaxStop")))}return S},getJSON:function(e,t,n){return _.get(e,t,n,"json")},getScript:function(e,t){return _.get(e,void 0,t,"script")}}),_.each(["get","post"],function(e,t){_[t]=function(e,n,i,r){return y(n)&&(r=r||i,i=n,n=void 0),_.ajax(_.extend({url:e,type:t,dataType:r,data:n,success:i},_.isPlainObject(e)&&e))}}),_._evalUrl=function(e,t){return _.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){_.globalEval(e,t)}})},_.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=_(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return y(e)?this.each(function(t){_(this).wrapInner(e.call(this,t))}):this.each(function(){var t=_(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=y(e);return this.each(function(n){_(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){_(this).replaceWith(this.childNodes)}),this}}),_.expr.pseudos.hidden=function(e){return!_.expr.pseudos.visible(e)},_.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},_.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Yt=_.ajaxSettings.xhr();g.cors=!!Yt&&"withCredentials"in Yt,g.ajax=Yt=!!Yt,_.ajaxTransport(function(e){var t,i;if(g.cors||Yt&&!e.crossDomain)return{send:function(r,o){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];for(s in e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest"),r)a.setRequestHeader(s,r[s]);t=function(e){return function(){t&&(t=i=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Ut[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),i=a.onerror=a.ontimeout=t("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&n.setTimeout(function(){t&&i()})},t=t("abort");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),_.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return _.globalEval(e),e}}}),_.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),_.ajaxTransport("script",function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(i,r){t=_(" + + +@endpush \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/sales/refunds/index.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/refunds/index.blade.php new file mode 100755 index 000000000..ec85e3c88 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sales/refunds/index.blade.php @@ -0,0 +1,42 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.sales.refunds.title') }} +@stop + +@section('content') +
+ + +
+ @inject('refundGrid', 'Webkul\Admin\DataGrids\OrderRefundDataGrid') + + {!! $refundGrid->render() !!} +
+
+ + +

{{ __('admin::app.export.download') }}

+
+ +
+
+ +@stop + +@push('scripts') + @include('admin::export.export', ['gridName' => $refundGrid]) +@endpush \ No newline at end of file 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 new file mode 100755 index 000000000..c3e91847d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sales/refunds/view.blade.php @@ -0,0 +1,314 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.sales.refunds.view-title', ['refund_id' => $refund->id]) }} +@stop + +@section('content-wrapper') + + order; ?> + +
+ + +
+
+ + +
+ +
+
+ {{ __('admin::app.sales.orders.order-info') }} +
+ +
+
+ + {{ __('admin::app.sales.refunds.order-id') }} + + + + #{{ $order->id }} + +
+ +
+ + {{ __('admin::app.sales.orders.order-date') }} + + + + {{ $order->created_at }} + +
+ +
+ + {{ __('admin::app.sales.orders.order-status') }} + + + + {{ $order->status_label }} + +
+ +
+ + {{ __('admin::app.sales.orders.channel') }} + + + + {{ $order->channel_name }} + +
+
+
+ +
+
+ {{ __('admin::app.sales.orders.account-info') }} +
+ +
+
+ + {{ __('admin::app.sales.orders.customer-name') }} + + + + {{ $refund->order->customer_full_name }} + +
+ +
+ + {{ __('admin::app.sales.orders.email') }} + + + + {{ $refund->order->customer_email }} + +
+
+
+ +
+
+ + +
+ +
+
+ {{ __('admin::app.sales.orders.billing-address') }} +
+ +
+ + @include ('admin::sales.address', ['address' => $order->billing_address]) + +
+
+ + @if ($order->shipping_address) +
+
+ {{ __('admin::app.sales.orders.shipping-address') }} +
+ +
+ + @include ('admin::sales.address', ['address' => $order->shipping_address]) + +
+
+ @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 }} + +
+
+
+ +
+
+ {{ __('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) }} + +
+
+
+
+
+ + +
+ +
+ + + + + + + + + + @if ($refund->base_discount_amount > 0) + + @endif + + + + + + + @foreach ($refund->items as $item) + + + + + + + + + + + + + + @if ($refund->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') }}
{{ $item->child ? $item->child->sku : $item->sku }} + {{ $item->name }} + + @if ($html = $item->getOptionDetailHtml()) +

{{ $html }}

+ @endif +
{{ 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 ($refund->base_shipping_amount > 0) + + + + + + @endif + + @if ($refund->base_tax_amount > 0) + + + + + + @endif + + @if ($refund->base_discount_amount > 0) + + + + + + @endif + + + + + + + + + + + + + + + + + + +
{{ __('admin::app.sales.orders.subtotal') }}-{{ core()->formatBasePrice($refund->base_sub_total) }}
{{ __('admin::app.sales.orders.shipping-handling') }}-{{ core()->formatBasePrice($refund->base_shipping_amount) }}
{{ __('admin::app.sales.orders.tax') }}-{{ core()->formatBasePrice($refund->base_tax_amount) }}
{{ __('admin::app.sales.orders.discount') }}--{{ core()->formatBasePrice($refund->base_discount_amount) }}
{{ __('admin::app.sales.refunds.adjustment-refund') }}-{{ core()->formatBasePrice($refund->base_adjustment_refund) }}
{{ __('admin::app.sales.refunds.adjustment-fee') }}-{{ core()->formatBasePrice($refund->base_adjustment_fee) }}
{{ __('admin::app.sales.orders.grand-total') }}-{{ core()->formatBasePrice($refund->base_grand_total) }}
+ +
+
+ +
+
+ +
+@stop \ No newline at end of file diff --git a/packages/Webkul/Product/src/Http/Controllers/ProductController.php b/packages/Webkul/Product/src/Http/Controllers/ProductController.php index 4996e6074..a173e3cbb 100755 --- a/packages/Webkul/Product/src/Http/Controllers/ProductController.php +++ b/packages/Webkul/Product/src/Http/Controllers/ProductController.php @@ -129,7 +129,7 @@ class ProductController extends Controller */ public function store() { - if (!request()->get('family') && request()->input('type') == 'configurable' && request()->input('sku') != '') { + if (! request()->get('family') && request()->input('type') == 'configurable' && request()->input('sku') != '') { return redirect(url()->current() . '?family=' . request()->input('attribute_family_id') . '&sku=' . request()->input('sku')); } diff --git a/packages/Webkul/Sales/src/Contracts/Refund.php b/packages/Webkul/Sales/src/Contracts/Refund.php new file mode 100755 index 000000000..c8e2a7902 --- /dev/null +++ b/packages/Webkul/Sales/src/Contracts/Refund.php @@ -0,0 +1,7 @@ +increments('id'); + $table->string('increment_id')->nullable(); + $table->string('state')->nullable(); + $table->boolean('email_sent')->default(0); + + $table->integer('total_qty')->nullable(); + + $table->string('base_currency_code')->nullable(); + $table->string('channel_currency_code')->nullable(); + $table->string('order_currency_code')->nullable(); + + $table->decimal('adjustment_refund', 12, 4)->default(0)->nullable(); + $table->decimal('base_adjustment_refund', 12, 4)->default(0)->nullable(); + + $table->decimal('adjustment_fee', 12, 4)->default(0)->nullable(); + $table->decimal('base_adjustment_fee', 12, 4)->default(0)->nullable(); + + $table->decimal('sub_total', 12, 4)->default(0)->nullable(); + $table->decimal('base_sub_total', 12, 4)->default(0)->nullable(); + + $table->decimal('grand_total', 12, 4)->default(0)->nullable(); + $table->decimal('base_grand_total', 12, 4)->default(0)->nullable(); + + $table->decimal('shipping_amount', 12, 4)->default(0)->nullable(); + $table->decimal('base_shipping_amount', 12, 4)->default(0)->nullable(); + + $table->decimal('tax_amount', 12, 4)->default(0)->nullable(); + $table->decimal('base_tax_amount', 12, 4)->default(0)->nullable(); + + $table->decimal('discount_percent', 12, 4)->default(0)->nullable(); + $table->decimal('discount_amount', 12, 4)->default(0)->nullable(); + $table->decimal('base_discount_amount', 12, 4)->default(0)->nullable(); + + $table->integer('order_id')->unsigned()->nullable(); + $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('refunds'); + } +} diff --git a/packages/Webkul/Sales/src/Database/Migrations/2019_09_11_184519_create_refund_items_table.php b/packages/Webkul/Sales/src/Database/Migrations/2019_09_11_184519_create_refund_items_table.php new file mode 100644 index 000000000..d522f9987 --- /dev/null +++ b/packages/Webkul/Sales/src/Database/Migrations/2019_09_11_184519_create_refund_items_table.php @@ -0,0 +1,62 @@ +increments('id'); + $table->string('name')->nullable(); + $table->string('description')->nullable(); + $table->string('sku')->nullable(); + $table->integer('qty')->nullable(); + + $table->decimal('price', 12,4)->default(0); + $table->decimal('base_price', 12,4)->default(0); + + $table->decimal('total', 12,4)->default(0); + $table->decimal('base_total', 12,4)->default(0); + + $table->decimal('tax_amount', 12,4)->default(0)->nullable(); + $table->decimal('base_tax_amount', 12,4)->default(0)->nullable(); + + $table->decimal('discount_percent', 12, 4)->default(0)->nullable(); + $table->decimal('discount_amount', 12, 4)->default(0)->nullable(); + $table->decimal('base_discount_amount', 12, 4)->default(0)->nullable(); + + $table->integer('product_id')->unsigned()->nullable(); + $table->string('product_type')->nullable(); + + $table->integer('order_item_id')->unsigned()->nullable(); + $table->foreign('order_item_id')->references('id')->on('order_items')->onDelete('cascade'); + + $table->integer('refund_id')->unsigned()->nullable(); + $table->foreign('refund_id')->references('id')->on('refunds')->onDelete('cascade'); + + $table->integer('parent_id')->unsigned()->nullable(); + $table->foreign('parent_id')->references('id')->on('refund_items')->onDelete('cascade'); + + $table->json('additional')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('refund_items'); + } +} diff --git a/packages/Webkul/Sales/src/Models/Order.php b/packages/Webkul/Sales/src/Models/Order.php index d43a5f4d5..98f882c6a 100755 --- a/packages/Webkul/Sales/src/Models/Order.php +++ b/packages/Webkul/Sales/src/Models/Order.php @@ -74,6 +74,14 @@ class Order extends Model implements OrderContract { return $this->hasMany(InvoiceProxy::modelClass()); } + + /** + * Get the order refunds record associated with the order. + */ + public function refunds() + { + return $this->hasMany(RefundProxy::modelClass()); + } /** * Get the customer record associated with the order. @@ -148,9 +156,8 @@ class Order extends Model implements OrderContract return false; foreach ($this->items as $item) { - if ($item->qty_to_ship > 0) { + if ($item->qty_to_ship > 0) return true; - } } return false; @@ -165,16 +172,15 @@ class Order extends Model implements OrderContract return false; foreach ($this->items as $item) { - if ($item->qty_to_invoice > 0) { + if ($item->qty_to_invoice > 0) return true; - } } return false; } /** - * Checks if order could can canceled on not + * Checks if order can be canceled or not */ public function canCancel() { @@ -182,11 +188,29 @@ class Order extends Model implements OrderContract return false; foreach ($this->items as $item) { - if ($item->qty_to_cancel > 0) { + if ($item->qty_to_cancel > 0) return true; - } } return false; } + + /** + * Checks if order can be refunded or not + */ + public function canRefund() + { + if ($this->status == 'fraud') + return false; + + foreach ($this->items as $item) { + if ($item->qty_to_refund > 0) + return true; + } + + if ($this->base_grand_total_invoiced - $this->base_grand_total_refunded > 0) + return true; + + return false; + } } \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Models/OrderItem.php b/packages/Webkul/Sales/src/Models/OrderItem.php index f585d97c5..757f1634a 100755 --- a/packages/Webkul/Sales/src/Models/OrderItem.php +++ b/packages/Webkul/Sales/src/Models/OrderItem.php @@ -38,6 +38,14 @@ class OrderItem extends Model implements OrderItemContract return $this->qty_ordered - $this->qty_canceled - $this->qty_invoiced; } + /** + * Get remaining qty for refund. + */ + public function getQtyToRefundAttribute() + { + return $this->qty_invoiced - $this->qty_refunded; + } + /** * Get the order record associated with the order item. */ @@ -78,6 +86,14 @@ class OrderItem extends Model implements OrderItemContract return $this->hasMany(ShipmentItemProxy::modelClass()); } + /** + * Get the refund items record associated with the order item. + */ + public function refund_items() + { + return $this->hasMany(RefundItemProxy::modelClass()); + } + /** * Returns configurable option html */ @@ -94,4 +110,22 @@ class OrderItem extends Model implements OrderItemContract return implode(', ', $labels); } } + + /** + * @return array + */ + public function toArray() + { + $array = parent::toArray(); + + $array['qty_to_ship'] = $this->qty_to_ship; + + $array['qty_to_invoice'] = $this->qty_to_invoice; + + $array['qty_to_cancel'] = $this->qty_to_cancel; + + $array['qty_to_refund'] = $this->qty_to_refund; + + return $array; + } } \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Models/Refund.php b/packages/Webkul/Sales/src/Models/Refund.php new file mode 100644 index 000000000..fa6806ae1 --- /dev/null +++ b/packages/Webkul/Sales/src/Models/Refund.php @@ -0,0 +1,61 @@ +statusLabel[$this->state]) ? $this->statusLabel[$this->state] : ''; + } + + /** + * Get the order that belongs to the Refund. + */ + public function order() + { + return $this->belongsTo(OrderProxy::modelClass()); + } + + /** + * Get the Refund items record associated with the Refund. + */ + public function items() { + return $this->hasMany(RefundItemProxy::modelClass())->whereNull('parent_id'); + } + + /** + * Get the customer record associated with the Refund. + */ + public function customer() + { + return $this->morphTo(); + } + + /** + * Get the channel record associated with the Refund. + */ + public function channel() + { + return $this->morphTo(); + } + + /** + * Get the addresses for the shipment. + */ + public function address() + { + return $this->belongsTo(OrderAddressProxy::modelClass(), 'order_address_id'); + } +} \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Models/RefundItem.php b/packages/Webkul/Sales/src/Models/RefundItem.php new file mode 100644 index 000000000..6285e2591 --- /dev/null +++ b/packages/Webkul/Sales/src/Models/RefundItem.php @@ -0,0 +1,64 @@ + 'array', + ]; + + /** + * Get the Refund record associated with the Refund item. + */ + public function refund() + { + return $this->belongsTo(RefundProxy::modelClass()); + } + + /** + * Get the order item record associated with the Refund item. + */ + public function order_item() + { + return $this->belongsTo(OrderItemProxy::modelClass()); + } + + /** + * Get the Refund record associated with the Refund item. + */ + public function product() + { + return $this->morphTo(); + } + + /** + * Get the child item record associated with the Refund item. + */ + public function child() + { + return $this->hasOne(RefundItemProxy::modelClass(), 'parent_id'); + } + + /** + * Returns configurable option html + */ + public function getOptionDetailHtml() + { + + if ($this->type == 'configurable' && isset($this->additional['attributes'])) { + $labels = []; + + foreach ($this->additional['attributes'] as $attribute) { + $labels[] = $attribute['attribute_name'] . ' : ' . $attribute['option_label']; + } + + return implode(', ', $labels); + } + } +} \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Models/RefundItemProxy.php b/packages/Webkul/Sales/src/Models/RefundItemProxy.php new file mode 100644 index 000000000..fcfdf495b --- /dev/null +++ b/packages/Webkul/Sales/src/Models/RefundItemProxy.php @@ -0,0 +1,10 @@ +order->shipping_amount) { foreach ($invoice->order->invoices as $prevInvoice) { - if ((float) $prevInvoice->shipping_amount) { - $shippingAmount = 0; - $baseShippingAmount = 0; - } + if ((float) $prevInvoice->shipping_amount) + $shippingAmount = $baseShippingAmount = 0; } } diff --git a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php index f01c22201..0ccd5adb6 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php @@ -47,9 +47,13 @@ class OrderItemRepository extends Repository */ public function collectTotals($orderItem) { - $qtyShipped = $qtyInvoiced = 0; + $qtyShipped = $qtyInvoiced = $qtyRefunded = 0; + $totalInvoiced = $baseTotalInvoiced = 0; $taxInvoiced = $baseTaxInvoiced = 0; + + $totalRefunded = $baseTotalRefunded = 0; + $taxRefunded = $baseTaxRefunded = 0; foreach ($orderItem->invoice_items as $invoiceItem) { $qtyInvoiced += $invoiceItem->qty; @@ -65,8 +69,19 @@ class OrderItemRepository extends Repository $qtyShipped += $shipmentItem->qty; } + foreach ($orderItem->refund_items as $refundItem) { + $qtyRefunded += $refundItem->qty; + + $totalRefunded += $refundItem->total; + $baseTotalRefunded += $refundItem->base_total; + + $taxRefunded += $refundItem->tax_amount; + $baseTaxRefunded += $refundItem->base_tax_amount; + } + $orderItem->qty_shipped = $qtyShipped; $orderItem->qty_invoiced = $qtyInvoiced; + $orderItem->qty_refunded = $qtyRefunded; $orderItem->total_invoiced = $totalInvoiced; $orderItem->base_total_invoiced = $baseTotalInvoiced; @@ -74,6 +89,12 @@ class OrderItemRepository extends Repository $orderItem->tax_amount_invoiced = $taxInvoiced; $orderItem->base_tax_amount_invoiced = $baseTaxInvoiced; + $orderItem->amount_refunded = $totalRefunded; + $orderItem->base_amount_refunded = $baseTotalRefunded; + + $orderItem->tax_amount_refunded = $taxRefunded; + $orderItem->base_tax_amount_refunded = $baseTaxRefunded; + $orderItem->save(); return $orderItem; diff --git a/packages/Webkul/Sales/src/Repositories/OrderRepository.php b/packages/Webkul/Sales/src/Repositories/OrderRepository.php index e3941aa84..650b8ba2a 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderRepository.php @@ -287,6 +287,32 @@ class OrderRepository extends Repository $order->grand_total_invoiced = $order->sub_total_invoiced + $order->shipping_invoiced + $order->tax_amount_invoiced - $order->discount_invoiced; $order->base_grand_total_invoiced = $order->base_sub_total_invoiced + $order->base_shipping_invoiced + $order->base_tax_amount_invoiced - $order->base_discount_invoiced; + + $order->sub_total_refunded = $order->base_sub_total_refunded = 0; + $order->shipping_refunded = $order->base_shipping_refunded = 0; + $order->tax_amount_refunded = $order->base_tax_amount_refunded = 0; + $order->grand_total_refunded = $order->base_grand_total_refunded = 0; + + foreach ($order->refunds as $refund) { + $order->sub_total_refunded += $refund->sub_total; + $order->base_sub_total_refunded += $refund->base_sub_total; + + $order->shipping_refunded += $refund->shipping_amount; + $order->base_shipping_refunded += $refund->base_shipping_amount; + + $order->tax_amount_refunded += $refund->tax_amount; + $order->base_tax_amount_refunded += $refund->base_tax_amount; + + $order->discount_refunded += $refund->discount_amount; + $order->base_discount_refunded += $refund->base_discount_amount; + + $order->grand_total_refunded += $refund->adjustment_refund - $refund->adjustment_fee; + $order->base_grand_total_refunded += $refund->base_adjustment_refund - $refund->base_adjustment_fee; + } + + $order->grand_total_refunded += $order->sub_total_refunded + $order->shipping_refunded + $order->tax_amount_refunded - $order->discount_refunded; + $order->base_grand_total_refunded += $order->base_sub_total_refunded + $order->base_shipping_refunded + $order->base_tax_amount_refunded - $order->base_discount_refunded; + $order->save(); return $order; diff --git a/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php b/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php new file mode 100644 index 000000000..31eaa9405 --- /dev/null +++ b/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php @@ -0,0 +1,28 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ + +class RefundItemRepository extends Repository +{ + /** + * Specify Model class name + * + * @return Mixed + */ + + function model() + { + return RefundItem::class; + } +} \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Repositories/RefundRepository.php b/packages/Webkul/Sales/src/Repositories/RefundRepository.php new file mode 100644 index 000000000..505daf786 --- /dev/null +++ b/packages/Webkul/Sales/src/Repositories/RefundRepository.php @@ -0,0 +1,261 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class RefundRepository extends Repository +{ + /** + * OrderRepository object + * + * @var Object + */ + protected $orderRepository; + + /** + * OrderItemRepository object + * + * @var Object + */ + protected $orderItemRepository; + + /** + * RefundItemRepository object + * + * @var Object + */ + protected $refundItemRepository; + + /** + * Create a new repository instance. + * + * @param \Webkul\Sales\Repositories\OrderRepository $orderRepository + * @param \Webkul\Sales\Repositories\OrderItemRepository $orderItemRepository + * @param \Webkul\Sales\Repositories\RefundItemRepository $refundItemRepository + * @param \Illuminate\Container\Container $app + */ + public function __construct( + OrderRepository $orderRepository, + OrderItemRepository $orderItemRepository, + RefundItemRepository $refundItemRepository, + App $app + ) + { + $this->orderRepository = $orderRepository; + + $this->orderItemRepository = $orderItemRepository; + + $this->refundItemRepository = $refundItemRepository; + + parent::__construct($app); + } + + /** + * Specify Model class name + * + * @return Mixed + */ + function model() + { + return Refund::class; + } + + /** + * @param array $data + * @return mixed + */ + public function create(array $data) + { + DB::beginTransaction(); + + try { + Event::fire('sales.refund.save.before', $data); + + $order = $this->orderRepository->find($data['order_id']); + + $totalQty = array_sum($data['refund']['items']); + + $refund = parent::create([ + 'order_id' => $order->id, + 'total_qty' => $totalQty, + 'state' => 'refunded', + 'base_currency_code' => $order->base_currency_code, + 'channel_currency_code' => $order->channel_currency_code, + 'order_currency_code' => $order->order_currency_code, + 'adjustment_refund' => core()->convertPrice($data['refund']['adjustment_refund'], $order->order_currency_code), + 'base_adjustment_refund' => $data['refund']['adjustment_refund'], + 'adjustment_fee' => core()->convertPrice($data['refund']['adjustment_fee'], $order->order_currency_code), + 'base_adjustment_fee' => $data['refund']['adjustment_fee'], + 'shipping_amount' => core()->convertPrice($data['refund']['shipping'], $order->order_currency_code), + 'base_shipping_amount' => $data['refund']['shipping'] + ]); + + foreach ($data['refund']['items'] as $itemId => $qty) { + if (! $qty) + continue; + + $orderItem = $this->orderItemRepository->find($itemId); + + if ($qty > $orderItem->qty_to_refund) + $qty = $orderItem->qty_to_refund; + + $refundItem = $this->refundItemRepository->create([ + 'refund_id' => $refund->id, + 'order_item_id' => $orderItem->id, + 'name' => $orderItem->name, + 'sku' => $orderItem->sku, + 'qty' => $qty, + 'price' => $orderItem->price, + 'base_price' => $orderItem->base_price, + 'total' => $orderItem->price * $qty, + 'base_total' => $orderItem->base_price * $qty, + 'tax_amount' => ( ($orderItem->tax_amount / $orderItem->qty_ordered) * $qty ), + 'base_tax_amount' => ( ($orderItem->base_tax_amount / $orderItem->qty_ordered) * $qty ), + 'discount_amount' => ( ($orderItem->discount_amount / $orderItem->qty_ordered) * $qty ), + 'base_discount_amount' => ( ($orderItem->base_discount_amount / $orderItem->qty_ordered) * $qty ), + 'product_id' => $orderItem->product_id, + 'product_type' => $orderItem->product_type, + 'additional' => $orderItem->additional + ]); + + if ($orderItem->type == 'configurable' && $orderItem->child) { + $childOrderItem = $orderItem->child; + + $refundItem->child = $this->refundItemRepository->create([ + 'refund_id' => $refund->id, + 'order_item_id' => $childOrderItem->id, + 'parent_id' => $refundItem->id, + 'name' => $childOrderItem->name, + 'sku' => $childOrderItem->sku, + 'qty' => $qty, + 'price' => $childOrderItem->price, + 'base_price' => $childOrderItem->base_price, + 'total' => $childOrderItem->price * $qty, + 'base_total' => $childOrderItem->base_price * $qty, + 'tax_amount' => 0, + 'base_tax_amount' => 0, + 'discount_amount' => 0, + 'base_discount_amount' => 0, + 'product_id' => $childOrderItem->product_id, + 'product_type' => $childOrderItem->product_type, + 'additional' => $childOrderItem->additional + ]); + } + + $this->orderItemRepository->collectTotals($orderItem); + } + + $this->collectTotals($refund); + + $this->orderRepository->collectTotals($order); + + $this->orderRepository->updateOrderStatus($order); + + Event::fire('sales.refund.save.after', $refund); + } catch (\Exception $e) { + DB::rollBack(); + + throw $e; + } + + DB::commit(); + + return $refund; + } + + /** + * @param Refund $refund + * @return mixed + */ + public function collectTotals($refund) + { + $subTotal = $baseSubTotal = 0; + $taxAmount = $baseTaxAmount = 0; + $discountAmount = $baseDiscountAmount = 0; + + foreach ($refund->items as $refundItem) { + $subTotal += $refundItem->total; + $baseSubTotal += $refundItem->base_total; + + $taxAmount += $refundItem->tax_amount; + $baseTaxAmount += $refundItem->base_tax_amount; + + $discountAmount += $refundItem->discount_amount; + $baseDiscountAmount += $refundItem->base_discount_amount; + } + + $refund->sub_total = $subTotal; + $refund->base_sub_total = $baseSubTotal; + + $refund->tax_amount = $taxAmount; + $refund->base_tax_amount = $baseTaxAmount; + + $refund->grand_total = $subTotal + $taxAmount + $refund->shipping_amount + $refund->adjustment_refund - $refund->adjustment_fee - $discountAmount; + $refund->base_grand_total = $baseSubTotal + $baseTaxAmount + $refund->base_shipping_amount + $refund->base_adjustment_refund - $refund->adjustment_fee - $baseDiscountAmount; + + $refund->save(); + + return $refund; + } + + /** + * @param array $data + * @param integer $orderId + * @return array + */ + public function getOrderItemsRefundSummary($data, $orderId) + { + $order = $this->orderRepository->find($orderId); + + $summary = [ + 'subtotal' => ['price' => 0], + 'discount' => ['price' => 0], + 'tax' => ['price' => 0], + 'shipping' => ['price' => 0], + 'grand_total' => ['price' => 0] + ]; + + foreach ($data as $orderItemId => $qty) { + if (! $qty) + continue; + + $orderItem = $this->orderItemRepository->find($orderItemId); + + if ($qty > $orderItem->qty_to_refund) + return false; + + $summary['subtotal']['price'] += $orderItem->base_price * $qty; + + $summary['discount']['price'] += ($orderItem->base_discount_amount / $orderItem->qty_ordered) * $qty; + + $summary['tax']['price'] += ($orderItem->tax_amount / $orderItem->qty_ordered) * $qty; + } + + $summary['shipping']['price'] += $order->base_shipping_invoiced - $order->base_shipping_refunded; + + $summary['grand_total']['price'] += $summary['subtotal']['price'] + $summary['tax']['price'] + $summary['shipping']['price'] - $summary['discount']['price']; + + $summary['subtotal']['formated_price'] = core()->formatBasePrice($summary['subtotal']['price']); + + $summary['discount']['formated_price'] = core()->formatBasePrice($summary['discount']['price']); + + $summary['tax']['formated_price'] = core()->formatBasePrice($summary['tax']['price']); + + $summary['shipping']['formated_price'] = core()->formatBasePrice($summary['shipping']['price']); + + $summary['grand_total']['formated_price'] = core()->formatBasePrice($summary['grand_total']['price']); + + return $summary; + } +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/lang/ar/app.php b/packages/Webkul/Shop/src/Resources/lang/ar/app.php index b617f24d0..95ad06778 100644 --- a/packages/Webkul/Shop/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/ar/app.php @@ -249,6 +249,7 @@ return [ 'item-invoice' => '3-الفواتير(:qty_invoiced)', 'item-shipped' => 'شحنت(:qty_shipped)', 'item-canceled' => 'ملغاة(:qty_canceled)', + 'item-refunded' => 'Refunded (:qty_refunded)', 'price' => 'السعر', 'total' => 'المجموع', 'subtotal' => 'المجموع الفرعي', diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index 739f89a5d..de69ebea5 100755 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -256,6 +256,7 @@ return [ 'item-invoice' => 'Invoiced (:qty_invoiced)', 'item-shipped' => 'shipped (:qty_shipped)', 'item-canceled' => 'Canceled (:qty_canceled)', + 'item-refunded' => 'Refunded (:qty_refunded)', 'price' => 'Price', 'total' => 'Total', 'subtotal' => 'Subtotal', @@ -281,7 +282,11 @@ return [ 'order-date' => 'Order Date', 'bill-to' => 'Bill to', 'ship-to' => 'Ship to', - 'contact' => 'Contact' + 'contact' => 'Contact', + 'refunds' => 'Refunds', + 'individual-refund' => 'Refund #:refund_id', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', ] ], diff --git a/packages/Webkul/Shop/src/Resources/lang/fa/app.php b/packages/Webkul/Shop/src/Resources/lang/fa/app.php index 7285c593f..d0ea161af 100644 --- a/packages/Webkul/Shop/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/fa/app.php @@ -256,6 +256,7 @@ return [ 'item-invoice' => 'صورتحساب (:qty_invoiced)', 'item-shipped' => 'حمل شده (:qty_shipped)', 'item-canceled' => 'لغو شد (:qty_canceled)', + 'item-refunded' => 'Refunded (:qty_refunded)', 'price' => 'قیمت', 'total' => 'جمع', 'subtotal' => 'فرعی', diff --git a/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php index 3b2258262..47cfecf10 100755 --- a/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php @@ -251,6 +251,7 @@ return [ 'item-invoice' => 'Faturados (:qty_invoiced)', 'item-shipped' => 'enviados (:qty_shipped)', 'item-canceled' => 'Cancelados (:qty_canceled)', + 'item-refunded' => 'Refunded (:qty_refunded)', 'price' => 'Preço', 'total' => 'Total', 'subtotal' => 'Subtotal', diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php index 8fd17453b..4f86c379e 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php @@ -90,6 +90,10 @@ {{ $item->qty_shipped ? __('shop::app.customer.account.order.view.item-shipped', ['qty_shipped' => $item->qty_shipped]) : '' }} + + {{ $item->qty_refunded ? __('shop::app.customer.account.order.view.item-refunded', ['qty_refunded' => $item->qty_refunded]) : '' }} + + {{ $item->qty_canceled ? __('shop::app.customer.account.order.view.item-canceled', ['qty_canceled' => $item->qty_canceled]) : '' }} @@ -297,6 +301,107 @@ @endif + + @if ($order->refunds->count()) + + + @foreach ($order->refunds as $refund) + +
+
+ {{ __('shop::app.customer.account.order.view.individual-refund', ['refund_id' => $refund->id]) }} +
+ +
+
+ + + + + + + + + + + + + + + + @foreach ($refund->items as $item) + + + + + + + + + + @endforeach + +
{{ __('shop::app.customer.account.order.view.SKU') }}{{ __('shop::app.customer.account.order.view.product-name') }}{{ __('shop::app.customer.account.order.view.price') }}{{ __('shop::app.customer.account.order.view.qty') }}{{ __('shop::app.customer.account.order.view.subtotal') }}{{ __('shop::app.customer.account.order.view.tax-amount') }}{{ __('shop::app.customer.account.order.view.grand-total') }}
{{ $item->child ? $item->child->sku : $item->sku }}{{ $item->name }}{{ core()->formatPrice($item->price, $order->order_currency_code) }}{{ $item->qty }}{{ core()->formatPrice($item->total, $order->order_currency_code) }}{{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }}{{ core()->formatPrice($item->total + $item->tax_amount, $order->order_currency_code) }}
+
+ +
+ + + + + + + + @if ($refund->shipping_amount > 0) + + + + + + @endif + + @if ($refund->discount_amount > 0) + + + + + + @endif + + @if ($refund->tax_amount > 0) + + + + + + @endif + + + + + + + + + + + + + + + + + + +
{{ __('shop::app.customer.account.order.view.subtotal') }}-{{ core()->formatPrice($refund->sub_total, $order->order_currency_code) }}
{{ __('shop::app.customer.account.order.view.shipping-handling') }}-{{ core()->formatPrice($refund->shipping_amount, $order->order_currency_code) }}
{{ __('shop::app.customer.account.order.view.discount') }}-{{ core()->formatPrice($order->discount_amount, $order->order_currency_code) }}
{{ __('shop::app.customer.account.order.view.tax') }}-{{ core()->formatPrice($refund->tax_amount, $order->order_currency_code) }}
{{ __('shop::app.customer.account.order.view.adjustment-refund') }}-{{ core()->formatPrice($refund->adjustment_refund, $order->order_currency_code) }}
{{ __('shop::app.customer.account.order.view.adjustment-fee') }}-{{ core()->formatPrice($refund->adjustment_fee, $order->order_currency_code) }}
{{ __('shop::app.customer.account.order.view.grand-total') }}-{{ core()->formatPrice($refund->grand_total, $order->order_currency_code) }}
+
+
+
+ + @endforeach + +
+ @endif
From 382dee4da2fa134b2a2d5412d413236365e89b88 Mon Sep 17 00:00:00 2001 From: jitendra Date: Wed, 18 Sep 2019 19:02:34 +0530 Subject: [PATCH 39/88] Translation added --- packages/Webkul/Shop/src/Resources/lang/ar/app.php | 6 +++++- packages/Webkul/Shop/src/Resources/lang/fa/app.php | 6 +++++- packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Shop/src/Resources/lang/ar/app.php b/packages/Webkul/Shop/src/Resources/lang/ar/app.php index 95ad06778..27cc5e25f 100644 --- a/packages/Webkul/Shop/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/ar/app.php @@ -275,7 +275,11 @@ return [ 'order-date' => 'تاريخ الطلب', 'bill-to' => 'بيل إلى', 'ship-to' => 'السفينة إلى', - 'contact' => 'Contact' + 'contact' => 'Contact', + 'refunds' => 'Refunds', + 'individual-refund' => 'Refund #:refund_id', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', ] ], diff --git a/packages/Webkul/Shop/src/Resources/lang/fa/app.php b/packages/Webkul/Shop/src/Resources/lang/fa/app.php index d0ea161af..2d7917f98 100644 --- a/packages/Webkul/Shop/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/fa/app.php @@ -282,7 +282,11 @@ return [ 'order-date' => 'تاریخ سفارش', 'bill-to' => 'بیل به', 'ship-to' => 'حمل به', - 'contact' => 'تماس' + 'contact' => 'تماس', + 'refunds' => 'Refunds', + 'individual-refund' => 'Refund #:refund_id', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', ] ], diff --git a/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php index 47cfecf10..7ded48a1e 100755 --- a/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php @@ -277,7 +277,11 @@ return [ 'order-date' => 'Pedido Date', 'bill-to' => 'Cobrança de', 'ship-to' => 'Enviar para', - 'contact' => 'Contato' + 'contact' => 'Contato', + 'refunds' => 'Refunds', + 'individual-refund' => 'Refund #:refund_id', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', ] ], From 4e856d02e8df292a6cff7b51a2c4daff8cc47efd Mon Sep 17 00:00:00 2001 From: jitendra Date: Wed, 18 Sep 2019 19:06:25 +0530 Subject: [PATCH 40/88] Redund status added --- .../Admin/src/Resources/views/sales/orders/view.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2d7438ab9..8bdc53a61 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 @@ -475,7 +475,7 @@ {{ $refund->created_at }} #{{ $refund->order->id }} {{ $refund->order->customer_full_name }} - {{ $refund->status_label }} + {{ __('admin::app.sales.refunds.refunded') }} {{ core()->formatBasePrice($refund->base_grand_total) }} From 84969849d128c6ff1f248057ad515d8e2f232e3a Mon Sep 17 00:00:00 2001 From: jitendra Date: Wed, 18 Sep 2019 19:12:05 +0530 Subject: [PATCH 41/88] Added translations --- packages/Webkul/Shop/src/Resources/lang/ar/app.php | 3 ++- packages/Webkul/Shop/src/Resources/lang/en/app.php | 3 ++- packages/Webkul/Shop/src/Resources/lang/fa/app.php | 3 ++- packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php | 3 ++- .../Resources/views/customers/account/orders/view.blade.php | 6 ++++++ 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/Webkul/Shop/src/Resources/lang/ar/app.php b/packages/Webkul/Shop/src/Resources/lang/ar/app.php index 27cc5e25f..9d5e6408e 100644 --- a/packages/Webkul/Shop/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/ar/app.php @@ -11,7 +11,8 @@ return [ ], 'common' => [ - 'error' => 'حدث شيء خاطئ ، رجاء حاول ثانية لاحقا.' + 'error' => 'حدث شيء خاطئ ، رجاء حاول ثانية لاحقا.', + 'no-result-found' => 'We could not find any records.' ], 'home' => [ diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index de69ebea5..4e8aa957d 100755 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -14,7 +14,8 @@ return [ ], 'common' => [ - 'error' => 'Something went wrong, please try again later.' + 'error' => 'Something went wrong, please try again later.', + 'no-result-found' => 'We could not find any records.' ], 'home' => [ diff --git a/packages/Webkul/Shop/src/Resources/lang/fa/app.php b/packages/Webkul/Shop/src/Resources/lang/fa/app.php index 2d7917f98..192589fdc 100644 --- a/packages/Webkul/Shop/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/fa/app.php @@ -14,7 +14,8 @@ return [ ], 'common' => [ - 'error' => 'مشکلی رخ داده است. لطفا بعدا دوباره امتحان کنید.' + 'error' => 'مشکلی رخ داده است. لطفا بعدا دوباره امتحان کنید.', + 'no-result-found' => 'We could not find any records.' ], 'home' => [ diff --git a/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php index 7ded48a1e..80d06b526 100755 --- a/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/pt_BR/app.php @@ -11,7 +11,8 @@ return [ ], 'common' => [ - 'error' => 'Algo deu errado, por favor, tente novamente mais tarde.' + 'error' => 'Algo deu errado, por favor, tente novamente mais tarde.', + 'no-result-found' => 'We could not find any records.' ], 'home' => [ diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php index 4f86c379e..4a34a9b41 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php @@ -340,6 +340,12 @@ {{ core()->formatPrice($item->total + $item->tax_amount, $order->order_currency_code) }} @endforeach + + @if (! $refund->items->count()) + + {{ __('admin::app.common.no-result-found') }} + + @endif
From ccd86eee768839c16dc5ae9bb555435bdf686b9a Mon Sep 17 00:00:00 2001 From: jitendra Date: Thu, 19 Sep 2019 13:52:33 +0530 Subject: [PATCH 42/88] Refund issues fixed --- .../Controllers/Sales/RefundController.php | 8 +++++- .../Admin/src/Resources/lang/ar/app.php | 4 ++- .../Admin/src/Resources/lang/en/app.php | 2 ++ .../Admin/src/Resources/lang/fa/app.php | 4 ++- .../Admin/src/Resources/lang/pt_BR/app.php | 4 ++- .../views/sales/refunds/create.blade.php | 2 +- .../views/sales/refunds/view.blade.php | 14 ++++++---- packages/Webkul/Sales/src/Models/Order.php | 6 ++-- .../src/Repositories/RefundRepository.php | 28 ++++++++----------- 9 files changed, 41 insertions(+), 31 deletions(-) diff --git a/packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php b/packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php index 669965513..47a891a25 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php @@ -115,10 +115,16 @@ class RefundController extends Controller $totals = $this->refundRepository->getOrderItemsRefundSummary($data['refund']['items'], $orderId); - $maxRefundAmount = $totals['grand_total']['price'] - $order->refunds()->sum('base_adjustment_refund') + $order->refunds()->sum('base_adjustment_fee'); + $maxRefundAmount = $totals['grand_total']['price'] - $order->refunds()->sum('base_adjustment_refund'); $refundAmount = $totals['grand_total']['price'] - $totals['shipping']['price'] + $data['refund']['shipping'] + $data['refund']['adjustment_refund'] - $data['refund']['adjustment_fee']; + if (! $refundAmount) { + session()->flash('error', trans('admin::app.sales.refunds.invalid-refund-amount-error')); + + return redirect()->back(); + } + if ($refundAmount > $maxRefundAmount) { session()->flash('error', trans('admin::app.sales.refunds.refund-limit-error', ['amount' => core()->formatBasePrice($maxRefundAmount)])); diff --git a/packages/Webkul/Admin/src/Resources/lang/ar/app.php b/packages/Webkul/Admin/src/Resources/lang/ar/app.php index a0bc2885f..5fb8f1497 100644 --- a/packages/Webkul/Admin/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/ar/app.php @@ -350,7 +350,9 @@ return [ 'date' => 'Refund Date', 'customer-name' => 'Customer Name', 'status' => 'Status', - 'action' => 'Action' + 'action' => 'Action', + 'view-title' => 'Refund #:refund_id', + 'invalid-refund-amount-error' => 'Refund amount should be non zero.' ] ], 'catalog' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 80df5f94a..0f967e0b6 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -413,6 +413,8 @@ return [ 'status' => 'Status', 'action' => 'Action', 'view-title' => 'Refund #:refund_id', + 'invalid-refund-amount-error' => 'Refund amount should be non zero.' + ] ], diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index efa6f4ecf..0e7f0953b 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -377,7 +377,9 @@ return [ 'date' => 'Refund Date', 'customer-name' => 'Customer Name', 'status' => 'Status', - 'action' => 'Action' + 'action' => 'Action', + 'view-title' => 'Refund #:refund_id', + 'invalid-refund-amount-error' => 'Refund amount should be non zero.' ] ], 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 547534691..4b9a31102 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -358,7 +358,9 @@ return [ 'date' => 'Refund Date', 'customer-name' => 'Customer Name', 'status' => 'Status', - 'action' => 'Action' + 'action' => 'Action', + 'view-title' => 'Refund #:refund_id', + 'invalid-refund-amount-error' => 'Refund amount should be non zero.' ] ], 'catalog' => [ diff --git a/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php index 216393cf7..70c99ea9c 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php @@ -303,7 +303,7 @@ -
- + @{{ errors.first('refund[shipping]') }} 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 c3e91847d..42cd3d78d 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 @@ -213,9 +213,7 @@ {{ __('admin::app.sales.orders.qty') }} {{ __('admin::app.sales.orders.subtotal') }} {{ __('admin::app.sales.orders.tax-amount') }} - @if ($refund->base_discount_amount > 0) - {{ __('admin::app.sales.orders.discount-amount') }} - @endif + {{ __('admin::app.sales.orders.discount-amount') }} {{ __('admin::app.sales.orders.grand-total') }} @@ -242,14 +240,18 @@ {{ core()->formatBasePrice($item->base_tax_amount) }} - @if ($refund->base_discount_amount > 0) - {{ core()->formatBasePrice($item->base_discount_amount) }} - @endif + {{ core()->formatBasePrice($item->base_discount_amount) }} {{ core()->formatBasePrice($item->base_total + $item->base_tax_amount - $item->base_discount_amount) }} @endforeach + @if (! $refund->items->count()) + + {{ __('admin::app.common.no-result-found') }} + + @endif +
diff --git a/packages/Webkul/Sales/src/Models/Order.php b/packages/Webkul/Sales/src/Models/Order.php index 98f882c6a..dda4f4815 100755 --- a/packages/Webkul/Sales/src/Models/Order.php +++ b/packages/Webkul/Sales/src/Models/Order.php @@ -40,7 +40,7 @@ class Order extends Model implements OrderContract */ public function getBaseTotalDueAttribute() { - return $this->base_grand_total - $this->base_grand_total_invoiced; + return $this->base_grand_total - $this->base_grand_total_invoiced - $this->base_discount_amount; } /** @@ -48,7 +48,7 @@ class Order extends Model implements OrderContract */ public function getTotalDueAttribute() { - return $this->grand_total - $this->grand_total_invoiced; + return $this->grand_total - $this->grand_total_invoiced - $this->discount_amount; } /** @@ -208,7 +208,7 @@ class Order extends Model implements OrderContract return true; } - if ($this->base_grand_total_invoiced - $this->base_grand_total_refunded > 0) + if ($this->base_grand_total_invoiced - $this->base_grand_total_refunded - $this->refunds()->sum('base_adjustment_fee') > 0) return true; return false; diff --git a/packages/Webkul/Sales/src/Repositories/RefundRepository.php b/packages/Webkul/Sales/src/Repositories/RefundRepository.php index 505daf786..3f792a32d 100644 --- a/packages/Webkul/Sales/src/Repositories/RefundRepository.php +++ b/packages/Webkul/Sales/src/Repositories/RefundRepository.php @@ -180,29 +180,23 @@ class RefundRepository extends Repository */ public function collectTotals($refund) { - $subTotal = $baseSubTotal = 0; - $taxAmount = $baseTaxAmount = 0; - $discountAmount = $baseDiscountAmount = 0; + $refund->sub_total = $refund->base_sub_total = 0; + $refund->tax_amount = $refund->base_tax_amount = 0; + $refund->discount_amount = $refund->base_discount_amount = 0; foreach ($refund->items as $refundItem) { - $subTotal += $refundItem->total; - $baseSubTotal += $refundItem->base_total; + $refund->sub_total += $refundItem->total; + $refund->base_sub_total += $refundItem->base_total; - $taxAmount += $refundItem->tax_amount; - $baseTaxAmount += $refundItem->base_tax_amount; + $refund->tax_amount += $refundItem->tax_amount; + $refund->base_tax_amount += $refundItem->base_tax_amount; - $discountAmount += $refundItem->discount_amount; - $baseDiscountAmount += $refundItem->base_discount_amount; + $refund->discount_amount += $refundItem->discount_amount; + $refund->base_discount_amount += $refundItem->base_discount_amount; } - $refund->sub_total = $subTotal; - $refund->base_sub_total = $baseSubTotal; - - $refund->tax_amount = $taxAmount; - $refund->base_tax_amount = $baseTaxAmount; - - $refund->grand_total = $subTotal + $taxAmount + $refund->shipping_amount + $refund->adjustment_refund - $refund->adjustment_fee - $discountAmount; - $refund->base_grand_total = $baseSubTotal + $baseTaxAmount + $refund->base_shipping_amount + $refund->base_adjustment_refund - $refund->adjustment_fee - $baseDiscountAmount; + $refund->grand_total = $refund->sub_total + $refund->tax_amount + $refund->shipping_amount + $refund->adjustment_refund - $refund->adjustment_fee - $refund->discount_amount; + $refund->base_grand_total = $refund->base_sub_total + $refund->base_tax_amount + $refund->base_shipping_amount + $refund->base_adjustment_refund - $refund->adjustment_fee - $refund->base_discount_amount; $refund->save(); From 9db41abe13dc121a6f496a56cb6935b1950bc307 Mon Sep 17 00:00:00 2001 From: jitendra Date: Thu, 19 Sep 2019 15:26:07 +0530 Subject: [PATCH 43/88] Issue #1486 fixed --- packages/Webkul/Sales/src/Models/Order.php | 4 ++-- packages/Webkul/Sales/src/Repositories/OrderRepository.php | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Sales/src/Models/Order.php b/packages/Webkul/Sales/src/Models/Order.php index dda4f4815..e3907ba6f 100755 --- a/packages/Webkul/Sales/src/Models/Order.php +++ b/packages/Webkul/Sales/src/Models/Order.php @@ -40,7 +40,7 @@ class Order extends Model implements OrderContract */ public function getBaseTotalDueAttribute() { - return $this->base_grand_total - $this->base_grand_total_invoiced - $this->base_discount_amount; + return $this->base_grand_total - $this->base_grand_total_invoiced; } /** @@ -48,7 +48,7 @@ class Order extends Model implements OrderContract */ public function getTotalDueAttribute() { - return $this->grand_total - $this->grand_total_invoiced - $this->discount_amount; + return $this->grand_total - $this->grand_total_invoiced; } /** diff --git a/packages/Webkul/Sales/src/Repositories/OrderRepository.php b/packages/Webkul/Sales/src/Repositories/OrderRepository.php index 650b8ba2a..48e5e7689 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderRepository.php @@ -266,9 +266,11 @@ class OrderRepository extends Repository */ public function collectTotals($order) { + //Order invoice total $order->sub_total_invoiced = $order->base_sub_total_invoiced = 0; $order->shipping_invoiced = $order->base_shipping_invoiced = 0; $order->tax_amount_invoiced = $order->base_tax_amount_invoiced = 0; + $order->discount_invoiced = $order->base_discount_invoiced = 0; foreach ($order->invoices as $invoice) { $order->sub_total_invoiced += $invoice->sub_total; @@ -287,7 +289,7 @@ class OrderRepository extends Repository $order->grand_total_invoiced = $order->sub_total_invoiced + $order->shipping_invoiced + $order->tax_amount_invoiced - $order->discount_invoiced; $order->base_grand_total_invoiced = $order->base_sub_total_invoiced + $order->base_shipping_invoiced + $order->base_tax_amount_invoiced - $order->base_discount_invoiced; - + //Order refund total $order->sub_total_refunded = $order->base_sub_total_refunded = 0; $order->shipping_refunded = $order->base_shipping_refunded = 0; $order->tax_amount_refunded = $order->base_tax_amount_refunded = 0; From 46a29488d04d9a0c1a2af6cf224756925a716459 Mon Sep 17 00:00:00 2001 From: jitendra Date: Thu, 19 Sep 2019 15:48:01 +0530 Subject: [PATCH 44/88] Front order item grandtotal issue fixed --- .../customers/account/orders/view.blade.php | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php index 4a34a9b41..0ad6b6099 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/view.blade.php @@ -68,6 +68,7 @@ {{ $item->type == 'configurable' ? $item->child->sku : $item->sku }} + {{ $item->name }}
@if (isset($item['additional']['attributes'])) @@ -76,7 +77,11 @@ @endforeach @endif - {{ core()->formatPrice($item->price, $order->order_currency_code) }} + + + {{ core()->formatPrice($item->price, $order->order_currency_code) }} + + {{ __('shop::app.customer.account.order.view.item-ordered', ['qty_ordered' => $item->qty_ordered]) }} @@ -98,10 +103,22 @@ {{ $item->qty_canceled ? __('shop::app.customer.account.order.view.item-canceled', ['qty_canceled' => $item->qty_canceled]) : '' }} - {{ core()->formatPrice($item->total, $order->order_currency_code) }} - {{ number_format($item->tax_percent, 2) }}% - {{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }} - {{ core()->formatPrice($item->total + $item->tax_amount, $order->order_currency_code) }} + + + {{ core()->formatPrice($item->total, $order->order_currency_code) }} + + + + {{ number_format($item->tax_percent, 2) }}% + + + + {{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }} + + + + {{ core()->formatPrice($item->total + $item->tax_amount - $item->discount_amount, $order->order_currency_code) }} + @endforeach From 600a4a9be095e60ff1327b9ea4bb1a45c84580c4 Mon Sep 17 00:00:00 2001 From: jitendra Date: Thu, 19 Sep 2019 17:24:56 +0530 Subject: [PATCH 45/88] Fixed Issue #1490 --- .../src/Repositories/InvoiceRepository.php | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php index 9c60c59d0..041f84ddc 100755 --- a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php +++ b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php @@ -98,9 +98,7 @@ class InvoiceRepository extends Repository 'base_currency_code' => $order->base_currency_code, 'channel_currency_code' => $order->channel_currency_code, 'order_currency_code' => $order->order_currency_code, - 'order_address_id' => $order->billing_address->id, - "discount_amount" => $order->discount_amount, - "base_discount_amount" => $order->base_discount_amount, + 'order_address_id' => $order->billing_address->id ]); foreach ($data['invoice']['items'] as $itemId => $qty) { @@ -174,49 +172,40 @@ class InvoiceRepository extends Repository return $invoice; } - + /** * @param mixed $invoice * @return mixed */ public function collectTotals($invoice) { - $subTotal = $baseSubTotal = 0; - $taxAmount = $baseTaxAmount = 0; - $discountAmount = $baseDiscountAmount = 0; + $invoice->sub_total = $invoice->base_sub_total = 0; + $invoice->tax_amount = $invoice->base_tax_amount = 0; + $invoice->discount_amount = $invoice->base_discount_amount = 0; foreach ($invoice->items as $invoiceItem) { - $subTotal += $invoiceItem->total; - $baseSubTotal += $invoiceItem->base_total; + $invoice->sub_total += $invoiceItem->total; + $invoice->base_sub_total += $invoiceItem->base_total; - $taxAmount += $invoiceItem->tax_amount; - $baseTaxAmount += $invoiceItem->base_tax_amount; + $invoice->tax_amount += $invoiceItem->tax_amount; + $invoice->base_tax_amount += $invoiceItem->base_tax_amount; - $discountAmount += $invoiceItem->discount_amount; - $baseDiscountAmount += $invoiceItem->base_discount_amount; + $invoice->discount_amount += $invoiceItem->discount_amount; + $invoice->base_discount_amount += $invoiceItem->base_discount_amount; } - $shippingAmount = $invoice->order->shipping_amount; - $baseShippingAmount = $invoice->order->base_shipping_amount; + $invoice->shipping_amount = $invoice->order->shipping_amount; + $invoice->base_shipping_amount = $invoice->order->base_shipping_amount; if ($invoice->order->shipping_amount) { foreach ($invoice->order->invoices as $prevInvoice) { if ((float) $prevInvoice->shipping_amount) - $shippingAmount = $baseShippingAmount = 0; + $invoice->shipping_amount = $invoice->base_shipping_amount = 0; } } - $invoice->sub_total = $subTotal; - $invoice->base_sub_total = $baseSubTotal; - - $invoice->shipping_amount = $shippingAmount; - $invoice->base_shipping_amount = $baseShippingAmount; - - $invoice->tax_amount = $taxAmount; - $invoice->base_tax_amount = $baseTaxAmount; - - $invoice->grand_total = $subTotal + $taxAmount + $shippingAmount - $discountAmount; - $invoice->base_grand_total = $baseSubTotal + $baseTaxAmount + $baseShippingAmount - $baseDiscountAmount; + $invoice->grand_total = $invoice->sub_total + $invoice->tax_amount + $invoice->shipping_amount - $invoice->discount_amount; + $invoice->base_grand_total = $invoice->base_sub_total + $invoice->base_tax_amount + $invoice->base_shipping_amount - $invoice->base_discount_amount; $invoice->save(); From b0e9328090da5f65b909ba62315243cfbdfdd180 Mon Sep 17 00:00:00 2001 From: jitendra Date: Thu, 19 Sep 2019 18:57:58 +0530 Subject: [PATCH 46/88] Issue #1492 fixed --- .../views/sales/refunds/create.blade.php | 2 +- .../views/sales/refunds/view.blade.php | 2 +- .../src/Repositories/OrderItemRepository.php | 5 ++-- .../src/Repositories/RefundItemRepository.php | 27 +++++++++++++++++++ .../src/Repositories/RefundRepository.php | 4 +++ 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php index 70c99ea9c..e28fcbbd2 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php @@ -43,7 +43,7 @@ -
#{{ $order->id }} + #{{ $order->increment_id }} 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 42cd3d78d..d056cf5a4 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 @@ -40,7 +40,7 @@ - #{{ $order->id }} + #{{ $order->increment_id }} diff --git a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php index 0ccd5adb6..bf39afaa2 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php @@ -135,7 +135,7 @@ class OrderItemRepository extends Repository /** * Returns qty to product inventory after order cancelation * - * @param mixed $orderItem + * @param OrderItem $orderItem * @return void */ public function returnQtyToProductInventory($orderItem) @@ -150,9 +150,8 @@ class OrderItemRepository extends Repository if (! $orderedInventory) return ; - if (($qty = $orderedInventory->qty - $orderItem->qty_to_cancel) < 0) { + if (($qty = $orderedInventory->qty - $quantity) < 0) $qty = 0; - } $orderedInventory->update([ 'qty' => $qty diff --git a/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php b/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php index 31eaa9405..f48880032 100644 --- a/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php +++ b/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php @@ -25,4 +25,31 @@ class RefundItemRepository extends Repository { return RefundItem::class; } + + /** + * Returns qty to product inventory after order refund + * + * @param RefundItem $refundItem + * @return void + */ + public function returnQtyToProductInventory($refundItem) + { + return; + if (! $product = $orderItem->product) + return; + + $orderedInventory = $product->ordered_inventories() + ->where('channel_id', $orderItem->order->channel->id) + ->first(); + + if (! $orderedInventory) + return ; + + if (($qty = $orderedInventory->qty - $quantity) < 0) + $qty = 0; + + $orderedInventory->update([ + 'qty' => $qty + ]); + } } \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Repositories/RefundRepository.php b/packages/Webkul/Sales/src/Repositories/RefundRepository.php index 3f792a32d..9d6677ccb 100644 --- a/packages/Webkul/Sales/src/Repositories/RefundRepository.php +++ b/packages/Webkul/Sales/src/Repositories/RefundRepository.php @@ -151,6 +151,10 @@ class RefundRepository extends Repository 'product_type' => $childOrderItem->product_type, 'additional' => $childOrderItem->additional ]); + + $this->refundItemRepository->returnQtyToProductInventory($childOrderItem); + } else { + $this->refundItemRepository->returnQtyToProductInventory($childOrderItem); } $this->orderItemRepository->collectTotals($orderItem); From e5d7124a0c322249d7621cfcd0a626f912bce060 Mon Sep 17 00:00:00 2001 From: jitendra Date: Thu, 19 Sep 2019 19:23:21 +0530 Subject: [PATCH 47/88] Fixed undefined variable exception in RefundRepository.php --- .../src/Repositories/RefundItemRepository.php | 20 ++++++++++++++----- .../src/Repositories/RefundRepository.php | 4 ++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php b/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php index f48880032..674f29d5b 100644 --- a/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php +++ b/packages/Webkul/Sales/src/Repositories/RefundItemRepository.php @@ -30,20 +30,30 @@ class RefundItemRepository extends Repository * Returns qty to product inventory after order refund * * @param RefundItem $refundItem + * @param integer $quantity * @return void */ - public function returnQtyToProductInventory($refundItem) + public function returnQtyToProductInventory($refundItem, $quantity) { return; - if (! $product = $orderItem->product) + if (! $product = $refundItem->product) return; + if ($qtyShipped = $refundItem->order_item->qty_shipped) { + + } else { + + } + $orderedInventory = $product->ordered_inventories() - ->where('channel_id', $orderItem->order->channel->id) + ->where('channel_id', $refundItem->order->channel->id) ->first(); - if (! $orderedInventory) - return ; + if ($orderedInventory) { + + } else { + + } if (($qty = $orderedInventory->qty - $quantity) < 0) $qty = 0; diff --git a/packages/Webkul/Sales/src/Repositories/RefundRepository.php b/packages/Webkul/Sales/src/Repositories/RefundRepository.php index 9d6677ccb..c7d1e0291 100644 --- a/packages/Webkul/Sales/src/Repositories/RefundRepository.php +++ b/packages/Webkul/Sales/src/Repositories/RefundRepository.php @@ -152,9 +152,9 @@ class RefundRepository extends Repository 'additional' => $childOrderItem->additional ]); - $this->refundItemRepository->returnQtyToProductInventory($childOrderItem); + $this->refundItemRepository->returnQtyToProductInventory($childOrderItem, $qty); } else { - $this->refundItemRepository->returnQtyToProductInventory($childOrderItem); + $this->refundItemRepository->returnQtyToProductInventory($orderItem, $qty); } $this->orderItemRepository->collectTotals($orderItem); From 015c6e704c06824d1135b4033642f0225a67fa75 Mon Sep 17 00:00:00 2001 From: Glenn Hermans Date: Thu, 19 Sep 2019 16:18:34 +0200 Subject: [PATCH 48/88] Added mail configuration --- public/installer/Admin.php | 4 +- public/installer/Email.php | 122 ++++++++++++++++++ public/installer/EmailConfig.php | 92 +++++++++++++ public/installer/Finish.php | 11 +- public/installer/Views/requirements.blade.php | 2 +- public/installer/index.php | 1 + 6 files changed, 221 insertions(+), 11 deletions(-) create mode 100644 public/installer/Email.php create mode 100644 public/installer/EmailConfig.php diff --git a/public/installer/Admin.php b/public/installer/Admin.php index f48b48de3..16b6a197c 100755 --- a/public/installer/Admin.php +++ b/public/installer/Admin.php @@ -114,12 +114,12 @@ result = confirm(data['support_error']); if (result) { $('#admin').hide(); - $('#finish').show(); + $('#email').show(); } } if (!data['connection'] && !data['insert_fail'] && !data['support_error']) { $('#admin').hide(); - $('#finish').show(); + $('#email').show(); } } }); diff --git a/public/installer/Email.php b/public/installer/Email.php new file mode 100644 index 000000000..a579e99f6 --- /dev/null +++ b/public/installer/Email.php @@ -0,0 +1,122 @@ + + + + + \ No newline at end of file diff --git a/public/installer/EmailConfig.php b/public/installer/EmailConfig.php new file mode 100644 index 000000000..3b81bd876 --- /dev/null +++ b/public/installer/EmailConfig.php @@ -0,0 +1,92 @@ + $value) { + $changedData[] = $key . '=' . $value; + } + + // inserting new form-data to env + $changedData = implode(PHP_EOL, $changedData); + file_put_contents($envFile, $changedData); + + $data['success'] = true; + $data['message'] = 'Success!'; + } + + // return all our data to an AJAX call + echo json_encode($data); \ No newline at end of file diff --git a/public/installer/Finish.php b/public/installer/Finish.php index 7ccf136ed..8c06126a7 100755 --- a/public/installer/Finish.php +++ b/public/installer/Finish.php @@ -1,29 +1,24 @@ - -
-

Finish Installment

+

Installation completed

- Bagisto is successfully installed on your system. Click the below button to launch Admin Panel. + Bagisto is successfully installed on your system.
+ Click the below button to launch Admin Panel.
-
- -