From f1371fd6a05313cf6d0bdd1f835dc318525c5a09 Mon Sep 17 00:00:00 2001 From: jitendra Date: Fri, 11 Jan 2019 14:51:20 +0530 Subject: [PATCH 1/2] Product inventory management updated --- .../Controllers/Sales/ShipmentController.php | 1 + .../products/accordians/inventories.blade.php | 2 +- .../products/accordians/variations.blade.php | 2 +- .../views/sales/shipments/create.blade.php | 13 ++++++++ ...id_column_in_product_inventories_table.php | 33 +++++++++++++++++++ .../Webkul/Product/src/Models/Product.php | 4 +-- .../Product/src/Models/ProductInventory.php | 2 +- .../ProductInventoryRepository.php | 24 ++++++-------- .../Repositories/ShipmentItemRepository.php | 1 + .../src/Repositories/ShipmentRepository.php | 3 +- 10 files changed, 65 insertions(+), 20 deletions(-) create mode 100644 packages/Webkul/Product/src/Database/Migrations/2019_01_11_122452_add_vendor_id_column_in_product_inventories_table.php diff --git a/packages/Webkul/Admin/src/Http/Controllers/Sales/ShipmentController.php b/packages/Webkul/Admin/src/Http/Controllers/Sales/ShipmentController.php index d40c1e84f..16458d749 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Sales/ShipmentController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Sales/ShipmentController.php @@ -159,6 +159,7 @@ class ShipmentController extends Controller $inventory = $product->inventories() ->where('inventory_source_id', $data['shipment']['source']) + ->where('vendor_id', 0) ->first(); if ($orderItem->qty_to_ship < $qty || $inventory->qty < $qty) { diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/inventories.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/inventories.blade.php index dc6085033..54fe2ee16 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/inventories.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/inventories.blade.php @@ -7,7 +7,7 @@ $qty = 0; foreach ($product->inventories as $inventory) { - if($inventory->inventory_source_id == $inventorySource->id) { + if($inventory->inventory_source_id == $inventorySource->id && !$inventory->vendor_id) { $qty = $inventory->qty; break; } diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php index 489f27b57..4f8fd7628 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php @@ -325,7 +325,7 @@ sourceInventoryQty (inventorySourceId) { var inventories = this.variant.inventories.filter(function(inventory) { - return inventorySourceId === inventory.inventory_source_id; + return inventorySourceId === inventory.inventory_source_id && !inventory.vendor_id; }) if(inventories.length) diff --git a/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php index eae212a51..20a86bc6e 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/shipments/create.blade.php @@ -306,6 +306,19 @@ } ?> + type == 'configurable' ? $item->child->product : $item->product; + + foreach ($product->inventories as $inventory) { + if($inventory->inventory_source_id == $inventorySource->id && !$inventory->vendor_id) { + $sourceQty = $inventory->qty; + break; + } + } + ?> + {{ $sourceQty }} diff --git a/packages/Webkul/Product/src/Database/Migrations/2019_01_11_122452_add_vendor_id_column_in_product_inventories_table.php b/packages/Webkul/Product/src/Database/Migrations/2019_01_11_122452_add_vendor_id_column_in_product_inventories_table.php new file mode 100644 index 000000000..9fffb5e3c --- /dev/null +++ b/packages/Webkul/Product/src/Database/Migrations/2019_01_11_122452_add_vendor_id_column_in_product_inventories_table.php @@ -0,0 +1,33 @@ +integer('vendor_id')->default(0); + $table->unique(['product_id', 'inventory_source_id', 'vendor_id'], 'product_source_vendor_index_unique'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('product_inventories', function (Blueprint $table) { + // + }); + } +} diff --git a/packages/Webkul/Product/src/Models/Product.php b/packages/Webkul/Product/src/Models/Product.php index 71d92be7f..a757122fe 100755 --- a/packages/Webkul/Product/src/Models/Product.php +++ b/packages/Webkul/Product/src/Models/Product.php @@ -163,10 +163,10 @@ class Product extends Model * * @return bool */ - public function inventory_source_qty($inventorySource) + public function inventory_source_qty($inventorySourceId) { return $this->inventories() - ->where('inventory_source_id', $inventorySource->id) + ->where('inventory_source_id', $inventorySourceId) ->sum('qty'); } diff --git a/packages/Webkul/Product/src/Models/ProductInventory.php b/packages/Webkul/Product/src/Models/ProductInventory.php index f76ba89a5..91eb56c21 100755 --- a/packages/Webkul/Product/src/Models/ProductInventory.php +++ b/packages/Webkul/Product/src/Models/ProductInventory.php @@ -9,7 +9,7 @@ class ProductInventory extends Model { public $timestamps = false; - protected $fillable = ['qty', 'product_id', 'inventory_source_id']; + protected $fillable = ['qty', 'product_id', 'inventory_source_id', 'vendor_id']; /** * Get the product attribute family that owns the product. diff --git a/packages/Webkul/Product/src/Repositories/ProductInventoryRepository.php b/packages/Webkul/Product/src/Repositories/ProductInventoryRepository.php index 8e70a1cf5..ff2cd6ece 100755 --- a/packages/Webkul/Product/src/Repositories/ProductInventoryRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductInventoryRepository.php @@ -33,36 +33,32 @@ class ProductInventoryRepository extends Repository if ($product->type == 'configurable') return; - $inventorySourceIds = $product->inventory_sources->pluck('id'); - if(isset($data['inventories'])) { foreach($data['inventories'] as $inventorySourceId => $qty) { - if(is_null($qty)) - continue; - + if(is_null($qty)) { + $qty = 0; + } + $productInventory = $this->findOneWhere([ 'product_id' => $product->id, 'inventory_source_id' => $inventorySourceId, + 'vendor_id' => isset($data['vendor_id']) ? $data['vendor_id'] : 0 ]); - + + if($productInventory) { - if(is_numeric($index = $inventorySourceIds->search($inventorySourceId))) { - $inventorySourceIds->forget($index); - } + $productInventory->qty = $qty; - $this->update(['qty' => $qty], $productInventory->id); + $productInventory->save(); } else { $this->create([ 'qty' => $qty, 'product_id' => $product->id, 'inventory_source_id' => $inventorySourceId, + 'vendor_id' => isset($data['vendor_id']) ? $data['vendor_id'] : 0 ]); } } } - - if($inventorySourceIds->count()) { - $product->inventory_sources()->detach($inventorySourceIds); - } } } \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Repositories/ShipmentItemRepository.php b/packages/Webkul/Sales/src/Repositories/ShipmentItemRepository.php index bbbec550f..7bce82f55 100644 --- a/packages/Webkul/Sales/src/Repositories/ShipmentItemRepository.php +++ b/packages/Webkul/Sales/src/Repositories/ShipmentItemRepository.php @@ -50,6 +50,7 @@ class ShipmentItemRepository extends Repository } $inventory = $data['product']->inventories() + ->where('vendor_id', $data['vendor_id']) ->where('inventory_source_id', $data['shipment']->inventory_source_id) ->first(); diff --git a/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php b/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php index c9ac6fbec..e2bc8813d 100755 --- a/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php +++ b/packages/Webkul/Sales/src/Repositories/ShipmentRepository.php @@ -134,7 +134,8 @@ class ShipmentRepository extends Repository 'shipment' => $shipment, 'shipmentItem' => $shipmentItem, 'product' => $product, - 'qty' => $qty + 'qty' => $qty, + 'vendor_id' => isset($data['vendor_id']) ? $data['vendor_id'] : 0 ]); $this->orderItem->update(['qty_shipped' => $orderItem->qty_shipped + $qty], $orderItem->id); From 34efd4d2c69a19c0bff82274746bb8f035f5d0f3 Mon Sep 17 00:00:00 2001 From: jitendra Date: Fri, 11 Jan 2019 15:32:15 +0530 Subject: [PATCH 2/2] Assets compiled for production --- packages/Webkul/Ui/webpack.mix.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/Webkul/Ui/webpack.mix.js b/packages/Webkul/Ui/webpack.mix.js index 62c9ba3ef..a460ad735 100755 --- a/packages/Webkul/Ui/webpack.mix.js +++ b/packages/Webkul/Ui/webpack.mix.js @@ -4,6 +4,7 @@ require("laravel-mix-merge-manifest"); var publicPath = 'publishable/assets'; // var publicPath = "../../../public/vendor/webkul/ui/assets"; + mix.setPublicPath(publicPath).mergeManifest(); mix.disableNotifications();