상속: extends Eccube\Entity\AbstractEntity
 /**
  * delete product.
  *
  * @param \Eccube\Entity\Order $Order
  */
 public function deleteProduct($Order)
 {
     foreach ($Order->getOrderDetails() as $OrderDetail) {
         $Product = $OrderDetail->getProduct();
         $ProductClasses = $Product->getProductClasses();
         $Product->setDelFlg(Constant::ENABLED);
         foreach ($ProductClasses as $ProductClass) {
             $ProductClass->setDelFlg(Constant::ENABLED);
             $Product->removeProductClass($ProductClass);
             $this->app['orm.em']->persist($ProductClass);
             $this->app['orm.em']->flush($ProductClass);
         }
         $this->app['orm.em']->persist($Product);
         $this->app['orm.em']->flush($Product);
     }
 }
예제 #2
0
 /**
  * 商品種別を取得
  *
  * @param Order $Order
  * @return array
  */
 public function getProductTypes(Order $Order)
 {
     $productTypes = array();
     foreach ($Order->getOrderDetails() as $OrderDetail) {
         /* @var $ProductClass \Eccube\Entity\ProductClass */
         $ProductClass = $OrderDetail->getProductClass();
         $productTypes[] = $ProductClass->getProductType();
     }
     return array_unique($productTypes);
 }
예제 #3
0
 public function testConstructor2()
 {
     $Order = new Order();
     $this->expected = 0;
     $this->actual = $Order->getDiscount();
     $this->verify();
     $this->actual = $Order->getSubTotal();
     $this->verify();
     $this->actual = $Order->getTotal();
     $this->verify();
     $this->actual = $Order->getPaymentTotal();
     $this->verify();
     $this->actual = $Order->getCharge();
     $this->verify();
     $this->actual = $Order->getTax();
     $this->verify();
     $this->actual = $Order->getDeliveryFeeTotal();
     $this->verify();
     $this->assertNull($Order->getOrderStatus());
     $this->assertSame(Constant::DISABLED, $Order->getDelFlg());
 }
예제 #4
0
 /**
  * 商品種別を取得
  *
  * @param Order $Order
  * @return array
  * @deprecated since 3.0.0, to be removed in 3.1
  */
 public function getProductTypes(Order $Order)
 {
     return $Order->getProductTypes();
 }
예제 #5
0
 /**
  * 受注情報を作成
  * @return \Eccube\Entity\Order
  */
 public function newOrder()
 {
     $Order = new \Eccube\Entity\Order();
     $Order->setDiscount(0)->setSubtotal(0)->setTotal(0)->setPaymentTotal(0)->setCharge(0)->setTax(0)->setOrderStatus($this->app['eccube.repository.order_status']->find($this->app['config']['order_processing']))->setDelFlg(Constant::DISABLED);
     return $Order;
 }
예제 #6
0
 /**
  * 会員情報の更新
  *
  * @param $em トランザクション制御されているEntityManager
  * @param $Order 受注情報
  * @param $user ログインユーザ
  */
 public function setCustomerUpdate($em, \Eccube\Entity\Order $Order, \Eccube\Entity\Customer $user)
 {
     $orderDetails = $Order->getOrderDetails();
     // 顧客情報を更新
     $now = new \DateTime();
     $firstBuyDate = $user->getFirstBuyDate();
     if (empty($firstBuyDate)) {
         $user->setFirstBuyDate($now);
     }
     $user->setLastBuyDate($now);
     $user->setBuyTimes($user->getBuyTimes() + 1);
     $user->setBuyTotal($user->getBuyTotal() + $Order->getTotal());
 }
