<?php
/**
* EntityType
* https://symfony.com/doc/current/reference/forms/types/entity.html#expanded
*/
namespace Customize\Form\Extension;
use Eccube\Form\Type\AddCartType;
use Symfony\Component\Form\AbstractTypeExtension;
use Doctrine\ORM\EntityManager;
use Doctrine\Persistence\ManagerRegistry;
use Eccube\Common\EccubeConfig;
use Eccube\Entity\CartItem;
use Eccube\Entity\ProductClass;
use Eccube\Form\DataTransformer\EntityToIdTransformer;
use Eccube\Repository\ProductClassRepository;
use Eccube\Repository\ProductRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContext;
use Eccube\Service\CartService;
use Customize\Service\FileUploader;
class AddCartTypeEx extends AbstractTypeExtension
{
/**
* @var EccubeConfig
*/
protected $eccubeConfig;
protected $productRepository;
protected $cartService;
/**
* @var FileUploader
*/
protected $fileUploader;
/**
* ContactType constructor.
*
* @param EccubeConfig $eccubeConfig
*/
public function __construct(
FileUploader $fileUploader,
ProductRepository $productRepository,
CartService $cartService,
EccubeConfig $eccubeConfig) {
$this->fileUploader = $fileUploader;
$this->productRepository = $productRepository;
$this->cartService = $cartService;
$this->eccubeConfig = $eccubeConfig;
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('express_tickets_price', HiddenType::class, [])
->add('construction_air', HiddenType::class, [])
->add('construction_6', NumberType::class, [])
->add('construction_16', NumberType::class, [])
->add('construction_23', NumberType::class, [])
->add('number_install', HiddenType::class, [])
->add('number_install_price', HiddenType::class, [])
->add('construction_type_07_02_v1_price', HiddenType::class, [])
->add('construction_type_07_03_v2_price', HiddenType::class, [])
->add('construction_type_07_04_v1_price', HiddenType::class, [])
->add('construction_type_07_04_v2_price', HiddenType::class, [])
->add('construction_type_07_04_v3_price', HiddenType::class, [])
->add('elevator_07_price', HiddenType::class, [])
->add('electrical_outlet_07_price', HiddenType::class, [])
->add('electrical_outlet_07_02_price', HiddenType::class, [])
->add('room_size_07_03_v1_price', HiddenType::class, [])
->add('room_size_07_03_v2_price', HiddenType::class, [])
->add('piping_status_07_02_price', HiddenType::class, [])
->add('indoor_cover_07_price', HiddenType::class, [])
->add('outdoor_cover_02_price', HiddenType::class, [])
->add('construction_outdoor_07_price', HiddenType::class, [])
->add('construction_method_07_v1_price', HiddenType::class, [])
->add('construction_method_07_v2_price', HiddenType::class, [])
->add('construction_base_price_1', HiddenType::class, [])
->add('construction_base_price_2', HiddenType::class, [])
->add('construction_base_price_3', HiddenType::class, [])
->add('construction_total_price', HiddenType::class, [])
->add('construction_discount', HiddenType::class, [])
//希望する工事
->add('desired_construction_work', ChoiceType::class, [
'choices' => [
'エアコン本体のみ購入の方' => 'エアコン本体のみ購入の方',
'エアコン本体と設置工事をご希望の方' => 'エアコン本体と設置工事をご希望の方',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
//希望する工事 → エアコン本体と設置工事をご希望の方
->add('desired_construction_work_02', ChoiceType::class, [
'choices' => [
'最終金額算出' => '最終金額算出',
'新居等への引越しのため設置場所の詳細確認不可' => '新居等への引越しのため設置場所の詳細確認不可',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 特急券の購入
->add('express_tickets', ChoiceType::class, [
'choices' => [
'する' => 'する',
'しない' => 'しない',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === 'する') {
return ['price' => 5500];
} elseif ($choice === 'しない') {
return ['price' => 0];
}
return [];
},
])
// お住まい
->add('osumai', ChoiceType::class, [
'choices' => [
'一戸建て' => '一戸建て',
'集合住宅' => '集合住宅',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 建物の所有
->add('building_ownership', ChoiceType::class, [
'choices' => [
'持ち家' => '持ち家',
'賃貸' => '賃貸',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 構造
->add('structure', ChoiceType::class, [
'choices' => [
'木造' => '木造',
'鉄骨' => '鉄骨',
'コンクリート(RC)' => 'コンクリート(RC)',
'その他' => 'その他',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// // 設置台数
// ->add('number_install', ChoiceType::class, [
// 'choices' => [
// '1台' => '1台',
// '2台' => '2台',
// '3台' => '3台',
// '4台以上' => '4台以上',
// ],
// 'expanded' => true,
// 'multiple' => false,
// 'required' => false,
// 'choice_attr' => function($choice, $key, $value) {
// if ($choice === '1台') {
// return ['percent' => 0];
// } elseif ($choice === '2台') {
// return ['percent' => 0.05];
// } elseif ($choice === '3台') {
// return ['percent' => 0.1];
// } elseif ($choice === '4台以上') {
// return ['percent' => 0.15];
// }
// return [];
// },
// ])
//工事希望日1
->add('construction_date_1', DateType::class, [
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
])
//工事希望日2
->add('construction_date_2', DateType::class, [
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
])
//工事希望日3
->add('construction_date_3', DateType::class, [
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
])
// 希望時間帯_1
->add('time_slot_1', ChoiceType::class, [
'choices' => [
'午前' => '午前',
'午後' => '午後',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 希望時間帯_2
->add('time_slot_2', ChoiceType::class, [
'choices' => [
'午前' => '午前',
'午後' => '午後',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 希望時間帯_3
->add('time_slot_3', ChoiceType::class, [
'choices' => [
'午前' => '午前',
'午後' => '午後',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
//その他希望
->add('contents', TextareaType::class, [
'required' => false,
'constraints' => [
// new Assert\NotBlank(),
new Assert\Length([
'max' => $this->eccubeConfig['eccube_lltext_len'],
])
],
])
// 工事内訳
->add('construction_type_07', ChoiceType::class, [
'choices' => [
'新設' => '新設',
'交換' => '交換',
'新設工事に加えて移設工事も希望' => '新設工事に加えて移設工事も希望',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 工事内訳 → 交換
->add('construction_type_07_02_v1', ChoiceType::class, [
'choices' => [
'処分を希望する(リサイクル&収集運搬費)' => '処分を希望する(リサイクル&収集運搬費)',
'処分を希望しない' => '処分を希望しない',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '処分を希望する(リサイクル&収集運搬費)') {
return ['price' => 7180];
} elseif ($choice === '処分を希望しない') {
return ['price' => 5980];
}
return [];
},
])
// 工事内訳 → 新設工事に加えて移設工事も希望
->add('construction_type_07_02_v2', ChoiceType::class, [
'choices' => [
'分解洗浄を希望する' => '分解洗浄を希望する',
'分解洗浄を希望しない' => '分解洗浄を希望しない',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 工事内訳 → 新設工事に加えて移設工事も希望 → 分解洗浄を希望する
->add('construction_type_07_03_v1', ChoiceType::class, [
'choices' => [
'移設6~14畳(取外し含む)' => '移設6~14畳(取外し含む)',
'移設16~20畳(取外し含む)' => '移設16~20畳(取外し含む)',
'移設23畳~(取外し含む)' => '移設23畳~(取外し含む)',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 工事内訳 → 新設工事に加えて移設工事も希望 → 分解洗浄を希望しない
->add('construction_type_07_03_v2', ChoiceType::class, [
'choices' => [
'移設6~14畳(取外し含む)' => '移設6~14畳(取外し含む)',
'移設16~20畳(取外し含む)' => '移設16~20畳(取外し含む)',
'移設23畳~(取外し含む)' => '移設23畳~(取外し含む)',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '移設6~14畳(取外し含む)') {
return ['price' => 24980];
} elseif ($choice === '移設16~20畳(取外し含む)') {
return ['price' => 28980];
} elseif ($choice === '移設23畳~(取外し含む)') {
return ['price' => 32980];
}
return [];
},
])
// 工事内訳 → 新設工事に加えて移設工事も希望 → 分解洗浄を希望する → 移設6~14畳(取外し含む)
->add('construction_type_07_04_v1', ChoiceType::class, [
'choices' => [
'掃除機能付き' => '掃除機能付き',
'掃除機能なし' => '掃除機能なし',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '掃除機能付き') {
return ['price' => 50980];
} elseif ($choice === '掃除機能なし') {
return ['price' => 47980];
}
return [];
},
])
// 工事内訳 → 新設工事に加えて移設工事も希望 → 分解洗浄を希望する → 移設16~20畳(取外し含む)
->add('construction_type_07_04_v2', ChoiceType::class, [
'choices' => [
'掃除機能付き' => '掃除機能付き',
'掃除機能なし' => '掃除機能なし',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '掃除機能付き') {
return ['price' => 54980];
} elseif ($choice === '掃除機能なし') {
return ['price' => 51980];
}
return [];
},
])
// 工事内訳 → 新設工事に加えて移設工事も希望 → 分解洗浄を希望する → 移設23畳~(取外し含む)
->add('construction_type_07_04_v3', ChoiceType::class, [
'choices' => [
'掃除機能付き' => '掃除機能付き',
'掃除機能なし' => '掃除機能なし',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '掃除機能付き') {
return ['price' => 58980];
} elseif ($choice === '掃除機能なし') {
return ['price' => 55980];
}
return [];
},
])
// エアコン設置場所
->add('construction_floor_07', ChoiceType::class, [
'choices' => [
'1階' => '1階',
'2階' => '2階',
'3階' => '3階',
'4階以上' => '4階以上',
'未定' => '未定',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// エレベーターの有無
->add('elevator_07', ChoiceType::class, [
'choices' => [
'あり' => 'あり',
'なし(新設)' => 'なし(新設)',
'なし(交換)' => 'なし(交換)',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === 'あり') {
return ['price' => 0];
} elseif ($choice === 'なし(新設)') {
return ['price' => 5980];
} elseif ($choice === 'なし(交換)') {
return ['price' => 11980];
}
return [];
},
])
// コンセントの有無
->add('electrical_outlet_07', ChoiceType::class, [
'choices' => [
'あり' => 'あり',
'なし(別途工事が必要になります)' => 'なし(別途工事が必要になります)',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === 'なし(別途工事が必要になります)') {
return ['price' => 16980];
}
return [];
},
])
// コンセントの有無 → あり
->add('electrical_outlet_07_02', ChoiceType::class, [
'choices' => [
'既存コンセントの延長の有' => '既存コンセントの延長の有',
'既存コンセントの延長の無' => '既存コンセントの延長の無',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '既存コンセントの延長の有') {
return ['price' => 3980];
} elseif ($choice === '既存コンセントの延長の無') {
return ['price' => 0];
}
return [];
},
])
// 建物の契約アンペア
->add('contract_amp', ChoiceType::class, [
'choices' => [
'30A' => '30A',
'40A' => '40A',
'50A' => '50A',
'50A以上' => '50A以上',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// コンセントアース端子
->add('outlet_earth', ChoiceType::class, [
'choices' => [
'あり' => 'あり',
'なし' => 'なし',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 配管穴の有無
->add('room_size_07', ChoiceType::class, [
'choices' => [
'あり' => 'あり',
'なし' => 'なし',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 配管穴の有無 → なし
->add('room_size_07_02', ChoiceType::class, [
'choices' => [
'建物が2009年6月以降に着工した証明書あり' => '建物が2009年6月以降に着工した証明書あり',
'建物が2009年6月以降に着工した証明書なし' => '建物が2009年6月以降に着工した証明書なし',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 配管穴の有無 → なし → 建物が2009年6月以降に着工した証明書あり
->add('room_size_07_03_v1', ChoiceType::class, [
'choices' => [
'木造' => '木造',
'コンクリート' => 'コンクリート',
'鉄骨系(ALC)' => '鉄骨系(ALC)',
'その他' => 'その他',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '木造') {
return ['price' => 7980];
} elseif ($choice === 'コンクリート') {
return ['price' => 39980];
} elseif ($choice === '鉄骨系(ALC)') {
return ['price' => 7980];
}
return [];
},
])
// 配管穴の有無 → なし → 建物が2009年6月以降に着工した証明書なし
->add('room_size_07_03_v2', ChoiceType::class, [
'choices' => [
'木造' => '木造',
'コンクリート' => 'コンクリート',
'鉄骨系(ALC)' => '鉄骨系(ALC)',
'その他' => 'その他',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '木造') {
return ['price' => 34980];
} elseif ($choice === 'コンクリート') {
return ['price' => 74980];
} elseif ($choice === '鉄骨系(ALC)') {
return ['price' => 34980];
}
return [];
},
])
//設置予定場所の配管の状態
->add('piping_status_07', ChoiceType::class, [
'choices' => [
'通常配管' => '通常配管',
'隠蔽配管' => '隠蔽配管',
'不明' => '不明',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 設置予定場所の配管の状態 → 隠蔽配管
->add('piping_status_07_02', ChoiceType::class, [
'choices' => [
'新設' => '新設',
'交換(再使用接続・洗浄費含む)' => '交換(再使用接続・洗浄費含む)',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '新設') {
return ['price' => 9800];
} elseif ($choice === '交換(再使用接続・洗浄費含む)') {
return ['price' => 49800];
}
return [];
},
])
//室内化粧カバー
->add('indoor_cover_07', ChoiceType::class, [
'choices' => [
'必要(2m以内)' => '必要(2m以内)',
'不要' => '不要',
'未定' => '未定',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '必要(2m以内)') {
return ['price' => 9980];
}
return [];
},
])
// 室外化粧カバー
->add('outdoor_cover', ChoiceType::class, [
'choices' => [
'必要' => '必要',
'不要' => '不要',
'その他' => 'その他',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 室外化粧カバー
->add('outdoor_cover_02', ChoiceType::class, [
'choices' => [
'新規同階' => '新規同階',
'新規異階' => '新規異階',
'再使用(交換)同階' => '再使用(交換)同階',
'再使用(交換)異階' => '再使用(交換)異階',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '新規同階') {
return ['price' => 9980];
} elseif ($choice === '新規異階') {
return ['price' => 44960];
} elseif ($choice === '再使用(交換)同階') {
return ['price' => 3380];
} elseif ($choice === '再使用(交換)異階') {
return ['price' => 19880];
}
return [];
},
])
// 室外機の設置場所
->add('construction_outdoor_07', ChoiceType::class, [
'choices' => [
'室内機と同階' => '室内機と同階',
'1階差(室内機2階、室外機1階)' => '1階差(室内機2階、室外機1階)',
'2階差(室内機3階、室外機1階)' => '2階差(室内機3階、室外機1階)',
'その他' => 'その他',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '1階差(室内機2階、室外機1階)') {
return ['price' => 33880];
} elseif ($choice === '2階差(室内機3階、室外機1階)') {
return ['price' => 66880];
}
return [];
},
])
//設置方法
->add('setting_install_method', ChoiceType::class, [
'choices' => [
'新規取付' => '新規取付',
'交換' => '交換',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
// 設置方法 → 新規取付
->add('construction_method_07_v1', ChoiceType::class, [
'choices' => [
'①床置き(基本料金に含まれます)' => '①床置き(基本料金に含まれます)',
'②二段置き' => '②二段置き',
'③壁掛け' => '③壁掛け',
'④屋根置き(屋根に対して垂直)' => '④屋根置き(屋根に対して垂直)',
'⑤屋根置き(屋根に対して水平)' => '⑤屋根置き(屋根に対して水平)',
'⑥公団吊り(天井吊り)' => '⑥公団吊り(天井吊り)',
'⑦サービスバルコニー' => '⑦サービスバルコニー',
'⑧不明(記載)' => '⑧不明(記載)',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '②二段置き') {
return ['price' => 29800];
} elseif ($choice === '③壁掛け') {
return ['price' => 17800];
} elseif ($choice === '④屋根置き(屋根に対して垂直)') {
return ['price' => 21980];
} elseif ($choice === '⑤屋根置き(屋根に対して水平)') {
return ['price' => 21980];
} elseif ($choice === '⑥公団吊り(天井吊り)') {
return ['price' => 28800];
} elseif ($choice === '⑦サービスバルコニー') {
return ['price' => 7980];
}
return [];
},
])
// 設置方法 → 交換
->add('construction_method_07_v2', ChoiceType::class, [
'choices' => [
'①床置き(基本料金に含まれます)' => '①床置き(基本料金に含まれます)',
'②二段置き' => '②二段置き',
'③壁掛け' => '③壁掛け',
'④屋根置き(屋根に対して垂直)' => '④屋根置き(屋根に対して垂直)',
'⑤屋根置き(屋根に対して水平)' => '⑤屋根置き(屋根に対して水平)',
'⑥公団吊り(天井吊り)' => '⑥公団吊り(天井吊り)',
'⑦サービスバルコニー' => '⑦サービスバルコニー',
'⑧不明(記載)' => '⑧不明(記載)',
],
'expanded' => true,
'multiple' => false,
'required' => false,
'choice_attr' => function($choice, $key, $value) {
if ($choice === '②二段置き') {
return ['price' => 7280];
} elseif ($choice === '③壁掛け') {
return ['price' => 21800];
} elseif ($choice === '④屋根置き(屋根に対して垂直)') {
return ['price' => 21980];
} elseif ($choice === '⑤屋根置き(屋根に対して水平)') {
return ['price' => 21980];
} elseif ($choice === '⑥公団吊り(天井吊り)') {
return ['price' => 21800];
} elseif ($choice === '⑦サービスバルコニー') {
return ['price' => 7980];
}
return [];
},
])
->add('image_1', FileType::class, [
'multiple' => false,
'required' => false,
'mapped' => false,
])
->add('image_2', FileType::class, [
'multiple' => false,
'required' => false,
'mapped' => false,
])
->add('image_3', FileType::class, [
'multiple' => false,
'required' => false,
'mapped' => false,
])
->add('image_4', FileType::class, [
'multiple' => false,
'required' => false,
'mapped' => false,
])
->add('image_5', FileType::class, [
'multiple' => false,
'required' => false,
'mapped' => false,
])
->add('image_reason', FileType::class, [
'multiple' => false,
'required' => false,
'mapped' => false,
])
->add('filename_image_1', HiddenType::class)
->add('filename_image_2', HiddenType::class)
->add('filename_image_3', HiddenType::class)
->add('filename_image_4', HiddenType::class)
->add('filename_image_5', HiddenType::class)
->add('location', TextType::class, [
'required' => false,
])
->add('floor', FileType::class, [
'multiple' => false,
'required' => false,
'mapped' => false,
])
->add('filename_floor', HiddenType::class)
;
// 工事するエアコン
$Product = $this->productRepository->find(1289);
$constructionItems = array();
$constructionTatamis = array();
$Carts = $this->cartService->getCarts();
foreach ($Carts as $Cart) {
foreach ($Cart->getCartItems() as $CartItem) {
if ($CartItem->getProductClass()->getProduct()->getId() == $Product->getId()) {
}
else {
foreach ($CartItem->getProductClass()->getProduct()->getProductCategories() as $ProductCategories) {
$categoryName = $ProductCategories->getCategory()->getName();
$categoryId = $ProductCategories->getCategory()->getId();
//おすすめと自社ローンは標準工事費込み為
if ($categoryId == 118 || $categoryId == 34) {
$productId = $CartItem->getProductClass()->getProduct()->getId();
$productLoan = 1;
$constructionTatamis[$productId]['data-loan'] = $productLoan;
}
if (mb_strpos($categoryName, "畳") !== false) {
$productId = $CartItem->getProductClass()->getProduct()->getId();
$productName = $CartItem->getProductClass()->getProduct()->getName();
$quantity = $CartItem->getQuantity();
$constructionItems[$productId] = $productName . " {$categoryName}({$quantity}台)";
$constructionTatamis[$productId]['data-tatami'] = str_replace("畳", "", $categoryName);
$constructionTatamis[$productId]['data-quantity'] = $quantity;
}
}
}
}
}
$builder->add('construction_airs', ChoiceType::class, [
'choices' => $constructionItems,
'expanded' => true,
'multiple' => true,
'required' => false,
'choice_attr' => function($choice, $key, $value) use ($constructionTatamis){
return empty($constructionTatamis[$key]) ? [] : $constructionTatamis[$key];
},
]);
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
/** @var CartItem $CartItem */
$CartItem = $event->getData();
$ProductClass = $CartItem->getProductClass();
// 工事費用の商品は単価をカートから引用
if ($ProductClass && !empty($_POST['construction_total_price'])) {
if ($ProductClass->getProduct()->getId() == 1289) {
$CartItem->setPrice($_POST['construction_total_price']);
}
}
});
/**
* SUBMIT前にファイルをアップロードしてfilenameにセットする
*/
$builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
$data = $event->getData();
// ファイルをアップロード
if (!empty($data['image_1'])) {
$filename = $this->fileUploader->upload($data['image_1'], 'construction');
$data['filename_image_1'] = $filename;
unset($data['image_1']);
}
if (!empty($data['image_2'])) {
$filename = $this->fileUploader->upload($data['image_2'], 'construction');
$data['filename_image_2'] = $filename;
unset($data['image_2']);
}
if (!empty($data['image_3'])) {
$filename = $this->fileUploader->upload($data['image_3'], 'construction');
$data['filename_image_3'] = $filename;
unset($data['image_3']);
}
if (!empty($data['image_4'])) {
$filename = $this->fileUploader->upload($data['image_4'], 'construction');
$data['filename_image_4'] = $filename;
unset($data['image_4']);
}
if (!empty($data['image_5'])) {
$filename = $this->fileUploader->upload($data['image_5'], 'construction');
$data['filename_image_5'] = $filename;
unset($data['image_5']);
}
if (!empty($data['floor'])) {
$filename = $this->fileUploader->upload($data['floor'], 'construction');
$data['filename_floor'] = $filename;
unset($data['floor']);
}
// アップロードしたデータを保存
$event->setData($data);
});
}
/**
* {@inheritdoc}
*/
public function getExtendedType()
{
return AddCartType::class;
}
/**
* {@inheritdoc}
*/
public static function getExtendedTypes(): iterable
{
yield AddCartType::class;
}
}