コード例 #1
0
 /**
  * 納品書の設定画面表示.
  *
  * @param Application $app
  * @param Request     $request
  *
  * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  *
  * @throws NotFoundHttpException
  */
 public function index(Application $app, Request $request)
 {
     // requestから受注番号IDの一覧を取得する.
     $ids = $this->getIds($request);
     if (count($ids) == 0) {
         $app->addError('admin.plugin.order_pdf.parameter.notfound', 'admin');
         log_info('The Order cannot found!');
         return $app->redirect($app->url('admin_order'));
     }
     /* @var OrderPdfRepository $repos */
     $repos = $app['orderpdf.repository.order_pdf'];
     $OrderPdf = $repos->find($app->user());
     if (EntityUtil::isEmpty($OrderPdf)) {
         $OrderPdf = new OrderPdf();
         $OrderPdf->setTitle($app->trans('admin.plugin.order_pdf.title.default'))->setMessage1($app->trans('admin.plugin.order_pdf.message1.default'))->setMessage2($app->trans('admin.plugin.order_pdf.message2.default'))->setMessage3($app->trans('admin.plugin.order_pdf.message3.default'));
     }
     /**
      * @var FormBuilder $builder
      */
     $builder = $app['form.factory']->createBuilder('admin_order_pdf', $OrderPdf);
     /* @var Form $form */
     $form = $builder->getForm();
     // Formへの設定
     $form->get('ids')->setData(implode(',', $ids));
     return $app->render('OrderPdf/Resource/template/admin/order_pdf.twig', array('form' => $form->createView()));
 }
コード例 #2
0
 /**
  * データが設定されていない場合にデフォルト値を設定する.
  *
  * @param array $formData
  */
 protected function setDefaultData(array &$formData)
 {
     $defaultList = array('title' => $this->app->trans('admin.plugin.order_pdf.title.default'), 'message1' => $this->app->trans('admin.plugin.order_pdf.message1.default'), 'message2' => $this->app->trans('admin.plugin.order_pdf.message2.default'), 'message3' => $this->app->trans('admin.plugin.order_pdf.message3.default'));
     foreach ($defaultList as $key => $value) {
         if (is_null($formData[$key])) {
             $formData[$key] = $value;
         }
     }
 }
コード例 #3
0
ファイル: Coupon.php プロジェクト: EC-CUBE/coupon-plugin
 /**
  * 合計金額がマイナスになっていた場合、値引き処理を元に戻す
  *
  * @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');
         }
     }
 }
コード例 #4
0
 /**
  * 管理画面:カテゴリ登録画面に, カテゴリコンテンツのフォームを追加する.
  *
  * @param EventArgs $event
  */
 public function onAdminProductCategoryFormInitialize(EventArgs $event)
 {
     log_info('CategoryContent admin.product.category.index.initialize start');
     /* @var Category $TargetCategory */
     $TargetCategory = $event->getArgument('TargetCategory');
     $id = $TargetCategory->getId();
     $CategoryContent = null;
     if ($id) {
         // カテゴリ編集時は初期値を取得
         $CategoryContent = $this->app['eccube.plugin.category_content.repository.category_content']->find($id);
     }
     // カテゴリ新規登録またはコンテンツが未登録の場合
     if (!$CategoryContent) {
         $CategoryContent = new CategoryContent();
     }
     // フォームの追加
     /** @var FormInterface $builder */
     $builder = $event->getArgument('builder');
     $builder->add(self::CATEGORY_CONTENT_TEXTAREA_NAME, 'textarea', array('required' => false, 'label' => false, 'mapped' => false, 'constraints' => array(new Assert\Length(array('max' => $this->app['config']['category_text_area_len']))), 'attr' => array('maxlength' => $this->app['config']['category_text_area_len'], 'placeholder' => $this->app->trans('admin.plugin.category.content'))));
     // 初期値を設定
     $builder->get(self::CATEGORY_CONTENT_TEXTAREA_NAME)->setData($CategoryContent->getContent());
     log_info('CategoryContent admin.product.category.index.initialize end');
 }
