/**
  * 商品規格情報を更新
  */
 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;
 }
Exemple #2
0
 /**
  * 配送商品情報を作成
  *
  * @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;
 }
Exemple #4
0
 /**
  * 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;
 }
Exemple #5
0
 /**
  * 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;
 }