src/AdminBundle/Admin/Vehicles/Passenger/UsedVehicleAdmin.php line 41

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\Vehicles\Passenger;
  3. use CoreBundle\Entity\AutoRiaOptions;
  4. use CoreBundle\Entity\Vehicles\Characteristic;
  5. use CoreBundle\Model\Api\AutoRia\AutoRia;
  6. use DateTime;
  7. use Exception;
  8. use AdminBundle\Admin\Vehicles\BaseUsedVehicleAdmin;
  9. use AdminBundle\Form\Type\ContentType;
  10. use CoreBundle\Entity\Vehicles\AutoRiaTxn;
  11. use CoreBundle\Entity\Vehicles\Equipment;
  12. use CoreBundle\Entity\Vehicles\RecommendGroup;
  13. use CoreBundle\Entity\Vehicles\Variation;
  14. use CoreBundle\Entity\Vehicles\VariationCharacteristic;
  15. use CoreBundle\Entity\Vehicles\Vehicle;
  16. use CoreBundle\Entity\Vehicles\VehicleItem;
  17. use CoreBundle\Model\Vehicles\Characteristic as CharacteristicModel;
  18. use CoreBundle\Model\Vehicles\VehicleType;
  19. use Doctrine\ORM\NonUniqueResultException;
  20. use Doctrine\ORM\OptimisticLockException;
  21. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  22. use Sonata\AdminBundle\Datagrid\ListMapper;
  23. use Sonata\AdminBundle\Form\FormMapper;
  24. use Sonata\AdminBundle\Form\Type\ModelListType;
  25. use Sonata\AdminBundle\Form\Type\ModelType;
  26. use Sonata\AdminBundle\Route\RouteCollection;
  27. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  28. use Sonata\Form\Type\CollectionType;
  29. use Sonata\MediaBundle\Form\Type\MediaType;
  30. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  31. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  32. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  33. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  34. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  35. use Symfony\Component\Form\Extension\Core\Type\TextType;
  36. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  37. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  38. class UsedVehicleAdmin extends BaseUsedVehicleAdmin
  39. {
  40.     protected $baseRouteName 'used-vehicle-passenger';
  41.     protected $baseRoutePattern 'used-vehicle-passenger-action';
  42.     protected $datagridValues = [
  43.         '_page' => 1,
  44.         '_sort_order' => 'DESC',
  45.         '_sort_by' => 'id',
  46.     ];
  47.     protected SessionInterface $session;
  48.     protected \CoreBundle\Factory\Vehicle $vehicleFactory;
  49.     public function setExtraServices(SessionInterface $session\CoreBundle\Factory\Vehicle $vehicleFactory): void
  50.     {
  51.         $this->session $session;
  52.         $this->vehicleFactory $vehicleFactory;
  53.     }
  54.     protected function getVehicleType(): int
  55.     {
  56.         return VehicleType::PASSENGER_TYPE;
  57.     }
  58.     protected function getVariationAdminCode()
  59.     {
  60.         return 'admin.vehicles.passenger_variation';
  61.     }
  62.     /**
  63.      * @param array $buttonList
  64.      * @param string $action
  65.      * @param null $object
  66.      * @return array
  67.      */
  68.     public function configureActionButtons(array $buttonListstring $action$object null): array
  69.     {
  70.         $list parent::configureActionButtons($buttonList$action$object);
  71.         $list['import']['template'] = '@AdminBundle/admin/export_used_vehicles_button.html.twig';
  72.         return $list;
  73.     }
  74.     /**
  75.      * @param RouteCollectionInterface $collection
  76.      */
  77.     protected function configureRoutes(RouteCollectionInterface $collection): void
  78.     {
  79.         parent::configureRoutes($collection);
  80.         $collection->add('setFilled'$this->getRouterIdParameter() . '/set-filled');
  81.         $collection->add('exportUsedVehicles''export-used');
  82.         $collection->add('exportUsedSpecification'$this->getRouterIdParameter() . '/export-used-specification');
  83.     }
  84.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  85.     {
  86.         parent::configureDatagridFilters($datagridMapper);
  87.         $datagridMapper->add(
  88.             'is_not_filled',
  89.             null,
  90.             ['label' => 'Заповненість авто'],
  91.             ChoiceType::class,
  92.             [
  93.                 'choices' => [
  94.                     'Недозаповнені' => 1,
  95.                     'Заповнені' => 0
  96.                 ]
  97.             ]
  98.         );
  99.     }
  100.     /**
  101.      * @param Vehicle $object
  102.      * @throws NonUniqueResultException
  103.      * @throws OptimisticLockException
  104.      */
  105.     public function preUpdate($object): void
  106.     {
  107.         parent::preUpdate($object);
  108.         if ($object->getPreview() && $object->getGallery()) {
  109.             $object->setIsNotFilled(0);
  110.         }
  111.         $VehicleItem $object->getVehicleItems() ? $object->getVehicleItems()[0] : null;
  112.         if (($object->getState() == || ($VehicleItem && $VehicleItem->getSold()))  && $object->getRiaId() && $object->getDealer()->getRiaUserId()) {
  113.             $result $this->autoRia->deleteVehicle($object->getRiaId());
  114.             $AutoRiaTxn = new AutoRiaTxn();
  115.             $AutoRiaTxn->setDateCreate(new DateTime());
  116.             $AutoRiaTxn->setType('delete');
  117.             $AutoRiaTxn->setRequest($object->getRiaId());
  118.             if ($result) {
  119.                 $AutoRiaTxn->setResponse(json_encode($result));
  120.             }
  121.             $AutoRiaTxn->setVehicle($object);
  122.             $AutoRiaTxn->setUser($this->getUser());
  123.             $this->getModelManager()->getEntityManager(AutoRiaTxn::class)->persist($AutoRiaTxn);
  124.             $this->getModelManager()->getEntityManager(AutoRiaTxn::class)->flush();
  125.             $object->setRiaId(null);
  126.             //TODO refactor this to correct entity data
  127.             $object->setRiaLevel(null);
  128.             $object->setRiaPeriod(null);
  129.             $object->setRiaPublicationDate(null);
  130.             $object->setRiaTopPublicationDate(null);
  131.             $object->setRiaIsNotified(null);
  132.         }
  133.         if ($object->getState() && $object->getDealer()->getRiaUserId()) {
  134.             $isUpdateAutoRia false;
  135.             $originalVehicleData =
  136.                 $this->getModelManager()
  137.                     ->getEntityManager(Vehicle::class)
  138.                     ->getUnitOfWork()
  139.                     ->getOriginalEntityData($object);
  140.             if (
  141.                 ($originalVehicleData['model'] && $object->getModel()->getId() != $originalVehicleData['model']->getId()) ||
  142.                 ($object->getVin() != $originalVehicleData['vin']) ||
  143.                 ($object->getState() != $originalVehicleData['state'])
  144.             ) {
  145.                 //TODO remove magic numbers
  146.                 if ($object->getDealer()->getId() == && !$object->getIsNotFilled() && !$VehicleItem->getSold()) {
  147.                     $this->publish($object);
  148.                 }
  149.             }
  150.             $originalVehicleItemData =
  151.                 $this->getModelManager()
  152.                     ->getEntityManager(VehicleItem::class)
  153.                     ->getUnitOfWork()
  154.                     ->getOriginalEntityData($object->getVehicleItems()->first());
  155.             if (
  156.                 ($object->getVehicleItems()->first()->getPrice() != $originalVehicleItemData['price']) ||
  157.                 ($object->getVehicleItems()->first()->getAltPrice() != $originalVehicleItemData['alt_price']) ||
  158.                 ($object->getVehicleItems()->first()->getYear() != $originalVehicleItemData['year']) ||
  159.                 ($object->getVehicleItems()->first()->getMileage() != $originalVehicleItemData['mileage']) ||
  160.                 ($object->getRiaOptions() != $originalVehicleData['ria_options'])
  161.             ) {
  162.                 //TODO remove magic numbers
  163.                 if ($object->getDealer()->getId() == && !$object->getIsNotFilled() && !$VehicleItem->getSold()) {
  164.                     $this->publish($object);
  165.                 }
  166.             }
  167.             /** @var VariationCharacteristic $characteristic */
  168.             foreach ($object->getVariations()->first()->getCharacteristics() as $characteristic) {
  169.                 if ($isUpdateAutoRia) {
  170.                     continue;
  171.                 }
  172.                 if (
  173.                     in_array(
  174.                         $characteristic->getCharacteristic()->getModelUnique(),
  175.                         [
  176.                             CharacteristicModel::BODY_TYPE_UNIQUE_ID,
  177.                             CharacteristicModel::FUEL_TYPE_UNIQUE_ID,
  178.                             CharacteristicModel::DRI_TYPE_UNIQUE_ID,
  179.                             CharacteristicModel::TRANSMISSION_TYPE_UNIQUE_ID,
  180.                             CharacteristicModel::BODY_COLOR,
  181.                             CharacteristicModel::SEATS_COUNT_UNIQUER_ID,
  182.                             CharacteristicModel::DOORS_COUNT_UNIQUER_ID
  183.                         ]
  184.                     )
  185.                 ) {
  186.                     $originalCharacteristic =
  187.                         $this->getModelManager()
  188.                             ->getEntityManager(Characteristic::class)
  189.                             ->getUnitOfWork()
  190.                             ->getOriginalEntityData($characteristic);
  191.                     if (
  192.                         (
  193.                             $characteristic->getCharacteristicValue() &&
  194.                             $characteristic->getCharacteristicValue()->getId() !=
  195.                             $originalCharacteristic['characteristic_value_id']
  196.                         ) ||
  197.                         ($characteristic->getValue('ru') != $originalCharacteristic['value_ru'])
  198.                     ) {
  199.                         $isUpdateAutoRia true;
  200.                     }
  201.                 }
  202.             }
  203.             //TODO remove magic numbers
  204.             if ($isUpdateAutoRia && $object->getDealer()->getId() == && !$object->getIsNotFilled() && !$VehicleItem->getSold())
  205.             {
  206.                 $this->publish($object);
  207.             }
  208.         }
  209.     }
  210.     /**
  211.      * @param FormMapper $formMapper
  212.      */
  213.     protected function configureFormFields(FormMapper $formMapper): void
  214.     {
  215.         $User $this->getUser();
  216.         if (!$Dealer $User->getDealer()) {
  217.             throw new AccessDeniedException('User without dealer');
  218.         }
  219.         $vehicle $this->getSubject();
  220.         if (!$vehicle) {
  221.             $vehicle = new Vehicle();
  222.         }
  223.         /** @var Vehicle $vehicle */
  224.         //TODO remove magic numbers
  225.         if (!$vehicle->getId()) {
  226.             $vehicle->setState(1);
  227.             $vehicle->setIsUsed(1);
  228.             $equipment = new Equipment();
  229.             $equipment->setState(1);
  230.             $equipment->setVehicle($vehicle);
  231.             $vehicle->addEquipment($equipment);
  232.             $variation = new Variation();
  233.             $variation->setState(1);
  234.             $variation->setVehicle($vehicle);
  235.             $vehicle->addVariation($variation);
  236.             $VehicleItem = new VehicleItem();
  237.             $VehicleItem->setVariation($variation);
  238.             $VehicleItem->setState(1);
  239.             $VehicleItem->setEquipment($equipment);
  240.             $variation->addVehicleItem($VehicleItem);
  241.             $vehicle->addVehicleItem($VehicleItem);
  242.         }
  243. //TODO remove magic numbers
  244.         if (!$vehicle->getVariations()->count()) {
  245.             $variation = new Variation();
  246.             $variation->setState(1);
  247.             $variation->setVehicle($vehicle);
  248.             $vehicle->addVariation($variation);
  249.             $VehicleItem = new VehicleItem();
  250.             $VehicleItem->setVariation($variation);
  251.             $VehicleItem->setState(1);
  252.             $VehicleItem->setEquipment($equipment);
  253.             $variation->addVehicleItem($VehicleItem);
  254.             $vehicle->addVehicleItem($VehicleItem);
  255.         }
  256.         $formMapper
  257.             ->tab('Основная информация')
  258.             ->with('Контент', ['class' => 'col-lg-6'])
  259.             ->add('content'ContentType::class, ['label' => false], [
  260.                 'edit' => 'inline',
  261.                 'sortable' => 'position',
  262.             ])
  263.             ->add('vehicle_items.first.programm'TextType::class, ['label' => 'Программа''required' => false])
  264.             ->end()
  265.             ->with('Доп. информация', ['class' => 'col-lg-6']);
  266.         if($vehicle->getVehicleItems()->first()->getDateOfSale()){
  267.             $formMapper
  268.                 ->add(
  269.                     'vehicle_items.first.date_of_sale',
  270.                     DateTimeType::class,
  271.                     ['label' => 'Дата продажи''required' => false'attr' => ['disabled' => 'disabled'],
  272.                         'widget' => 'single_text',
  273.                         'format' => 'yyyy-MM-dd'
  274.                     ]
  275.                 );
  276.         }
  277.         if ($this->getUser()->hasRole('ROLE_AUTOMARKET_MANAGER') || $this->getUser()->hasRole('ROLE_SUPER_ADMIN')) {
  278.             $formMapper
  279.                 ->add('dealer'null, ['label' => 'Дилер''required' => false]);
  280.         }
  281.         $formMapper
  282.             ->add('model'ModelType::class, ['label' => 'Модель''required' => false'btn_add' => false])
  283.             ->add('recommend_group'EntityType::class, [
  284.                 'class' => RecommendGroup::class,
  285.                 'label' => 'Входит в подборки',
  286.                 'multiple' => true,
  287.                 'required' => false,
  288.             ])
  289.             ->add('position'NumberType::class, ['label' => 'Популярность'])
  290.             ->add('vin'null, ['label' => 'VIN''required' => true])
  291.             ->add('vehicle_items.first.price'NumberType::class, ['label' => 'Цена'])
  292.             ->add(
  293.                 'vehicle_items.first.alt_price',
  294.                 NumberType::class,
  295.                 ['label' => 'Акционная цена''required' => false])
  296.             ->add(
  297.                 'vehicle_items.first.credit_min_amount',
  298.                 NumberType::class,
  299.                 ['label' => 'Ежемесячный платеж''required' => false]
  300.             )
  301.             ->add('vehicle_items.first.has_nds'CheckboxType::class, ['label' => 'с НДС''required' => false])
  302.             ->add('vehicle_items.first.year'NumberType::class, ['label' => 'Год выпуска'])
  303.             ->add('vehicle_items.first.mileage'NumberType::class, ['label' => 'Пробег'])
  304.             ->add('state'CheckboxType::class, ['label' => 'Опубликовать''required' => false])
  305.             ->add(
  306.                 'credit_available',
  307.                 CheckboxType::class,
  308.                 ['label' => 'Доступна в кредит''required' => false'value' => 1]
  309.             )
  310.             ->add('test_drive'CheckboxType::class, ['label' => 'Доступна на тест драйв''required' => false])
  311.             ->add('recommend'CheckboxType::class, ['label' => 'Мы рекомендуем''required' => false])
  312.             ->add('vehicle_items.first.sold'CheckboxType::class, ['label' => 'Продано''required' => false])
  313.             ->add('vehicle_items.first.specify_price'CheckboxType::class, ['label' => 'Уточнить цену''required' => false])
  314.             ->add('vehicle_items.first.deposit'CheckboxType::class, ['label' => 'Внесен задаток''required' => false])
  315.             ->add('vehicle_items.first.is_reserved'CheckboxType::class, ['label' => 'Зарезервировано''required' => false])
  316.             ->add('vehicle_items.first.single_owner'CheckboxType::class, ['label' => 'Один собственник''required' => false])
  317.             ->add(
  318.                 'vehicle_items.first.service_book',
  319.                 CheckboxType::class,
  320.                 ['label' => 'Наличие сервисной книги''required' => false]
  321.             )
  322.             ->add(
  323.                 'vehicle_items.first.buy_in_ukraine',
  324.                 CheckboxType::class,
  325.                 ['label' => 'Куплена в украине''required' => false]
  326.             )
  327.             ->add('vehicle_items.first.no_accident'CheckboxType::class, ['label' => 'Без ДТП''required' => false])
  328.             ->add(
  329.                 'vehicle_items.first.economic_engine',
  330.                 CheckboxType::class,
  331.                 ['label' => 'Економічний двигун''required' => false]
  332.             )
  333.             ->add(
  334.                 'vehicle_items.first.excellent_technical_condition',
  335.                 CheckboxType::class,
  336.                 ['label' => 'Відмінний технічний стан''required' => false]
  337.             )
  338.             ->add(
  339.                 'vehicle_items.first.official_service',
  340.                 CheckboxType::class,
  341.                 ['label' => 'Офіційне сервісне обслуговування''required' => false]
  342.             )
  343.             ->add(
  344.                 'vehicle_items.first.additional_rubber',
  345.                 CheckboxType::class,
  346.                 ['label' => 'Додатковий комплект гуми''required' => false]
  347.             )
  348.             ->add(
  349.                 'vehicle_items.first.under_warranty',
  350.                 CheckboxType::class,
  351.                 ['label' => 'Автомобіль на гарантії''required' => false]
  352.             )
  353.             ->add(
  354.                 'vehicle_items.first.top_equipment',
  355.                 CheckboxType::class,
  356.                 ['label' => 'Топова комплектація''required' => false]
  357.             )
  358.             ->add(
  359.                 'vehicle_items.first.additional_equipment',
  360.                 CheckboxType::class,
  361.                 ['label' => 'Встановлено додаткове обладнання''required' => false]
  362.             )
  363.             ->add(
  364.                 'vehicle_items.first.official_car',
  365.                 CheckboxType::class,
  366.                 ['label' => 'Офіційний автомобіль''required' => false]
  367.             )
  368. //            ->add('vehicle_items.first.price_with_PDV', CheckboxType::class, ['label' => 'Ціна з ПДВ', 'required' => false])
  369.             ->add('vehicle_items.first.best_price'CheckboxType::class, ['label' => 'Найкраща ціна''required' => false])
  370.             ->add('vehicle_items.first.low_mileage'CheckboxType::class, ['label' => 'Низький пробіг''required' => false])
  371.             ->add(
  372.                 'vehicle_items.first.increased_security',
  373.                 CheckboxType::class,
  374.                 ['label' => 'Підвищена безпека''required' => false]
  375.             )
  376.             ->add('vehicle_items.first.native_color'CheckboxType::class, ['label' => 'Рідна фарба''required' => false])
  377.             ->end()
  378.             ->end()
  379.             ->tab('Видео')
  380.             ->with('', ['class' => 'col-lg12'])
  381.             ->add('video'ModelListType::class, [
  382.                 'label' => 'Галерея видео',
  383.                 'btn_list' => false,
  384.                 'required' => false,
  385.             ], [
  386.                     'edit' => 'inline',
  387.                     'inline' => 'table',
  388.                     'sortable' => 'position',
  389.                     'link_parameters' => [
  390.                         'context' => 'dc_car_video',
  391.                         'provider' => 'sonata.media.provider.youtube'
  392.                     ],
  393.                     'admin_code' => 'sonata.media.admin.gallery',
  394.                 ]
  395.             )
  396.             ->end()
  397.             ->end()
  398.             ->tab('Тех. характеристики')
  399.             ->with('', ['class' => 'col-lg-12'])
  400.             ->add(
  401.                 'variations',
  402.                 CollectionType::class,
  403.                 [
  404.                     'label' => false,
  405.                     'required' => false,
  406.                     'btn_add' => false,
  407.                     'btn_catalogue' => false,
  408.                     'type_options' =>
  409.                         [
  410.                             'delete' => false,
  411.                             'label' => false,
  412.                             'btn_add' => false,
  413.                         ],
  414.                 ],
  415.                 [
  416.                     'by_reference' => false,
  417.                     'admin_code' => 'admin.vehicles.passenger_variation',
  418.                 ]
  419.             )
  420.             ->end()
  421.             ->end()
  422.             ->tab('Опции')
  423.             ->with('', ['class' => 'col-lg-12'])
  424.             ->add('vehicle_auto_ria_options'CollectionType::class, [
  425.                 'by_reference' => false,
  426.                 'modifiable' => true,
  427.                 'type_options' => [
  428.                     'delete' => true,
  429.                     'btn_add' => false,
  430.                     'label' => false,
  431.                 ],
  432.             ], [
  433.                 'edit' => 'inline',
  434.                 'inline' => 'table'
  435.             ])
  436.             ->end()
  437.             ->end()
  438.             ->tab('Особенности')
  439.             ->with('', ['class' => 'col-lg-6'])
  440.             ->add('vehicle_items.first.modification'TextType::class, ['label' => 'Модификация''required' => false,])
  441.             ->add('vehicle_items.first.exterior'TextType::class, ['label' => 'Экстерьер''required' => false,])
  442.             ->add(
  443.                 'vehicle_items.first.interior_ua',
  444.                 TextType::class,
  445.                 ['label' => 'Интерьер (UA)''required' => false,]
  446.             )
  447.             ->add(
  448.                 'vehicle_items.first.interior_ru',
  449.                 TextType::class,
  450.                 ['label' => 'Интерьер (RU)''required' => false,]
  451.             )
  452.             ->add(
  453.                 'vehicle_items.first.factory_warranty_ua',
  454.                 TextType::class,
  455.                 ['label' => 'Заводская гарантия (UA)''required' => false,]
  456.             )
  457.             ->add(
  458.                 'vehicle_items.first.factory_warranty_ru',
  459.                 TextType::class,
  460.                 ['label' => 'Заводская гарантия (RU)''required' => false,]
  461.             )
  462.             ->add(
  463.                 'vehicle_items.first.approved_warranty_ua',
  464.                 TextType::class,
  465.                 ['label' => 'Гарантия по программе Approved (UA)''required' => false,]
  466.             )
  467.             ->add(
  468.                 'vehicle_items.first.approved_warranty_ru',
  469.                 TextType::class,
  470.                 ['label' => 'Гарантия по программе Approved (RU)''required' => false,]
  471.             )
  472.             ->add('vehicle_items.first.file'MediaType::class, [
  473.                 'label' => 'Спецификация',
  474.                 'provider' => 'sonata.media.provider.file',
  475.                 'context' => 'dc_file'
  476.             ])
  477.             ->add('files'CollectionType::class, [
  478.                 'label' => 'Акт проверки автомобиля',
  479.                 'by_reference' => false,
  480.                 'required' => false,
  481.             ], [
  482.                 'edit' => 'inline',
  483.                 'inline' => 'table',
  484.             ])
  485.             ->end()
  486.             ->end();
  487.     }
  488.     protected function publish(Vehicle $vehicle): bool
  489.     {
  490.         $vehicleModel $this->vehicleFactory
  491.             ->createByVehicleItem($vehicle->getVehicleItems()->first());
  492.         $isPublished = (bool)$vehicle->getRiaId();
  493.         $riaId $vehicle->getRiaId();
  494.         $Model $vehicle->getModel();
  495.         $Brand $Model->getBrand();
  496.         $riaBrandId $Brand->getRiaId();
  497.         $riaModelId $Model->getRiaId();
  498.         $riaBrands $this->autoRia->getBrands();
  499.         if (!$riaBrandId) {
  500.             foreach ($riaBrands as $rbrand) {
  501.                 if (trim(strtolower($Brand->getName())) == trim(strtolower($rbrand['title']))) {
  502.                     $riaBrandId $rbrand['id'];
  503.                     break;
  504.                 }
  505.             }
  506.         }
  507.         $riaModels null;
  508.         if ($riaBrandId) {
  509.             $riaModels $this->autoRia->getModels($riaBrandId);
  510.         }
  511.         if (!$riaModelId && $riaModels) {
  512.             foreach ($riaModels as $rmodel) {
  513.                 if (trim(strtolower($Model->getTitle())) == trim(strtolower($rmodel['title']))) {
  514.                     $riaModelId $rmodel['id'];
  515.                     break;
  516.                 }
  517.             }
  518.         }
  519.         $riaBodyId $this->autoRia->getBodyMap()[$vehicleModel->getBodyType()->getId()];
  520.         $riaDriveId $this->autoRia->getDriveMap()[$vehicleModel->getDriveUnitType()->getId()];
  521.         $riaTransId $this->autoRia->getTransmissionMap()[$vehicleModel->getTransmissionType()->getId()];
  522.         $riaFuelId $this->autoRia->getFuelMap()[$vehicleModel->getFuelType()->getId()];
  523.         $capacity str_replace(' '''$vehicleModel->getEngineVolume('ru'));
  524.         //TODO remove magic numbers
  525.         $capacityUpd $capacity 50 round(($capacity 1000), 1) : $capacity;
  526.         $capacityUpd number_format($capacityUpd1'.'' ');
  527.         $doorsCount $vehicleModel->getDoorsCount('ru');
  528.         $seatsCount $vehicleModel->getSeatsCount()->getValue('ru');
  529.         $requestData = [
  530.             'damage' => false,
  531.             'custom' => false,
  532.             'year' => (int)$vehicleModel->getYear(),
  533.             'price' => [
  534.                 'value' => (float)$vehicleModel->price(),
  535.                 'currency' => [
  536.                     //TODO remove magic numbers
  537.                     'id' => 3,
  538.                 ]
  539.             ],
  540.             'categories' => [
  541.                 'main' => [
  542.                     //TODO remove magic numbers
  543.                     'id' => 1,
  544.                 ]
  545.             ],
  546.             'brand' => [
  547.                 'id' => (int)$riaBrandId
  548.             ],
  549.             'model' => [
  550.                 'id' => (int)$riaModelId
  551.             ],
  552.             'body' => [
  553.                 'id' => (int)$riaBodyId
  554.             ],
  555.             //TODO remove magic numbers
  556.             'mileage' => $vehicleModel->getMileage() < 1000 floor($vehicleModel->getMileage() / 1000),
  557.             'region' => [
  558.                 'id' => 10
  559.             ],
  560.             'city' => [
  561.                 'id' => 10
  562.             ],
  563.             'gearbox' => [
  564.                 'id' => (int)$riaTransId
  565.             ],
  566.             'drive' => [
  567.                 'id' => (int)$riaDriveId
  568.             ],
  569.             'fuel' => [
  570.                 'id' => (int)$riaFuelId
  571.             ],
  572.             'engine' => [
  573.                 'volume' => [
  574.                     'liters' => (float)$capacityUpd
  575.                 ]
  576.             ],
  577.             'post' => [
  578.                 'comments' => [
  579.                     'allowed' => true,
  580.                     'check' => true,
  581.                 ]
  582.             ],
  583.             "doors" => (int)$doorsCount,
  584.             "seats" => (int)$seatsCount,
  585.             'spareParts' => false,
  586.         ];
  587.         if ($vehicleModel->getContent('ru')) {
  588.             $requestData['description']['ru'] = $vehicleModel->getContent('ru');
  589.         }
  590.         if ($vehicleModel->getContent('ua')) {
  591.             $requestData['description']['uk'] = $vehicleModel->getContent('ua');
  592.         }
  593.         if ($vehicleModel->getVIN()) {
  594.             $requestData['VIN'] = $vehicleModel->getVIN();
  595.             $requestData['VIN_open'] = true;
  596.         }
  597.         $color $vehicleModel->getBodyColorChar();
  598.         $riaColorId null;
  599.         if ($color) {
  600.             $colorMap $this->autoRia->getBodyColorMap();
  601.             $riaColorId $colorMap[$color->getId()] ?? null;
  602.             if ($riaColorId) {
  603.                 $requestData['color'] = [
  604.                     'id' => (integer)$riaColorId
  605.                 ];
  606.             }
  607.         }
  608. //TODO remove magic numbers
  609.         if (
  610.             $isPublished && (!$vehicleModel->getRiaPublicationDate() ||
  611.                 ((time() - $vehicleModel->getRiaPublicationDate()->getTimestamp()) > 60 60))
  612.         ) {
  613.             unset($requestData['categories']);
  614.             unset($requestData['brand']);
  615.             unset($requestData['model']);
  616.             unset($requestData['year']);
  617.             unset($requestData['custom']);
  618.             unset($requestData['gearbox']);
  619.             unset($requestData['drive']);
  620.             unset($requestData['fuel']);
  621.             unset($requestData['doors']);
  622.             unset($requestData['VIN']);
  623.         }
  624.         try {
  625.             $result $this->autoRia->iniByDealer($this->getUser()->getDealer())->addVehicle($requestData$riaId);
  626.         } catch (Exception $exception) {
  627.             $this->session
  628.                 ->getFlashBag()
  629.                 ->add('warning''AutoRia: ошибка публикации:' $this->autoRia->getError());
  630.             return false;
  631.         }
  632.         $AutoRiaTxn = new AutoRiaTxn();
  633.         $AutoRiaTxn->setDateCreate(new DateTime());
  634.         $type $riaId 'update' 'create';
  635.         $AutoRiaTxn->setType($type);
  636.         $AutoRiaTxn->setRequest(json_encode($requestData));
  637.         if ($result) {
  638.             $AutoRiaTxn->setResponse(json_encode($result));
  639.             if (!$riaId) {
  640.                 $riaId $result->_id;
  641.             }
  642.         } else {
  643.             $AutoRiaTxn->setResponse($this->autoRia->getError());
  644.             $this->session
  645.                 ->getFlashBag()
  646.                 ->add(
  647.                     'warning',
  648.                     'AutoRia=помилка: ' $this->autoRia->getError() . ' (або ви у дев режимі то просто ігноруйте)'
  649.                 );
  650.         }
  651.         $AutoRiaTxn->setVehicle($vehicle);
  652.         $AutoRiaTxn->setUser($this->getUser());
  653.         $this->em->persist($AutoRiaTxn);
  654.         $this->em->flush();
  655.         if (!$result) {
  656.             return false;
  657.         }
  658.         $toSend = [];
  659.         if ($vehicle->getAutoRiaOptions()) {
  660.             foreach ($vehicle->getAutoRiaOptions()->toArray() as $option){
  661.                 $toSend[] = ['id' => $option->getAutoRiaId()];
  662.             }
  663.             $this->autoRia->addOption($toSend$riaId);
  664.         }
  665.         if (!$toSend) {
  666.             $riaOptions $vehicle->getRiaOptions();
  667.             if ($riaOptions) {
  668.                 foreach (json_decode($riaOptions) as $id => $title) {
  669.                     $toSend[] = ['id' => (int)$id];
  670.                 }
  671.             }
  672.         }
  673.         if ($toSend){
  674.             $this->autoRia->addOption($toSend$riaId);
  675.         }
  676.         $vehicle->setRiaId($riaId);
  677.         if (!$isPublished) {
  678.             $this->autoRia->toPublish($riaId$vehicle->getRiaLevel(), $vehicle->getRiaPeriod(), $isPublished);
  679.             $vehicle->setRiaPublicationDate(new DateTime());
  680.             $vehicle->setRiaIsNotified(0);
  681.         }
  682.         return true;
  683.     }
  684.     /**
  685.      * @param ListMapper $listMapper
  686.      */
  687.     protected function configureListFields(ListMapper $listMapper): void
  688.     {
  689.         $user $this->getUser();
  690.         $dealer $user->getDealer();
  691.         $actions = [
  692.             'edit' => ['label' => 'Марка'],
  693.             'media' => [
  694.                 'template' => '@AdminBundle/CRUD/list__action_media.html.twig'
  695.             ],
  696.             'delete' => [],
  697.             'export' => [
  698.                 'template' => '@AdminBundle/CRUD/list__action_export_specification.html.twig'
  699.             ]
  700.         ];
  701.         if ($dealer->getRiaUserId()) {
  702.             $actions array_merge($actions, [
  703.                 'autoria' => [
  704.                     'template' => '@AdminBundle/CRUD/list__action_autoria.html.twig'
  705.                 ]
  706.             ]);
  707.         }
  708.         $listMapper->addIdentifier('id')
  709.             ->add('model.brand'null, ['label' => 'Марка'])
  710.             ->add('model'null, ['label' => 'Модель'])
  711.             ->add('vin'null, ['label' => 'ВІН'])
  712.             ->add('adminViews'null, ['label' => 'Перегляди (Всього\День)'])
  713.             ->add('days'null, ['label' => 'Днів на сайті'])
  714.             ->add('state''choice', ['label' => 'Показувати на сайті''editable' => true'choices' => [
  715.                 => 'Так',
  716.                 => 'Ні',
  717.             ]])
  718.             ->add('is_not_filled''choice', ['label' => 'Скоро у продажі''editable' => true'choices' => [
  719.                 => 'Так',
  720.                 => 'Ніт',
  721.             ]]);
  722.         //TODO remove magic numbers
  723.         if ($dealer->getId() == 6) {
  724.             $listMapper
  725.                 ->add(
  726.                     'ria_publication_date',
  727.                     null,
  728.                     [
  729.                         'label' => 'Ria розміщення до',
  730.                         'template' => '@AdminBundle/CRUD/list__auto_ria_date.html.twig',
  731.                         'sortable' => false
  732.                     ]
  733.                 );
  734.         }
  735.         $listMapper->add('_action''actions', [
  736.             'label' => 'Дії',
  737.             'actions' => $actions,
  738.         ]);
  739.     }
  740. }