コード例 #5
0
ファイル: AdminController.php プロジェクト: ec-cube/ec-cube
 public function index(Application $app, Request $request)
 {
     // install.phpのチェック.
     if (isset($app['config']['eccube_install']) && $app['config']['eccube_install'] == 1) {
         $file = $app['config']['root_dir'] . '/html/install.php';
         if (file_exists($file)) {
             $message = $app->trans('admin.install.warning', array('installphpPath' => 'html/install.php'));
             $app->addWarning($message, 'admin');
         }
         $fileOnRoot = $app['config']['root_dir'] . '/install.php';
         if (file_exists($fileOnRoot)) {
             $message = $app->trans('admin.install.warning', array('installphpPath' => 'install.php'));
             $app->addWarning($message, 'admin');
         }
     }
     // 受注マスター検索用フォーム
     $searchOrderBuilder = $app['form.factory']->createBuilder('admin_search_order');
     // 商品マスター検索用フォーム
     $searchProductBuilder = $app['form.factory']->createBuilder('admin_search_product');
     // 会員マスター検索用フォーム
     $searchCustomerBuilder = $app['form.factory']->createBuilder('admin_search_customer');
     $event = new EventArgs(array('searchOrderBuilder' => $searchOrderBuilder, 'searchProductBuilder' => $searchProductBuilder, 'searchCustomerBuilder' => $searchCustomerBuilder), $request);
     $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ADMIM_INDEX_INITIALIZE, $event);
     // 受注マスター検索用フォーム
     $searchOrderForm = $searchOrderBuilder->getForm();
     // 商品マスター検索用フォーム
     $searchProductForm = $searchProductBuilder->getForm();
     // 会員マスター検索用フォーム
     $searchCustomerForm = $searchCustomerBuilder->getForm();
     /**
      * 受注状況.
      */
     $excludes = array();
     $excludes[] = $app['config']['order_pending'];
     $excludes[] = $app['config']['order_processing'];
     $excludes[] = $app['config']['order_cancel'];
     $excludes[] = $app['config']['order_deliv'];
     $event = new EventArgs(array('excludes' => $excludes), $request);
     $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ADMIM_INDEX_ORDER, $event);
     // 受注ステータスごとの受注件数.
     $Orders = $this->getOrderEachStatus($app['orm.em'], $excludes);
     // 受注ステータスの一覧.
     $OrderStatuses = $this->findOrderStatus($app['orm.em'], $excludes);
     /**
      * 売り上げ状況
      */
     $excludes = array();
     $excludes[] = $app['config']['order_processing'];
     $excludes[] = $app['config']['order_cancel'];
     $excludes[] = $app['config']['order_pending'];
     $event = new EventArgs(array('excludes' => $excludes), $request);
     $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ADMIM_INDEX_SALES, $event);
     // 今日の売上/件数
     $salesToday = $this->getSalesByDay($app['orm.em'], new \DateTime(), $excludes);
     // 昨日の売上/件数
     $salesYesterday = $this->getSalesByDay($app['orm.em'], new \DateTime('-1 day'), $excludes);
     // 今月の売上/件数
     $salesThisMonth = $this->getSalesByMonth($app['orm.em'], new \DateTime(), $excludes);
     /**
      * ショップ状況
      */
     // 在庫切れ商品数
     $countNonStockProducts = $this->countNonStockProducts($app['orm.em']);
     // 本会員数
     $countCustomers = $this->countCustomers($app['orm.em']);
     $event = new EventArgs(array('Orders' => $Orders, 'OrderStatuses' => $OrderStatuses, 'salesThisMonth' => $salesThisMonth, 'salesToday' => $salesToday, 'salesYesterday' => $salesYesterday, 'countNonStockProducts' => $countNonStockProducts, 'countCustomers' => $countCustomers), $request);
     $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ADMIM_INDEX_COMPLETE, $event);
     return $app->render('index.twig', array('searchOrderForm' => $searchOrderForm->createView(), 'searchProductForm' => $searchProductForm->createView(), 'searchCustomerForm' => $searchCustomerForm->createView(), 'Orders' => $Orders, 'OrderStatuses' => $OrderStatuses, 'salesThisMonth' => $salesThisMonth, 'salesToday' => $salesToday, 'salesYesterday' => $salesYesterday, 'countNonStockProducts' => $countNonStockProducts, 'countCustomers' => $countCustomers));
 }
