Пример #1
0
 /**
  * Event:
  *  -> emit updateProductEvent
  *  -> paramHandler
  *  -> updateHandler
  *  -> logHandler
  *  -> imgHandler
  *  -> desimgHandler
  *  
  * GenParamPool, UpdateService, MetaService,ImgService, DesImgService
  * 
  * @Route("/edit/{id}/v2/update", requirements={"id" = "\d+"}, name="goods_update_v2", options={"expose"=true})
  * @ParamConverter("goods", class="WoojinGoodsBundle:GoodsPassport")
  * @Template()
  * @Method("POST")
  */
 public function updateV2Action(Request $request, GoodsPassport $goods)
 {
     $em = $this->getDoctrine()->getManager();
     $em->getConnection()->beginTransaction();
     try {
         /**
          * 商品成本
          *
          * @var integer
          */
         $cost = (int) $request->request->get('goods_cost', $goods->getCost());
         /**
          * 商品售價
          *
          * @var integer
          */
         $price = (int) $request->request->get('goods_price', $goods->getPrice());
         $isPriceDiff = (int) $cost !== (int) $goods->getCost() || (int) $price !== (int) $goods->getPrice();
         /**
          * 目前登入的使用者實體
          *
          * @var \Woojin\UserBundle\Entity\User
          */
         $user = $this->get('security.token_storage')->getToken()->getUser();
         if ($isPriceDiff) {
             $clue = new AvenueClue();
             $clue->setUser($user);
             $sculp = $this->get('sculper.clue');
             $sculp->initProductModify()->setBefore($goods);
         }
         /**
          * 目前使用者的所屬店家
          *
          * @var \Woojin\UserBundle\Entity\Store
          */
         $store = $user->getStore();
         /**
          * 貨幣符號
          *
          * @var string
          */
         $sym = $this->get('base_method')->getSymbol();
         /**
          * 產編換算使用位數
          *
          * @var integer
          */
         $minDigit = $sym == 'NT' ? self::SN_RATE : 10;
         /**
          * 商品id
          *
          * @var integer
          */
         $id = $goods->getId();
         /**
          * 產編是否會有更動
          *
          * @var boolean
          */
         $isSnDiff = $goods->getCost() !== $cost || $goods->getPrice() !== $price;
         /**
          * 網路售價
          *
          * @var integer
          */
         $webPrice = $request->request->get('web_price', $goods->getWebPrice());
         //$webPrice = ($webPrice > $price) ? $price : $webPrice;
         //echo $webPrice; exit();
         /**
          * 型號
          *
          * @var string
          */
         $model = $request->request->get('model', $goods->getModel());
         /**
          * 品名
          *
          * @var string
          */
         $name = $request->request->get('goods_name', $goods->getName());
         /**
          * 品牌序號
          *
          * @var string
          */
         $colorSn = $request->request->get('color_sn', $goods->getColorSn());
         /**
          * 自定義品牌內碼
          *
          * @var string
          */
         $customSn = $request->request->get('custom_sn', $goods->getCustomSn());
         /**
          * 品牌序號
          *
          * @var string
          */
         $orgSn = $request->request->get('org_sn', $goods->getOrgSn());
         /**
          * 商品備註
          *
          * @var string
          */
         $memo = $request->request->get('goods_memo', $goods->getMemo());
         /**
          * 進貨時間
          *
          * @var datetime
          */
         $createAt = is_null($goods->getCreatedAt()) ? null : $goods->getCreatedAt()->format('Y-m-d');
         /**
          * 商品新舊實體
          *
          * @var \Woojin\GoodsBundle\Entity\GoodsLevel
          */
         $level = $em->find('WoojinGoodsBundle:GoodsLevel', $request->request->get('level'));
         /**
          * 商品材質實體
          *
          * @var \Woojin\GoodsBundle\Entity\GoodsMT
          */
         $mt = $em->find('WoojinGoodsBundle:GoodsMT', $request->request->get('mt'));
         /**
          * 商品來源實體
          *
          * @var \Woojin\GoodsBundle\Entity\GoodsSource
          */
         if ($goods->getSource()) {
             $source = $em->find('WoojinGoodsBundle:GoodsSource', $request->request->get('source', $goods->getSource()->getId()));
         } else {
             if (!$request->request->get('source')) {
                 $source = null;
             }
         }
         /**
          * 顏色實體
          *
          * @var \Woojin\GoodsBundle\Entity\Color
          */
         $color = $em->find('WoojinGoodsBundle:Color', $request->request->get('color'));
         /**
          * 款式實體
          *
          * @var \Woojin\GoodsBundle\Entity\Pattern
          */
         $pattern = $em->find('WoojinGoodsBundle:Pattern', $request->request->get('pattern'));
         /**
          * 品牌實體
          *
          * @var \Woojin\GoodsBundle\Entity\Brand
          */
         $brand = $em->find('WoojinGoodsBundle:Brand', $request->request->get('brand'));
         /**
          * 圖片實體
          *
          * @var \Woojin\GoodsBundle\Entity\Img
          */
         $img = $goods->getImg();
         /**
          * 副圖實體
          *
          * @var \Woojin\GoodsBundle\Entity\Img
          */
         $desimg = $goods->getDesimg();
         /**
          * 是否允許官網上架
          *
          * @var boolean
          */
         $isAllowWeb = $request->request->get('isAllowWeb', null) == 1 ? true : false;
         /**
          * 是否允許刷卡付費
          *
          * @var boolean
          */
         $isAllowCreditCard = $request->request->get('isAllowCreditCard', null) == 1 ? true : false;
         /**
          * 是否允許競拍
          *
          * @var boolean
          */
         $isAllowAuction = $request->request->get('isAllowAuction', null) == 1 ? true : false;
         /**
          * 是否為Alan進貨
          *
          * @var boolean
          */
         $isAlanIn = $request->request->get('isAlanIn', null) == 1 ? true : false;
         /**
          * 上傳的圖片檔案
          *
          * @var \Symfony\Component\HttpFoundation\File\UploadedFile
          */
         $files = $request->files->get('img');
         /**
          * 上傳的副圖片檔案
          *
          * @var \Symfony\Component\HttpFoundation\File\UploadedFile
          */
         $desFiles = $request->files->get('desimg');
         /**
          * 商品描述
          * @var [text/html]
          */
         $_description = $request->request->get('description', '<p>待補</p>');
         if (!($description = $goods->getDescription())) {
             $description = new Description($_description);
             $goods->setDescription($description);
         }
         $description->setContent($_description);
         $em->persist($description);
         /**
          * 賣點
          * @var [string]
          */
         $_brief = trim($request->request->get('brief', '<p>待補</p>'));
         if (!($brief = $goods->getBrief())) {
             $brief = new Brief($_brief);
             $goods->setBrief($brief);
         }
         $brief->setContent($_brief);
         $em->persist($brief);
         /**
          * POST 過來的category ids
          *
          * @var [array]
          */
         $postCategoryIds = $request->request->get('category', array());
         $goodsCategorys = $goods->getCategorys();
         $postCategorys = array();
         foreach ($goodsCategorys as $category) {
             if (!in_array($category->getId(), $postCategoryIds)) {
                 $goods->removeCategory($category);
             }
         }
         if (!empty($postCategoryIds)) {
             $qb = $em->createQueryBuilder();
             $postCategorys = $qb->select('c')->from('WoojinGoodsBundle:Category', 'c')->where($qb->expr()->in('c.id', $postCategoryIds))->getQuery()->getResult();
         }
         foreach ($postCategorys as $category) {
             if (!$goods->hasCategory($category)) {
                 $goods->addCategory($category);
             }
         }
         $isDiffMoney = false;
         if ($price != $goods->getPrice() || $cost != $goods->getCost()) {
             $isDiffMoney = true;
         }
         // 更改商品屬性
         $goods->setSeoSlogan($em->find('WoojinGoodsBundle:SeoSlogan', $request->request->get('seoSlogan_id')))->setSeoSlogan2($em->find('WoojinGoodsBundle:SeoSlogan', $request->request->get('seoSlogan2_id')))->setSeoWord($request->request->get('seoWord'))->setColor($color)->setPattern($pattern)->setColorSn($colorSn)->setCustomSn($customSn)->setModel($model)->setBrand($brand)->setLevel($level)->setSource($source)->setName($name)->setOrgSn($orgSn)->setCost($cost)->setPrice($price)->setMt($mt)->setCreatedAt(new \DateTime($createAt))->setMemo($memo)->setIsAllowWeb($isAllowWeb)->setIsAllowCreditCard($isAllowCreditCard)->setWebPrice($webPrice);
         if (in_array($goods->getStatus()->getId(), array(constant('Woojin\\Utility\\Avenue\\Avenue::GS_ONSALE'), constant('Woojin\\Utility\\Avenue\\Avenue::GS_ACTIVITY')))) {
             $goods->setIsAllowAuction($isAllowAuction)->setIsAlanIn($isAlanIn)->setBsoCustomPercentage($request->request->get('bso_custom_percentage', Auction::DEFAULT_CUSTOM_PERCENTAGE));
         }
         /**
          * 商品產編
          *
          * @var string
          */
         $sn = $goods->genSn(substr($goods->getSn(), 0, 1));
         if ($isDiffMoney) {
             $goods->setSn($sn);
         }
         /**
          * 商品變更記錄儲存
          *
          * @var [object]
          */
         $metaRecorder = $this->get('my_meta_record_method');
         $metaRecorder->recordMeta($this->createGoodsUpdateMsg($goods, $sn, $cost, $price, $model, $createAt));
         $rootDir = $request->server->get('DOCUMENT_ROOT');
         $sepDir = $goods->getImgRelDir($user);
         $comDir = $rootDir . $sepDir;
         //--- 圖片路徑更動 ---//
         if (!is_dir($comDir)) {
             mkdir($comDir, 0777, true);
         }
         //--- 新的圖片蓋掉舊的圖片 ---//
         // 如果有上傳主圖
         if (is_object($files)) {
             /**
              * 根據上傳檔案取得圖片名稱
              *
              * @var string
              */
             $fileName = $goods->getImgName($files);
             /**
              * 存放的圖片路徑
              *
              * @var string
              */
             $srcPath = $sepDir . '/' . $fileName;
             /**
              * 如果原本沒有圖片,新增一個圖片實體
              */
             if (!$img) {
                 $goods->setImg($img = new Img());
                 $inherits = $goods->getInherits();
                 foreach ($inherits as $inherit) {
                     $inherit->setImg($img);
                     $em->persist($inherit);
                 }
                 if ($files->move($comDir, $fileName)) {
                     $img->setPath($srcPath);
                     $em->persist($img);
                 }
             } else {
                 if (file_exists($request->server->get('DOCUMENT_ROOT') . $img->getPath())) {
                     unlink($request->server->get('DOCUMENT_ROOT') . $img->getPath());
                     $files->move($request->server->get('DOCUMENT_ROOT') . $img->getPurePath(), $img->getName());
                 } else {
                     if ($files->move($comDir, $fileName)) {
                         $img->setPath($srcPath);
                         $em->persist($img);
                     }
                 }
             }
             $imgFactory = $this->get('factory.img');
             $imgFactory->createRemoveBorder($img);
         }
         if (is_object($desFiles)) {
             $fileName = $goods->getImgName($desFiles, 'des');
             $srcPath = $sepDir . '/' . $fileName;
             if (!$desimg) {
                 $goods->setDesimg($desimg = new Desimg());
                 $inherits = $goods->getInherits();
                 foreach ($inherits as $inherit) {
                     $inherit->setDesimg($desimg);
                     $em->persist($inherit);
                 }
                 if ($desFiles->move($comDir, $fileName)) {
                     $desimg->setPath($srcPath);
                     $em->persist($desimg);
                 }
             } else {
                 if (file_exists($request->server->get('DOCUMENT_ROOT') . $desimg->getPath())) {
                     unlink($request->server->get('DOCUMENT_ROOT') . $desimg->getPath());
                     $desFiles->move($request->server->get('DOCUMENT_ROOT') . $desimg->getPurePath(), $desimg->getName());
                 } else {
                     if ($desFiles->move($comDir, $fileName)) {
                         $desimg->setPath($srcPath);
                         $em->persist($desimg);
                     }
                 }
             }
         }
         //--- End 新的圖片蓋掉舊的圖片 ---//
         if ($isPriceDiff) {
             $sculp->setAfter($goods);
             $clue->setContent($sculp->getContent());
             $em->persist($clue);
         }
         $em->persist($goods);
         $em->flush();
         $em->getConnection()->commit();
     } catch (Exception $e) {
         $em->getConnection()->rollback();
         throw $e;
     }
     // 若產編有更動,同步更新yahoo商城資訊
     if ($isSnDiff && $goods->getYahooId()) {
         $apiClient = $this->get('yahoo.api.client');
         $apiClient->updateMain($apiClient->getProvider()->genR($goods)->getR($goods));
     }
     $this->get('passport.syncer')->sync($goods);
     return $this->redirect($this->generateUrl('goods_edit_v2', array('id' => $id)));
 }