예제 #7
0
 /**
  * Order オブジェクトを生成して返す.
  *
  * @param \Eccube\Entity\Customer $Customer Customer インスタンス
  * @param array $ProductClasses 明細行となる ProductClass の配列
  * @return \Eccube\Entity\Order
  */
 public function createOrder(Customer $Customer, array $ProductClasses = array())
 {
     $faker = $this->getFaker();
     $quantity = $faker->randomNumber(2);
     $Pref = $this->app['eccube.repository.master.pref']->find(1);
     $Order = new Order($this->app['eccube.repository.order_status']->find($this->app['config']['order_processing']));
     $Order->setCustomer($Customer);
     $Order->copyProperties($Customer);
     $Order->setPref($Pref);
     $this->app['orm.em']->persist($Order);
     $this->app['orm.em']->flush($Order);
     $Delivery = $this->app['eccube.repository.delivery']->find(1);
     $Shipping = new Shipping();
     $Shipping->copyProperties($Customer);
     $Shipping->setPref($Pref)->setDelivery($Delivery);
     $Order->addShipping($Shipping);
     $Shipping->setOrder($Order);
     $this->app['orm.em']->persist($Shipping);
     $this->app['orm.em']->flush($Shipping);
     if (empty($ProductClassess)) {
         $Product = $this->createProduct();
         $ProductClasses = $Product->getProductClasses();
     }
     $subTotal = 0;
     foreach ($ProductClasses as $ProductClass) {
         $Product = $ProductClass->getProduct();
         $OrderDetail = new OrderDetail();
         $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule();
         // デフォルト課税規則
         $OrderDetail->setProduct($Product)->setProductClass($ProductClass)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate());
         $this->app['orm.em']->persist($OrderDetail);
         $OrderDetail->setOrder($Order);
         $this->app['orm.em']->flush($OrderDetail);
         $Order->addOrderDetail($OrderDetail);
         $ShipmentItem = new ShipmentItem();
         $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity);
         $Shipping->addShipmentItem($ShipmentItem);
         $this->app['orm.em']->persist($ShipmentItem);
         $this->app['orm.em']->flush($ShipmentItem);
         $subTotal += $OrderDetail->getPriceIncTax() * $OrderDetail->getQuantity();
     }
     // TODO 送料, 手数料の加算
     $Order->setSubTotal($subTotal);
     $Order->setTotal($subTotal);
     $Order->setPaymentTotal($subTotal);
     $this->app['orm.em']->flush($Order);
     return $Order;
 }
 /**
  * お届け日を取得
  *
  * @param Order $Order
  * @return array
  */
 public function getFormDeliveryDates(Order $Order)
 {
     // お届け日の設定
     $minDate = 0;
     $deliveryDateFlag = false;
     // 配送時に最大となる商品日数を取得
     foreach ($Order->getOrderDetails() as $detail) {
         $deliveryDate = $detail->getProductClass()->getDeliveryDate();
         if (!is_null($deliveryDate)) {
             if ($minDate < $deliveryDate->getValue()) {
                 $minDate = $deliveryDate->getValue();
             }
             // 配送日数が設定されている
             $deliveryDateFlag = true;
         }
     }
     // 配達最大日数期間を設定
     $deliveryDates = array();
     // 配送日数が設定されている
     if ($deliveryDateFlag) {
         $period = new \DatePeriod(new \DateTime($minDate . ' day'), new \DateInterval('P1D'), new \DateTime($minDate + $this->app['config']['deliv_date_end_max'] . ' day'));
         foreach ($period as $day) {
             $deliveryDates[$day->format('Y/m/d')] = $day->format('Y/m/d');
         }
     }
     return $deliveryDates;
 }