コード例 #6
0
 /**
  * buildForm.
  *
  * @param FormBuilderInterface $builder
  * @param array                $options
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('content', 'textarea', array('label' => 'カテゴリ別表示用コンテンツ', 'mapped' => false, 'required' => false, 'constraints' => array(new Assert\Length(array('max' => $this->app['config']['category_text_area_len']))), 'attr' => array('maxlength' => $this->app['config']['category_text_area_len'], 'placeholder' => $this->app->trans('admin.plugin.category.content'))));
 }
コード例 #7
0
 /**
  * 複数配送処理
  */
 public function shippingMultiple(Application $app, Request $request)
 {
     $cartService = $app['eccube.service.cart'];
     // カートチェック
     if (!$cartService->isLocked()) {
         // カートが存在しない、カートがロックされていない時はエラー
         log_info('カートが存在しません');
         return $app->redirect($app->url('cart'));
     }
     // カートチェック
     if (count($cartService->getCart()->getCartItems()) <= 0) {
         // カートが存在しない時はエラー
         log_info('カートに商品が入っていないためショッピングカート画面にリダイレクト');
         return $app->redirect($app->url('cart'));
     }
     /** @var \Eccube\Entity\Order $Order */
     $Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']);
     if (!$Order) {
         log_info('購入処理中の受注情報がないため購入エラー');
         $app->addError('front.shopping.order.error');
         return $app->redirect($app->url('shopping_error'));
     }
     // 複数配送時は商品毎でお届け先を設定する為、商品をまとめた数量を設定
     $compItemQuantities = array();
     foreach ($Order->getShippings() as $Shipping) {
         foreach ($Shipping->getShipmentItems() as $ShipmentItem) {
             $itemId = $ShipmentItem->getProductClass()->getId();
             $quantity = $ShipmentItem->getQuantity();
             if (array_key_exists($itemId, $compItemQuantities)) {
                 $compItemQuantities[$itemId] = $compItemQuantities[$itemId] + $quantity;
             } else {
                 $compItemQuantities[$itemId] = $quantity;
             }
         }
     }
     // 商品に紐づく商品情報を取得
     $shipmentItems = array();
     $productClassIds = array();
     foreach ($Order->getShippings() as $Shipping) {
         foreach ($Shipping->getShipmentItems() as $ShipmentItem) {
             if (!in_array($ShipmentItem->getProductClass()->getId(), $productClassIds)) {
                 $shipmentItems[] = $ShipmentItem;
             }
             $productClassIds[] = $ShipmentItem->getProductClass()->getId();
         }
     }
     $builder = $app->form();
     $builder->add('shipping_multiple', 'collection', array('type' => 'shipping_multiple', 'data' => $shipmentItems, 'allow_add' => true, 'allow_delete' => true));
     $event = new EventArgs(array('builder' => $builder, 'Order' => $Order), $request);
     $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_SHOPPING_SHIPPING_MULTIPLE_INITIALIZE, $event);
     $form = $builder->getForm();
     $form->handleRequest($request);
     $errors = array();
     if ($form->isSubmitted() && $form->isValid()) {
         log_info('複数配送設定処理開始', array($Order->getId()));
         $data = $form['shipping_multiple'];
         // 数量が超えていないか、同一でないとエラー
         $itemQuantities = array();
         foreach ($data as $mulitples) {
             /** @var \Eccube\Entity\ShipmentItem $multipleItem */
             $multipleItem = $mulitples->getData();
             foreach ($mulitples as $items) {
                 foreach ($items as $item) {
                     $quantity = $item['quantity']->getData();
                     $itemId = $multipleItem->getProductClass()->getId();
                     if (array_key_exists($itemId, $itemQuantities)) {
                         $itemQuantities[$itemId] = $itemQuantities[$itemId] + $quantity;
                     } else {
                         $itemQuantities[$itemId] = $quantity;
                     }
                 }
             }
         }
         foreach ($compItemQuantities as $key => $value) {
             if (array_key_exists($key, $itemQuantities)) {
                 if ($itemQuantities[$key] != $value) {
                     $errors[] = array('message' => $app->trans('shopping.multiple.quantity.diff'));
                     // 対象がなければエラー
                     log_info('複数配送設定入力チェックエラー', array($Order->getId()));
                     return $app->render('Shopping/shipping_multiple.twig', array('form' => $form->createView(), 'shipmentItems' => $shipmentItems, 'compItemQuantities' => $compItemQuantities, 'errors' => $errors));
                 }
             }
         }
         // お届け先情報をdelete/insert
         $shippings = $Order->getShippings();
         foreach ($shippings as $Shipping) {
             $Order->removeShipping($Shipping);
             $app['orm.em']->remove($Shipping);
         }
         foreach ($data as $mulitples) {
             /** @var \Eccube\Entity\ShipmentItem $multipleItem */
             $multipleItem = $mulitples->getData();
             foreach ($mulitples as $items) {
                 foreach ($items as $item) {
                     // 追加された配送先情報を作成
                     $Delivery = $multipleItem->getShipping()->getDelivery();
                     // 選択された情報を取得
                     $data = $item['customer_address']->getData();
                     if ($data instanceof CustomerAddress) {
                         // 会員の場合、CustomerAddressオブジェクトを取得
                         $CustomerAddress = $data;
                     } else {
                         // 非会員の場合、選択されたindexが取得される
                         $customerAddresses = $app['session']->get($this->sessionCustomerAddressKey);
                         $customerAddresses = unserialize($customerAddresses);
                         $CustomerAddress = $customerAddresses[$data];
                         $pref = $app['eccube.repository.master.pref']->find($CustomerAddress->getPref()->getId());
                         $CustomerAddress->setPref($pref);
                     }
                     $Shipping = new Shipping();
                     $Shipping->setFromCustomerAddress($CustomerAddress)->setDelivery($Delivery)->setDelFlg(Constant::DISABLED)->setOrder($Order);
                     $app['orm.em']->persist($Shipping);
                     $ProductClass = $multipleItem->getProductClass();
                     $Product = $multipleItem->getProduct();
                     $quantity = $item['quantity']->getData();
                     $ShipmentItem = new ShipmentItem();
                     $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);
                     $app['orm.em']->persist($ShipmentItem);
                     // 配送料金の設定
                     $app['eccube.service.shopping']->setShippingDeliveryFee($Shipping);
                     $Order->addShipping($Shipping);
                 }
             }
         }
         // 合計金額の再計算
         $Order = $app['eccube.service.shopping']->getAmount($Order);
         // 配送先を更新
         $app['orm.em']->flush();
         $event = new EventArgs(array('form' => $form, 'Order' => $Order), $request);
         $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_SHOPPING_SHIPPING_MULTIPLE_COMPLETE, $event);
         log_info('複数配送設定処理完了', array($Order->getId()));
         return $app->redirect($app->url('shopping'));
     }
     return $app->render('Shopping/shipping_multiple.twig', array('form' => $form->createView(), 'shipmentItems' => $shipmentItems, 'compItemQuantities' => $compItemQuantities, 'errors' => $errors));
 }
