From cd05e927547a7d975403d6104680aa31b050f192 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Wed, 18 Sep 2019 15:10:53 +0530 Subject: [PATCH 01/12] change log updated --- CHANGELOG for v0.1.x.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGELOG for v0.1.x.md b/CHANGELOG for v0.1.x.md index 7be52b461..32e767f37 100755 --- a/CHANGELOG for v0.1.x.md +++ b/CHANGELOG for v0.1.x.md @@ -4,8 +4,6 @@ ## **v0.1.7(17th of September, 2019)** - *Release* -* [feature] - Added New Product Type - Virtual, Downloadable, Group and Bundle. - * [feature] - Fiterable Attribute for category. * [feature] - New module CMS added for adding static pages. From 53baa66db9d2d1db44f65944e7a26dad290a6d84 Mon Sep 17 00:00:00 2001 From: jitendra Date: Wed, 18 Sep 2019 18:57:40 +0530 Subject: [PATCH 02/12] Refund system completed --- packages/Webkul/Admin/src/Config/menu.php | 9 +- .../src/DataGrids/OrderRefundDataGrid.php | 97 +++++ .../Controllers/Sales/RefundController.php | 163 +++++++ packages/Webkul/Admin/src/Http/routes.php | 22 + .../Admin/src/Resources/assets/sass/app.scss | 1 + .../Admin/src/Resources/lang/ar/app.php | 28 +- .../Admin/src/Resources/lang/en/app.php | 34 +- .../Admin/src/Resources/lang/fa/app.php | 29 +- .../Admin/src/Resources/lang/pt_BR/app.php | 30 +- .../views/sales/orders/view.blade.php | 54 +++ .../views/sales/refunds/create.blade.php | 404 ++++++++++++++++++ .../views/sales/refunds/index.blade.php | 42 ++ .../views/sales/refunds/view.blade.php | 314 ++++++++++++++ .../Http/Controllers/ProductController.php | 2 +- .../Webkul/Sales/src/Contracts/Refund.php | 7 + .../Webkul/Sales/src/Contracts/RefundItem.php | 7 + ...2019_09_11_184511_create_refunds_table.php | 65 +++ ...09_11_184519_create_refund_items_table.php | 62 +++ packages/Webkul/Sales/src/Models/Order.php | 38 +- .../Webkul/Sales/src/Models/OrderItem.php | 34 ++ packages/Webkul/Sales/src/Models/Refund.php | 61 +++ .../Webkul/Sales/src/Models/RefundItem.php | 64 +++ .../Sales/src/Models/RefundItemProxy.php | 10 + .../Webkul/Sales/src/Models/RefundProxy.php | 10 + .../src/Providers/ModuleServiceProvider.php | 2 + .../src/Repositories/InvoiceRepository.php | 6 +- .../src/Repositories/OrderItemRepository.php | 23 +- .../src/Repositories/OrderRepository.php | 26 ++ .../src/Repositories/RefundItemRepository.php | 28 ++ .../src/Repositories/RefundRepository.php | 261 +++++++++++ .../Webkul/Shop/src/Resources/lang/ar/app.php | 1 + .../Webkul/Shop/src/Resources/lang/en/app.php | 7 +- .../Webkul/Shop/src/Resources/lang/fa/app.php | 1 + .../Shop/src/Resources/lang/pt_BR/app.php | 1 + .../customers/account/orders/view.blade.php | 105 +++++ 35 files changed, 2024 insertions(+), 24 deletions(-) create mode 100755 packages/Webkul/Admin/src/DataGrids/OrderRefundDataGrid.php create mode 100755 packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php create mode 100755 packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php create mode 100755 packages/Webkul/Admin/src/Resources/views/sales/refunds/index.blade.php create mode 100755 packages/Webkul/Admin/src/Resources/views/sales/refunds/view.blade.php create mode 100755 packages/Webkul/Sales/src/Contracts/Refund.php create mode 100755 packages/Webkul/Sales/src/Contracts/RefundItem.php create mode 100644 packages/Webkul/Sales/src/Database/Migrations/2019_09_11_184511_create_refunds_table.php create mode 100644 packages/Webkul/Sales/src/Database/Migrations/2019_09_11_184519_create_refund_items_table.php create mode 100644 packages/Webkul/Sales/src/Models/Refund.php create mode 100644 packages/Webkul/Sales/src/Models/RefundItem.php create mode 100644 packages/Webkul/Sales/src/Models/RefundItemProxy.php create mode 100644 packages/Webkul/Sales/src/Models/RefundProxy.php create mode 100644 packages/Webkul/Sales/src/Repositories/RefundItemRepository.php create mode 100644 packages/Webkul/Sales/src/Repositories/RefundRepository.php diff --git a/packages/Webkul/Admin/src/Config/menu.php b/packages/Webkul/Admin/src/Config/menu.php index 6435b5f41..c65fb65a9 100755 --- a/packages/Webkul/Admin/src/Config/menu.php +++ b/packages/Webkul/Admin/src/Config/menu.php @@ -31,8 +31,13 @@ return [ 'route' => 'admin.sales.invoices.index', 'sort' => 3, 'icon-class' => '' - ], - [ + ], [ + 'key' => 'sales.refunds', + 'name' => 'admin::app.layouts.refunds', + 'route' => 'admin.sales.refunds.index', + 'sort' => 4, + 'icon-class' => '' + ], [ 'key' => 'catalog', 'name' => 'admin::app.layouts.catalog', 'route' => 'admin.catalog.products.index', diff --git a/packages/Webkul/Admin/src/DataGrids/OrderRefundDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderRefundDataGrid.php new file mode 100755 index 000000000..84c028308 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/OrderRefundDataGrid.php @@ -0,0 +1,97 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class OrderRefundDataGrid extends DataGrid +{ + protected $index = 'id'; + + protected $sortOrder = 'desc'; //asc or desc + + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('refunds') + ->select('refunds.id', 'refunds.order_id', 'refunds.state', 'refunds.base_grand_total', 'refunds.created_at') + ->leftJoin('orders', 'refunds.order_id', '=', 'orders.id') + ->leftJoin('order_address as order_address_billing', function($leftJoin) { + $leftJoin->on('order_address_billing.order_id', '=', 'orders.id') + ->where('order_address_billing.address_type', 'billing'); + }) + ->addSelect(DB::raw('CONCAT(order_address_billing.first_name, " ", order_address_billing.last_name) as billed_to')); + + $this->addFilter('billed_to', DB::raw('CONCAT(order_address_billing.first_name, " ", order_address_billing.last_name)')); + $this->addFilter('id', 'refunds.id'); + $this->addFilter('order_id', 'refunds.order_id'); + $this->addFilter('state', 'refunds.state'); + $this->addFilter('base_grand_total', 'refunds.base_grand_total'); + $this->addFilter('created_at', 'refunds.created_at'); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'order_id', + 'label' => trans('admin::app.datagrid.order-id'), + 'type' => 'number', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'base_grand_total', + 'label' => trans('admin::app.datagrid.refunded'), + 'type' => 'price', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'billed_to', + 'label' => trans('admin::app.datagrid.billed-to'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.refund-date'), + 'type' => 'datetime', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true + ]); + } + + public function prepareActions() { + $this->addAction([ + 'title' => 'Order Refund View', + 'method' => 'GET', // use GET request only for redirect purposes + 'route' => 'admin.sales.refunds.view', + 'icon' => 'icon eye-icon' + ]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php b/packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php new file mode 100755 index 000000000..669965513 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Sales/RefundController.php @@ -0,0 +1,163 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class RefundController extends Controller +{ + /** + * Display a listing of the resource. + * + * @var array + */ + protected $_config; + + /** + * OrderRepository object + * + * @var Object + */ + protected $orderRepository; + + /** + * OrderItemRepository object + * + * @var Object + */ + protected $orderItemRepository; + + /** + * RefundRepository object + * + * @var Object + */ + protected $refundRepository; + + /** + * Create a new controller instance. + * + * @param \Webkul\Sales\Repositories\OrderRepository $orderRepository + * @param \Webkul\Sales\Repositories\OrderItemRepository $orderItemRepository + * @param \Webkul\Sales\Repositories\RefundRepository $refundRepository + * @return void + */ + public function __construct( + OrderRepository $orderRepository, + OrderItemRepository $orderItemRepository, + RefundRepository $refundRepository + ) + { + $this->middleware('admin'); + + $this->_config = request('_config'); + + $this->orderRepository = $orderRepository; + + $this->orderItemRepository = $orderItemRepository; + + $this->refundRepository = $refundRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\View + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @param int $orderId + * @return \Illuminate\Http\View + */ + public function create($orderId) + { + $order = $this->orderRepository->findOrFail($orderId); + + return view($this->_config['view'], compact('order')); + } + + /** + * Store a newly created resource in storage. + * + * @param int $orderId + * @return \Illuminate\Http\Response + */ + public function store($orderId) + { + $order = $this->orderRepository->findOrFail($orderId); + + if (! $order->canRefund()) { + session()->flash('error', trans('admin::app.sales.refunds.creation-error')); + + return redirect()->back(); + } + + $this->validate(request(), [ + 'refund.items.*' => 'required|numeric|min:0' + ]); + + $data = request()->all(); + + $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'); + + $refundAmount = $totals['grand_total']['price'] - $totals['shipping']['price'] + $data['refund']['shipping'] + $data['refund']['adjustment_refund'] - $data['refund']['adjustment_fee']; + + if ($refundAmount > $maxRefundAmount) { + session()->flash('error', trans('admin::app.sales.refunds.refund-limit-error', ['amount' => core()->formatBasePrice($maxRefundAmount)])); + + return redirect()->back(); + } + + $this->refundRepository->create(array_merge($data, ['order_id' => $orderId])); + + session()->flash('success', trans('admin::app.response.create-success', ['name' => 'Refund'])); + + return redirect()->route($this->_config['redirect'], $orderId); + } + + /** + * Store a newly created resource in storage. + * + * @param int $orderId + * @return \Illuminate\Http\JsonResponse + */ + public function updateQty($orderId) + { + $data = $this->refundRepository->getOrderItemsRefundSummary(request()->all(), $orderId); + + if (! $data) + return response(''); + + return response()->json($data); + } + + /** + * Show the view for the specified resource. + * + * @param int $id + * @return \Illuminate\Http\View + */ + public function view($id) + { + $refund = $this->refundRepository->findOrFail($id); + + return view($this->_config['view'], compact('refund')); + } +} diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index f7112a0f6..93a041ac3 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -196,6 +196,28 @@ Route::group(['middleware' => ['web']], function () { Route::get('/shipments/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\ShipmentController@view')->defaults('_config', [ 'view' => 'admin::sales.shipments.view' ])->name('admin.sales.shipments.view'); + + + // Sales Redunds Routes + Route::get('/refunds', 'Webkul\Admin\Http\Controllers\Sales\RefundController@index')->defaults('_config', [ + 'view' => 'admin::sales.refunds.index' + ])->name('admin.sales.refunds.index'); + + Route::get('/refunds/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@create')->defaults('_config', [ + 'view' => 'admin::sales.refunds.create' + ])->name('admin.sales.refunds.create'); + + Route::post('/refunds/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@store')->defaults('_config', [ + 'redirect' => 'admin.sales.orders.view' + ])->name('admin.sales.refunds.store'); + + Route::post('/refunds/update-qty/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@updateQty')->defaults('_config', [ + 'redirect' => 'admin.sales.orders.view' + ])->name('admin.sales.refunds.update_qty'); + + Route::get('/refunds/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@view')->defaults('_config', [ + 'view' => 'admin::sales.refunds.view' + ])->name('admin.sales.refunds.view'); }); // Catalog Routes diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/app.scss b/packages/Webkul/Admin/src/Resources/assets/sass/app.scss index f6c0fbd6c..726d23090 100755 --- a/packages/Webkul/Admin/src/Resources/assets/sass/app.scss +++ b/packages/Webkul/Admin/src/Resources/assets/sass/app.scss @@ -556,6 +556,7 @@ body { tr { td { padding: 5px 8px; + vertical-align: text-bottom; } &.bold { diff --git a/packages/Webkul/Admin/src/Resources/lang/ar/app.php b/packages/Webkul/Admin/src/Resources/lang/ar/app.php index e1339a81f..a0bc2885f 100644 --- a/packages/Webkul/Admin/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/ar/app.php @@ -146,6 +146,7 @@ return [ 'role' => 'الدور', 'sub-total' => 'المجموع الفرعي', 'no-of-products' => 'عدد المنتجات', + 'refunded' => 'Refunded' ], 'account' => [ 'title' => 'حسابي', @@ -262,6 +263,7 @@ return [ 'item-invoice' => '3-الفواتير (:qty_invoiced)', 'item-shipped' => 'شحنت (:qty_shipped)', 'item-canceled' => 'ملغاة (:qty_canceled)', + 'item-refunded' => 'Refunded (:qty_refunded)', 'price' => 'Price', 'total' => 'المجموع', 'subtotal' => 'المجموع الفرعي', @@ -276,7 +278,9 @@ return [ 'total-paid' => 'المجموع المدفوع', 'total-refunded' => 'مجموع المبالغ المستردة', 'total-due' => 'المجموع المستحق', - 'cancel-confirm-msg' => 'هل أنت متأكد من أنك تريد إلغاء هذا الطلب ؟' + 'cancel-confirm-msg' => 'هل أنت متأكد من أنك تريد إلغاء هذا الطلب ؟', + 'refunds' => 'Refunds', + 'refunded' => 'Refunded' ], 'invoices' => [ 'title' => 'الفواتير', @@ -301,6 +305,7 @@ return [ 'creation-error' => 'لا يسمح بإنشاء الفواتير.', 'product-error' => 'ولا يمكن إعداد الفاتورة بدون منتجات.' ], + 'shipments' => [ 'title' => 'الشحنات', 'id' => 'Id', @@ -325,6 +330,27 @@ return [ 'creation-error' => 'لا يمكن إنشاء الشحنة لهذا الطلب.', 'order-error' => 'لا يسمح بإنشاء شحنة الطلب.', 'quantity-invalid' => 'الكمية المطلوبة غير صالحة أو غير متاحة.', + ], + + 'refunds' => [ + 'title' => 'Refunds', + 'id' => 'Id', + 'add-title' => 'Create Refund', + 'save-btn-title' => 'Refund', + 'order-id' => 'Order Id', + 'qty-ordered' => 'Qty Ordered', + 'qty-to-refund' => 'Qty To Refund', + 'refund-shipping' => 'Refund Shipping', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', + 'update-qty' => 'Update Quantities', + 'invalid-qty' => 'Found invalid quantity for return items.', + 'refund-limit-error' => 'The most money available to refund is :amount.', + 'refunded' => 'Refunded', + 'date' => 'Refund Date', + 'customer-name' => 'Customer Name', + 'status' => 'Status', + 'action' => 'Action' ] ], 'catalog' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 250caacd3..80df5f94a 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -49,6 +49,7 @@ return [ 'orders' => 'Orders', 'shipments' => 'Shipments', 'invoices' => 'Invoices', + 'refunds' => 'Refunds', 'catalog' => 'Catalog', 'products' => 'Products', 'categories' => 'Categories', @@ -130,7 +131,7 @@ return [ 'order-count' => ':count Orders', 'revenue' => 'Revenue :total', 'stock-threshold' => 'Stock Threshold', - 'qty-left' => ':qty Left', + 'qty-left' => ':qty Left' ], 'datagrid' => [ @@ -197,7 +198,9 @@ return [ 'per-cust' => 'Per Customer', 'usage-throttle' => 'Usage Times', 'for-guest' => 'For Guest', - 'order_number' => 'Order Number' + 'order_number' => 'Order Number', + 'refund-date' => 'Refund Date', + 'refunded' => 'Refunded' ], 'account' => [ @@ -320,6 +323,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', @@ -334,7 +338,9 @@ return [ 'total-paid' => 'Total Paid', 'total-refunded' => 'Total Refunded', 'total-due' => 'Total Due', - 'cancel-confirm-msg' => 'Are you sure you want to cancel this order ?' + 'cancel-confirm-msg' => 'Are you sure you want to cancel this order ?', + 'refund-btn-title' => 'Refund', + 'refunds' => 'Refunds' ], 'invoices' => [ @@ -385,6 +391,28 @@ return [ 'creation-error' => 'Shipment can not be created for this order.', 'order-error' => 'Order shipment creation is not allowed.', 'quantity-invalid' => 'Requested quantity is invalid or not available.', + ], + + 'refunds' => [ + 'title' => 'Refunds', + 'id' => 'Id', + 'add-title' => 'Create Refund', + 'save-btn-title' => 'Refund', + 'order-id' => 'Order Id', + 'qty-ordered' => 'Qty Ordered', + 'qty-to-refund' => 'Qty To Refund', + 'refund-shipping' => 'Refund Shipping', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', + 'update-qty' => 'Update Quantities', + 'invalid-qty' => 'Found invalid quantity for return items.', + 'refund-limit-error' => 'The most money available to refund is :amount.', + 'refunded' => 'Refunded', + 'date' => 'Refund Date', + 'customer-name' => 'Customer Name', + 'status' => 'Status', + 'action' => 'Action', + 'view-title' => 'Refund #:refund_id', ] ], diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index 93a07cb11..efa6f4ecf 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -166,7 +166,8 @@ return [ 'action_type' => 'نوع عملیات', 'disc_quantity' => 'مقدار استفاده نشده', 'disc_threshold' => 'آستانه استفاده نشده', - 'use_coupon' => 'استافده از کوپن' + 'use_coupon' => 'استافده از کوپن', + 'refunded' => 'Refunded' ], 'account' => [ @@ -289,6 +290,7 @@ return [ 'item-invoice' => 'صورت حساب (:qty_invoiced)', 'item-shipped' => 'حمل شده (:qty_shipped)', 'item-canceled' => 'لغو شده (:qty_canceled)', + 'item-refunded' => 'Refunded (:qty_refunded)', 'price' => 'قیمت', 'total' => 'کل', 'subtotal' => 'فرعی', @@ -302,7 +304,9 @@ return [ 'total-paid' => 'کل پرداخت شده', 'total-refunded' => 'بازپرداخت کل', 'total-due' => 'بدهی کل', - 'cancel-confirm-msg' => 'مطمئن هستید که می خواهید این سفارش را لغو کنید ؟' + 'cancel-confirm-msg' => 'مطمئن هستید که می خواهید این سفارش را لغو کنید ؟', + 'refunds' => 'Refunds', + 'refunded' => 'Refunded' ], 'invoices' => [ @@ -353,6 +357,27 @@ return [ 'creation-error' => 'حمل و نقل برای این سفارش ایجاد نمی شود.', 'order-error' => 'ایجاد محموله سفارش مجاز نیست.', 'quantity-invalid' => 'مقدار درخواستی نامعتبر است یا در دسترس نیست.', + ], + + 'refunds' => [ + 'title' => 'Refunds', + 'id' => 'Id', + 'add-title' => 'Create Refund', + 'save-btn-title' => 'Refund', + 'order-id' => 'Order Id', + 'qty-ordered' => 'Qty Ordered', + 'qty-to-refund' => 'Qty To Refund', + 'refund-shipping' => 'Refund Shipping', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', + 'update-qty' => 'Update Quantities', + 'invalid-qty' => 'Found invalid quantity for return items.', + 'refund-limit-error' => 'The most money available to refund is :amount.', + 'refunded' => 'Refunded', + 'date' => 'Refund Date', + 'customer-name' => 'Customer Name', + 'status' => 'Status', + 'action' => 'Action' ] ], 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 9d3ef4265..547534691 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -154,7 +154,8 @@ return [ 'ends-till' => 'Termina Até', 'per-cust' => 'Por cliente', 'usage-throttle' => 'Tempos de uso', - 'for-guest' => 'Para convidados' + 'for-guest' => 'Para convidados', + 'refunded' => 'Refunded' ], 'account' => [ 'title' => 'Minha Conta', @@ -270,6 +271,7 @@ return [ 'item-invoice' => 'Faturado(s) (:qty_invoiced)', 'item-shipped' => 'Enviado(s) (:qty_shipped)', 'item-canceled' => 'Cancelado(s) (:qty_canceled)', + 'item-refunded' => 'Refunded (:qty_refunded)', 'price' => 'Preço', 'total' => 'Total', 'subtotal' => 'Subtotal', @@ -284,7 +286,9 @@ return [ 'total-paid' => 'Total Pago', 'total-refunded' => 'Total Estornado', 'total-due' => 'Total Devido', - 'cancel-confirm-msg' => 'Tem certeza que deseja cancelar esse pedido ?' + 'cancel-confirm-msg' => 'Tem certeza que deseja cancelar esse pedido ?', + 'refunds' => 'Refunds', + 'refunded' => 'Refunded' ], 'invoices' => [ 'title' => 'Faturas', @@ -309,6 +313,7 @@ return [ 'creation-error' => 'A criação de fatura de pedido não é permitida.', 'product-error' => 'A fatura não pode ser criada sem produtos.' ], + 'shipments' => [ 'title' => 'Entregas', 'id' => 'Id', @@ -333,6 +338,27 @@ return [ 'creation-error' => 'A expedição não pode ser criada para este pedido.', 'order-error' => 'A criação de remessa de pedidos não é permitida.', 'quantity-invalid' => 'A quantidade solicitada é inválida ou não está disponível.' + ], + + 'refunds' => [ + 'title' => 'Refunds', + 'id' => 'Id', + 'add-title' => 'Create Refund', + 'save-btn-title' => 'Refund', + 'order-id' => 'Order Id', + 'qty-ordered' => 'Qty Ordered', + 'qty-to-refund' => 'Qty To Refund', + 'refund-shipping' => 'Refund Shipping', + 'adjustment-refund' => 'Adjustment Refund', + 'adjustment-fee' => 'Adjustment Fee', + 'update-qty' => 'Update Quantities', + 'invalid-qty' => 'Found invalid quantity for return items.', + 'refund-limit-error' => 'The most money available to refund is :amount.', + 'refunded' => 'Refunded', + 'date' => 'Refund Date', + 'customer-name' => 'Customer Name', + 'status' => 'Status', + 'action' => 'Action' ] ], 'catalog' => [ 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..2d7438ab9 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 @@ -31,6 +31,12 @@ @endif + @if ($order->canRefund()) + + {{ __('admin::app.sales.orders.refund-btn-title') }} + + @endif + @if ($order->canShip()) {{ __('admin::app.sales.orders.shipment-btn-title') }} @@ -274,6 +280,10 @@ {{ $item->qty_shipped ? __('admin::app.sales.orders.item-shipped', ['qty_shipped' => $item->qty_shipped]) : '' }} + + {{ $item->qty_refunded ? __('admin::app.sales.orders.item-refunded', ['qty_refunded' => $item->qty_refunded]) : '' }} + + {{ $item->qty_canceled ? __('admin::app.sales.orders.item-canceled', ['qty_canceled' => $item->qty_canceled]) : '' }} @@ -440,6 +450,50 @@ + + + +
+ + + + + + + + + + + + + + + + @foreach ($order->refunds as $refund) + + + + + + + + + + @endforeach + + @if (! $order->refunds->count()) + + + + @endif +
{{ __('admin::app.sales.refunds.id') }}{{ __('admin::app.sales.refunds.date') }}{{ __('admin::app.sales.refunds.order-id') }}{{ __('admin::app.sales.refunds.customer-name') }}{{ __('admin::app.sales.refunds.status') }}{{ __('admin::app.sales.refunds.refunded') }}{{ __('admin::app.sales.refunds.action') }}
#{{ $refund->id }}{{ $refund->created_at }}#{{ $refund->order->id }}{{ $refund->order->customer_full_name }}{{ $refund->status_label }}{{ core()->formatBasePrice($refund->base_grand_total) }} + + + +
{{ __('admin::app.common.no-result-found') }}
+
+ +
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 new file mode 100755 index 000000000..216393cf7 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php @@ -0,0 +1,404 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.sales.refunds.add-title') }} +@stop + +@section('content-wrapper') +
+
+ @csrf() + + + +
+
+ + + + + + +
+ +
+
+ {{ __('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) }} + +
+
+
+
+
+ + +
+ + + +
+
+ +
+
+ +
+@stop + +@push('scripts') + + + +@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.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 03/12] 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 04/12] 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 05/12] 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 06/12] 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 07/12] 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 08/12] 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 09/12] 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 10/12] 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 11/12] 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 58331043e924ebf1c8a4024ca988d7b0eb41b72d Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Fri, 20 Sep 2019 14:49:53 +0530 Subject: [PATCH 12/12] translatable package update --- composer.json | 48 +++++++++---------- config/app.php | 2 +- .../Controllers/Shop/WishlistController.php | 2 +- .../Core/src/Eloquent/TranslatableModel.php | 2 +- .../Repositories/ProductFlatRepository.php | 4 +- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/composer.json b/composer.json index 6b3e2d635..9a2f62ce5 100755 --- a/composer.json +++ b/composer.json @@ -8,30 +8,30 @@ "license": "MIT", "type": "project", "require": { - "php": "^7.1.3", - "ext-curl": "*", - "ext-intl": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-pdo": "*", - "ext-pdo_mysql": "*", - "ext-tokenizer": "*", - "barryvdh/laravel-dompdf": "0.8.3", - "dimsav/laravel-translatable": "^9.0", - "doctrine/dbal": "2.9.2", - "fideloper/proxy": "^4.0", - "flynsarmy/db-blade-compiler": "*", - "guzzlehttp/guzzle": "~6.0", - "intervention/image": "^2.4", - "intervention/imagecache": "^2.3", - "kalnoy/nestedset": "^4.3", - "konekt/concord": "^1.2", - "laravel/framework": "5.6.*", - "laravel/tinker": "^1.0", - "maatwebsite/excel": "3.1.11", - "nwidart/laravel-modules": "^3.2", - "prettus/l5-repository": "2.6.32", - "tymon/jwt-auth": "1.0.0-rc.4" + "php": "^7.1.3", + "ext-curl": "*", + "ext-intl": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pdo": "*", + "ext-pdo_mysql": "*", + "ext-tokenizer": "*", + "astrotomic/laravel-translatable": "^11.0.0", + "barryvdh/laravel-dompdf": "0.8.3", + "doctrine/dbal": "2.9.2", + "fideloper/proxy": "^4.0", + "flynsarmy/db-blade-compiler": "*", + "guzzlehttp/guzzle": "~6.0", + "intervention/image": "^2.4", + "intervention/imagecache": "^2.3", + "kalnoy/nestedset": "^4.3", + "konekt/concord": "^1.2", + "laravel/framework": "5.6.*", + "laravel/tinker": "^1.0", + "maatwebsite/excel": "3.1.11", + "nwidart/laravel-modules": "^3.2", + "prettus/l5-repository": "2.6.32", + "tymon/jwt-auth": "1.0.0-rc.4" }, "require-dev": { "barryvdh/laravel-debugbar": "^3.1", diff --git a/config/app.php b/config/app.php index 3bb520a73..292f592b4 100755 --- a/config/app.php +++ b/config/app.php @@ -202,7 +202,7 @@ return [ * Package Service Providers... */ - Dimsav\Translatable\TranslatableServiceProvider::class, + Astrotomic\Translatable\TranslatableServiceProvider::class, /* * Application Service Providers... diff --git a/packages/Webkul/API/Http/Controllers/Shop/WishlistController.php b/packages/Webkul/API/Http/Controllers/Shop/WishlistController.php index 9086e3f6a..39f83f6e0 100644 --- a/packages/Webkul/API/Http/Controllers/Shop/WishlistController.php +++ b/packages/Webkul/API/Http/Controllers/Shop/WishlistController.php @@ -44,7 +44,7 @@ class WishlistController extends Controller auth()->setDefaultDriver($this->guard); $this->middleware('auth:' . $this->guard); - + $this->wishlistRepository = $wishlistRepository; $this->productRepository = $productRepository; diff --git a/packages/Webkul/Core/src/Eloquent/TranslatableModel.php b/packages/Webkul/Core/src/Eloquent/TranslatableModel.php index e54a03009..f14045a60 100755 --- a/packages/Webkul/Core/src/Eloquent/TranslatableModel.php +++ b/packages/Webkul/Core/src/Eloquent/TranslatableModel.php @@ -3,7 +3,7 @@ namespace Webkul\Core\Eloquent; use Illuminate\Database\Eloquent\Model; -use Dimsav\Translatable\Translatable; +use Astrotomic\Translatable\Translatable; use Webkul\Core\Models\Locale; class TranslatableModel extends Model diff --git a/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php b/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php index d29abd4ed..66e3c20cf 100644 --- a/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php @@ -49,7 +49,7 @@ class ProductFlatRepository extends Repository // ->where('product_categories.category_id', $categoryId) // ->max('price'); - return $this->model->max('price'); + return $this->model->max('product_flat.price'); } /** @@ -59,7 +59,7 @@ class ProductFlatRepository extends Repository */ public function getProductMaximumPrice() { - return $this->model->max('price'); + return $this->model->max('product_flat.price'); } /**