예제 #1
0
 protected function onConsign(array $options, GoodsPassport $product)
 {
     $order = new Orders();
     $order->setCustom($options['custom'])->setGoodsPassport($product)->setPayType($options['paytype'])->setKind($options['orderKindConsign'])->setStatus($options['orderStatusComplete'])->setRequired($product->getCost())->setPaid($product->getCost());
     $orderFeedBack = new Orders();
     $orderFeedBack->setKind($options['orderKindFeedback'])->setStatus($options['orderStatusHandling'])->setCustom($order->getCustom())->setGoodsPassport($order->getProduct())->setPayType($order->getPayType())->setRequired($order->getProduct()->getCost())->setPaid(0)->setParent($order);
     $this->addStorage($order)->addStorage($orderFeedBack);
     return $this;
 }
예제 #2
0
 /**
  * 調出貨請求確認
  * 
  * @Route("/backOrder/{id}/confirm", name="order_backOrder_confirm", options={"expose"=true})
  * @ParamConverter("move", class="WoojinGoodsBundle:Move")
  * @Method("GET")
  */
 public function backOrderConfirmAction(Request $request, Move $move)
 {
     if (!$move->isModifyble()) {
         return new \Exception("請求已經為終止狀態,不可更改!");
     }
     $user = $this->get('security.token_storage')->getToken()->getUser();
     $session = $this->get('session');
     $em = $this->getDoctrine()->getManager();
     $qb = $em->createQueryBuilder();
     $em->getConnection()->beginTransaction();
     try {
         $oGoodsStatus = $em->find('WoojinGoodsBundle:GoodsStatus', Avenue::GS_OTHERSTORE);
         $oGoodsStatusIn = $em->find('WoojinGoodsBundle:GoodsStatus', Avenue::GS_ONSALE);
         // 從調貨請求出抓出被調出的商品
         $product = $move->getOrgGoods();
         // 將商品狀態設定為他店
         $product->setStatus($oGoodsStatus);
         // 尋找是否已經存在屬於該店的護照(產編字首和商品指紋)
         $qb->select('gd')->from('WoojinGoodsBundle:GoodsPassport', 'gd')->where($qb->expr()->andX($qb->expr()->eq('SUBSTRING(gd.sn, 1, 1)', $qb->expr()->literal($user->getStore()->getSn())), $qb->expr()->eq('gd.parent', $product->getParent()->getId())));
         // Query 結果為調進貨的商品,若不存在該商品則反為 NULL
         $newProducts = $qb->getQuery()->getResult();
         // 如果為空則建立新護照, 直接將原本護照的內容copy到新護照上
         if (empty($newProducts)) {
             $productFactory = $this->get('factory.product');
             // 複製調出商品實體
             $productFactory->_clone($product);
             // 從工廠提取複製品
             $newProduct = $productFactory->getProduct();
             // 改變複製品的產編和狀態(上架)
             $newProduct->setSn($newProduct->genSn($user->getStore()->getSn()))->setStatus($oGoodsStatusIn);
             $em->persist($newProduct);
             $em->flush();
         } else {
             // 若不為空則直接使用取得的舊護照
             /* 
              * 商品回國將狀態改為國內( 上架 ), 
              * 寄賣金額改為0 表示不用做二段通知 
              */
             // 取得護照
             $newProduct = $newProducts[0];
             // 將商品狀態改為上架
             $newProduct->setStatus($oGoodsStatusIn);
             $em->persist($newProduct);
             // 取得該護照的所有訂單記錄
             $newOrders = $newProduct->getOrders();
             // 依照訂單記錄進行迭代
             foreach ($newOrders as $key => $order) {
                 if (Avenue::OK_FEEDBACK === $order->getId()) {
                     // 將寄賣金額從 -1 改為 0
                     $order->setPaid(0);
                     $em->persist($order);
                     break;
                 }
             }
         }
         $move->setStatus($em->find('WoojinGoodsBundle:MoveStatus', Avenue::MV_COMPLETE))->setNewGoods($newProduct)->setCatcher($user);
         $em->persist($move);
         $complete = $em->find('WoojinOrderBundle:OrdersStatus', Avenue::OS_COMPLETE);
         $cashType = $em->find('WoojinOrderBundle:PayType', Avenue::PT_CASH);
         $ordersMoveOut = new Orders();
         $ordersMoveOut->setStatus($complete)->setPaid($product->getCost())->setRequired($product->getCost())->setPayType($cashType)->setKind($em->find('WoojinOrderBundle:OrdersKind', Avenue::OK_MOVE_OUT))->setGoodsPassport($product);
         $ordersMoveIn = new Orders();
         $ordersMoveIn->setStatus($complete)->setPaid($product->getCost())->setRequired($product->getCost())->setPayType($cashType)->setKind($em->find('WoojinOrderBundle:OrdersKind', Avenue::OK_MOVE_IN))->setGoodsPassport($newProduct);
         $ordersMoveIn->addRelate($ordersMoveOut);
         $ordersMoveOut->setParent($ordersMoveIn);
         $em->persist($ordersMoveIn);
         $em->persist($ordersMoveOut);
         // 記錄調貨進操作記錄
         $opeIn = new Ope();
         $opeOut = new Ope();
         $opeIn->setUser($move->getCatcher())->setDatetime(new \DateTime(date('Y-m-d H:i:s')))->setOrders($ordersMoveIn)->setAct('成立調進貨訂單');
         $opeOut->setUser($move->getThrower())->setDatetime(new \DateTime(date('Y-m-d H:i:s')))->setOrders($ordersMoveOut)->setAct('成立調出貨訂單');
         $newProduct->setSn($newProduct->genSn($user->getStore()->getSn()));
         $em->persist($opeIn);
         $em->persist($opeOut);
         $em->persist($newProduct);
         $em->flush();
         $em->getConnection()->commit();
         $session->getFlashBag()->add('success', $product->getSn() . ' -> ' . $newProduct->getSn());
     } catch (Exception $e) {
         $em->getConnection()->rollback();
         throw $e;
     }
     // 若已經上傳至yahoo,
     if ($newProduct->getYahooId()) {
         $apiClient = $this->get('yahoo.api.client');
         $apiClient->updateMain($apiClient->getProvider()->genR($newProduct)->getR());
         $session->getFlashBag()->add('success', 'Yahoo商城同步更新完成');
         $product->setYahooId(NULL);
         $em->persist($product);
         $em->flush();
     } else {
         $session->getFlashBag()->add('error', 'Yahoo商城同步未進行');
     }
     return $this->redirect($this->generateUrl('move'));
 }
