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); }
/** * @Route("/v2/update/{id}", requirements={"id" = "\d+"}, name="orders_v2_update", options={"expose"=true}) * @ParamConverter("order", class="WoojinOrderBundle:Orders") * @Method("POST") */ public function v2UpdateAction(Request $request, Orders $order) { if ($order->getStatus()->getId() !== 1) { return new \Exception('訂單非處理中狀態!'); } $user = $this->get('security.token_storage')->getToken()->getUser(); if (!is_object($user)) { throw new \Exception('Session timeout!'); } $em = $this->getDoctrine()->getManager(); $em->getConnection()->beginTransaction(); try { /** * 訂單狀態:完成 實體 * * @var \Woojin\OrderBundle\Entity\OrdersStatus */ $complete = $em->find('WoojinOrderBundle:OrdersStatus', Avenue::OS_COMPLETE); /** * 付費方式實體 * * @var \Woojin\OrderBundle\Entity\PayType */ $payType = $em->find('WoojinOrderBundle:PayType', $request->request->get('pay_type', Avenue::PT_CASH)); /** * 本次動作實際支付金額 * * @var integer */ $paid = $request->request->get('paid'); /** * 本次動作未計算折扣支付金額 * * @var integer */ $paidOrg = $request->request->get('paid_org'); /** * 今次動作優惠差額 * * @var integer */ $diff = $paidOrg - $paid; /** * 目前總共支付金額 = 訂單已經支付 + 本次動作實際支付金額 * * @var integer */ $totalPaid = $order->getPaid() + $paid; /** * 目前應付金額 = 訂單應付金額 - 今次動作優惠差額 * * @var integer */ $required = $order->getRequired() - $diff; /** * 訂單備註 * * @var string */ $memo = $request->request->get('memo'); // 訂單資訊更新 $order->setPaid($totalPaid)->setOrgPaid((int) $paidOrg + (int) $order->getOrgPaid())->setRequired($required)->setMemo($memo); // 檢查是否已經支付完畢,若為真則將訂單狀態設定為完成狀態 if ($required <= $totalPaid) { $order->setStatus($complete); } $em->persist($order); $opeLogger = $this->get('logger.ope'); $opeLogger->log($order, $user, $payType, (int) $paidOrg, '增加請款:[' . $paid . '元][' . $payType->getName() . ']'); $sculper = $this->get('sculper.clue'); $sculper->initPatch(); $sculper->setAfter($opeLogger->getOpe()); $clue = new AvenueClue(); $clue->setUser($user)->setContent($sculper->getContent()); $em->persist($clue); $em->persist($opeLogger->getOpe()); $em->flush(); $em->getConnection()->commit(); } catch (\Exception $e) { $em->getConnection()->rollback(); throw $e; } return new Response('ok'); }