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(); }
/** * [進貨|寄賣]訂單轉換綁定客戶 * * ======== 流程 ========= * * 根據手機和所屬店找出客戶實體-> :客戶 * * 如果訂單為一般進貨: * -> 將該訂單狀態改為寄賣訂單,成本不變。 * -> 將訂單客戶關連實體綁定'客戶'。 * -> 新增一筆寄賣回扣訂單關連原本訂單,成本相同,已付為0。 * -> 將訂單客戶關連實體綁定'客戶'。 * * 如果訂單為寄賣: * -> 將訂單客戶關連實體綁定'客戶'。 * * ======== End ========== * * @Route("/custom/{id}/mobil/{mobil}", requirements={"id" = "\d+"}, name="orders_v2_custom_alter", options={"expose"=true}) * @ParamConverter("order", class="WoojinOrderBundle:Orders") * @Method("POST") */ public function v2ChangeCustomAction(Request $request, Orders $order, $mobil) { $em = $this->getDoctrine()->getManager(); $product = $order->getProduct(); $user = $this->get('security.token_storage')->getToken()->getUser(); /** * 訂單關聯客戶 * * @var \Woojin\OrderBundle\Entity\Custom */ $custom = $em->getRepository('WoojinOrderBundle:Custom')->findOneBy(array('mobil' => $mobil, 'store' => $this->get('security.token_storage')->getToken()->getUser()->getStore()->getId())); if (!$custom) { throw new \Exception('客戶不存在!'); } switch ($order->getKind()->getId()) { // 如果訂單為一般進貨 case Avenue::OK_IN: $sculper = $this->get('sculper.clue'); $sculper->initCancelConsignToPurchase(); $sculper->setBefore($product); // 將原本的一般進貨訂單改成寄賣訂單 $order->setKind($em->find('WoojinOrderBundle:OrdersKind', Avenue::OK_CONSIGN_IN))->setCustom($custom); $product->setCustom($custom); $em->persist($product); $sculper->setAfter($product); $clue = new AvenueClue(); $clue->setUser($user)->setContent($sculper->getContent()); $em->persist($clue); /** * 新增的寄賣回扣訂單 * * @var \Woojin\OrderBundle\Entity\Orders */ $consignOrder = new Orders(); $consignOrder->setGoodsPassport($order->getProduct())->setPayType($em->find('WoojinOrderBundle:PayType', Avenue::PT_CASH))->setRequired($order->getRequired())->setPaid(0)->setKind($em->find('WoojinOrderBundle:OrdersKind', Avenue::OK_FEEDBACK))->setStatus($em->find('WoojinOrderBundle:OrdersStatus', Avenue::OS_HANDLING))->setCustom($custom)->setParent($order); $em->persist($order); $em->persist($consignOrder); $em->flush($order); break; // 如果訂單為寄賣 // 如果訂單為寄賣 case Avenue::OK_CONSIGN_IN: $oldCustom = $order->getCustom(); // 將訂單客戶關連實體綁定為手機查找到的客戶 $order->setCustom($custom); $product = $order->getProduct(); $product->setCustom($custom); $em->persist($product); foreach ($order->getRelates() as $relate) { $em->persist($relate); } $em->persist($order); $em->flush(); break; case Avenue::OK_OUT: case Avenue::OK_EXCHANGE_OUT: case Avenue::OK_TURN_OUT: case Avenue::OK_WEB_OUT: case Avenue::OK_SPECIAL_SELL: case Avenue::OK_SAME_BS: $order->setCustom($custom); $em->persist($order); $em->flush(); break; default: break; } $this->get('passport.syncer')->sync($product); return new Response(json_encode(array('status' => '0', 'custom' => array('name' => $custom->getName(), 'mobil' => $custom->getMobil())))); }
/** * 代購商品出貨 (訂單狀態: 已出貨) * * 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; }
/** * @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>'); } }