예제 #3
0
 /**
  * 從訂單取得負責人的mail
  *
  * @param \Woojin\OrderBundle\Entity\Orders $order
  */
 protected function getMailFromOrder(Orders $order)
 {
     $product = $order->getGoodsPassport();
     $store = $this->em->getRepository('WoojinStoreBundle:Store')->findOneBy(array('sn' => substr($product->getSn(), 0, 1)));
     return $store->getMail();
 }
예제 #4
0
 protected function batchAddEachProcess($rData)
 {
     $em = $this->em;
     $oOrders = new Orders();
     $oOpe = new Ope();
     $oGoodsPassport = new GoodsPassport();
     $oGoodsPassport->setBrand($this->brand)->setModel($rData['model'])->setColor($this->color)->setPattern($this->pattern)->setColorSn(array_key_exists('colorSn', $rData) ? $rData['colorSn'] : '')->setLevel($this->oGoodsLevel)->setGoodsStatus($this->oGoodsStatus)->setName($rData['sGoodsName'])->setCost($rData['nGoodsCost'])->setPrice($rData['nGoodsPrice'])->setOrgSn(array_key_exists('sGoodsOrgSn', $rData) ? $rData['sGoodsOrgSn'] : '')->setMemo(array_key_exists('sGoodsMemo', $rData) ? $rData['sGoodsMemo'] : '');
     $em->persist($oGoodsPassport);
     $em->flush();
     $sym = $this->get('base_method')->getSymbol();
     $theRate = $sym == 'NT' ? self::SN_RATE : 10;
     $nGoodsId = $oGoodsPassport->getId();
     $sGoodsSn = $oGoodsPassport->genSn($rData['sStoreSn']);
     $oGoodsPassport->setSn($sGoodsSn)->setParent($em->find('WoojinGoodsBundle:GoodsPassport', $nGoodsId));
     $em->persist($oGoodsPassport);
     $em->flush();
     $oOrders->setGoodsPassport($oGoodsPassport)->setPayType($this->oPayType)->setOrdersKind($this->oOrdersKind)->setOrdersStatus($this->oOrdersStatus)->setRequired($rData['nGoodsCost'])->setPaid($rData['nGoodsCost']);
     $em->persist($oOrders);
     $em->flush();
     $nOrdersId = $oOrders->getId();
     //Ope實體新增
     $oOpe->setOrders($oOrders)->setUser($this->oUser)->setAct('批次成立進貨訂單')->setDatetime(new \DateTime($rData['time']));
     $em->persist($oOpe);
     $em->flush();
 }
