app/Customize/Service/LmDeliveryFee.php line 42

Open in your IDE?
  1. <?php
  2. /**
  3.  * @version EC=CUBE4
  4.  * @copyright 株式会社 翔 kakeru.co.jp
  5.  * @author
  6.  * 2022年01月28日作成
  7.  *
  8.  * app/Customize/Service/LmDeliveryFee.php
  9.  *
  10.  *
  11.  * ランドマーク運賃・支払い方法の算出は、ここで計算する
  12.  * 
  13.  *
  14.  *
  15.  *                               C= C= C= ┌(;・_・)┘トコトコ
  16.  ******************************************************/
  17. namespace Customize\Service;
  18. use Symfony\Component\DependencyInjection\ContainerInterface;
  19. use Symfony\Component\HttpFoundation\RequestStack;
  20. use Eccube\Repository\DeliveryRepository;
  21. use Eccube\Repository\DeliveryFeeRepository;
  22. use Lm\Service\Db\SqlService;
  23. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  24. use Eccube\Request\Context;
  25. class LmDeliveryFee
  26. {
  27.     protected $Container;
  28.     protected $Request;
  29.     protected $DeliveryRepository;
  30.     protected $DeliveryFeeRepository;
  31.     protected $LmHelper;
  32.     protected $YamlService;
  33.     protected $Session;
  34.     protected $RequestContext;
  35.     const LM_Contact_Flg 'LM_Contact_Flg';
  36.     public function __construct(
  37.         ContainerInterface $Container,
  38.         RequestStack $Request,
  39.         DeliveryRepository $DeliveryRepository,
  40.         DeliveryFeeRepository $DeliveryFeeRepository,
  41.         YamlService $YamlService,
  42.         LmHelper $LmHelper,
  43.         SessionInterface $session,
  44.         Context $requestContext
  45.     ) {
  46.         $this->Container $Container;
  47.         $this->DeliveryRepository $DeliveryRepository;
  48.         $this->DeliveryFeeRepository $DeliveryFeeRepository;
  49.         $this->YamlService $YamlService;
  50.         $this->LmHelper $LmHelper;
  51.         $this->Request $Request->getMasterRequest();
  52.         $this->Session $session;
  53.         $this->RequestContext $requestContext;
  54.     }
  55.     /**
  56.      * 離島中軽量を返す
  57.      *
  58.      * @param string PostalCode
  59.      * @param int $fee
  60.      */
  61.     public function Island($PostalCode)
  62.     {
  63.         $Sql = new SqlService();
  64.         $PostalCode preg_replace('/[^0-9]+/','',$PostalCode);
  65.         $PostalCode substr_replace($PostalCode'-'30);
  66.         $Sql = new SqlService();
  67.         $Island $Sql->Table('island_table')
  68.             ->set('island_postcode'$PostalCode)
  69.             ->Find();
  70.         if(!$Island){
  71.             $PostalCode substr(str_replace("-"""$PostalCode), 03);
  72.             $PostalCode .= "-0000";
  73.             $Island $Sql->Table('island_table')
  74.             ->set('island_postcode'$PostalCode)
  75.             ->Find();
  76.         }
  77.         return    $Island['island_price'] ?? 0;
  78.     }
  79.     /**
  80.      * デリバリーフィーの取得
  81.      *
  82.      */
  83.     public function IsFee($Shipping)
  84.     {
  85.         $Pref $Shipping->getPref();
  86.         ##道府県が沖縄
  87.         if (47 == $Pref->getId()) {
  88.             return false;
  89.         }
  90.         $Delivery $Shipping->getDelivery();
  91.         #佐川意外
  92.         if (!= $Delivery->getId()) {
  93.             return true;
  94.         }
  95.         #離島
  96.         return  $this->Island($Shipping->getPostalCode()) ? false true;
  97.     }
  98.     /**
  99.      * 配送IDと県で 配送費を取得する
  100.      *
  101.      * @param int $Deliverryid
  102.      * @param int $Prefid
  103.      *
  104.      * @return int $frr
  105.      *
  106.      */
  107.     public function getFee($DeliveryId$PrefId)
  108.     {
  109.         $em $this->Container->get('doctrine.orm.entity_manager');
  110.         $Qb =  $em->createQueryBuilder();
  111.         $Delivery $Qb
  112.             ->select(['T1'])
  113.             ->from("Eccube\\Entity\\DeliveryFee"'T1')
  114.             ->innerJoin('Eccube\\Entity\\Delivery''T2')
  115.             ->innerJoin('Eccube\\Entity\\Master\\Pref''T3')
  116.             ->where('T2.id = :DeliveryId')
  117.             ->andWhere('T3.id = :PrefId')
  118.             ->setParameter('DeliveryId'$DeliveryId)
  119.             ->setParameter('PrefId'$PrefId)
  120.             ->getQuery()
  121.             ->getResult();
  122.         if (is_null($Delivery[0])) {
  123.             return null;
  124.         }
  125.         return $Delivery[0]->getFee();
  126.     }
  127.     /**
  128.      * #カートタイプに基づく配送業者を取得
  129.      *
  130.      * @return object $Deliverys
  131.      */
  132.     public function GetLmDelivery($Carts null)
  133.     {
  134.         $DeliverMap $this->YamlService->GetYaml('DeliveryMapping,yaml');
  135.         $CartType $this->LmHelper->getCartType();
  136.         if (!$this->LmHelper->hasNotEstimate($Carts) && ($this->LmHelper->hasSusoage($Carts) || $this->LmHelper->hasKyouei($Carts) || $this->LmHelper->hasShishu($Carts))) {
  137.             $CartType CartService::CartTypeNormal;
  138.         }
  139.         $DeliveryId $DeliverMap[$CartType] ?? 1;
  140.         return $this->DeliveryRepository->findBy(['id' => $DeliveryId]);
  141.     }
  142.     /**
  143.      * #カートタイプに基づく支払い方法の取得
  144.      * @param $Deliverys
  145.      * @param $Order
  146.      * @param $flg 0 OrderType 1 order helper
  147.      *
  148.      * @return array $Payment
  149.      *
  150.      */
  151.     public function GetLmPayment($Order$flg 0)
  152.     {
  153.         $CartType   $this->LmHelper->getCartType();
  154.         $Payments = [];
  155.         foreach ($this->GetLmDelivery() as $Delivery) {
  156.             $PaymentOptions $Delivery->getPaymentOptions();
  157.             foreach ($PaymentOptions as $PaymentOption) {
  158.                 /** @var Payment $Payment */
  159.                 $Payment $PaymentOption->getPayment();
  160.                 //アマゾンペイは アマゾン以外は 弾く
  161. //                if (12 == $Payment->getId() && !preg_match('/amazon_pay/', $this->Request->getUri())) {
  162. //                    continue;
  163. //                }
  164.                 if ($Payment->isVisible()) {
  165.                     $PaymentFlg true;
  166.                     switch (true) {
  167.                             #加工ありの場合代引きは無しに
  168.                         case $CartType == && $Payment->getId() == 4:
  169.                             $PaymentFlg false;
  170.                             break;
  171.                             #会社の場合後払いの表示
  172.                         case $Order->getCompanyName() && $Payment->getId() == 10:
  173.                             $PaymentFlg false;
  174.                             break;
  175.                             #個人の場合後払いの表示
  176.                         case !$Order->getCompanyName() && $Payment->getId() == 11:
  177.                             $PaymentFlg false;
  178.                             break;
  179.                             #請求書払い(売掛)は customer_urikake_flg ON の顧客のみ
  180.                         case $Payment->getId() == CustomerService::EC_PAYMENT_ID_URIKAKE:
  181.                             $PaymentFlg $this->isCreditSalePaymentAvailable();
  182.                             break;
  183.                     }
  184.                     if ($PaymentFlg) {
  185.                         if (== $flg) {
  186.                             $Payments[$Delivery->getId()][] = $Payment;
  187.                         } else {
  188.                             $Payments[] = $Payment;
  189.                         }
  190.                     }
  191.                 }
  192.             } //for
  193.         }
  194.         return $Payments;
  195.     }
  196.     /**
  197.      * ログイン中のLM顧客が請求書払い(売掛)を選択可能か(customer_urikake_flg ON)。
  198.      */
  199.     protected function isCreditSalePaymentAvailable(): bool
  200.     {
  201.         $Customer $this->RequestContext->getCurrentUser();
  202.         if ($Customer === null || !method_exists($Customer'getLmCustomerId')) {
  203.             return false;
  204.         }
  205.         $lmCustomerId $Customer->getLmCustomerId();
  206.         if (!$lmCustomerId) {
  207.             return false;
  208.         }
  209.         $lmCustomer = (new SqlService())
  210.             ->Table('customer_table')
  211.             ->Set('customer_id'$lmCustomerId)
  212.             ->Find();
  213.         return CustomerService::isCreditSaleEligibleRow($lmCustomer);
  214.     }
  215.     /**
  216.      *  都道府県ID 郵便番号で 配送費を返す 
  217.      *  加工で仕様するため 佐川
  218.      *  @param int PrefId
  219.      *  @param string PostalCode
  220.      *
  221.      * @return int $fee;
  222.      *
  223.      */
  224.     public function GetDeliveryFee($PrefId,$PostalCode null){
  225.         $DeliveryMap$this->YamlService->GetYaml('DeliveryMapping,yaml');
  226.         switch($this->LmHelper->getCartType()){
  227.             case CartService::CartTypeCatalog:
  228.             case CartService::CartTypeSample:
  229.                 return 0;
  230.                 break;
  231.             case CartService::CartTypeNormal:
  232.                 return  $this->DeliveryFee($PrefId,$DeliveryMap[1]);
  233.                 break;
  234.             case CartService::CartTypeEstimate:
  235.                 default:
  236.                 return $this->DeliveryFee($PrefId,$DeliveryMap[2]) + $this->Island($PostalCode);
  237.                 break;
  238.         }//switch()
  239.     }
  240.     protected  function DeliveryFee($PrefId,$DereyId){
  241.         if ($Fee $this->DeliveryFeeRepository->findOneBy(['Pref'=>$PrefId,'Delivery'=>$DereyId])){
  242.             return $Fee->getFee();
  243.         }
  244.         return  0;
  245.     }
  246. }