itemFacade = app(ItemFacade::class); $this->chartOfAccountFacade = app(ChartOfAccountFacade::class); $this->itemRepository = app(ItemRepositoryInterface::class); $this->itemCategoryFacade = app(ItemCategoryFacade::class); $this->warehouseFacade = app(WarehouseFacade::class); } /** * @param string $warehousesRow * @return ItemWarehouseAttr[] */ private function toItemWarehouseAttrs($warehousesRow) { $warehouses = []; $arrs = explode(",", $warehousesRow); foreach ($arrs as $arr) { $arr = trim($arr); $explodeArr = explode(":", $arr); $warehouseName = trim($explodeArr[0] ?? ""); $openingStock = trim($explodeArr[1] ?? ""); if ($warehouseName && $openingStock) { $warehouse = $this->warehouseFacade->findByNameOrCreate($warehouseName); $warehouses[] = (new ItemWarehouseAttr) ->setWarehouseId($warehouse->id) ->setInitialStock($openingStock); } } return $warehouses; } public function collection(Collection $collection) { foreach ($collection as $i => $row) { if ($i != 0) { $categoryName = $row[0]; $name = $row[1]; $sku = $row[2]; $unit = $row[3]; $salesAccountName = $row[4]; $salesAccountType = keyChartOfAccountType($row[5]); $salesAccountPrice = $row[6]; $purchaseAccountName = $row[7]; $purchaseAccountType = keyChartOfAccountType($row[8]); $purchaseAccountPrice = $row[9]; $warehouses = $row[10]; $salesAccount = $this->chartOfAccountFacade->findByNameOrCreate( (new ChartOfAccountAttr) ->setName($salesAccountName) ->settype($salesAccountType) ); $purchaseAccount = $this->chartOfAccountFacade->findByNameOrCreate( (new ChartOfAccountAttr) ->setName($purchaseAccountName) ->settype($purchaseAccountType) ); $category = $this->itemCategoryFacade->findByNameOrCreate($categoryName); if (!$this->itemRepository->findByNameAndCategoryId($name, $category->id)) { $this->itemFacade->handleSaveItem( (new ItemAttr) ->setItemCategoryId($category->id) ->setName($name) ->setSku($sku) ->setUnit($unit) ->setItemSaleInfoAttr( (new ItemSaleInfoAttr) ->setChartOfAccountId($salesAccount->id) ->setPrice($salesAccountPrice) )->setItemPurchaseInfoAttr( (new ItemPurchaseInfoAttr) ->setChartOfAccountId($purchaseAccount->id) ->setPrice($purchaseAccountPrice) )->setItemWarehouses( $this->toItemWarehouseAttrs( $warehouses ) )->setRelatedItems([]) ); } } } } }