예제 #5
0
파일: Seller.php 프로젝트: jocoonopa/avenue
 protected function pick($product)
 {
     // 更新商品狀態
     $product->setStatus($this->saleStatus);
     $per = (100 - $this->invoice->getInvoiceSurcharge()) / 100;
     $order = new Orders();
     $order->setPaid(0)->setRequired(round($product->getPromotionPrice(true) * $per))->setOrgPaid(0)->setOrgRequired($product->getPromotionPrice(true))->setPayType($this->paytype)->setKind($this->kind)->setStatus($this->completeStatus)->setGoodsPassport($product)->setInvoice($this->invoice)->setCustom($this->custom);
     $ope = new Ope();
     $ope->setOrders($order)->setUser($this->user)->setAct('官網售出')->setDatetime(new \DateTime());
     $this->em->persist($product);
     $this->em->persist($order);
     $this->em->persist($ope);
 }
예제 #6
0
파일: Behalf.php 프로젝트: jocoonopa/avenue
 /**
  * 代購商品出貨 (訂單狀態: 已出貨)
  *
  * 1. 修改代購實體狀態
  * 2. 通知客戶已出貨
  *
  * @param  array  $options 
  * @return this
  */
 public function productOut(array $options = array())
 {
     $options = $this->resolver->resolve($options);
     $this->behalf = $options['behalf'];
     $this->behalf->setStatus($this->statusFacade->findPurOut())->setSendAt(new \DateTime())->setDeliverySn($options['deliverySn']);
     $this->em->getConnection()->beginTransaction();
     try {
         $custom = $this->behalf->getCustom();
         $got = $this->behalf->getGot();
         $required = $this->behalf->getWant()->getPromotionPrice(true);
         $invoice = new Invoice();
         $invoice->setCustom($custom)->setStore($this->behalf->getUser()->getStore())->setHasPrint(0)->setSn(uniqid());
         $this->em->persist($invoice);
         $order = new Orders();
         $order->setGoodsPassport($got)->setCustom($custom)->setPayType($this->em->find('WoojinOrderBundle:PayType', Avenue::PT_ATM))->setKind($this->em->find('WoojinOrderBundle:OrdersKind', Avenue::OK_OUT))->setStatus($this->em->find('WoojinOrderBundle:OrdersStatus', Avenue::OS_COMPLETE))->setRequired($required)->setOrgRequired($required)->setOrgPaid($required)->setPaid($required)->setInvoice($invoice);
         $this->em->persist($order);
         $got->setStatus($this->em->find('WoojinGoodsBundle:GoodsStatus', Avenue::GS_SOLDOUT));
         $this->em->persist($got);
         $this->em->flush();
         $this->container->get('logger.ope')->recordOpe($order, '成立銷貨訂單(代購)', $this->container->get('authority.judger')->getUser());
         $this->em->getConnection()->commit();
     } catch (\Exception $e) {
         $this->em->getConnection()->rollback();
         throw $e;
     }
     $this->notifier->behalfForCustom($this->behalf);
     return $this;
 }
