- <?php
- namespace AdminBundle\Admin\Vehicles;
- use AdminBundle\Admin\BaseAdmin;
- use CoreBundle\Entity\Vehicles\Equipment;
- use CoreBundle\Entity\Vehicles\Specification;
- use CoreBundle\Entity\Vehicles\Variation;
- use CoreBundle\Entity\Vehicles\VehicleItem;
- use Sonata\AdminBundle\Datagrid\DatagridMapper;
- use Sonata\AdminBundle\Datagrid\ListMapper;
- use Sonata\AdminBundle\Form\FormMapper;
- use Sonata\AdminBundle\Form\Type\ModelType;
- use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
- use Symfony\Component\Form\Extension\Core\Type\NumberType;
- use Symfony\Component\Security\Core\Exception\AccessDeniedException;
- use Doctrine\ORM\Query\Expr\Join;
- class VehicleItemAdmin extends BaseAdmin
- {
-     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
-     {
-         $datagridMapper
-             ->add('vehicle.id', null, ['label' => 'id основної машинки'])
-             ->add('vehicle.vin', null, ['label' => 'ВІН'])
-             ->add('vehicle.url', null, ['label' => 'SEO url']);
-     }
-     /**
-      * @param ListMapper $listMapper
-      */
-     protected function configureListFields(ListMapper $listMapper): void
-     {
-         $listMapper
-             ->addIdentifier('id')
-             ->add('vehicle.model', null, ['label' => 'Підв\'язано до моделі',])
-             ->add('vehicle.model.brand', null, ['label' => 'Підв\'язано до бренда',])
-             ->add('vehicle.vin', null, ['label' => 'Він машинки',])
-             ->add('vehicle.id', null, ['label' => 'ID машинки',])
-             ->add('creator', null, ['label' => 'Створено адміном'])
-             ->add('price', null, ['label' => 'Ціна'])
-             ->add('sold', 'boolean', ['label' => 'Продана?'])
-             ->add('_action', 'actions', [
-                 'actions' => [
-                     'edit' => [],
-                 ]
-             ]);
-     }
-     /**
-      * @param FormMapper $formMapper
-      * @return false|void
-      */
-     protected function configureFormFields(FormMapper $formMapper): void
-     {
-         $User = $this->getUser();
-         if (!$Dealer = $User->getDealer()) {
-             throw new AccessDeniedException('User without dealer');
-         }
-         /** @var BaseVehicleAdmin $rootAdmin */
-         $rootAdmin = $this->getRoot();
-         /** @var VehicleItem|null $parent */
-         $parent = $this->getRoot()->getSubject();
-         if (!$parent || !$parent->getId()) {
-             return;
-         }
-         /** @var VehicleItem $parent */
-         $hasRentPrice = false;
-         $hasPreOrderPrice = false;
-         $priceParams = $this->parameterBag->get('price-config');
-         if (isset($priceParams[$Dealer->getUniqueId()])) {
-             $hasPreOrderPrice =
-                 isset($priceParams[$Dealer->getUniqueId()]['has-preorder-price']) &&
-                 $priceParams[$Dealer->getUniqueId()]['has-preorder-price'];
-             $hasRentPrice =
-                 isset($priceParams[$Dealer->getUniqueId()]['has-rent-price']) &&
-                 $priceParams[$Dealer->getUniqueId()]['has-rent-price'];
-         }
-         $queryBuilderEquipment = $this->getModelManager()
-             ->getEntityManager(Equipment::class)
-             ->createQueryBuilder('e')
-             ->select('e')
-             ->from(Equipment::class, 'e')
-             ->join('e.vehicle', 'v', Join::WITH, 'v.id = :id')
-             ->setParameter('id', $parent->getId());
-         $queryBuilderVariation = $this->getModelManager()
-             ->getEntityManager(Variation::class)
-             ->createQueryBuilder('v')
-             ->select('v')
-             ->from(Variation::class, 'v')
-             ->join('v.vehicle', 'veh', Join::WITH, 'veh.id = :id')
-             ->andWhere('v.state = 1')
-             ->setParameter('id', $parent->getId());
-         $queryBuilderSpecification = $this->getModelManager()
-             ->getEntityManager(Specification::class)
-             ->createQueryBuilder('s')
-             ->select('s')
-             ->from(Specification::class, 's')
-             ->join('s.vehicle', 'veh', Join::WITH, 'veh.id = :id')
-             ->setParameter('id', $parent->getId());
-         $specCount = count($queryBuilderSpecification->getQuery()->getResult());
-         $formMapper
-             ->add(
-                 'equipment',
-                 ModelType::class,
-                 [
-                     'label' => 'Комплектація',
-                     'required' => true,
-                     'query' => $queryBuilderEquipment,
-                     'btn_add' => false,
-                     'empty_data' => null,
-                     'property' => 'adminName',
-                 ]
-             )
-             ->add(
-                 'variation',
-                 ModelType::class,
-                 [
-                     'label' => 'Варіація',
-                     'query' => $queryBuilderVariation,
-                     'btn_add' => false,
-                     'required' => true,
-                     'empty_data' => null,
-                 ],
-                 [
-                     'admin_code' => $rootAdmin->getVariationAdminCode(),
-                 ]
-             );
-         if ($specCount) {
-             $formMapper->add(
-                 'specification',
-                 ModelType::class,
-                 [
-                     'label' => 'Специфікація',
-                     'query' => $queryBuilderSpecification,
-                     'btn_add' => false,
-                     'required' => false,
-                     'empty_data' => null,
-                     'attr' => [
-                         'style' => 'width:150px'
-                     ]
-                 ],
-                 [
-                     'admin_code' => 'admin.vehicles.specification',
-                 ]
-             );
-         }
-         $formMapper
-             ->add('state', CheckboxType::class, ['label' => 'Активна', 'required' => false])
-             ->add('specify_price', CheckboxType::class, ['label' => 'Уточнить цену', 'required' => false])
-             ->add('year', NumberType::class, ['label' => 'Год выпуска', 'required' => true])
-             ->add('price', NumberType::class, ['label' => 'Цена', 'required' => true])
-             ->add('alt_price', NumberType::class, ['label' => 'Акционная цена, грн'])
-             ->add('alt_usd_price', NumberType::class, ['label' => 'Акционная цена, $'])
-             ->add('alt_rate', NumberType::class, ['label' => 'Акционный курс']);
-         if ($hasPreOrderPrice) {
-             $formMapper->add('preorder_price', NumberType::class, ['label' => 'Цена предзаказа']);
-         }
-         if ($hasRentPrice) {
-             $formMapper->add('rent_price', NumberType::class, ['label' => 'Цена аренды', 'required' => true]);
-         }
-         return;
-     }
-     protected function getVariationAdminCode(): string
-     {
-         return 'admin.vehicles.passenger_variation';
-     }
-     protected function getVehicleAdminCode(): string
-     {
-         return 'admin.vehicles.passenger_vehicle';
-     }
- }
-