/** * 商品規格情報を更新 */ protected function updateProductClass($row, Product $Product, ProductClass $ProductClass, $app, $data) { $ProductClass->setProduct($Product); if ($row['商品種別(ID)'] == '') { $this->addErrors($data->key() + 1 . '行目の商品種別(ID)が設定されていません。'); } else { if (preg_match('/^\\d+$/', $row['商品種別(ID)'])) { $ProductType = $app['eccube.repository.master.product_type']->find($row['商品種別(ID)']); if (!$ProductType) { $this->addErrors($data->key() + 1 . '行目の商品種別(ID)が存在しません。'); } else { $ProductClass->setProductType($ProductType); } } else { $this->addErrors($data->key() + 1 . '行目の商品種別(ID)が存在しません。'); } } // 規格分類1、2をそれぞれセットし作成 if ($row['規格分類1(ID)'] != '') { if (preg_match('/^\\d+$/', $row['規格分類1(ID)'])) { $ClassCategory = $app['eccube.repository.class_category']->find($row['規格分類1(ID)']); if (!$ClassCategory) { $this->addErrors($data->key() + 1 . '行目の規格分類1(ID)が存在しません。'); } else { $ProductClass->setClassCategory1($ClassCategory); } } else { $this->addErrors($data->key() + 1 . '行目の規格分類1(ID)が存在しません。'); } } if ($row['規格分類2(ID)'] != '') { if (preg_match('/^\\d+$/', $row['規格分類2(ID)'])) { $ClassCategory = $app['eccube.repository.class_category']->find($row['規格分類2(ID)']); if (!$ClassCategory) { $this->addErrors($data->key() + 1 . '行目の規格分類2(ID)が存在しません。'); } else { $ProductClass->setClassCategory2($ClassCategory); } } else { $this->addErrors($data->key() + 1 . '行目の規格分類2(ID)が存在しません。'); } } if ($row['発送日目安(ID)'] != '') { if (preg_match('/^\\d+$/', $row['発送日目安(ID)'])) { $DeliveryDate = $app['eccube.repository.delivery_date']->find($row['発送日目安(ID)']); if (!$DeliveryDate) { $this->addErrors($data->key() + 1 . '行目の発送日目安(ID)が存在しません。'); } else { $ProductClass->setDeliveryDate($DeliveryDate); } } else { $this->addErrors($data->key() + 1 . '行目の発送日目安(ID)が存在しません。'); } } if (Str::isNotBlank($row['商品コード'])) { $ProductClass->setCode(Str::trimAll($row['商品コード'])); } else { $ProductClass->setCode(null); } if ($row['在庫数無制限フラグ'] == '') { $this->addErrors($data->key() + 1 . '行目の在庫数無制限フラグが設定されていません。'); } else { if ($row['在庫数無制限フラグ'] == (string) Constant::DISABLED) { $ProductClass->setStockUnlimited(Constant::DISABLED); // 在庫数が設定されていなければエラー if ($row['在庫数'] == '') { $this->addErrors($data->key() + 1 . '行目の在庫数が設定されていません。'); } else { $stock = str_replace(',', '', $row['在庫数']); if (preg_match('/^\\d+$/', $stock) && $stock >= 0) { $ProductClass->setStock($row['在庫数']); } else { $this->addErrors($data->key() + 1 . '行目の在庫数は0以上の数値を設定してください。'); } } } else { if ($row['在庫数無制限フラグ'] == (string) Constant::ENABLED) { $ProductClass->setStockUnlimited(Constant::ENABLED); $ProductClass->setStock(null); } else { $this->addErrors($data->key() + 1 . '行目の在庫数無制限フラグが設定されていません。'); } } } if ($row['販売制限数'] != '') { $saleLimit = str_replace(',', '', $row['販売制限数']); if (preg_match('/^\\d+$/', $saleLimit) && $saleLimit >= 0) { $ProductClass->setSaleLimit($saleLimit); } else { $this->addErrors($data->key() + 1 . '行目の販売制限数は0以上の数値を設定してください。'); } } if ($row['通常価格'] != '') { $price01 = str_replace(',', '', $row['通常価格']); if (preg_match('/^\\d+$/', $price01) && $price01 >= 0) { $ProductClass->setPrice01($price01); } else { $this->addErrors($data->key() + 1 . '行目の通常価格は0以上の数値を設定してください。'); } } if ($row['販売価格'] == '') { $this->addErrors($data->key() + 1 . '行目の販売価格が設定されていません。'); } else { $price02 = str_replace(',', '', $row['販売価格']); if (preg_match('/^\\d+$/', $price02) && $price02 >= 0) { $ProductClass->setPrice02($price02); } else { $this->addErrors($data->key() + 1 . '行目の販売価格は0以上の数値を設定してください。'); } } if ($row['商品規格削除フラグ'] == '') { $ProductClass->setDelFlg(Constant::DISABLED); } else { if ($row['商品規格削除フラグ'] == (string) Constant::DISABLED || $row['商品規格削除フラグ'] == (string) Constant::ENABLED) { $ProductClass->setDelFlg($row['商品規格削除フラグ']); } else { $this->addErrors($data->key() + 1 . '行目の商品規格削除フラグが設定されていません。'); } } $ProductStock = $ProductClass->getProductStock(); if (!$ProductClass->getStockUnlimited()) { $ProductStock->setStock($ProductClass->getStock()); } else { // 在庫無制限時はnullを設定 $ProductStock->setStock(null); } return $ProductClass; }
/** * 配送商品情報を作成 * * @param Order $Order * @param Product $Product * @param ProductClass $ProductClass * @param $quantity * @return \Eccube\Entity\ShipmentItem */ public function getNewShipmentItem(Order $Order, Product $Product, ProductClass $ProductClass, $quantity) { $ShipmentItem = new ShipmentItem(); $shippings = $Order->getShippings(); // 選択された商品がどのお届け先情報と関連するかチェック $Shipping = null; foreach ($shippings as $s) { if ($s->getDelivery()->getProductType()->getId() == $ProductClass->getProductType()->getId()) { // 商品種別が同一のお届け先情報と関連させる $Shipping = $s; break; } } if (is_null($Shipping)) { // お届け先情報と関連していない場合、エラー throw new CartException('shopping.delivery.not.producttype'); } // 商品ごとの配送料合計 $productDeliveryFeeTotal = 0; if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) { $productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity; } $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal); $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity); $ClassCategory1 = $ProductClass->getClassCategory1(); if (!is_null($ClassCategory1)) { $ShipmentItem->setClasscategoryName1($ClassCategory1->getName()); $ShipmentItem->setClassName1($ClassCategory1->getClassName()->getName()); } $ClassCategory2 = $ProductClass->getClassCategory2(); if (!is_null($ClassCategory2)) { $ShipmentItem->setClasscategoryName2($ClassCategory2->getName()); $ShipmentItem->setClassName2($ClassCategory2->getClassName()->getName()); } $Shipping->addShipmentItem($ShipmentItem); $this->em->persist($ShipmentItem); return $ShipmentItem; }
/** * 新しい商品規格を作成 */ private function newProductClass(Application $app) { $ProductType = $app['eccube.repository.master.product_type']->find($app['config']['product_type_normal']); $ProductClass = new ProductClass(); $ProductClass->setProductType($ProductType); return $ProductClass; }
/** * Product オブジェクトを生成して返す. * * $product_class_num = 0 としても、商品規格の無い商品を生成できない. 単に ProductClass が生成されないだけなので注意すること. * * @param string $product_name 商品名. null の場合はランダムな文字列が生成される. * @param integer $product_class_num 商品規格の生成数 * @return \Eccube\Entity\Product */ public function createProduct($product_name = null, $product_class_num = 3) { $faker = $this->getFaker(); $Member = $this->app['eccube.repository.member']->find(2); $Disp = $this->app['eccube.repository.master.disp']->find(\Eccube\Entity\Master\Disp::DISPLAY_SHOW); $ProductType = $this->app['eccube.repository.master.product_type']->find(1); $Product = new Product(); if (is_null($product_name)) { $product_name = $faker->word; } $Product->setName($product_name)->setCreator($Member)->setStatus($Disp)->setDelFlg(Constant::DISABLED)->setDescriptionList($faker->paragraph())->setDescriptionDetail($faker->text()); $this->app['orm.em']->persist($Product); $this->app['orm.em']->flush($Product); for ($i = 0; $i < 3; $i++) { $ProductImage = new ProductImage(); $ProductImage->setCreator($Member)->setFileName($faker->word . '.jpg')->setRank($i)->setProduct($Product); $this->app['orm.em']->persist($ProductImage); $this->app['orm.em']->flush($ProductImage); $Product->addProductImage($ProductImage); } for ($i = 0; $i < $product_class_num; $i++) { $ProductStock = new ProductStock(); $ProductStock->setCreator($Member)->setStock($faker->randomNumber()); $this->app['orm.em']->persist($ProductStock); $this->app['orm.em']->flush($ProductStock); $ProductClass = new ProductClass(); $ProductClass->setCreator($Member)->setProductStock($ProductStock)->setProduct($Product)->setProductType($ProductType)->setStockUnlimited(false)->setPrice02($faker->randomNumber(5))->setDelFlg(Constant::DISABLED); $this->app['orm.em']->persist($ProductClass); $this->app['orm.em']->flush($ProductClass); $Product->addProductClass($ProductClass); } $Categories = $this->app['eccube.repository.category']->findAll(); $i = 0; foreach ($Categories as $Category) { $ProductCategory = new ProductCategory(); $ProductCategory->setCategory($Category)->setProduct($Product)->setCategoryId($Category->getId())->setProductId($Product->getId())->setRank($i); $this->app['orm.em']->persist($ProductCategory); $this->app['orm.em']->flush($ProductCategory); $Product->addProductCategory($ProductCategory); $i++; } $this->app['orm.em']->flush($Product); return $Product; }
/** * Product オブジェクトを生成して返す. * * $product_class_num = 0 とすると商品規格の無い商品を生成する. * * @param string $product_name 商品名. null の場合はランダムな文字列が生成される. * @param integer $product_class_num 商品規格の生成数 * @return \Eccube\Entity\Product */ public function createProduct($product_name = null, $product_class_num = 3) { $faker = $this->getFaker(); $Member = $this->app['eccube.repository.member']->find(2); $Disp = $this->app['eccube.repository.master.disp']->find(\Eccube\Entity\Master\Disp::DISPLAY_SHOW); $ProductType = $this->app['eccube.repository.master.product_type']->find(1); $DeliveryDates = $this->app['eccube.repository.delivery_date']->findAll(); $Product = new Product(); if (is_null($product_name)) { $product_name = $faker->word; } $Product->setName($product_name)->setCreator($Member)->setStatus($Disp)->setDelFlg(Constant::DISABLED)->setDescriptionList($faker->paragraph())->setDescriptionDetail($faker->text()); $this->app['orm.em']->persist($Product); $this->app['orm.em']->flush($Product); for ($i = 0; $i < 3; $i++) { $ProductImage = new ProductImage(); $ProductImage->setCreator($Member)->setFileName($faker->word . '.jpg')->setRank($i)->setProduct($Product); $this->app['orm.em']->persist($ProductImage); $this->app['orm.em']->flush($ProductImage); $Product->addProductImage($ProductImage); } $ClassNames = $this->app['eccube.repository.class_name']->findAll(); $ClassName1 = $ClassNames[$faker->numberBetween(0, count($ClassNames) - 1)]; $ClassName2 = $ClassNames[$faker->numberBetween(0, count($ClassNames) - 1)]; // 同じ ClassName が選択された場合は ClassName1 のみ if ($ClassName1->getId() === $ClassName2->getId()) { $ClassName2 = null; } $ClassCategories1 = $this->app['eccube.repository.class_category']->findBy(array('ClassName' => $ClassName1)); $ClassCategories2 = array(); if (is_object($ClassName2)) { $ClassCategories2 = $this->app['eccube.repository.class_category']->findBy(array('ClassName' => $ClassName2)); } for ($i = 0; $i < $product_class_num; $i++) { $ProductStock = new ProductStock(); $ProductStock->setCreator($Member)->setStock($faker->randomNumber(3)); $this->app['orm.em']->persist($ProductStock); $this->app['orm.em']->flush($ProductStock); $ProductClass = new ProductClass(); $ProductClass->setCode($faker->word)->setCreator($Member)->setStock($ProductStock->getStock())->setProductStock($ProductStock)->setProduct($Product)->setProductType($ProductType)->setStockUnlimited(false)->setPrice02($faker->randomNumber(5))->setDeliveryDate($DeliveryDates[$faker->numberBetween(0, 8)])->setDelFlg(Constant::DISABLED); if (array_key_exists($i, $ClassCategories1)) { $ProductClass->setClassCategory1($ClassCategories1[$i]); } if (array_key_exists($i, $ClassCategories2)) { $ProductClass->setClassCategory2($ClassCategories2[$i]); } $this->app['orm.em']->persist($ProductClass); $this->app['orm.em']->flush($ProductClass); $ProductStock->setProductClass($ProductClass); $ProductStock->setProductClassId($ProductClass->getId()); $this->app['orm.em']->flush($ProductStock); $Product->addProductClass($ProductClass); } // デフォルトの商品規格生成 $ProductStock = new ProductStock(); $ProductStock->setCreator($Member)->setStock($faker->randomNumber(3)); $this->app['orm.em']->persist($ProductStock); $this->app['orm.em']->flush($ProductStock); $ProductClass = new ProductClass(); if ($product_class_num > 0) { $ProductClass->setDelFlg(Constant::ENABLED); } else { $ProductClass->setDelFlg(Constant::DISABLED); } $ProductClass->setCode($faker->word)->setCreator($Member)->setStock($ProductStock->getStock())->setProductStock($ProductStock)->setProduct($Product)->setProductType($ProductType)->setPrice02($faker->randomNumber(5))->setDeliveryDate($DeliveryDates[$faker->numberBetween(0, 8)])->setStockUnlimited(false)->setProduct($Product); $this->app['orm.em']->persist($ProductClass); $this->app['orm.em']->flush($ProductClass); $ProductStock->setProductClass($ProductClass); $ProductStock->setProductClassId($ProductClass->getId()); $this->app['orm.em']->flush($ProductStock); $Product->addProductClass($ProductClass); $Categories = $this->app['eccube.repository.category']->findAll(); $i = 0; foreach ($Categories as $Category) { $ProductCategory = new ProductCategory(); $ProductCategory->setCategory($Category)->setProduct($Product)->setCategoryId($Category->getId())->setProductId($Product->getId())->setRank($i); $this->app['orm.em']->persist($ProductCategory); $this->app['orm.em']->flush($ProductCategory); $Product->addProductCategory($ProductCategory); $i++; } $this->app['orm.em']->flush($Product); return $Product; }