예제 #7
0
 /**
  * @Route("/v2/getback/{id}", requirements={"id" = "\d+"}, name="orders_v2_getback", options={"expose"=true})
  * @ParamConverter("order", class="WoojinOrderBundle:Orders")
  * @Method("PUT")
  */
 public function v2GetBackAction(Request $request, Orders $order)
 {
     $user = $this->get('security.token_storage')->getToken()->getUser();
     $em = $this->getDoctrine()->getManager();
     $em->getConnection()->beginTransaction();
     try {
         $redirectUrl = $this->generateUrl('goods_edit_v2', array('id' => $order->getProduct()->getId()));
         $session = $this->get('session');
         $cancel = $em->find('WoojinOrderBundle:OrdersStatus', Avenue::OS_CANCEL);
         $getback = $em->find('WoojinGoodsBundle:GoodsStatus', Avenue::GS_GETBACK);
         if (Avenue::OK_CONSIGN_IN !== $order->getKind()->getId()) {
             $session->getFlashBag()->add('error', '此訂單非寄賣訂單!');
             return $this->redirect($redirectUrl);
         }
         $product = $order->getProduct();
         if (in_array($product->getStatus()->getId(), array(Avenue::GS_SOLDOUT, Avenue::GS_OFFSALE, Avenue::GS_BEHALF, Avenue::GS_GETBACK))) {
             $session->getFlashBag()->add('error', $product->getSn() . '商品不在店內!');
             return $this->redirect($redirectUrl);
         }
         // 根據商品id和訂單種類找到其關連訂單
         $relate = $this->getDoctrine()->getRepository('WoojinOrderBundle:Orders')->findOneBy(array('goods_passport' => $product->getId(), 'kind' => Avenue::OK_FEEDBACK));
         // 若沒找到則回應錯誤訊息
         if (!$relate) {
             $session->getFlashBag()->add('error', $product->getSn() . '未找到寄賣請款訂單!');
             return $this->redirect($redirectUrl);
         }
         $order->setStatus($cancel);
         $em->persist($order);
         // 改變關連訂單狀態
         $relate->setStatus($cancel);
         $em->persist($relate);
         $product->setStatus($getback);
         $em->persist($product);
         $em->flush();
         $sculper = $this->get('sculper.clue');
         $sculper->initCustomGetBack();
         $sculper->setAfter($order);
         $clue = new AvenueClue();
         $clue->setUser($user)->setContent($sculper->getContent());
         $em->persist($clue);
         $session->getFlashBag()->add('success', $product->getSn() . '客戶寄賣取回!');
         if ($product->getYahooId()) {
             $apiClient = $this->get('yahoo.api.client');
             $apiClient->delete($product);
             $session->getFlashBag()->add('success', 'Yahoo商城同步下架刪除完成!');
         }
         $opeLogger = $this->get('logger.ope');
         $opeLogger->recordOpe($relate, '客寄取回');
         $em->getConnection()->commit();
     } catch (\Exception $e) {
         $em->getConnection()->rollback();
         throw $e;
     }
     return $this->redirect($redirectUrl);
 }