예제 #9
0
 /**
  * カテゴリがクーポン適用の対象か調査する.
  * 下位のカテゴリから上位のカテゴリに向けて検索する
  *
  * @param \Plugin\Coupon\Entity\CouponCoupon $Coupon
  * @param \Eccube\Entity\Order $Order
  * @return boolean
  */
 private function containsCategory(\Plugin\Coupon\Entity\CouponCoupon $Coupon, \Eccube\Entity\Order $Order)
 {
     // クーポンの対象カテゴリIDを配列にする
     $targetCategoryIds = array();
     foreach ($Coupon->getCouponDetails() as $detail) {
         $targetCategoryIds[] = $detail->getCategory()->getId();
     }
     // 受注データからカテゴリIDを取得する
     foreach ($Order->getOrderDetails() as $orderDetail) {
         foreach ($orderDetail->getProduct()->getProductCategories() as $productCategory) {
             if ($this->existsDepthCategory($targetCategoryIds, $productCategory->getCategory())) {
                 return true;
             }
         }
     }
     return false;
 }
예제 #10
0
 /**
  * 受注ステータスをセット
  *
  * @param Order $Order
  * @param $status
  * @return Order
  */
 public function setOrderStatus(Order $Order, $status)
 {
     $Order->setOrderDate(new \DateTime());
     $Order->setOrderStatus($this->app['eccube.repository.order_status']->find($status));
     $event = new EventArgs(array('Order' => $Order), null);
     $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::SERVICE_SHOPPING_ORDER_STATUS, $event);
     return $Order;
 }
예제 #11
0
 /**
  * クーポンコードが未入力または、クーポンコードを登録後に再度別のクーポンコードが設定された場合、
  * 既存のクーポンを情報削除
  *
  * @param Order $Order
  * @param Application $app
  */
 private function removeCouponOrder(Order $Order, Application $app)
 {
     // クーポンが未入力でクーポン情報が存在すればクーポン情報を削除
     $CouponOrder = $app['eccube.plugin.coupon.service.coupon']->getCouponOrder($Order->getPreOrderId());
     if ($CouponOrder) {
         $app['orm.em']->remove($CouponOrder);
         $app['orm.em']->flush($CouponOrder);
         $Order->setDiscount($Order->getDiscount() - $CouponOrder->getDiscount());
         $Order->setTotal($Order->getTotal() + $CouponOrder->getDiscount());
         $Order->setPaymentTotal($Order->getPaymentTotal() + $CouponOrder->getDiscount());
         $app['orm.em']->flush($Order);
     }
 }
예제 #12
0
 /**
  * Send admin order mail.
  *
  * @param $Order 受注情報
  * @param $formData 入力内容
  */
 public function sendAdminOrderMail(\Eccube\Entity\Order $Order, $formData)
 {
     $body = $this->app->renderView('Mail/order.twig', array('header' => $formData['header'], 'footer' => $formData['footer'], 'Order' => $Order));
     $message = \Swift_Message::newInstance()->setSubject('[' . $this->BaseInfo->getShopName() . '] ' . $formData['subject'])->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))->setTo(array($Order->getEmail()))->setBcc($this->BaseInfo->getEmail01())->setReplyTo($this->BaseInfo->getEmail03())->setReturnPath($this->BaseInfo->getEmail04())->setBody($body);
     $event = new EventArgs(array('message' => $message, 'Order' => $Order, 'formData' => $formData, 'BaseInfo' => $this->BaseInfo), null);
     $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_ADMIN_ORDER, $event);
     $this->app->mail($message);
 }
