diff --git a/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php index b64047324..1e405203a 100755 --- a/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php @@ -2,11 +2,12 @@ namespace Webkul\Admin\DataGrids; -use Webkul\Ui\DataGrid\DataGrid; use Illuminate\Support\Facades\DB; +use Webkul\Ui\DataGrid\DataGrid; class CustomerDataGrid extends DataGrid { + protected $index = 'customer_id'; protected $sortOrder = 'desc'; @@ -130,11 +131,10 @@ class CustomerDataGrid extends DataGrid ]); $this->addAction([ - 'type' => 'Edit', 'method' => 'GET', - 'route' => 'admin.customer.addresses.index', - 'icon' => 'icon list-icon', - 'title' => trans('admin::app.customers.customers.addresses'), + 'route' => 'admin.customer.note.create', + 'icon' => 'icon note-icon', + 'title' => trans('admin::app.customers.note.help-title'), ]); $this->addAction([ @@ -143,26 +143,8 @@ class CustomerDataGrid extends DataGrid 'icon' => 'icon trash-icon', 'title' => trans('admin::app.customers.customers.delete-help-title'), ]); - - $this->addAction([ - 'method' => 'GET', - 'route' => 'admin.customer.note.create', - 'icon' => 'icon note-icon', - 'title' => trans('admin::app.customers.note.help-title'), - ]); - - $this->addAction([ - 'type' => 'Edit', - 'method' => 'GET', - 'route' => 'admin.customer.orders.index', - 'icon' => 'icon list-icon', - 'title' => trans('admin::app.customers.orders.title'), - ]); } - /** - * Customer Mass Action To Delete And Change Their - */ public function prepareMassActions() { $this->addMassAction([ diff --git a/packages/Webkul/Admin/src/DataGrids/CustomerOrderDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CustomerOrderDataGrid.php index 5e7270179..739fefafe 100644 --- a/packages/Webkul/Admin/src/DataGrids/CustomerOrderDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CustomerOrderDataGrid.php @@ -3,11 +3,15 @@ namespace Webkul\Admin\DataGrids; use Illuminate\Support\Facades\DB; -use Webkul\Sales\Models\OrderAddress; use Webkul\Ui\DataGrid\DataGrid; +use Webkul\Ui\DataGrid\Traits\ProvideDataGridPlus; + +use Webkul\Sales\Models\OrderAddress; class CustomerOrderDataGrid extends DataGrid { + use ProvideDataGridPlus; + protected $index = 'id'; protected $sortOrder = 'desc'; @@ -47,24 +51,6 @@ class CustomerOrderDataGrid extends DataGrid 'filterable' => true, ]); - $this->addColumn([ - 'index' => 'base_sub_total', - 'label' => trans('admin::app.datagrid.sub-total'), - 'type' => 'price', - 'searchable' => false, - 'sortable' => true, - 'filterable' => true, - ]); - - $this->addColumn([ - 'index' => 'base_grand_total', - 'label' => trans('admin::app.datagrid.grand-total'), - 'type' => 'price', - 'searchable' => false, - 'sortable' => true, - 'filterable' => true, - ]); - $this->addColumn([ 'index' => 'created_at', 'label' => trans('admin::app.datagrid.order-date'), @@ -83,6 +69,24 @@ class CustomerOrderDataGrid extends DataGrid 'filterable' => true, ]); + $this->addColumn([ + 'index' => 'base_sub_total', + 'label' => trans('admin::app.datagrid.sub-total'), + 'type' => 'price', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'base_grand_total', + 'label' => trans('admin::app.datagrid.grand-total'), + 'type' => 'price', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + $this->addColumn([ 'index' => 'status', 'label' => trans('admin::app.datagrid.status'), @@ -109,24 +113,6 @@ class CustomerOrderDataGrid extends DataGrid } }, ]); - - $this->addColumn([ - 'index' => 'billed_to', - 'label' => trans('admin::app.datagrid.billed-to'), - 'type' => 'string', - 'searchable' => true, - 'sortable' => true, - 'filterable' => true, - ]); - - $this->addColumn([ - 'index' => 'shipped_to', - 'label' => trans('admin::app.datagrid.shipped-to'), - 'type' => 'string', - 'searchable' => true, - 'sortable' => true, - 'filterable' => true, - ]); } public function prepareActions() diff --git a/packages/Webkul/Admin/src/DataGrids/CustomersInvoicesDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CustomersInvoicesDataGrid.php new file mode 100644 index 000000000..a1fc8394a --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/CustomersInvoicesDataGrid.php @@ -0,0 +1,113 @@ +leftJoin('orders as ors', 'invoices.order_id', '=', 'ors.id') + ->select('invoices.id as id', 'ors.increment_id as order_id', 'invoices.state as state', 'ors.channel_name as channel_name', '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('created_at', 'invoices.created_at'); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.sales.invoices.invoice-id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.invoice-date'), + 'type' => 'date', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'channel_name', + 'label' => trans('admin::app.datagrid.channel-name'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'order_id', + 'label' => trans('admin::app.datagrid.order-id'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'closure' => true, + 'filterable' => true, + 'wrapper' => function ($value) { + return '' . $value->order_id . ''; + } + ]); + + $this->addColumn([ + 'index' => 'base_grand_total', + 'label' => trans('admin::app.datagrid.grand-total'), + 'type' => 'price', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'state', + 'label' => trans('admin::app.datagrid.status'), + 'type' => 'string', + 'sortable' => true, + 'searchable' => true, + 'closure' => true, + 'filterable' => true, + 'wrapper' => function ($value) { + if ($value->state == 'paid') { + return 'Paid'; + } elseif ($value->state == 'pending') { + return 'Pending'; + } elseif ($value->state == 'pending_payment') { + return 'Pending payment'; + } else { + return $value->state; + } + }, + ]); + } + + public function prepareActions() + { + $this->addAction([ + 'title' => trans('admin::app.datagrid.view'), + 'method' => 'GET', + 'route' => 'admin.sales.invoices.view', + 'icon' => 'icon eye-icon', + ]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/Controllers/Customer/AddressController.php b/packages/Webkul/Admin/src/Http/Controllers/Customer/AddressController.php index 50d9e78d9..3443c4746 100644 --- a/packages/Webkul/Admin/src/Http/Controllers/Customer/AddressController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Customer/AddressController.php @@ -102,7 +102,7 @@ class AddressController extends Controller if ($this->customerAddressRepository->create($data)) { session()->flash('success', trans('admin::app.customers.addresses.success-create')); - return redirect()->route('admin.customer.addresses.index', ['id' => $data['customer_id']]); + return redirect()->route('admin.customer.edit', ['id' => $data['customer_id']]); } else { session()->flash('success', trans('admin::app.customers.addresses.error-create')); diff --git a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php index 53073ca69..db574216e 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php @@ -13,6 +13,9 @@ use Webkul\Core\Repositories\ChannelRepository; use Webkul\Admin\Mail\NewCustomerNotification; use Mail; +use Webkul\Admin\DataGrids\CustomerOrderDataGrid; +use Webkul\Admin\DataGrids\CustomersInvoicesDataGrid; + class CustomerController extends Controller { /** @@ -303,15 +306,28 @@ class CustomerController extends Controller } /** - * Display a listing of the customer orders. + * Retrieve all invoices from customer. * * @param int $id - * @return \Illuminate\View\View + * @return \Webkul\Admin\DataGrids\CustomersInvoicesDataGrid + */ + public function invoices($id) + { + if (request()->ajax()) { + return app(CustomersInvoicesDataGrid::class)->toJson(); + } + } + + /** + * Retrieve all orders from customer. + * + * @param int $id + * @return \Webkul\Admin\DataGrids\CustomerOrderDataGrid */ public function orders($id) { - $customer = $this->customerRepository->find($id); - - return view($this->_config['view'], compact('customer')); + if (request()->ajax()) { + return app(CustomerOrderDataGrid::class)->toJson(); + } } } \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index 16318e6f6..4955ecb74 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -43,7 +43,7 @@ Route::group(['middleware' => ['web']], function () { 'view' => 'admin::dashboard.index', ])->name('admin.dashboard.index'); - //Customer Management Routes + // Customer Management Routes Route::get('customers', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@index')->defaults('_config', [ 'view' => 'admin::customers.index', ])->name('admin.customer.index'); @@ -82,7 +82,7 @@ Route::group(['middleware' => ['web']], function () { 'view' => 'admin::customers.reviews.index', ])->name('admin.customer.review.index'); - //Customer's addresses routes + // Customer's addresses routes Route::get('customers/{id}/addresses', 'Webkul\Admin\Http\Controllers\Customer\AddressController@index')->defaults('_config', [ 'view' => 'admin::customers.addresses.index', ])->name('admin.customer.addresses.index'); @@ -112,10 +112,11 @@ Route::group(['middleware' => ['web']], function () { 'redirect' => 'admin.customer.addresses.index', ])->name('admin.customer.addresses.massdelete'); - //customer's orders route - Route::get('customers/{id}/orders', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@orders')->defaults('_config', [ - 'view' => 'admin::customers.orders.index', - ])->name('admin.customer.orders.index'); + // Customer's invoices route + Route::get('customers/{id}/invoices', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@invoices')->name('admin.customer.invoices.data'); + + // Customer's orders route + Route::get('customers/{id}/orders', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@orders')->name('admin.customer.orders.data'); // Configuration routes Route::get('configuration/{slug?}/{slug2?}', 'Webkul\Admin\Http\Controllers\ConfigurationController@index')->defaults('_config', [ diff --git a/packages/Webkul/Admin/src/Resources/views/customers/addresses/create.blade.php b/packages/Webkul/Admin/src/Resources/views/customers/addresses/create.blade.php index 4f2418c44..6f43fb0ad 100644 --- a/packages/Webkul/Admin/src/Resources/views/customers/addresses/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/customers/addresses/create.blade.php @@ -42,24 +42,24 @@ @{{ errors.first('company_name') }} +