app/Customize/Service/getProductCategoryService.php line 118

Open in your IDE?
  1. <?php
  2. /*
  3. ファイル名:getProductCategoryService.php
  4. 処理概要:対象URL、対象データベースのidから商品カテゴリを取得する
  5. URLから商品情報を取得し商品カテゴリidとカテゴリ名を返す。カテゴリ名はkintoneとDBで表記ゆれがあるためkintoneに合わせる
  6. 作成年月日:2023/08/31
  7. 作成者:a.tojo
  8. 修正年月日:2024/07/11 k.saito
  9. 修正内容:エアコンを、エアコン(標準工事)とし、複製して、エアコン(2階下ろし工事)とする。
  10. */
  11. namespace Customize\Service;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use php\common\ErrNotifi;
  15. //DB
  16. use Eccube\Entity\ProductCategory;
  17. use Eccube\Entity\ProductClass;
  18. use Eccube\Entity\Category;
  19. class getProductCategoryService
  20. {
  21.     /**
  22.      * @var EntityManagerInterface
  23.      */
  24.     protected $entityManager;
  25.     /**
  26.      * @var RequestStack
  27.      */
  28.     protected $requestStack;
  29.     public function __construct(
  30.         EntityManagerInterface $entityManager,
  31.         RequestStack $requestStack
  32.     ) {
  33.         $this->EntityManager $entityManager;
  34.         $this->requestStack $requestStack;
  35.     }
  36.     //DBとkintoneに表記ゆれがあるため。
  37.     //キーがDBの名前で値がkintoneスキルアプリ中分類の名前
  38.     //カレンダー、画像アップロード画面、案件アプリ登録時に使用
  39.     public function settingCategoryData()
  40.     {
  41.         //書かれていないものはECCUBEカテゴリ名、kintoneスキルアプリ中分類が同じとする
  42.         $settingData = [];
  43.         $settingData['エアコン(2階下ろし工事)'] = 'ルームエアコン(2階下ろし工事)';
  44.         $settingData['エアコン(標準工事)'] = 'ルームエアコン(標準工事)';
  45.         // $settingData['エアコン'] = 'ルームエアコン';
  46.         //$settingData['トイレ'] = 'トイレ';
  47.         $settingData['蛇口(水栓)'] = '蛇口';
  48.         $settingData['洗面台・洗面化粧台'] = '洗面化粧台';
  49.         //$settingData['ガス給湯器'] = '給湯器';
  50.         //$settingData['エコキュート'] = 'エコキュート';
  51.         //$settingData['レンジフード'] = 'レンジフード';
  52.         $settingData['浴室乾燥機・浴室暖房器・浴室換気扇'] = '浴室換気乾燥暖房機';
  53.         //$settingData['IHクッキングヒーター'] = 'IHクッキングヒーター';
  54.         //$settingData['ビルトインガスコンロ'] = 'ビルトインガスコンロ';
  55.         return $settingData;
  56.     }
  57.     //対象URLから商品情報を取得し商品カテゴリidとカテゴリ名を返す。
  58.     public function getCategoryFromURL()
  59.     {
  60.         $data = [];
  61.         //クエリから商品情報を取得
  62.         $request $this->requestStack->getMainRequest();
  63.         $urlPath $request->getPathInfo();
  64.         // URLパスをスラッシュで分割して、商品IDを取得
  65.         $urlParts explode('/'trim($urlPath'/'));
  66.         $productID end($urlParts);
  67.         //dump($productID);
  68.         $data $this->getCategory($productID);
  69.         return $data;
  70.     }
  71.     //DB:dtb_product_classのidから商品情報を取得し商品カテゴリidとカテゴリ名を返す。
  72.     //kintone予定アプリの仮予約時のレコードタイトルに使用
  73.     public function getCategoryFromProductClassId($productClassId)
  74.     {
  75.         //dtb_product_classのidからproduct_idを取得する
  76.         $productClass $this->EntityManager->getRepository(ProductClass::class)->find($productClassId); //findBy(['Product' => $productClassId]);
  77.         $productID $productClass->getProduct()->getId();
  78.         //dtb_product_categoryにproduct_idを渡しcategory_idを取得する
  79.         $data $this->getCategory($productID);
  80.         dump($data);
  81.         return $data['name'];
  82.     }
  83.     //product_idからカテゴリ名とカテゴリidを返す
  84.     public function getCategory($productID)
  85.     {
  86.         log_debug('getCategory start');
  87.         $ProductCategoryData $this->EntityManager->getRepository(ProductCategory::class)->findBy(['Product' => $productID]);
  88.         //dump($ProductCategoryData);
  89.         if (count($ProductCategoryData) >= 1) {
  90.             foreach ($ProductCategoryData as $ProductCategoryDatas) {
  91.                 $categoryId[] = $ProductCategoryDatas->getCategoryId();
  92.             }
  93.         } else {
  94.             log_info('エラー');
  95.         }
  96.         //dump($categoryId);
  97.         //DB:dtb_categoryのデータ
  98.         foreach ($categoryId as $category) {
  99.             $categoryData $this->EntityManager->getRepository(Category::class)->find($category);
  100.             //dump($categoryData->getParent());
  101.             $settingData $this->settingCategoryData();
  102.             //サブカテゴリは無視
  103.             if ($categoryData->getParent() === null) {
  104.                 $id $categoryData->getId();
  105.                 $name $categoryData->getname();
  106.                 if (array_key_exists($name$settingData)) {
  107.                     $name $settingData[$name];
  108.                 }
  109.                 $data['id'] = $id;
  110.                 $data['name'] = $name;
  111.             }
  112.         }
  113.         log_info('設定されたカテゴリ', [$data]);
  114.         log_debug('getCategory end');
  115.         return $data;
  116.     }
  117. }