예제 #13
0
 /**
  * Order オブジェクトを生成して返す.
  *
  * @param \Eccube\Entity\Customer $Customer Customer インスタンス
  * @param array $ProductClasses 明細行となる ProductClass の配列
  * @param \Eccube\Entity\Delivery $Delivery Delivery インスタンス
  * @param integer $add_charge Order に加算される手数料
  * @param integer $add_discount Order に加算される値引き額
  * @return \Eccube\Entity\Order
  */
 public function createOrder(Customer $Customer, array $ProductClasses = array(), Delivery $Delivery = null, $add_charge = 0, $add_discount = 0, $statusType = null)
 {
     $faker = $this->getFaker();
     $quantity = $faker->randomNumber(2);
     $Pref = $this->app['eccube.repository.master.pref']->find($faker->numberBetween(1, 47));
     $Payments = $this->app['eccube.repository.payment']->findAll();
     if (!$statusType) {
         $statusType = 'order_processing';
     }
     $OrderStatus = $this->app['eccube.repository.order_status']->find($this->app['config'][$statusType]);
     $Order = new Order($OrderStatus);
     $Order->setCustomer($Customer);
     $Order->copyProperties($Customer);
     $Order->setPref($Pref)->setPayment($Payments[$faker->numberBetween(0, count($Payments) - 1)])->setPaymentMethod($Order->getPayment()->getMethod())->setMessage($faker->text())->setNote($faker->text());
     $this->app['orm.em']->persist($Order);
     $this->app['orm.em']->flush($Order);
     if (!is_object($Delivery)) {
         $Delivery = $this->createDelivery();
         foreach ($Payments as $Payment) {
             $PaymentOption = new PaymentOption();
             $PaymentOption->setDeliveryId($Delivery->getId())->setPaymentId($Payment->getId())->setDelivery($Delivery)->setPayment($Payment);
             $Payment->addPaymentOption($PaymentOption);
             $this->app['orm.em']->persist($PaymentOption);
             $this->app['orm.em']->flush($PaymentOption);
         }
         $this->app['orm.em']->flush($Payment);
     }
     $DeliveryFee = $this->app['eccube.repository.delivery_fee']->findOneBy(array('Delivery' => $Delivery, 'Pref' => $Pref));
     $fee = 0;
     if (is_object($DeliveryFee)) {
         $fee = $DeliveryFee->getFee();
     }
     $Shipping = new Shipping();
     $Shipping->copyProperties($Customer);
     $Shipping->setPref($Pref)->setDelivery($Delivery)->setDeliveryFee($DeliveryFee)->setShippingDeliveryFee($fee)->setShippingDeliveryName($Delivery->getName());
     $Order->addShipping($Shipping);
     $Shipping->setOrder($Order);
     $this->app['orm.em']->persist($Shipping);
     $this->app['orm.em']->flush($Shipping);
     if (empty($ProductClasses)) {
         $Product = $this->createProduct();
         $ProductClasses = $Product->getProductClasses();
     }
     foreach ($ProductClasses as $ProductClass) {
         $Product = $ProductClass->getProduct();
         $OrderDetail = new OrderDetail();
         $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule();
         // デフォルト課税規則
         $OrderDetail->setProduct($Product)->setProductClass($ProductClass)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate());
         $this->app['orm.em']->persist($OrderDetail);
         $OrderDetail->setOrder($Order);
         $this->app['orm.em']->flush($OrderDetail);
         $Order->addOrderDetail($OrderDetail);
         $ShipmentItem = new ShipmentItem();
         $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity);
         $Shipping->addShipmentItem($ShipmentItem);
         $this->app['orm.em']->persist($ShipmentItem);
         $this->app['orm.em']->flush($ShipmentItem);
     }
     $subTotal = $Order->calculateSubTotal();
     // TODO 送料無料条件は考慮していない. 必要であれば Order から再集計すること.
     $Order->setDeliveryFeeTotal($Shipping->getShippingDeliveryFee());
     $Order->setSubTotal($subTotal);
     $Order->setCharge($Order->getCharge() + $add_charge);
     $Order->setDiscount($Order->getDiscount() + $add_discount);
     $total = $Order->getTotalPrice();
     $Order->setTotal($total);
     $Order->setPaymentTotal($total);
     $tax = $Order->calculateTotalTax();
     $Order->setTax($tax);
     $this->app['orm.em']->flush($Order);
     return $Order;
 }