コード例 #8
0
 /**
  * 購入画面表示
  *
  * @param Application $app
  * @param Request $request
  * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  */
 public function index(Application $app, Request $request)
 {
     $cartService = $app['eccube.service.cart'];
     // カートチェック
     if (!$cartService->isLocked()) {
         // カートが存在しない、カートがロックされていない時はエラー
         return $app->redirect($app->url('cart'));
     }
     // カートチェック
     if (count($cartService->getCart()->getCartItems()) <= 0) {
         // カートが存在しない時はエラー
         return $app->redirect($app->url('cart'));
     }
     // 登録済みの受注情報を取得
     $Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']);
     // 初回アクセス(受注情報がない)の場合は, 受注情報を作成
     if (is_null($Order)) {
         // 未ログインの場合, ログイン画面へリダイレクト.
         if (!$app->isGranted('IS_AUTHENTICATED_FULLY')) {
             // 非会員でも一度会員登録されていればショッピング画面へ遷移
             $Customer = $app['eccube.service.shopping']->getNonMember($this->sessionKey);
             if (is_null($Customer)) {
                 return $app->redirect($app->url('shopping_login'));
             }
         } else {
             $Customer = $app->user();
         }
         try {
             // 受注情報を作成
             $Order = $app['eccube.service.shopping']->createOrder($Customer);
         } catch (CartException $e) {
             $app->addRequestError($e->getMessage());
             return $app->redirect($app->url('cart'));
         }
         // セッション情報を削除
         $app['session']->remove($this->sessionOrderKey);
         $app['session']->remove($this->sessionMultipleKey);
     }
     // 受注関連情報を最新状態に更新
     $app['orm.em']->refresh($Order);
     // form作成
     $builder = $app['eccube.service.shopping']->getShippingFormBuilder($Order);
     $event = new EventArgs(array('builder' => $builder, 'Order' => $Order), $request);
     $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_SHOPPING_INDEX_INITIALIZE, $event);
     $form = $builder->getForm();
     if ($Order->getTotalPrice() < 0) {
         // 合計金額がマイナスの場合、エラー
         $message = $app->trans('shopping.total.price', array('totalPrice' => number_format($Order->getTotalPrice())));
         $app->addError($message);
         return $app->redirect($app->url('shopping_error'));
     }
     // 複数配送の場合、エラーメッセージを一度だけ表示
     if (!$app['session']->has($this->sessionMultipleKey)) {
         if (count($Order->getShippings()) > 1) {
             $app->addRequestError('shopping.multiple.delivery');
         }
         $app['session']->set($this->sessionMultipleKey, 'multiple');
     }
     return $app->render('Shopping/index.twig', array('form' => $form->createView(), 'Order' => $Order));
 }