/** * 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); } }
/** * 商品種別を取得 * * @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); }
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()); }
/** * 商品種別を取得 * * @param Order $Order * @return array * @deprecated since 3.0.0, to be removed in 3.1 */ public function getProductTypes(Order $Order) { return $Order->getProductTypes(); }
/** * 受注情報を作成 * @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; }
/** * 会員情報の更新 * * @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()); }
/** * 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; }
/** * カテゴリがクーポン適用の対象か調査する. * 下位のカテゴリから上位のカテゴリに向けて検索する * * @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; }
/** * 受注ステータスをセット * * @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; }
/** * クーポンコードが未入力または、クーポンコードを登録後に再度別のクーポンコードが設定された場合、 * 既存のクーポンを情報削除 * * @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); } }
/** * 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); }
/** * 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; }
/** * 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); }
/** * 受注編集用フォーム作成 * @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; }
/** * 合計金額がマイナスになっていた場合、値引き処理を元に戻す * * @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'); } } }
/** * フォームからの入直内容に基づいて、受注情報の再計算を行う * * @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()); }
/** * 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; }
/** * お届け先ごとに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; }
/** * 購入商品詳細情報を設定する. * * @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); }