예제 #14
0
 /**
  * Send admin order mail.
  *
  * @param $Order 受注情報
  * @param $formData 入力内容
  */
 public function sendAdminOrderMail(\Eccube\Entity\Order $Order, $formData)
 {
     $body = $this->app->renderView('Mail/order.twig', array('header' => $formData['header'], 'footer' => $formData['footer'], 'Order' => $Order));
     $message = \Swift_Message::newInstance()->setSubject('[' . $this->BaseInfo->getShopName() . '] ' . $formData['subject'])->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))->setTo(array($Order->getEmail()))->setBcc($this->BaseInfo->getEmail01())->setReplyTo($this->BaseInfo->getEmail03())->setReturnPath($this->BaseInfo->getEmail04())->setBody($body);
     $this->app->mail($message);
 }
예제 #15
0
 /**
  * 受注編集用フォーム作成
  * @param Order $Order
  * @return array
  */
 public function createFormDataForEdit(Order $Order)
 {
     //受注アイテム
     $orderDetail = array();
     $OrderDetailColl = $Order->getOrderDetails();
     foreach ($OrderDetailColl as $OrderDetail) {
         $orderDetail[] = array('Product' => $OrderDetail->getProduct()->getId(), 'ProductClass' => $OrderDetail->getProductClass()->getId(), 'price' => $OrderDetail->getPrice(), 'quantity' => $OrderDetail->getQuantity(), 'tax_rate' => $OrderDetail->getTaxRate(), 'tax_rule' => $OrderDetail->getTaxRule());
     }
     //受注お届け
     $shippings = array();
     $ShippingsColl = $Order->getShippings();
     foreach ($ShippingsColl as $Shippings) {
         $shippings[] = array('name' => array('name01' => $Shippings->getName01(), 'name02' => $Shippings->getName02()), 'kana' => array('kana01' => $Shippings->getKana01(), 'kana02' => $Shippings->getKana02()), 'company_name' => $Shippings->getCompanyName(), 'zip' => array('zip01' => $Shippings->getZip01(), 'zip02' => $Shippings->getZip02()), 'address' => array('pref' => $Shippings->getPref()->getId(), 'addr01' => $Shippings->getAddr01(), 'addr02' => $Shippings->getAddr02()), 'tel' => array('tel01' => $Shippings->getTel01(), 'tel02' => $Shippings->getTel02(), 'tel03' => $Shippings->getTel03()), 'fax' => array('fax01' => $Shippings->getFax01(), 'fax02' => $Shippings->getFax02(), 'fax03' => $Shippings->getFax03()), 'Delivery' => $Shippings->getDelivery()->getId(), 'DeliveryTime' => $Shippings->getDeliveryTime()->getId(), 'shipping_delivery_date' => array('year' => $Shippings->getShippingDeliveryDate()->format('Y'), 'month' => $Shippings->getShippingDeliveryDate()->format('m'), 'day' => $Shippings->getShippingDeliveryDate()->format('d')));
     }
     //受注フォーム
     $order = array('_token' => 'dummy', 'OrderStatus' => (string) $Order->getOrderStatus(), 'Customer' => (string) $Order->getCustomer()->getId(), 'name' => array('name01' => $Order->getName01(), 'name02' => $Order->getName02()), 'kana' => array('kana01' => $Order->getKana01(), 'kana02' => $Order->getKana02()), 'zip' => array('zip01' => $Order->getZip01(), 'zip02' => $Order->getZip02()), 'address' => array('pref' => $Order->getPref()->getId(), 'addr01' => $Order->getAddr01(), 'addr02' => $Order->getAddr02()), 'email' => $Order->getEmail(), 'tel' => array('tel01' => $Order->getTel01(), 'tel02' => $Order->getTel02(), 'tel03' => $Order->getTel03()), 'fax' => array('fax01' => $Order->getFax01(), 'fax02' => $Order->getFax02(), 'fax03' => $Order->getFax03()), 'company_name' => $Order->getCompanyName(), 'message' => $Order->getMessage(), 'OrderDetails' => $orderDetail, 'discount' => $Order->getDiscount(), 'delivery_fee_total' => $Order->getDeliveryFeeTotal(), 'charge' => $Order->getCharge(), 'Payment' => $Order->getPayment()->getId(), 'Shippings' => $shippings, 'note' => $Order->getNote());
     return $order;
 }