예제 #8
0
 /**
  * @Route("/multisale/sell", name="order_multisale_sell", options={"expose"=true})
  */
 public function orderMultieSell(Request $request)
 {
     foreach ($request->request->keys() as $key) {
         ${$key} = $request->request->get($key);
     }
     $successProducts = array();
     $user = $this->get('security.token_storage')->getToken()->getUser();
     $opeLogger = $this->get('logger.ope');
     $dc = $this->getDoctrine();
     $em = $dc->getManager();
     $em->getConnection()->beginTransaction();
     try {
         // 訂單id陣列
         $rRollback = array();
         // 金額總計
         $nTotal = 0;
         // 回傳產編字串
         $returnSn = '';
         // 取得付款方式
         $paytype = $em->find('WoojinOrderBundle:PayType', $nPayTypeId);
         // 根據付款方式取得折扣
         $nDisRate = $paytype->getDiscount();
         // 取得訂單狀態
         $orderKind = $em->find('WoojinOrderBundle:OrdersKind', $nOrdersKindId);
         // 取得商品狀態
         $productStatus = $em->find('WoojinGoodsBundle:GoodsStatus', Avenue::GS_SOLDOUT);
         // 取得客戶
         $oCustom = $dc->getRepository('WoojinOrderBundle:Custom')->findOneBy(array('mobil' => $mobil == '' ? '00000' : $mobil, 'store' => $user->getStore()->getId()));
         // 若找尋的客戶不存在, 回覆錯誤訊息
         if (!is_object($oCustom)) {
             return new Response('<div class="alert alert-block alert-danger fade in">
         <button type="button" class="close" data-dismiss="alert">×</button>
         <h4 class="alert-heading">手機號碼不存在</h4>
       </div>');
         }
         // 檢查有無傳入資料
         if (!isset($rId)) {
             return new Response('<div class="alert alert-block alert-danger fade in">
         <button type="button" class="close" data-dismiss="alert">×</button>
         <h4 class="alert-heading">無傳入資料</h4>
       </div>');
         }
         if (!is_array($rId)) {
             return new Response('<div class="alert alert-block alert-danger fade in">
         <button type="button" class="close" data-dismiss="alert">×</button>
         <h4 class="alert-heading">無傳入資料</h4>
       </div>');
         }
         // 移除重複的id
         $rId = array_unique($rId);
         /**
          * 新增一張發票
          * 
          * @var Invoice
          */
         $invoice = new Invoice();
         $invoice->setHasPrint(false)->setSn(md5(time()));
         $em->persist($invoice);
         // 根據傳入的 rId 迭代
         foreach ($rId as $key => $id) {
             // 取得商品
             $product = $dc->getRepository('WoojinGoodsBundle:GoodsPassport')->find($id);
             if ($product->getStatus()->getId() != Avenue::GS_ONSALE) {
                 continue;
             }
             // 更新商品狀態
             $product->setStatus($productStatus);
             $em->persist($product);
             // 計算折扣後的應付金額
             $nOrdersRequired = $rOrdersRequired[$key] * $nDisRate;
             // 根據應付金額與實付金額決定訂單狀態
             $nOrdersStatusId = $nOrdersRequired - $rOrdersRequired[$key] != 0 ? Avenue::OS_HANDLING : Avenue::OS_COMPLETE;
             $orderStatus = $em->find('WoojinOrderBundle:OrdersStatus', $nOrdersStatusId);
             // 成立新的訂單
             $order = new Orders();
             // 設定新的訂單資料
             $order->setGoodsPassport($product)->setCustom($oCustom)->setPayType($paytype)->setKind($orderKind)->setStatus($orderStatus)->setRequired($nOrdersRequired)->setPaid($nOrdersRequired)->setOrgRequired($nOrdersRequired)->setOrgPaid($nOrdersRequired)->setInvoice($invoice);
             $em->persist($order);
             $nTotal += $nOrdersRequired;
             $opeLogger->log($order, $user, $paytype, $nOrdersRequired, '成立' . $orderKind->getName() . '訂單[' . $rOrdersRequired[$key] . '元][' . $paytype->getName() . ']');
             $em->persist($opeLogger->getOpe());
             $sculper->setAfter($opeLogger->getOpe());
             $clue = new AvenueClue();
             $clue->setUser($user)->setContent($sculper->getContent());
             $em->persist($clue);
             $em->flush();
             // 存入rollback陣列
             array_push($rRollback, $order->getId());
             if ($product->getYahooId()) {
                 $successProducts[] = $product;
             }
             $returnSn .= "<a href=\"" . $this->get('router')->generate('goods_edit_v2', array('id' => $product->getId())) . "?iframe=true&width=100%&height=100%\" rel=\"prettyPhoto[iframes]\">" . $rGoodsSn[$key] . ($product->getColor() ? $product->getColor()->getName() : '') . '</a>,';
         }
         // Yahoo同步刪除
         if (!empty($successProducts)) {
             $adapter = $this->get('yahoo.syncer');
             $adapter->delete($successProducts);
         }
         $em->getConnection()->commit();
     } catch (Exception $e) {
         $em->getConnection()->rollback();
         throw $e;
     }
     if (empty($returnSn)) {
         return new Response('<div class="alert alert-block alert-warning fade in">
         <button type="button" class="close" data-dismiss="alert">×</button>
         <h4 class="alert-heading">此次操作無任何商品結帳完成</h4></div>');
     } else {
         return new Response('<div class="alert alert-block alert-success fade in">
         <button type="button" class="close" data-dismiss="alert">×</button>
         <h4 class="alert-heading">' . substr($returnSn, 0, -1) . '結帳完成, 合計' . $nTotal . '元</h4>
       <a class="btn btn-primary" href="' . $this->get('router')->generate('invoice_print', array('id' => $invoice->getId(), 'page' => 1)) . '" target="_blank">銷貨單列印</a><button type="button" class="rollback btn btn-inverse" data-roll="' . json_encode($rRollback) . '">取消販售</button></div>');
     }
 }
예제 #9
0
 /**
  * 可累計的折扣購物金金額
  * 
  * @return integer
  */
 protected function stockPredict(Orders $order, BenefitRule $rule)
 {
     $turnLength = floor($order->getRequired() / $rule->getCeiling());
     return $turnLength * $rule->getGift();
 }