예제 #16
0
 /**
  * 合計金額がマイナスになっていた場合、値引き処理を元に戻す
  *
  * @param Order $Order
  */
 private function restoreDiscount(Order $Order)
 {
     // クーポンが未入力でクーポン情報が存在すればクーポン情報を削除
     $CouponOrder = $this->app['eccube.plugin.coupon.service.coupon']->getCouponOrder($Order->getPreOrderId());
     if ($CouponOrder) {
         $total = $Order->getSubtotal() + $Order->getCharge() + $Order->getDeliveryFeeTotal();
         // 合計金額
         $totalAmount = $total - $Order->getDiscount();
         if ($totalAmount < 0) {
             // 合計金額がマイナスのため、金額を値引き前に戻す
             $this->app['orm.em']->remove($CouponOrder);
             $this->app['orm.em']->flush($CouponOrder);
             $discount = $Order->getDiscount() - $CouponOrder->getDiscount();
             $Order->setDiscount($discount);
             $total = $total - $discount;
             $Order->setTotal($total);
             $Order->setPaymentTotal($total);
             $this->app['orm.em']->flush($Order);
             $this->app->addError($this->app->trans('front.plugin.coupon.shopping.use.minus'), 'front.request');
         }
     }
 }
예제 #17
0
 /**
  * フォームからの入直内容に基づいて、受注情報の再計算を行う
  *
  * @param $app
  * @param $Order
  */
 protected function calculate($app, \Eccube\Entity\Order $Order)
 {
     $taxtotal = 0;
     $subtotal = 0;
     // 受注明細データの税・小計を再計算
     /** @var $OrderDetails \Eccube\Entity\OrderDetail[] */
     $OrderDetails = $Order->getOrderDetails();
     foreach ($OrderDetails as $OrderDetail) {
         // 新規登録の場合は, 入力されたproduct_id/produc_class_idから明細にセットする.
         if (!$OrderDetail->getId()) {
             $TaxRule = $app['eccube.repository.tax_rule']->getByRule($OrderDetail->getProduct(), $OrderDetail->getProductClass());
             $OrderDetail->setTaxRule($TaxRule->getCalcRule()->getId());
             $OrderDetail->setProductName($OrderDetail->getProduct()->getName());
             $OrderDetail->setProductCode($OrderDetail->getProductClass()->getCode());
             $OrderDetail->setClassName1($OrderDetail->getProductClass()->hasClassCategory1() ? $OrderDetail->getProductClass()->getClassCategory1()->getClassName()->getName() : null);
             $OrderDetail->setClassName2($OrderDetail->getProductClass()->hasClassCategory2() ? $OrderDetail->getProductClass()->getClassCategory2()->getClassName()->getName() : null);
             $OrderDetail->setClassCategoryName1($OrderDetail->getProductClass()->hasClassCategory1() ? $OrderDetail->getProductClass()->getClassCategory1()->getName() : null);
             $OrderDetail->setClassCategoryName2($OrderDetail->getProductClass()->hasClassCategory2() ? $OrderDetail->getProductClass()->getClassCategory2()->getName() : null);
         }
         // 税
         $tax = $app['eccube.service.tax_rule']->calcTax($OrderDetail->getPrice(), $OrderDetail->getTaxRate(), $OrderDetail->getTaxRule());
         $OrderDetail->setPriceIncTax($OrderDetail->getPrice() + $tax);
         $taxtotal += $tax;
         // 小計
         $subtotal += $OrderDetail->getTotalPrice();
     }
     $shippings = $Order->getShippings();
     /** @var \Eccube\Entity\Shipping $Shipping */
     foreach ($shippings as $Shipping) {
         $shipmentItems = $Shipping->getShipmentItems();
         $Shipping->setDelFlg(Constant::DISABLED);
         /** @var \Eccube\Entity\ShipmentItem $ShipmentItem */
         if (!$Shipping->getId()) {
             foreach ($shipmentItems as $ShipmentItem) {
                 $ShipmentItem->setProductName($ShipmentItem->getProduct()->getName());
                 $ShipmentItem->setProductCode($ShipmentItem->getProductClass()->getCode());
                 $ShipmentItem->setClassName1($ShipmentItem->getProductClass()->hasClassCategory1() ? $ShipmentItem->getProductClass()->getClassCategory1()->getClassName()->getName() : null);
                 $ShipmentItem->setClassName2($ShipmentItem->getProductClass()->hasClassCategory2() ? $ShipmentItem->getProductClass()->getClassCategory2()->getClassName()->getName() : null);
                 $ShipmentItem->setClassCategoryName1($ShipmentItem->getProductClass()->hasClassCategory1() ? $ShipmentItem->getProductClass()->getClassCategory1()->getName() : null);
                 $ShipmentItem->setClassCategoryName2($ShipmentItem->getProductClass()->hasClassCategory2() ? $ShipmentItem->getProductClass()->getClassCategory2()->getName() : null);
             }
         }
     }
     // 受注データの税・小計・合計を再計算
     $Order->setTax($taxtotal);
     $Order->setSubtotal($subtotal);
     $Order->setTotal($subtotal + $Order->getCharge() + $Order->getDeliveryFeeTotal() - $Order->getDiscount());
     // お支払い合計は、totalと同一金額(2系ではtotal - point)
     $Order->setPaymentTotal($Order->getTotal());
 }
예제 #18
0
 /**
  * Order オブジェクトを生成して返す.
  *
  * @param \Eccube\Entity\Customer $Customer Customer インスタンス
  * @return \Eccube\Entity\Order
  */
 public function createOrder(Customer $Customer)
 {
     $faker = $this->getFaker();
     $quantity = $faker->randomNumber(2);
     $Order = new Order();
     $Order->setCustomer($Customer)->setCharge(0)->setDeliveryFeeTotal(0)->setDiscount(0)->setOrderStatus($this->app['eccube.repository.order_status']->find($this->app['config']['order_processing']))->setDelFlg(Constant::DISABLED);
     $Order->copyProperties($Customer);
     $this->app['orm.em']->persist($Order);
     $this->app['orm.em']->flush();
     $Shipping = new Shipping();
     $Shipping->copyProperties($Customer);
     $Order->addShipping($Shipping);
     $Shipping->setOrder($Order);
     $this->app['orm.em']->persist($Shipping);
     $Product = $this->createProduct();
     $ProductClasses = $Product->getProductClasses();
     $ProductClass = $ProductClasses[0];
     $OrderDetail = new OrderDetail();
     $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule();
     // デフォルト課税規則
     $OrderDetail->setProduct($Product)->setProductClass($ProductClass)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate());
     $this->app['orm.em']->persist($OrderDetail);
     $OrderDetail->setOrder($Order);
     $Order->addOrderDetail($OrderDetail);
     $ShipmentItem = new ShipmentItem();
     $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity);
     $this->app['orm.em']->persist($ShipmentItem);
     $subTotal = $OrderDetail->getPriceIncTax() * $OrderDetail->getQuantity();
     // TODO 送料, 手数料の加算
     $Order->setSubTotal($subTotal);
     $Order->setTotal($subTotal);
     $Order->setPaymentTotal($subTotal);
     $this->app['orm.em']->flush();
     return $Order;
 }
예제 #19
0
 /**
  * お届け先ごとにFormを作成
  *
  * @param Order $Order
  * @return \Symfony\Component\Form\Form
  */
 public function getShippingForm(Order $Order)
 {
     $message = $Order->getMessage();
     $deliveries = $this->getDeliveriesOrder($Order);
     // 配送業者の支払方法を取得
     $payments = $this->getFormPayments($deliveries, $Order);
     $builder = $this->app['form.factory']->createBuilder('shopping', null, array('payments' => $payments, 'payment' => $Order->getPayment(), 'message' => $message));
     $builder->add('shippings', 'collection', array('type' => 'shipping_item', 'data' => $Order->getShippings()));
     $form = $builder->getForm();
     return $form;
 }
예제 #20
0
 /**
  * 購入商品詳細情報を設定する.
  *
  * @param Order $Order
  */
 protected function renderOrderDetailData(Order $Order)
 {
     $arrOrder = array();
     // テーブルの微調整を行うための購入商品詳細情報をarrayに変換する
     // =========================================
     // 受注詳細情報
     // =========================================
     $i = 0;
     /* @var OrderDetail $OrderDetail */
     foreach ($Order->getOrderDetails() as $OrderDetail) {
         // class categoryの生成
         $classCategory = '';
         if ($OrderDetail->getClassCategoryName1()) {
             $classCategory .= ' [ ' . $OrderDetail->getClassCategoryName1();
             if ($OrderDetail->getClassCategoryName2() == '') {
                 $classCategory .= ' ]';
             } else {
                 $classCategory .= ' * ' . $OrderDetail->getClassCategoryName2() . ' ]';
             }
         }
         // 税
         $tax = $this->app['eccube.service.tax_rule']->calcTax($OrderDetail->getPrice(), $OrderDetail->getTaxRate(), $OrderDetail->getTaxRule());
         $OrderDetail->setPriceIncTax($OrderDetail->getPrice() + $tax);
         // product
         $arrOrder[$i][0] = sprintf('%s / %s / %s', $OrderDetail->getProductName(), $OrderDetail->getProductCode(), $classCategory);
         // 購入数量
         $arrOrder[$i][1] = number_format($OrderDetail->getQuantity());
         // 税込金額(単価)
         $arrOrder[$i][2] = number_format($OrderDetail->getPriceIncTax()) . self::MONETARY_UNIT;
         // 小計(商品毎)
         $arrOrder[$i][3] = number_format($OrderDetail->getTotalPrice()) . self::MONETARY_UNIT;
         ++$i;
     }
     // =========================================
     // 小計
     // =========================================
     $arrOrder[$i][0] = '';
     $arrOrder[$i][1] = '';
     $arrOrder[$i][2] = '';
     $arrOrder[$i][3] = '';
     ++$i;
     $arrOrder[$i][0] = '';
     $arrOrder[$i][1] = '';
     $arrOrder[$i][2] = '商品合計';
     $arrOrder[$i][3] = number_format($Order->getSubtotal()) . self::MONETARY_UNIT;
     ++$i;
     $arrOrder[$i][0] = '';
     $arrOrder[$i][1] = '';
     $arrOrder[$i][2] = '送料';
     $arrOrder[$i][3] = number_format($Order->getDeliveryFeeTotal()) . self::MONETARY_UNIT;
     ++$i;
     $arrOrder[$i][0] = '';
     $arrOrder[$i][1] = '';
     $arrOrder[$i][2] = '手数料';
     $arrOrder[$i][3] = number_format($Order->getCharge()) . self::MONETARY_UNIT;
     ++$i;
     $arrOrder[$i][0] = '';
     $arrOrder[$i][1] = '';
     $arrOrder[$i][2] = '値引き';
     $arrOrder[$i][3] = '- ' . number_format($Order->getDiscount()) . self::MONETARY_UNIT;
     ++$i;
     $arrOrder[$i][0] = '';
     $arrOrder[$i][1] = '';
     $arrOrder[$i][2] = '請求金額';
     $arrOrder[$i][3] = number_format($Order->getPaymentTotal()) . self::MONETARY_UNIT;
     // PDFに設定する
     $this->setFancyTable($this->labelCell, $arrOrder, $this->widthCell);
 }