src/Admin/PromocionAdmin.php line 578

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use App\Entity\AccionEstado;
  5. use App\Entity\Canal;
  6. use App\Entity\Competencia;
  7. use App\Entity\EstadoAspecto;
  8. use App\Entity\EstadoCheck;
  9. use App\Entity\Marca;
  10. use App\Entity\Material;
  11. use App\Entity\Promocion;
  12. use App\Entity\TipoCargoMejora;
  13. use App\Entity\TipoCargoServicio;
  14. use App\Entity\TipoCargoVenta;
  15. use App\Entity\UbicacionAbstract;
  16. use App\Enum\CalibreCaracteristicasEnum;
  17. use App\Enum\CalibreEnum;
  18. use App\Enum\CalibreFuncionesEnum;
  19. use App\Enum\EstadoOperacionEnum;
  20. use App\Enum\EstadoRelojEnum;
  21. use App\Enum\ExportacionEnum;
  22. use App\Enum\GeneroRelojEnum;
  23. use App\Enum\PiezaRepuestoEnum;
  24. use App\Enum\RegimenEnum;
  25. use App\Enum\ServicioMantenimientoEnum;
  26. use App\Enum\SiNoEnum;
  27. use App\Enum\TipoAccionEnum;
  28. use App\Enum\TipoCierreEnum;
  29. use App\Enum\TipoCristalEnum;
  30. use App\Enum\TipoEsferaIndiceEnum;
  31. use App\Enum\TipoGarantiaEnum;
  32. use App\Enum\TipoOperacionEnum;
  33. use App\Form\Type\HTMLType;
  34. use App\Form\Type\ScriptType;
  35. use App\Transformer\CalibreEnumToStringTransformer;
  36. use App\Transformer\EstadoAbstractTransformer;
  37. use App\Transformer\GeneroRelojEnumToStringTransformer;
  38. use App\Transformer\MarcaAbstractTransformer;
  39. use App\Transformer\PiezaRepuestoEnumToStringTransformer;
  40. use App\Transformer\ServicioMantenimientoEnumToStringTransformer;
  41. use App\Transformer\TipoCierreEnumToStringTransformer;
  42. use App\Transformer\TipoCristalEnumToStringTransformer;
  43. use App\Transformer\TipoEsferaIndiceEnumToStringTransformer;
  44. use DateTime;
  45. use Doctrine\ORM\EntityManagerInterface;
  46. use Sonata\AdminBundle\Admin\AbstractAdmin;
  47. use Sonata\AdminBundle\Datagrid\DatagridInterface;
  48. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  49. use Sonata\AdminBundle\Datagrid\ListMapper;
  50. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  51. use Sonata\AdminBundle\Form\FormMapper;
  52. use Sonata\AdminBundle\Form\Type\Operator\EqualOperatorType;
  53. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  54. use Sonata\AdminBundle\Show\ShowMapper;
  55. use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery;
  56. use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
  57. use Sonata\Form\Type\DatePickerType;
  58. use Sonata\Form\Type\DateRangePickerType;
  59. use Sonata\Form\Type\DateTimePickerType;
  60. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  61. use Symfony\Component\Form\CallbackTransformer;
  62. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  63. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  64. use Symfony\Component\Form\Extension\Core\Type\ColorType;
  65. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  66. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  67. use Symfony\Component\Form\Extension\Core\Type\RangeType;
  68. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  69. use Symfony\Component\Security\Core\Security;
  70. use Vich\UploaderBundle\Form\Type\VichFileType;
  71. use Vich\UploaderBundle\Form\Type\VichImageType;
  72. final class PromocionAdmin extends AbstractAdmin
  73. {
  74.     public function __construct(string $codestring $classstring $baseControllerName,
  75.         private Security $security,
  76.         private EntityManagerInterface $em)
  77.     {
  78.         parent::__construct($code$class$baseControllerName);
  79.         $this->setTranslationDomain('promocionAdmin');
  80.     }
  81.     protected function configureRoutes(RouteCollectionInterface $collection): void
  82.     {
  83.         $collection->remove('create');
  84.         $collection->remove('delete');
  85.         $collection->add('show-operacion');
  86.         $collection->add('show-inventario');
  87.         $collection->add('show-reloj-base');
  88.         // Acciones personalizadas que operan sobre una acción concreta
  89.         $collection->add('edit-accion'$this->getRouterIdParameter() . '/accion/{accionId}/edit');
  90.         $collection->add('delete-accion'$this->getRouterIdParameter() . '/accion/{accionId}/delete');
  91.         parent::configureRoutes($collection);
  92.     }
  93.     protected function configureQuery(ProxyQueryInterface $query): ProxyQueryInterface
  94.     {
  95.         $filterFecha $this->getRequest()->get('filter')['fechaActiva'] ?? null;
  96.         $query $filterFecha $this->em->getRepository(Promocion::class)->qbPromocionAll() : $this->em->getRepository(Promocion::class)->qbPromocion();
  97.         return parent::configureQuery(new ProxyQuery($query));
  98.     }
  99.     /*protected function configureDefaultFilterValues(array &$filterValues): void
  100.     {
  101.         $filter = $this->getRequest()->get('filter');
  102.         if (!$filter || !@$filter['relojTipo']['type'] || $filter['relojTipo']['type'] === '')
  103.         {
  104.             $filterValues = [
  105.                 'relojTipo' => [
  106.                     'type'  => EqualOperatorType::TYPE_EQUAL,
  107.                     'value' => ['GESTION_VENTA', 'STOCK']
  108.                 ],
  109.             ];
  110.         }
  111.         if (!$filter || !@$filter['relojEstado']['type'] || $filter['relojEstado']['type'] === '')
  112.         {
  113.             $filterValues = [
  114.                 'relojEstado' => [
  115.                     'type'  => EqualOperatorType::TYPE_EQUAL,
  116.                     'value' => [EstadoRelojEnum::ESTADO_SIN_ANUNCIAR, EstadoRelojEnum::ESTADO_ANUNCIO, EstadoRelojEnum::ESTADO_EN_TRAMITACION]
  117.                 ],
  118.             ];
  119.         }
  120.         parent::configureDefaultFilterValues($filterValues);
  121.     }*/
  122.     protected function configureDefaultSortValues(array &$sortValues): void
  123.     {
  124.         parent::configureDefaultSortValues($sortValues);
  125.         $sortValues[DatagridInterface::PER_PAGE] = 50;
  126.     }
  127.     protected function configureDatagridFilters(DatagridMapper $filter): void
  128.     {
  129.         if(!@$_REQUEST['filter'][DatagridInterface::PER_PAGE]) $this->getDatagrid()->setValue(DatagridInterface::PER_PAGEnull50);
  130.         $filter
  131.             ->add('busqueda'CallbackFilter::class, [
  132.                 'label' => null,
  133.                 'attr' => [
  134.                     'class' => 'filter-to-navbar-left filter-to-navbar',
  135.                     'data-order' => '1',
  136.                     'placeholder' => 'filter.placeholder.busqueda',
  137.                 ],
  138.                 'callback' => function ($queryBuilder$alias$field$value) {
  139.                     if (!$value->hasValue()) {
  140.                         return;
  141.                     }
  142.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  143.                     return true;
  144.                 },
  145.             ])
  146.             ->add('relojTipo'CallbackFilter::class, [
  147.                 'label' => false,
  148.                 'attr' => [
  149.                     'class' => 'filter-to-navbar-right filter-to-navbar',
  150.                     'data-order' => '2',
  151.                     'data-id' => 'filter-filters'
  152.                 ],
  153.                 'callback' => function ($queryBuilder$alias$field$value) {
  154.                     if (!$value->hasValue()) {
  155.                         return;
  156.                     }
  157.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  158.                     return true;
  159.                 },
  160.             ], [
  161.                 'field_type' => ChoiceType::class,
  162.                 'field_options' => [
  163.                     'choices' => ['GESTION_VENTA''STOCK'],
  164.                     'multiple' => true,
  165.                     'expanded' => true,
  166.                     'choice_label' => function ($choice$key$value) {
  167.                         $labels = ['filter.promocion.reloj_gestion_venta''filter.promocion.reloj_stock'];
  168.                         return $this->getTranslator()->trans($labels[$key], [], 'promocionAdmin');
  169.                     },
  170. //                    'choice_attr' => function ($choice, $key, $value) use ($existFilter){
  171. //                        if (!$existFilter && !$this->getRequest()->get('filter') && in_array($value, [EstadoValoracionEnum::ESTADO_ABIERTA, EstadoValoracionEnum::ESTADO_ESPERA, EstadoValoracionEnum::ESTADO_ACEPTADA])) {
  172. //                            return [
  173. //                                'checked' => true
  174. //                            ];
  175. //                        }
  176. //
  177. //                        return [];
  178. //                    },
  179.                 ]
  180.             ])
  181.             ->add('relojEstado'CallbackFilter::class, [
  182.                 'label' => false,
  183.                 'attr' => [
  184.                     'class' => 'filter-to-navbar-right filter-to-navbar',
  185.                     'data-order' => '3',
  186.                     'data-id' => 'filter-filters'
  187.                 ],
  188.                 'callback' => function ($queryBuilder$alias$field$value) {
  189.                     if (!$value->hasValue()) {
  190.                         return;
  191.                     }
  192.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  193.                     return true;
  194.                 },
  195.             ], [
  196.                 'field_type' => ChoiceType::class,
  197.                 'field_options' => [
  198.                     'choices' => [EstadoRelojEnum::ESTADO_SIN_ANUNCIAREstadoRelojEnum::ESTADO_ANUNCIOEstadoRelojEnum::ESTADO_EN_TRAMITACION],
  199.                     'multiple' => true,
  200.                     'expanded' => true,
  201.                     'choice_label' => function ($choice$key$value) {
  202.                         return $this->getTranslator()->trans(EstadoRelojEnum::getEstado($choice), [], 'enum');
  203.                     },
  204. //                    'choice_attr' => function ($choice, $key, $value) use ($existFilter){
  205. //                        if (!$existFilter && !$this->getRequest()->get('filter') && in_array($value, [EstadoValoracionEnum::ESTADO_ABIERTA, EstadoValoracionEnum::ESTADO_ESPERA, EstadoValoracionEnum::ESTADO_ACEPTADA])) {
  206. //                            return [
  207. //                                'checked' => true
  208. //                            ];
  209. //                        }
  210. //
  211. //                        return [];
  212. //                    },
  213.                 ]
  214.             ])
  215.             ->add('relojServicio'CallbackFilter::class, [
  216.                 'label' => false,
  217.                 'attr' => [
  218.                     'class' => 'filter-to-navbar-right filter-to-navbar',
  219.                     'data-order' => '4',
  220.                     'data-id' => 'filter-filters'
  221.                 ],
  222.                 'callback' => function ($queryBuilder$alias$field$value) {
  223.                     if (!$value->hasValue()) {
  224.                         return;
  225.                     }
  226.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  227.                     return true;
  228.                 },
  229.             ], [
  230.                 'field_type' => ChoiceType::class,
  231.                 'field_options' => [
  232.                     'choices' => ['SERVICIO''CHECK'],
  233.                     'multiple' => true,
  234.                     'expanded' => true,
  235.                     'choice_label' => function ($choice$key$value) {
  236.                         $labels = ['filter.promocion.reloj_servicio''filter.promocion.reloj_check'];
  237.                         return $this->getTranslator()->trans($labels[$key], [], 'promocionAdmin');
  238.                     },
  239.                     'attr' => [
  240.                         'class' => 'filter-unique'
  241.                     ]
  242. //                    'choice_attr' => function ($choice, $key, $value) use ($existFilter){
  243. //                        if (!$existFilter && !$this->getRequest()->get('filter') && in_array($value, [EstadoValoracionEnum::ESTADO_ABIERTA, EstadoValoracionEnum::ESTADO_ESPERA, EstadoValoracionEnum::ESTADO_ACEPTADA])) {
  244. //                            return [
  245. //                                'checked' => true
  246. //                            ];
  247. //                        }
  248. //
  249. //                        return [];
  250. //                    },
  251.                 ]
  252.             ])
  253.         ;
  254.         $filter
  255.             ->add('fechaActiva'CallbackFilter::class, [
  256.                 'label' => false,
  257.                 'attr' => [
  258.                     'data-order' => '1',
  259.                     'class' => 'filter-date-range'
  260.                 ],
  261.                 'field_type' => DateRangePickerType::class,
  262.                 'field_options' => [
  263.                     'field_options_start' => [
  264.                         'label' => false,
  265.                         'format' => 'dd/MM/yyyy',
  266.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_activa_start']
  267.                     ],
  268.                     'field_options_end' => [
  269.                         'label' => false,
  270.                         'format' => 'dd/MM/yyyy',
  271.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_activa_end']
  272.                     ]
  273.                 ],
  274.                 'callback' => function ($queryBuilder$alias$field$value)
  275.                 {
  276.                     if (!$value->hasValue()) {
  277.                         return;
  278.                     }
  279.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  280.                     return true;
  281.                 }
  282.             ])
  283.             ->add('fechaEntrada'CallbackFilter::class, [
  284.                 'label' => false,
  285.                 'attr' => [
  286.                     'data-order' => '2',
  287.                     'class' => 'filter-date-range'
  288.                 ],
  289.                 'field_type' => DateRangePickerType::class,
  290.                 'field_options' => [
  291.                     'field_options_start' => [
  292.                         'label' => false,
  293.                         'format' => 'dd/MM/yyyy',
  294.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_entrada_start']
  295.                     ],
  296.                     'field_options_end' => [
  297.                         'label' => false,
  298.                         'format' => 'dd/MM/yyyy',
  299.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_entrada_end']
  300.                     ]
  301.                 ],
  302.                 'callback' => function ($queryBuilder$alias$field$value)
  303.                 {
  304.                     if (!$value->hasValue()) {
  305.                         return;
  306.                     }
  307.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  308.                     return true;
  309.                 }
  310.             ])
  311.             ->add('fechaAnuncio'CallbackFilter::class, [
  312.                 'label' => false,
  313.                 'attr' => [
  314.                     'data-order' => '3',
  315.                     'class' => 'filter-date-range'
  316.                 ],
  317.                 'field_type' => DateRangePickerType::class,
  318.                 'field_options' => [
  319.                     'field_options_start' => [
  320.                         'label' => false,
  321.                         'format' => 'dd/MM/yyyy',
  322.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_anuncio_start']
  323.                     ],
  324.                     'field_options_end' => [
  325.                         'label' => false,
  326.                         'format' => 'dd/MM/yyyy',
  327.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_anuncio_end']
  328.                     ]
  329.                 ],
  330.                 'callback' => function ($queryBuilder$alias$field$value)
  331.                 {
  332.                     if (!$value->hasValue()) {
  333.                         return;
  334.                     }
  335.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  336.                     return true;
  337.                 }
  338.             ])
  339.             ->add('fechaVenta'CallbackFilter::class, [
  340.                 'label' => false,
  341.                 'attr' => [
  342.                     'data-order' => '4',
  343.                     'class' => 'filter-date-range'
  344.                 ],
  345.                 'field_type' => DateRangePickerType::class,
  346.                 'field_options' => [
  347.                     'field_options_start' => [
  348.                         'label' => false,
  349.                         'format' => 'dd/MM/yyyy',
  350.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_venta_start']
  351.                     ],
  352.                     'field_options_end' => [
  353.                         'label' => false,
  354.                         'format' => 'dd/MM/yyyy',
  355.                         'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_venta_end']
  356.                     ]
  357.                 ],
  358.                 'callback' => function ($queryBuilder$alias$field$value)
  359.                 {
  360.                     if (!$value->hasValue()) {
  361.                         return;
  362.                     }
  363.                     $this->em->getRepository(Promocion::class)->cbFilter($queryBuilder$alias$field$value);
  364.                     return true;
  365.                 }
  366.             ])
  367.         ;
  368.     }
  369.     protected function configureListFields(ListMapper $list): void
  370.     {
  371.         $this->setTranslationDomain('promocionAdmin');
  372.         $list
  373. //            ->add('IDperseo', null, [
  374. //                'label' => 'list.promocion.label.idperseo',
  375. //                'identifier' => true,
  376. //                'route' => [
  377. //                    'name' => 'edit'
  378. //                ],
  379. //                'header_style' => 'width: 95px',
  380. //                //'template' => 'admin/CRUD/Promocion/list_field_identifier_idperseo.html.twig',
  381. //            ])
  382.             ->addIdentifier('reloj.codigo'null, [
  383.                 'label' => 'list.promocion.label.reloj.codigo',
  384.                 //'identifier' => true,
  385.                 'route' => [
  386.                     'name' => 'edit'
  387.                 ],
  388.                 'header_style' => 'width: 80px',
  389.             ])
  390.             ->add('tipoEconomico'null, [
  391.                 'label' => 'list.promocion.label.tipo',
  392.                 'virtual_field' => true,
  393.                 'header_style' => 'width: 75px',
  394.                 'sortable' => true,
  395.                 'sort_field_mapping' => ['fieldName' => 'tipo'],
  396.                 'sort_parent_association_mappings' => [],
  397.                 'template' => 'admin/CRUD/Promocion/list_field_tipo_economico.html.twig',
  398.             ])
  399.             ->add('fechaEstadoCompraStr'null, [
  400.                 'label' => 'list.promocion.label.fecha_estado_compra',
  401.                 'header_style' => 'width: 90px;word-break: break-word;',
  402.             ])
  403.             ->add('reloj.marca'null, [
  404.                 'label' => 'list.promocion.label.reloj.marca',
  405.                 'identifier' => false,
  406.                 'header_style' => 'min-width: 75px',
  407.                 'collapse' => [
  408.                     // height in px
  409.                     'height' => 20,
  410.                     // content of the "read more" link
  411.                     'more' => '[+]',
  412.                     // content of the "read less" link
  413.                     'less' => '[-]',
  414.                 ],
  415.                 'sortable' => true,
  416.                 'sort_field_mapping' => ['fieldName' => 'nombre'],
  417.                 'sort_parent_association_mappings' => [['fieldName' => 'reloj'], ['fieldName' => 'marca']],
  418.                 'template' => 'admin/CRUD/list_field_collapse.html.twig'
  419.             ])
  420.             ->add('reloj.modelo1'null, [
  421.                 'label' => 'list.promocion.label.reloj.modelo1',
  422.                 'header_style' => 'min-width: 75px',
  423.                 'collapse' => [
  424.                     // height in px
  425.                     'height' => 20,
  426.                     // content of the "read more" link
  427.                     'more' => '[+]',
  428.                     // content of the "read less" link
  429.                     'less' => '[-]',
  430.                 ],
  431.                 'sortable' => true,
  432.                 'sort_field_mapping' => ['fieldName' => 'modelo1'],
  433.                 'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
  434.                 'template' => 'admin/CRUD/list_field_collapse.html.twig',
  435.             ])
  436.             ->add('reloj.ref1'null, [
  437.                 'label' => 'list.promocion.label.reloj.ref1',
  438.                 'header_style' => 'width: 75px',
  439.                 'collapse' => [
  440.                     // height in px
  441.                     'height' => 20,
  442.                     // content of the "read more" link
  443.                     'more' => '[+]',
  444.                     // content of the "read less" link
  445.                     'less' => '[-]',
  446.                 ],
  447.                 'sortable' => true,
  448.                 'sort_field_mapping' => ['fieldName' => 'ref1'],
  449.                 'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
  450.                 'template' => 'admin/CRUD/list_field_collapse.html.twig',
  451.             ])
  452.             ->add('reloj.precioCosteTotal'null, [
  453.                 'label' => 'list.promocion.label.reloj.precio_coste_total',
  454.                 'header_style' => 'width: 90px;word-break: break-word;',
  455.                 'sortable' => true,
  456.                 'sort_field_mapping' => ['fieldName' => 'precioCosteTotal'],
  457.                 'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
  458.                 'template' => 'admin/CRUD/list_field_currency.html.twig',
  459.             ])
  460.             ->add('precio'null, [
  461.                 'label' => 'list.promocion.label.precio',
  462.                 'header_style' => 'width: 100px;word-break: break-word;',
  463.                 'sortable' => true,
  464.                 'sort_field_mapping' => ['fieldName' => 'precio'],
  465.                 'sort_parent_association_mappings' => [],
  466.                 'template' => 'admin/CRUD/list_field_currency.html.twig',
  467.             ])
  468.             ->add('reloj.tiempoEnVenta'null, [
  469.                 'label' => 'list.promocion.label.dias_en_venta',
  470.                 'header_style' => 'width: 90px;word-break: break-word;',
  471.                 'sortable' => true,
  472.                 'sort_field_mapping' => ['fieldName' => 'tiempoEnVenta'],
  473.                 'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
  474.             ])
  475.             ->add('fechaPromocion'null, [
  476.                 'label' => 'list.promocion.label.fecha',
  477.                 'header_style' => 'width: 90px;',
  478.                 'format' => 'd/m/Y',
  479.             ])
  480.             ->add('estadoActual''trans', [
  481.                 'label' => 'list.promocion.label.estado',
  482.                 'header_style' => 'width: 125px',
  483.                 'translationDomain' => 'enum',
  484.                 'collapse' => [
  485.                     // height in px
  486.                     'height' => 20,
  487.                     // content of the "read more" link
  488.                     'more' => '[+]',
  489.                     // content of the "read less" link
  490.                     'less' => '[-]',
  491.                 ],
  492.             ])
  493.             /*->add('acciones', null, [
  494.                 'label' => 'list.promocion.label.acciones',
  495.                 'header_style' => 'width: 90px',
  496.                 'template' => 'admin/CRUD/Promocion/list_field_actions.html.twig',
  497.             ])*/
  498.             ->add('ubicacionActual'null, [
  499.                 'label' => 'list.promocion.label.ubicacion',
  500.                 'header_style' => 'width: 100px',
  501.             ])
  502.             /*->add('reloj.fotoFile', null, [
  503.                 'label' => 'list.promocion.label.reloj.foto',
  504.                 'header_style' => 'width: 75px;',
  505.                 'className' => (new ReflectionClass(Reloj::class))->getShortName(),
  506.                 'template' => 'admin/CRUD/list_field_image.html.twig',
  507.             ])*/
  508. //            ->add('canal', null, [
  509. //                'label' => 'list.promocion.label.fecha_promocion'
  510. //            ])
  511. //            ->add(ListMapper::NAME_ACTIONS, null, [
  512. //                'actions' => [
  513. //                    'show' => [],
  514. //                    'edit' => [],
  515. //                    'delete' => [],
  516. //                ],
  517. //            ])
  518.         ;
  519.     }
  520.     protected function configureFormFields(FormMapper $form): void
  521.     {
  522.         $this->setTranslationDomain('promocionAdmin');
  523.         $object $this->getSubject();
  524.         $reloj $object->getReloj();
  525.         $costes $reloj->calculateCostesCompra();
  526.         $now = new DateTime();
  527. //
  528. //        $diasDesdeRecepcion = $object->fechaEstadoRecepcion() ? ($object->getFechaListo() ?  $object->fechaEstadoRecepcion()->diff($object->getFechaListo())->format('%a') : $object->fechaEstadoRecepcion()->diff($now)->format('%a')) : null;
  529. //        $diasDesdeListo = $object->getFechaListo() ? ($object->getFechaAnuncio() ?  $object->getFechaListo()->diff($object->getFechaAnuncio())->format('%a') : $object->getFechaListo()->diff($now)->format('%a')) : null;
  530. //        $diasDesdeAnuncio = $object->getFechaAnuncio() ? ($object->getFechaVenta() ?  $object->getFechaAnuncio()->diff($object->getFechaVenta())->format('%a') : $object->getFechaAnuncio()->diff($now)->format('%a')) : null;
  531.         if ($this->security->isGranted('ROLE_SUPER_ADMIN')) {
  532.             $form
  533.                 ->with('with_buy', [
  534.                     'label' => false //'form.promocion.with_buy.label'
  535.                 ])
  536.                     ->add('reloj.operacionCompra'null, [
  537.                         'label' => false,
  538.                         'disabled' => true,
  539.                         'data' => $object->getTipo() === TipoOperacionEnum::OPERACION_GESTION null $object->getReloj()->getOperacionCompra(),
  540.                         'translation_domain' => 'promocionAdmin',
  541.                         'attr' => [
  542.                             'placeholder' => 'form.promocion.placeholder.operacion',
  543.                         ]
  544.                     ])
  545.                     ->add('reloj.actividad'null, [
  546.                         'label' => false,
  547.                         'disabled' => true,
  548.                         'translation_domain' => 'promocionAdmin',
  549.                         'attr' => [
  550.                             'placeholder' => 'form.promocion.placeholder.actividad',
  551.                         ]
  552.                     ])
  553.                     // compra o permuta
  554.                     ->add('tipoCompra'ChoiceType::class, [
  555.                         'label' => false,
  556.                         'placeholder' => 'form.promocion.placeholder.reloj_type',
  557.                         'mapped' => false,
  558.                         'disabled' => true,
  559.                         'choices' => array_flip(TipoOperacionEnum::getOperaciones()),
  560.                         'choice_value' => function ($choice) {
  561.                             return ($choice === TipoOperacionEnum::OPERACION_COMPRA || $choice === TipoOperacionEnum::OPERACION_PERMUTA) ? $choice null;
  562.                         },
  563.                         'choice_label' => function ($choice$key$value) {
  564.                             return $this->getTranslator()->trans(TipoOperacionEnum::getOperacion($choice), [], 'enum');
  565.                         },
  566.                         'data' => $object->getTipo(),
  567.                     ])
  568.                     ->add('reloj.regimen'ChoiceType::class, [
  569.                         'label' => false,
  570.                         'placeholder' => 'form.promocion.placeholder.regimen',
  571.                         'disabled' => true,
  572.                         'choices' => array_flip(RegimenEnum::getRegimenes()),
  573.                         'choice_label' => function ($choice$key$value) {
  574.                             return $this->getTranslator()->trans(RegimenEnum::getRegimen($choice), [], 'enum');
  575.                         },
  576.                         'data' => $object->getReloj()?->getRegimen() ? $object->getReloj()?->getRegimen() : RegimenEnum::REGIMEN_REBU,
  577.                     ])
  578.                     // Europa o Exportacion
  579.                     ->add('reloj.exportacion'ChoiceType::class, [
  580.                         'label' => false,
  581.                         'placeholder' => 'form.promocion.placeholder.exportacion',
  582.                         'disabled' => true,
  583.                         'choices' => array_flip(ExportacionEnum::getRegimenes()),
  584.                         'choice_label' => function ($choice$key$value) {
  585.                             return $this->getTranslator()->trans(ExportacionEnum::getRegimen($choice), [], 'enum');
  586.                         },
  587.                     ])
  588.                 ->end()
  589.                 ->with('with_times', [
  590.                     'label' => false //'form.promocion.with_times.label'
  591.                 ])
  592.                 //fecha que se asienta en actividad
  593.                     ->add('reloj.fechaRecepcion'DateTimePickerType::class, [
  594.                         'label' => false,
  595.                         'disabled' => true,
  596.                         'data' => $reloj->getFechaRecepcion(),
  597.                         'format' => 'dd-MM-yyyy',
  598.                         'datepicker_use_button' => false,
  599.                         'translation_domain' => 'promocionAdmin',
  600.                         'attr' => [
  601.                             'placeholder' => 'form.promocion.placeholder.reloj_fecha_recepcion',
  602.                             'class' => 'datepicker-text',
  603.                         ]
  604.                     ], [
  605.                         'dp_use_icons' => false,
  606.                     ])
  607.                     ->add('dias_fecha_recepcion'null, [
  608.                         'label' => 'form.promocion.label.dias_fecha_recepcion',
  609.                         'mapped' => false,
  610.                         'disabled' => true,
  611.                         'data' => $reloj->getDiasDesdeRecepcion(),
  612.                         'row_attr' => [
  613.                             'class' => 'field-calculate-with-label'
  614.                         ]
  615.                     ])
  616.                     // derivado de acciones
  617.                     ->add('fechaListo'DateTimePickerType::class, [
  618.                         'label' => false,
  619.                         'disabled' => true,
  620.                         'format' => 'dd-MM-yyyy',
  621.                         'datepicker_use_button' => false,
  622.                         'translation_domain' => 'promocionAdmin',
  623.                         'attr' => [
  624.                             'placeholder' => 'form.promocion.placeholder.fecha_listo',
  625.                             'class' => 'datepicker-text',
  626.                         ]
  627.                     ])
  628.                     ->add('dias_fecha_listo'null, [
  629.                         'label' => 'form.promocion.label.dias_fecha_listo',
  630.                         'mapped' => false,
  631.                         'disabled' => true,
  632.                         'data' => $reloj->getDiasDesdeListo(),
  633.                         'row_attr' => [
  634.                             'class' => 'field-calculate-with-label'
  635.                         ]
  636.                     ])
  637.                     ->add('fechaAnuncio'DateTimePickerType::class, [
  638.                         'mapped' => false,
  639.                         'label' => false,
  640.                         'disabled' => true,
  641.                         'data' => $object->getFechaAnuncio(),
  642.                         'format' => 'dd-MM-yyyy',
  643.                         'datepicker_use_button' => false,
  644.                         'translation_domain' => 'promocionAdmin',
  645.                         'attr' => [
  646.                             'placeholder' => 'form.promocion.placeholder.fecha_anuncio',
  647.                             'class' => 'datepicker-text',
  648.                         ]
  649.                     ])
  650.                     ->add('dias_fecha_anuncio'null, [
  651.                         'label' => 'form.promocion.label.dias_fecha_anuncio',
  652.                         'mapped' => false,
  653.                         'disabled' => true,
  654.                         'data' => $reloj->getDiasDesdeAnuncio(),
  655.                         'row_attr' => [
  656.                             'class' => 'field-calculate-with-label'
  657.                         ]
  658.                     ])
  659.                 ->end()
  660.             ;
  661.         }
  662.         $form
  663.             ->with('with_reloj_resume', [
  664.                 'label' => false//'<span class="fi fi-sr-after-lock pull-right action-block-with hide" title="Bloquear datos reloj"></span><span class="fi fi-sr-after-unlock pull-right action-unblock-with" title="Desbloquear datos reloj"></span>'
  665.             ])
  666.                 ->add('id'HiddenType::class)
  667.                 ->add('_unblock_block'HTMLType::class, [
  668.                     'label' => false,
  669.                     'template' => 'admin/reloj/icon_unblock_block.html.twig'
  670.                 ])
  671.                 ->add('relojFotoFile'VichImageType::class, [
  672.                     'label' => false,
  673.                     'required' => false,
  674.                     'allow_delete' => false,
  675.                     'download_uri' => true,
  676.                     'download_label' => false,
  677.                     'attr' => [
  678.                         'data-title_image_delete' => null,
  679.                         'data-message_image_delete' => null,
  680.                         'class' => 'vich-image-load'
  681.                     ]
  682.                 ])
  683.                 ->add('reloj.codigo'null, [
  684.                     'label' => false,
  685.                     'disabled' => true,
  686.                     'translation_domain' => 'promocionAdmin',
  687.                     'attr' => [
  688.                         'placeholder' => 'form.promocion.placeholder.reloj.codigo'
  689.                     ]
  690.                 ])
  691.                 ->add('reloj.marca'EntityType::class, [
  692.                     'label' => false,
  693.                     'placeholder' => 'form.promocion.placeholder.reloj.marca',
  694.                     'class' => Marca::class,
  695.                     'row_attr' => [
  696.                         'class' => 'readonly',
  697.                     ],
  698.                     'attr' => [
  699.                         'class' => 'block',
  700.                         'readonly' => true,
  701.                     ]
  702.                 ])
  703.                 ->add('reloj.IDperseo'null, [
  704.                     'label' => false,
  705.                     'disabled' => true,
  706.                     'translation_domain' => 'promocionAdmin',
  707.                     'attr' => [
  708.                         'placeholder' => 'form.promocion.placeholder.reloj.id_perseo'
  709.                     ]
  710.                 ])
  711.                 ->add('reloj.modelos'null, [
  712.                     'label' => false,
  713.                     'translation_domain' => 'promocionAdmin',
  714.                     'disabled' => true,
  715.                     'attr' => [
  716.                         'placeholder' => 'form.promocion.placeholder.reloj.modelos',
  717. //                        'class' => 'block',
  718.                         'readonly' => true,
  719.                     ],
  720.                     'row_attr' => [
  721.                         'class' => 'control-block',
  722.                     ]
  723.                 ])
  724.                 ->add('reloj.modelo1'null, [
  725.                     'label' => false,
  726.                     'translation_domain' => 'promocionAdmin',
  727.                     'attr' => [
  728.                         'placeholder' => 'form.promocion.placeholder.reloj.modelo1',
  729.                         'class' => 'block',
  730.                         'readonly' => true,
  731.                     ],
  732.                     'row_attr' => [
  733.                         'class' => 'hide control-block',
  734.                     ]
  735.                 ])
  736.                 ->add('reloj.modelo2'null, [
  737.                     'label' => false,
  738.                     'translation_domain' => 'promocionAdmin',
  739.                     'attr' => [
  740.                         'placeholder' => 'form.promocion.placeholder.reloj.modelo2',
  741.                         'class' => 'block',
  742.                         'readonly' => true,
  743.                     ],
  744.                     'row_attr' => [
  745.                         'class' => 'hide control-block',
  746.                     ]
  747.                 ])
  748.                 ->add('reloj.refs'null, [
  749.                     'label' => false,
  750.                     'translation_domain' => 'promocionAdmin',
  751.                     'disabled' => true,
  752.                     'attr' => [
  753.                         'placeholder' => 'form.promocion.placeholder.reloj.refs',
  754.                         'readonly' => true,
  755.                     ],
  756.                     'row_attr' => [
  757.                         'class' => 'control-block',
  758.                     ]
  759.                 ])
  760.                 ->add('reloj.ref1'null, [
  761.                     'label' => false,
  762.                     'translation_domain' => 'promocionAdmin',
  763.                     'attr' => [
  764.                         'placeholder' => 'form.promocion.placeholder.reloj.ref1',
  765.                         'class' => 'block',
  766.                         'readonly' => true,
  767.                     ],
  768.                     'row_attr' => [
  769.                         'class' => 'hide control-block',
  770.                     ]
  771.                 ])
  772.                 ->add('reloj.ref2'null, [
  773.                     'label' => false,
  774.                     'translation_domain' => 'promocionAdmin',
  775.                     'attr' => [
  776.                         'placeholder' => 'form.promocion.placeholder.reloj.ref2',
  777.                         'class' => 'block',
  778.                         'readonly' => true,
  779.                     ],
  780.                     'row_attr' => [
  781.                         'class' => 'hide control-block',
  782.                     ]
  783.                 ])
  784.                 ->add('reloj.serie'null, [
  785.                     'label' => false,
  786.                     'translation_domain' => 'promocionAdmin',
  787.                     'attr' => [
  788.                         'placeholder' => 'form.promocion.placeholder.reloj.serie',
  789.                         'readonly' => true,
  790.                         'class' => 'block'
  791.                     ]
  792.                 ])
  793.                 ->add('reloj.caja'CheckboxType::class, [
  794.                     'label' => false,
  795.                     'required' => false,
  796.                     'data' => $object->getReloj()?->isCaja() ?? false,
  797.                     'row_attr' => [
  798.                         'class' => 'readonly relojCaja',
  799.                     ],
  800.                     'attr' => [
  801.                         'class' => 'block',
  802.                         'readonly' => true
  803.                     ]
  804.                 ])
  805.                 ->add('reloj.papeles'CheckboxType::class, [
  806.                     'label' => false,
  807.                     'required' => false,
  808.                     'data' => $object->getReloj()?->isPapeles() ?? false,
  809.                     'row_attr' => [
  810.                         'class' => 'readonly relojPapeles',
  811.                     ],
  812.                     'attr' => [
  813.                         'class' => 'block',
  814.                         'readonly' => true
  815.                     ]
  816.                 ])
  817.                 ->add('reloj.aspecto'EntityType::class, [
  818.                     'label' => false,
  819.                     'class' => EstadoAspecto::class,
  820.                     'translation_domain' => 'promocionAdmin',
  821.                     'placeholder' => 'form.promocion.placeholder.reloj.aspecto',
  822.                     'query_builder' => $this->em->getRepository(EstadoAspecto::class)->qbAll(),
  823.                 ])
  824.                 ->add('reloj.fecha'DatePickerType::class, [
  825.                     'label' => false,
  826.                     'format' => 'dd-MM-yyyy',
  827.                     'translation_domain' => 'promocionAdmin',
  828.                     'row_attr' => [
  829.                         'class' => 'readonly',
  830.                     ],
  831.                     'attr' => [
  832.                         'placeholder' => 'form.promocion.placeholder.reloj_fecha',
  833.                         'class' => 'block',
  834.                         'readonly' => true,
  835.                     ]
  836.                 ])
  837.             ->end()
  838.             ->with('with_economic', [
  839.                 'label' => false //'form.promocion.with_economic.label'
  840.             ])
  841.                 ->add('fechaCompraEconomic'DateTimePickerType::class, [
  842.                     'mapped' => false,
  843.                     'label' => false,
  844.                     'disabled' => true,
  845.                     'data' => $object->getReloj()?->getFechaCompra(),
  846.                     'format' => 'dd-MM-yyyy',
  847.                     'datepicker_use_button' => false,
  848.                     'translation_domain' => 'promocionAdmin',
  849.                     'attr' => [
  850.                         'placeholder' => 'form.promocion.placeholder.reloj_fecha_compra',
  851.                         'class' => 'datepicker-text',
  852.                     ]
  853.                 ])
  854.                 ->add('reloj.precioCompra'null, [
  855.                     'label' => false,
  856.                     'disabled' => true,
  857.                     'translation_domain' => 'promocionAdmin',
  858.                     'attr' => [
  859.                         'placeholder' => 'form.promocion.placeholder.reloj_precio_compra',
  860.                         'class' => 'numeric currencies',
  861.                     ]
  862.                 ])
  863.                 ->add('reloj.precioCosteTotal'null, [
  864.                     'label' => false,
  865.                     'disabled' => true,
  866.                     'translation_domain' => 'promocionAdmin',
  867.                     'attr' => [
  868.                         'placeholder' => 'form.promocion.placeholder.reloj_precio_coste_total',
  869.                         'class' => 'numeric currencies bolder',
  870.                     ]
  871.                 ])
  872.                 ->add('tipoEconomico'ChoiceType::class, [
  873.                     'label' => false,
  874.                     'placeholder' => 'form.promocion.placeholder.compra_gestion',
  875.                     'mapped' => false,
  876.                     'disabled' => true,
  877.                     'choices' => array_flip(TipoOperacionEnum::getOperaciones()),
  878.                     'choice_value' => function ($choice) {
  879.                         return ($choice === TipoOperacionEnum::OPERACION_COMPRA or $choice === TipoOperacionEnum::OPERACION_GESTION) ? $choice null;
  880.                     },
  881.                     'choice_label' => function ($choice$key$value) {
  882.                         return $this->getTranslator()->trans(TipoOperacionEnum::getOperacion($choice), [], 'enum');
  883.                     },
  884.                     'data' => $object->getTipo() === TipoOperacionEnum::OPERACION_PERMUTA TipoOperacionEnum::OPERACION_COMPRA $object->getTipo(),
  885.                 ])
  886.                 ->add('fechaPromocionEconomic'DateTimePickerType::class, [
  887.                     'mapped' => false,
  888.                     'label' => false,
  889.                     'disabled' => true,
  890.                     'data' => $object->getFechaPromocion(),
  891.                     'format' => 'dd-MM-yyyy',
  892.                     'datepicker_use_button' => false,
  893.                     'translation_domain' => 'promocionAdmin',
  894.                     'attr' => [
  895.                         'placeholder' => 'form.promocion.placeholder.fecha',
  896.                         'class' => 'datepicker-text',
  897.                     ]
  898.                 ])
  899.                 ->add('precio'null, [
  900.                     'label' => false,
  901.                     'disabled' => true,
  902.                     'translation_domain' => 'promocionAdmin',
  903.                     'attr' => [
  904.                         'placeholder' => 'form.promocion.placeholder.precio',
  905.                         'class' => 'numeric currencies bolder',
  906.                     ]
  907.                 ])
  908.                 ->add('ubicacionActual'null, [
  909.                     'label' => false,
  910.                     'disabled' => true,
  911.                     'translation_domain' => 'promocionAdmin',
  912.                     'attr' => [
  913.                         'placeholder' => 'form.promocion.placeholder.ubicacion',
  914.                     ]
  915.                 ])
  916.                 ->add('fechaUbicacionActual'DateTimePickerType::class, [
  917.                     'label' => false,
  918.                     'disabled' => true,
  919.                     'format' => 'dd-MM-yyyy',
  920.                     'datepicker_use_button' => false,
  921.                     'translation_domain' => 'promocionAdmin',
  922.                     'attr' => [
  923.                         'placeholder' => 'form.promocion.placeholder.fecha_ubicacion',
  924.                         'class' => 'datepicker-text',
  925.                     ]
  926.                 ])
  927.                 ->add('estadoActual'null, [
  928.                     'label' => false,
  929.                     'disabled' => true,
  930.                     'translation_domain' => 'promocionAdmin',
  931.                     'attr' => [
  932.                         'placeholder' => 'form.promocion.placeholder.estado_actual',
  933.                     ]
  934.                 ])
  935.                 ->add('fechaEstadoActual'DateTimePickerType::class, [
  936.                     'label' => false,
  937.                     'disabled' => true,
  938.                     'format' => 'dd-MM-yyyy',
  939.                     'datepicker_use_button' => false,
  940.                     'translation_domain' => 'promocionAdmin',
  941.                     'attr' => [
  942.                         'placeholder' => 'form.promocion.placeholder.fecha_estado_actual',
  943.                         'class' => 'datepicker-text',
  944.                     ]
  945.                 ])
  946.             ->end()
  947.             ->with('with_reloj_review', [
  948.                 'label' => false //'form.promocion.with_reloj_review.label'
  949.             ])
  950.                 ->add('reloj.fotoValoracion'HTMLType::class, [
  951.                     'label' => false,
  952.                     'template' => 'admin/reloj/imagen.html.twig'
  953.                 ])
  954.                 ->add('relojFotoSetFile'VichImageType::class, [
  955.                     'label' => false,
  956.                     'required' => false,
  957.                     'allow_delete' => true,
  958.                     'download_uri' => true,
  959.                     'download_label' => false,
  960.                     'attr' => [
  961.                         'data-title_image_delete' => null,
  962.                         'data-message_image_delete' => null,
  963.                         'class' => 'vich-image-load'
  964.                     ]
  965.                     //'template' => 'admin/image_default.html.twig'
  966.                 ])
  967.                 ->add('relojFotoCronoFile'VichImageType::class, [
  968.                     'label' => false,
  969.                     'required' => false,
  970.                     'allow_delete' => true,
  971.                     'download_uri' => true,
  972.                     'download_label' => false,
  973.                     'attr' => [
  974.                         'data-title_image_delete' => null,
  975.                         'data-message_image_delete' => null,
  976.                         'class' => 'vich-image-load'
  977.                     ]
  978.                     //'template' => 'admin/image_default.html.twig'
  979.                 ])
  980.                 ->add('relojVideoFile'VichFileType::class, [
  981.                     'label' => false,
  982.                     'translation_domain' => 'promocionAdmin',
  983.                     'required' => false,
  984.                     'allow_delete' => true,
  985.                     'download_uri' => true,
  986.                     'download_label' => 'label.download.video',
  987.                     'attr' => [
  988.                         'data-translation_domain' => 'promocionAdmin',
  989.                         'data-upload_label' => 'label.upload.video',
  990.                         'data-selector_file_original' => 'video',
  991.                         'data-title_file_delete' => null,
  992.                         'data-message_file_delete' => null,
  993.                         'class' => 'vich-file-load'
  994.                     ]
  995.                     //'template' => 'admin/image_default.html.twig'
  996.                 ])
  997.                 ->add('reloj.recompra'null, [
  998.                     'label' => false,
  999.                     'translation_domain' => 'promocionAdmin',
  1000.                     'attr' => [
  1001.                         'placeholder' => 'form.promocion.placeholder.reloj_recompra',
  1002.                         'class' => 'numeric percents'
  1003.                     ],
  1004.                 ])
  1005.                 ->add('reloj.garantia'ChoiceType::class, [
  1006.                     'label' => false,
  1007.                     'placeholder' => 'form.promocion.placeholder.reloj_garantia',
  1008.                     'choices' => array_flip(TipoGarantiaEnum::getGarantias()),
  1009.                     'choice_label' => function ($choice$key$value) {
  1010.                         return $this->getTranslator()->trans(TipoGarantiaEnum::getGarantia($choice), [], 'enum');
  1011.                     },
  1012.                 ])
  1013.                 ->add('reloj.peso'null, [
  1014.                     'label' => false,
  1015.                     'translation_domain' => 'promocionAdmin',
  1016.                     'attr' => [
  1017.                         'placeholder' => 'form.promocion.placeholder.reloj_peso',
  1018.                         'class' => 'numeric grams'
  1019.                     ],
  1020.                 ])
  1021.                 ->add('reloj.comentario'TextareaType::class, [
  1022.                     'label' => false,
  1023.                     'translation_domain' => 'promocionAdmin',
  1024.                     'attr' => [
  1025.                         'rows' => 3,
  1026.                         'placeholder' => 'form.promocion.placeholder.reloj_comentario'
  1027.                     ]
  1028.                 ])
  1029.                 ->add('reloj.descripcion'null, [
  1030.                     'label' => false,
  1031.                     'translation_domain' => 'promocionAdmin',
  1032.                     'attr' => [
  1033.                         'placeholder' => 'form.promocion.placeholder.reloj_descripcion'
  1034.                     ]
  1035.                 ])
  1036.             ->end()
  1037.             ->with('with_actions_list', [
  1038.                 'label' => false //'form.promocion.with_actions_list.label'
  1039.             ])
  1040.                 ->add('acciones'HTMLType::class, [
  1041.                     'label' => false,
  1042.                     'template' => 'admin/promocion/acciones.html.twig'
  1043.                 ])
  1044.             ->end()
  1045.             ->with('with_actions', [
  1046.                 'label' => false //'form.promocion.with_actions.label'
  1047.             ])
  1048.                 ->add('accionFecha'DatePickerType::class, [
  1049.                     'label' => 'form.promocion.label.accion_fecha',
  1050.                     'mapped' => false,
  1051.                     'required' => false,
  1052.                     'translation_domain' => 'promocionAdmin',
  1053.                     'format' => 'dd-MM-yyyy',
  1054.                     'data' => $now,
  1055.                     'attr' => [
  1056.                         'placeholder' => 'form.promocion.placeholder.accion_fecha',
  1057.                     ]
  1058.                 ])
  1059.                 ->add('accionTipo'ChoiceType::class, [
  1060.                     'label' => 'form.promocion.label.accion_tipo',
  1061.                     'mapped' => false,
  1062.                     'required' => false,
  1063.                     'placeholder' => 'form.promocion.placeholder.accion_tipo',
  1064.                     'choices' => array_flip(TipoAccionEnum::getAcciones()),
  1065.                     'choice_label' => function ($choice$key$value) {
  1066.                         return $this->getTranslator()->trans(TipoAccionEnum::getAccion($choice), [], 'enum');
  1067.                     },
  1068.                     'choice_value' => function ($choice) use ($object)
  1069.                     {
  1070.                         $returnChoice null;
  1071.                         $countAcciones = ($object->getAcciones()->filter(
  1072.                             fn($acciones) => !$acciones instanceof AccionEstado || ($acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_GESTION && $acciones?->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_COMPRA ))
  1073.                         )->count();
  1074.                         $countAccioneslisto = ($object->getAcciones()->filter(
  1075.                             fn($acciones) => $acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() === EstadoRelojEnum::ESTADO_LISTO && $acciones->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_GESTION && $acciones->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_COMPRA )
  1076.                         )->count();
  1077.                         if($countAcciones === && $choice === TipoAccionEnum::ACCION_ESTADO)
  1078.                         {
  1079.                             $returnChoice $choice;
  1080.                         }
  1081.                         elseif($countAcciones === && $choice === TipoAccionEnum::ACCION_UBICACION)
  1082.                         {
  1083.                             $returnChoice $choice;
  1084.                         }
  1085.                         elseif($countAcciones && !$countAccioneslisto && $choice !== TipoAccionEnum::ACCION_ANUNCIO && $choice !== TipoAccionEnum::ACCION_CHECK)
  1086.                         {
  1087.                             $returnChoice $choice;
  1088.                         }
  1089.                         elseif($countAcciones && $countAccioneslisto)
  1090.                         {
  1091.                             $returnChoice $choice;
  1092.                         }
  1093.                         if(
  1094.                             $returnChoice &&
  1095.                             !is_null($object->getReloj()->getTipoBloqueo()) &&
  1096.                             (
  1097.                                 $returnChoice === TipoAccionEnum::ACCION_ESTADO ||
  1098.                                 $returnChoice === TipoAccionEnum::ACCION_UBICACION ||
  1099.                                 $returnChoice === TipoAccionEnum::ACCION_ANUNCIO
  1100.                             )
  1101.                         )
  1102.                         {
  1103.                             $returnChoice null;
  1104.                         }
  1105.                         if($returnChoice === TipoAccionEnum::ACCION_CHECK && in_array($object->getEstadoActual(), [EstadoRelojEnum::ESTADO_EN_TRAMITACIONEstadoRelojEnum::ESTADO_ENVIADOEstadoRelojEnum::ESTADO_VENDIDO]) )
  1106.                         {
  1107.                             $returnChoice null;
  1108.                         }
  1109.                         return $returnChoice;
  1110.                     },
  1111.                     'attr' => [
  1112.                         'class' => 'accion accion-tipo'
  1113.                     ]
  1114.                 ])
  1115.                 ->add('accionPlataforma'EntityType::class, [
  1116.                     'label' => 'form.promocion.label.accion_plataforma',
  1117.                     'mapped' => false,
  1118.                     'required' => false,
  1119.                     'placeholder' => 'form.promocion.placeholder.accion_plataforma',
  1120.                     'class' => Canal::class,
  1121.                     'row_attr' => [
  1122.                         'class' => 'accion accion-anuncio accion-competencia',
  1123.                         'hidden' => true
  1124.                     ]
  1125.                 ])
  1126.                 ->add('accionUbicacion'EntityType::class, [
  1127.                     'label' => 'form.promocion.label.accion_ubicacion',
  1128.                     'placeholder' => 'form.promocion.placeholder.accion_ubicacion',
  1129.                     'mapped' => false,
  1130.                     'required' => false,
  1131.                     'class' => UbicacionAbstract::class,
  1132.                     'row_attr' => [
  1133.                         'class' => 'accion accion-ubicacion',
  1134.                         'hidden' => true
  1135.                     ],
  1136.                 ])
  1137.                 ->add('accionServicio'EntityType::class, [
  1138.                     'label' => 'form.promocion.label.accion_servicio',
  1139.                     'placeholder' => 'form.promocion.placeholder.accion_servicio',
  1140.                     'mapped' => false,
  1141.                     'required' => false,
  1142.                     'class' => TipoCargoServicio::class,
  1143.                     'row_attr' => [
  1144.                         'class' => 'accion accion-servicio',
  1145.                         'hidden' => true
  1146.                     ]
  1147.                 ])
  1148.                 ->add('accionMejora'EntityType::class, [
  1149.                     'label' => 'form.promocion.label.accion_mejora',
  1150.                     'placeholder' => 'form.promocion.placeholder.accion_mejora',
  1151.                     'mapped' => false,
  1152.                     'required' => false,
  1153.                     'class' => TipoCargoMejora::class,
  1154.                     'row_attr' => [
  1155.                         'class' => 'accion accion-mejora',
  1156.                         'hidden' => true
  1157.                     ]
  1158.                 ])
  1159.                 ->add('accionVenta'EntityType::class, [
  1160.                     'label' => 'form.promocion.label.accion_venta',
  1161.                     'placeholder' => 'form.promocion.placeholder.accion_venta',
  1162.                     'mapped' => false,
  1163.                     'required' => false,
  1164.                     'class' => TipoCargoVenta::class,
  1165.                     'row_attr' => [
  1166.                         'class' => 'accion accion-venta',
  1167.                         'hidden' => true
  1168.                     ]
  1169.                 ])
  1170.                 ->add('accionCompetencia'EntityType::class, [
  1171.                     'label' => 'form.promocion.label.accion_competencia',
  1172.                     'placeholder' => 'form.promocion.placeholder.accion_competencia',
  1173.                     'mapped' => false,
  1174.                     'required' => false,
  1175.                     'class' => Competencia::class,
  1176.                     'row_attr' => [
  1177.                         'class' => 'numeric currencies accion accion-competencia',
  1178.                         'hidden' => true
  1179.                     ],
  1180.                 ])
  1181.                 ->add('accionCheck'EntityType::class, [
  1182.                     'label' => 'form.promocion.label.accion_check',
  1183.                     'placeholder' => 'form.promocion.placeholder.accion_check',
  1184.                     'mapped' => false,
  1185.                     'required' => false,
  1186.                     'class' => EstadoCheck::class,
  1187.                     'row_attr' => [
  1188.                         'class' => 'accion accion-check',
  1189.                         'hidden' => true
  1190.                     ],
  1191.                 ])
  1192.                 ->add('accionEstado'ChoiceType::class, [
  1193.                     'label' => 'form.promocion.label.accion_estado',
  1194.                     'mapped' => false,
  1195.                     'required' => false,
  1196.                     'placeholder' => 'form.promocion.placeholder.accion_estado',
  1197.                     'choices' => array_flip(EstadoRelojEnum::getEstados()),
  1198.                     'choice_label' => function ($choice$key$value) {
  1199.                         return $this->getTranslator()->trans(EstadoRelojEnum::getEstado($choice), [], 'enum');
  1200.                     },
  1201.                     'choice_value' => function ($choice) use ($object)
  1202.                     {
  1203.                         $returnChoice null;
  1204.                         $countAcciones $object->getAcciones()->count();
  1205.                         $countAccioneslisto = ($object->getAcciones()->filter(
  1206.                             fn($acciones) =>  $acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() === EstadoRelojEnum::ESTADO_LISTO)
  1207.                         )->count();
  1208.                         $countAccionesEnTramitacion = ($object->getAcciones()->filter(
  1209.                             fn($acciones) =>  $acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() === EstadoRelojEnum::ESTADO_EN_TRAMITACION)
  1210.                         )->count();
  1211.                         if((!$countAcciones && $choice === EstadoRelojEnum::ESTADO_RECEPCION) ||
  1212.                             ($countAcciones && $countAccioneslisto) ||
  1213.                             ($countAcciones && !$countAccioneslisto && $choice === EstadoRelojEnum::ESTADO_LISTO) ||
  1214.                             ($countAcciones && $countAccioneslisto && $countAccionesEnTramitacion && $choice === EstadoRelojEnum::ESTADO_VENDIDO)
  1215.                         )
  1216.                         {
  1217.                             $returnChoice $choice;
  1218.                         }
  1219. //                        if($choice === EstadoRelojEnum::ESTADO_VENDIDO &&
  1220. //                            $object->getReloj()->getOperacionVenta()?->getEstado()?->getKey() !== EstadoOperacionEnum::ESTADO_TRAMITADA)
  1221. //                        {
  1222. //                            $returnChoice = null;
  1223. //                        }
  1224.                         if(in_array($choice, [EstadoRelojEnum::ESTADO_RECEPCIONEstadoRelojEnum::ESTADO_ENVIADOEstadoRelojEnum::ESTADO_SIN_ANUNCIAREstadoRelojEnum::ESTADO_EN_VENTAEstadoRelojEnum::ESTADO_GESTIONEstadoRelojEnum::ESTADO_COMPRA])) $returnChoice null;
  1225.                         /*$estadoAnuncioSinAnuncio = $object->getAcciones()->filter(
  1226.                             fn($accion) => $accion instanceof AccionEstado && in_array($accion->getEstado()->getKey(), [EstadoRelojEnum::ESTADO_ANUNCIO, EstadoRelojEnum::ESTADO_SIN_ANUNCIAR, EstadoRelojEnum::ESTADO_VENDIDO, EstadoRelojEnum::ESTADO_ENVIADO, EstadoRelojEnum::ESTADO_RESERVADO, EstadoRelojEnum::ESTADO_GESTION_CANCELADA], true)
  1227.                         )->toArray();
  1228.                         usort($estadoAnuncioSinAnuncio, fn($a, $b) => $b->getFecha() <=> $a->getFecha());
  1229.                         $estadoReciente = $estadoAnuncioSinAnuncio[0]??null;
  1230.                         $estadosNoValidos = [EstadoRelojEnum::ESTADO_RECEPCION, EstadoRelojEnum::ESTADO_ENVIADO, EstadoRelojEnum::ESTADO_SIN_ANUNCIAR, EstadoRelojEnum::ESTADO_EN_VENTA, EstadoRelojEnum::ESTADO_GESTION, EstadoRelojEnum::ESTADO_COMPRA];
  1231.                         if($estadoReciente?->getEstado()->getKey() === EstadoRelojEnum::ESTADO_ANUNCIO)
  1232.                         {
  1233.                             $estadosNoValidos = [EstadoRelojEnum::ESTADO_RECEPCION, EstadoRelojEnum::ESTADO_ENVIADO, EstadoRelojEnum::ESTADO_EN_VENTA, EstadoRelojEnum::ESTADO_GESTION, EstadoRelojEnum::ESTADO_COMPRA];
  1234.                         }
  1235.                         if(in_array($choice, $estadosNoValidos)) $returnChoice = null;*/
  1236.                         return $returnChoice;
  1237.                     },
  1238.                     'row_attr' => [
  1239.                         'class' => 'accion accion-estado',
  1240.                         'hidden' => true
  1241.                     ],
  1242.                 ])
  1243.                 ->add('accionCoste'null, [
  1244.                     'label' => 'form.promocion.label.accion_coste',
  1245.                     'mapped' => false,
  1246.                     'required' => false,
  1247.                     'attr' => [
  1248.                         'placeholder' => 'form.promocion.placeholder.accion_coste',
  1249.                         'class' => 'numeric currencies',
  1250.                     ],
  1251.                     'row_attr' => [
  1252.                         'class' => 'numeric currencies accion accion-servicio accion-mejora accion-venta accion-estado-importacion',
  1253.                         'hidden' => true
  1254.                     ],
  1255.                     'translation_domain' => 'promocionAdmin',
  1256.                 ])
  1257.                 ->add('accionPrecio'null, [
  1258.                     'label' => 'form.promocion.label.accion_precio',
  1259.                     'mapped' => false,
  1260.                     'required' => false,
  1261.                     'attr' => [
  1262.                         'placeholder' => 'form.promocion.placeholder.accion_precio',
  1263.                         'class' => 'numeric currencies',
  1264.                     ],
  1265.                     'row_attr' => [
  1266.                         'class' => 'numeric currencies accion accion-competencia accion-anuncio',
  1267.                         'hidden' => true
  1268.                     ],
  1269.                     'translation_domain' => 'promocionAdmin',
  1270.                 ])
  1271.                 ->add('precioPromocion'null, [
  1272.                     'label' => 'form.promocion.label.precio_promocion',
  1273.                     'mapped' => false,
  1274.                     'attr' => [
  1275.                         'placeholder' => 'form.promocion.placeholder.precio_promocion',
  1276.                         'class' => 'numeric currencies'
  1277.                     ],
  1278.                     'row_attr' => [
  1279.                         'class' => 'numeric currencies accion accion-estado-anuncio',
  1280.                         'hidden' => true
  1281.                     ],
  1282.                     'translation_domain' => 'promocionAdmin',
  1283.                 ])
  1284.                 ->add('accionDescripcion'TextareaType::class, [
  1285.                     'label' => 'form.promocion.label.accion_descripcion',
  1286.                     'mapped' => false,
  1287.                     'required' => false,
  1288.                     'attr' => [
  1289.                         'rows' => 5,
  1290.                         'placeholder' => 'form.promocion.placeholder.accion_descripcion',
  1291.                     ],
  1292.                     'translation_domain' => 'promocionAdmin',
  1293.                 ])
  1294.                 ->add('accionAddButton'HTMLType::class, [
  1295.                     'label' => false,
  1296.                     'template' => 'admin/promocion/accion_add_button.html.twig'
  1297.                 ])
  1298.                 ->add('scriptControlFieldsAccion'ScriptType::class, [
  1299.                     'template' => 'SCRIPTS/Promocion/control_fields_accion.html.twig'
  1300.                 ])
  1301.                 ->add('scriptAddAccion'ScriptType::class, [
  1302.                     'template' => 'SCRIPTS/Promocion/add_accion.html.twig'
  1303.                 ])
  1304.             ->end()
  1305. //            ->with('with_card_reloj', [
  1306. //                'label' => 'form.promocion.with_card_reloj.label',
  1307. //                'class' => 'with-collapse col-md-12'
  1308. //            ])
  1309. //                ->add('desarrollo', HTMLType::class, [
  1310. //                    'label' => false,
  1311. //                    'data' => '<p style="color: red; font-size: x-large; font-weight: bolder;">Este apartado se encuentra aún en desarrollo</p>'
  1312. //                ])
  1313. //            ->end()
  1314.             ->with('with_card_reloj', [
  1315.                 'label' => 'form.promocion.with_card_reloj.label',
  1316.                 'class' => 'with-collapse col-md-12'
  1317.             ])
  1318.                 // Bloque General
  1319.                 ->add('bloque_general'HTMLType::class, [
  1320.                     'label' => false,
  1321.                     'data' => '<h2>'.$this->getTranslator()->trans('bloque_general', [], 'promocionAdmin').'</h2>'
  1322.                 ])
  1323.                 ->add('reloj.genero'ChoiceType::class, [
  1324.                     'label' => 'form.promocion.label.reloj_genero',
  1325.                     'choices' => array_flip(GeneroRelojEnum::all()),
  1326.                     'placeholder' => 'form.promocion.placeholder.reloj_genero',
  1327.                     'required' => false,
  1328.                     'attr' => ['class'=>'col-md-6'],
  1329.                     'choice_label' => function ($choice$key$value) {
  1330.                         return $this->getTranslator()->trans($key, [], 'enum');
  1331.                     }
  1332.                 ])
  1333.                 ->add('relojEstadoGeneral'EntityType::class, [
  1334.                     'label' => 'form.promocion.label.reloj_estado_general',
  1335.                     'placeholder' => 'form.promocion.placeholder.reloj_estado_general',
  1336.                     'required' => false,
  1337.                     'mapped' => false,
  1338.                     'class' => EstadoAspecto::class,
  1339.                     'disabled' => true,
  1340.                     'data' => $reloj->getAspecto(),
  1341.                     'attr' => [
  1342.                         'class'=>'condition-slider row mb-3'
  1343.                     ]
  1344.                 ])
  1345.                 ->add('reloj.estadoCaja'RangeType::class, [
  1346.                     'label'=>'Caja',
  1347.                     'required' => false,
  1348.                     'attr' => [
  1349.                         'min' => 1,
  1350.                         'max' => 5,
  1351.                         'step' => 1,
  1352.                         'class' => 'static-gradient-slider rating-slider',
  1353.                     ],
  1354.                     'row_attr' => [
  1355.                         'class' => 'rating-slider-container'
  1356.                     ]
  1357.                 ])
  1358.                 ->add('reloj.estadoCristal'RangeType::class, [
  1359.                     'label'=>'Cristal',
  1360.                     'required' => false,
  1361.                     'attr' => [
  1362.                         'min' => 1,
  1363.                         'max' => 5,
  1364.                         'step' => 1,
  1365.                         'class' => 'static-gradient-slider rating-slider',
  1366.                     ],
  1367.                     'row_attr' => [
  1368.                         'class' => 'rating-slider-container'
  1369.                     ]
  1370.                 ])
  1371.                 ->add('reloj.estadoDial'RangeType::class, [
  1372.                     'label'=>'Dial',
  1373.                     'required' => false,
  1374.                     'attr' => [
  1375.                         'min' => 1,
  1376.                         'max' => 5,
  1377.                         'step' => 1,
  1378.                         'class' => 'static-gradient-slider rating-slider',
  1379.                     ],
  1380.                     'row_attr' => [
  1381.                         'class' => 'rating-slider-container'
  1382.                     ]
  1383.                 ])
  1384.                 ->add('reloj.estadoAgujas'RangeType::class, [
  1385.                     'label'=>'Agujas',
  1386.                     'required' => false,
  1387.                     'attr' => [
  1388.                         'min' => 1,
  1389.                         'max' => 5,
  1390.                         'step' => 1,
  1391.                         'class' => 'static-gradient-slider rating-slider',
  1392.                     ],
  1393.                     'row_attr' => [
  1394.                         'class' => 'rating-slider-container'
  1395.                     ]
  1396.                 ])
  1397.                 ->add('reloj.estadoTapa'RangeType::class, [
  1398.                     'label'=>'Tapa',
  1399.                     'required' => false,
  1400.                     'attr' => [
  1401.                         'min' => 1,
  1402.                         'max' => 5,
  1403.                         'step' => 1,
  1404.                         'class' => 'static-gradient-slider rating-slider',
  1405.                     ],
  1406.                     'row_attr' => [
  1407.                         'class' => 'rating-slider-container'
  1408.                     ]
  1409.                 ])
  1410.                 ->add('reloj.estadoCorrea'RangeType::class, [
  1411.                     'label' => 'Brazalete/Correa',
  1412.                     'required' => false,
  1413.                     'attr' => [
  1414.                         'min' => 1,
  1415.                         'max' => 5,
  1416.                         'step' => 1,
  1417.                         'class' => 'static-gradient-slider rating-slider',
  1418.                     ],
  1419.                     'row_attr' => [
  1420.                         'class' => 'rating-slider-container'
  1421.                     ]
  1422.                 ])
  1423.                 ->add('leyenda_estado_reloj'HTMLType::class, [
  1424.                     'label' => false,
  1425.                     'data' => '<p>Leyeda estado reloj</p>'
  1426.                 ])
  1427.                 // Esfera
  1428.                 ->add('bloque_esfera'HTMLType::class, [
  1429.                     'label' => false,
  1430.                     'data' => '<h2>'.$this->getTranslator()->trans('bloque_esfera', [], 'promocionAdmin').'</h2>'
  1431.                 ])
  1432.                 ->add('reloj.esferaIndice'ChoiceType::class, [
  1433.                     'label' => 'form.promocion.label.reloj_esfera_indice',
  1434.                     'choices' => array_flip(TipoEsferaIndiceEnum::all()),
  1435.                     'placeholder' => 'form.promocion.placeholder.reloj_esfera_indice',
  1436.                     'required' => false,
  1437.                     'choice_label' => function ($choice$key$value) {
  1438.                         return $this->getTranslator()->trans($key, [], 'enum');
  1439.                     }
  1440.                 ])
  1441.                 ->add('reloj.esferaColor'ColorType::class, [
  1442.                     'label' => 'form.promocion.label.reloj_esfera_color',
  1443.                     'required' => false,
  1444.                 ])
  1445.                 ->add('reloj.esferaJoyas'CheckboxType::class, [
  1446.                     'label' => 'form.promocion.label.reloj_esfera_joyas',
  1447.                     'required' => false,
  1448.                 ])
  1449.                 //Caja Reloj
  1450.                 ->add('bloque_caja'HTMLType::class, [
  1451.                     'label' => false,
  1452.                     'data' => '<h2>'.$this->getTranslator()->trans('bloque_caja', [], 'promocionAdmin').'</h2>'
  1453.                 ])
  1454.                 ->add('reloj.cajaRelojDiametro'IntegerType::class, [
  1455.                     'label' => 'form.promocion.label.reloj_caja_reloj_diametro',
  1456.                     'required' => false,
  1457.                     'attr' => ['placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_diametro'],
  1458.                     'translation_domain' => 'promocionAdmin',
  1459.                 ])
  1460.                 ->add('reloj.cajaRelojGrosor'IntegerType::class, [
  1461.                     'label' => 'form.promocion.label.reloj_caja_reloj_grosor',
  1462.                     'required' => false,
  1463.                     'attr' => ['placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_grosor'],
  1464.                     'translation_domain' => 'promocionAdmin',
  1465.                 ])
  1466.                 ->add('reloj.cajaRelojResistenciaAgua'IntegerType::class, [
  1467.                     'label' => 'form.promocion.label.reloj_caja_reloj_resistencia_agua',
  1468.                     'required' => false,
  1469.                     'attr' => ['placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_resistencia_agua'],
  1470.                     'translation_domain' => 'promocionAdmin',
  1471.                 ])
  1472.                 ->add('reloj.cajaRelojCristal'ChoiceType::class, [
  1473.                     'label' => 'form.promocion.label.reloj_caja_reloj_cristal',
  1474.                     'choices' => array_flip(TipoCristalEnum::all()),
  1475.                     'placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_cristal',
  1476.                     'required' => false,
  1477.                     'choice_label' => function ($choice$key$value) {
  1478.                         return $this->getTranslator()->trans($key, [], 'enum');
  1479.                     }
  1480.                 ])
  1481.                 ->add('reloj.cajaRelojMaterial'EntityType::class, [
  1482.                     'label' => 'form.promocion.label.reloj_caja_reloj_material',
  1483.                     'class' => Material::class,
  1484.                     'placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_material',
  1485.                     'required' => false,
  1486.                 ])
  1487.                 ->add('reloj.cajaRelojMaterialBisel'EntityType::class, [
  1488.                     'label' => 'form.promocion.label.reloj_caja_reloj_material_bisel',
  1489.                     'class' => Material::class,
  1490.                     'placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_material_bisel',
  1491.                     'required' => false,
  1492.                 ])
  1493.                 // Pulsera
  1494.                 ->add('bloque_pulsera'HTMLType::class, [
  1495.                     'label' => false,
  1496.                     'data' => '<h2>'.$this->getTranslator()->trans('bloque_pulsera', [], 'promocionAdmin').'</h2>'
  1497.                 ])
  1498.                 ->add('reloj.pulseraMaterial'EntityType::class, [
  1499.                     'label' => 'form.promocion.label.reloj_pulsera_material',
  1500.                     'class' => Material::class,
  1501.                     'placeholder' => 'form.promocion.placeholder.reloj_pulsera_material',
  1502.                     'required' => false,
  1503.                 ])
  1504.                 ->add('reloj.pulseraColor'ColorType::class, [
  1505.                     'label' => 'form.promocion.label.reloj_pulsera_color',
  1506.                     'required' => false,
  1507.                 ],[
  1508.                     'placeholder' => 'form.promocion.placeholder.reloj_pulsera_color'
  1509.                 ])
  1510.                 ->add('reloj.pulseraCierre'ChoiceType::class, [
  1511.                     'label' => 'form.promocion.label.reloj_pulsera_cierre',
  1512.                     'choices' => array_flip(TipoCierreEnum::all()),
  1513.                     'placeholder' => 'form.promocion.placeholder.reloj_pulsera_cierre',
  1514.                     'required' => false,
  1515.                     'choice_label' => function ($choice$key$value) {
  1516.                         return $this->getTranslator()->trans($key, [], 'enum');
  1517.                     }
  1518.                 ])
  1519.                 ->add('reloj.pulseraMaterialCierre'EntityType::class, [
  1520.                     'label' => 'form.promocion.label.reloj_pulsera_material_cierre',
  1521.                     'class' => Material::class,
  1522.                     'placeholder' => 'form.promocion.placeholder.reloj_pulsera_material_cierre',
  1523.                     'required' => false,
  1524.                 ])
  1525.                 ->add('reloj.pulseraMedidaMunieca'IntegerType::class, [
  1526.                     'label' => 'form.promocion.label.reloj_pulsera_medida_munieca',
  1527.                     'required' => false,
  1528.                     'attr' => [
  1529.                         'placeholder' => 'form.promocion.placeholder.reloj_pulsera_medida_munieca'
  1530.                     ],
  1531.                     'translation_domain' => 'promocionAdmin',
  1532.                 ])
  1533.                 ->add('reloj.pulseraAnchoCaja'IntegerType::class, [
  1534.                     'label' => 'form.promocion.label.reloj_pulsera_ancho_caja',
  1535.                     'required' => false,
  1536.                     'attr' => [
  1537.                         'placeholder' => 'form.promocion.placeholder.reloj_pulsera_ancho_caja'
  1538.                     ],
  1539.                     'translation_domain' => 'promocionAdmin',
  1540.                 ])
  1541.                 ->add('reloj.pulseraAnchoCierre'IntegerType::class, [
  1542.                     'label' => 'form.promocion.label.reloj_pulsera_ancho_cierre',
  1543.                     'required' => false,
  1544.                     'attr' => [
  1545.                         'placeholder' => 'form.promocion.placeholder.reloj_pulsera_ancho_cierre'
  1546.                     ],
  1547.                     'translation_domain' => 'promocionAdmin',
  1548.                 ])
  1549.                 // Calibre
  1550.                 ->add('bloque_calibre'HTMLType::class, [
  1551.                     'label' => false,
  1552.                     'data' => '<h2>'.$this->getTranslator()->trans('bloque_calibre', [], 'promocionAdmin').'</h2>'
  1553.                 ])
  1554.                 ->add('subbloque_calibre_avanzado'HTMLType::class, [
  1555.                     'label' => false,
  1556.                     'data' => '<h3>'.$this->getTranslator()->trans('subbloque_calibre_avanzado', [], 'promocionAdmin').'</h3>'
  1557.                 ])
  1558.                 ->add('reloj.calibre'ChoiceType::class, [
  1559.                     'label' => 'form.promocion.label.reloj_calibre',
  1560.                     'choices' => array_flip(CalibreEnum::all()),
  1561.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre',
  1562.                     'required' => false,
  1563.                     'choice_label' => function ($choice$key$value) {
  1564.                         return $this->getTranslator()->trans($key, [], 'enum');
  1565.                     }
  1566.                 ])
  1567. //                ->add('reloj.calibreAvanzado', null, [
  1568. //                    'label' => 'form.promocion.label.reloj_calibre_avanzado',
  1569. //                    'attr' => [
  1570. //                        'placeholder' => 'form.promocion.placeholder.reloj_calibre_avanzado',
  1571. //                    ],
  1572. //                    'translation_domain' => 'promocionAdmin',
  1573. //                ])
  1574.                 ->add('reloj.calibreBasico'null, [
  1575.                     'label' => 'form.promocion.label.reloj_calibre_basico',
  1576.                     'attr' => [
  1577.                         'placeholder' => 'form.promocion.placeholder.reloj_calibre_basico',
  1578.                     ],
  1579.                     'translation_domain' => 'promocionAdmin',
  1580.                 ])
  1581.             ->add('reloj.calibreReservaMarcha'null, [
  1582.                 'label' => 'form.promocion.label.reloj_calibre_reserva_marcha',
  1583.                 'attr' => [
  1584.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre_reserva_marcha',
  1585.                 ],
  1586.                 'translation_domain' => 'promocionAdmin',
  1587.             ])
  1588.             ->add('reloj.calibreMarcha'null, [
  1589.                 'label' => 'form.promocion.label.reloj_calibre_marcha',
  1590.                 'attr' => [
  1591.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre_marcha',
  1592.                 ],
  1593.                 'translation_domain' => 'promocionAdmin',
  1594.             ])
  1595.             ->add('reloj.calibreNumeroJoyas'null, [
  1596.                 'label' => 'form.promocion.label.reloj_calibre_numero_joyas',
  1597.                 'attr' => [
  1598.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre_numero_joyas',
  1599.                 ],
  1600.                 'translation_domain' => 'promocionAdmin',
  1601.             ])
  1602.             ->add('reloj.calibreOscilacion'null, [
  1603.                 'label' => 'form.promocion.label.reloj_calibre_oscilacion',
  1604.                 'attr' => [
  1605.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre_oscilacion',
  1606.                 ],
  1607.                 'translation_domain' => 'promocionAdmin',
  1608.             ])
  1609.             ->add('reloj.calibreAmplitud'null, [
  1610.                 'label' => 'form.promocion.label.reloj_calibre_amplitud',
  1611.                 'attr' => [
  1612.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre_amplitud',
  1613.                 ],
  1614.                 'translation_domain' => 'promocionAdmin',
  1615.             ])
  1616.                 ->add('reloj.piezasRepuesto'ChoiceType::class, [
  1617.                     'label' => 'form.promocion.label.reloj_piezas_repuesto',
  1618.                     'choices' => array_flip(PiezaRepuestoEnum::all()),
  1619.                     'placeholder' => 'form.promocion.placeholder.reloj_piezas_repuesto',
  1620.                     'required' => false,
  1621.                     'choice_label' => function ($choice$key$value) {
  1622.                         return $this->getTranslator()->trans($key, [], 'enum');
  1623.                     }
  1624.                 ])
  1625.                 ->add('reloj.piezasRepuestoObservaciones'TextareaType::class, [
  1626.                     'label' => 'form.promocion.label.reloj_piezas_repuesto_observaciones',
  1627.                     'attr' => [
  1628.                         'placeholder' => 'form.promocion.placeholder.reloj_piezas_repuesto_observaciones',
  1629.                     ],
  1630.                     'translation_domain' => 'promocionAdmin',
  1631.                     'required' => false,
  1632.                 ])
  1633.                 ->add('reloj.servicioMantenimiento'ChoiceType::class, [
  1634.                     'label' => 'form.promocion.label.reloj_servicio_mantenimiento',
  1635.                     'choices' => array_flip(ServicioMantenimientoEnum::all()),
  1636.                     'placeholder' => 'form.promocion.placeholder.reloj_servicio_mantenimiento',
  1637.                     'required' => false,
  1638.                     'choice_label' => function ($choice$key$value) {
  1639.                         return $this->getTranslator()->trans($key, [], 'enum');
  1640.                     }
  1641.                 ])
  1642.                 ->add('reloj.calibreCaracteristicas'ChoiceType::class, [
  1643.                     'label' => 'form.promocion.label.reloj_calibre_caracteristicas',
  1644.                     'choices' => array_flip(CalibreCaracteristicasEnum::all()),
  1645.                     'multiple' => true,
  1646.                     'expanded' => false,
  1647.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre_caracteristicas',
  1648.                     'required' => false,
  1649.                     'attr' => [
  1650.                         'class' => 'feature-checkbox row'
  1651.                     ],
  1652.                     'choice_label' => function ($choice$key$value) {
  1653.                         return $this->getTranslator()->trans($key, [], 'enum');
  1654.                     }
  1655.                 ])
  1656.                 ->add('reloj.calibreFunciones'ChoiceType::class, [
  1657.                     'label' => 'form.promocion.label.reloj_calibre_funciones',
  1658.                     'choices' => array_flip(CalibreFuncionesEnum::all()),
  1659.                     'multiple' => true,
  1660.                     'expanded' => false,
  1661.                     'placeholder' => 'form.promocion.placeholder.reloj_calibre_funciones',
  1662.                     'required' => false,
  1663.                     'attr' => [
  1664.                         'class'=>'feature-checkbox row'
  1665.                     ],
  1666.                     'choice_label' => function ($choice$key$value) {
  1667.                         return $this->getTranslator()->trans($key, [], 'enum');
  1668.                     }
  1669.                 ])
  1670.                 // Bloques de texto
  1671.                 ->add('reloj.descripcionDetallada'TextareaType::class, [
  1672.                     'label' => 'form.promocion.label.reloj_descripcion_detallada',
  1673.                     'required' => false,
  1674.                     'attr' => [
  1675.                         'placeholder' => 'form.promocion.placeholder.reloj_descripcion_detallada',
  1676.                         'class'=>'col-md-12 mb-3'
  1677.                     ],
  1678.                     'translation_domain' => 'promocionAdmin',
  1679.                 ])
  1680.                 ->add('reloj.condiciones'TextareaType::class, [
  1681.                     'label' => 'form.promocion.label.reloj_condiciones',
  1682.                     'required' => false,
  1683.                     'attr' => [
  1684.                         'placeholder' => 'form.promocion.placeholder.reloj_condiciones',
  1685.                         'class' => 'col-md-12 mb-3'
  1686.                     ],
  1687.                     'translation_domain' => 'promocionAdmin',
  1688.                 ])
  1689. //                ->add('bloque_anuncio', HTMLType::class, [
  1690. //                    'label' => false,
  1691. //                    'template' => 'admin/promocion/anuncio.html.twig',
  1692. //                ])
  1693.             ->end()
  1694.         ;
  1695.         $form->getFormBuilder()->get('reloj__marca')
  1696.             ->addModelTransformer(new CallbackTransformer(
  1697.                     function ($marca//transform
  1698.                     {
  1699.                         return $marca?->getId() ? $marca null;
  1700.                     },
  1701.                     function ($marca//reverseTransform
  1702.                     {
  1703.                         return MarcaAbstractTransformer::toMarca($marca);
  1704.                     })
  1705.             )
  1706.             ->addViewTransformer(new CallbackTransformer(
  1707.                     function ($marca//transform
  1708.                     {
  1709.                         return MarcaAbstractTransformer::toString($marca);
  1710.                     },
  1711.                     function ($marca//reverseTransform
  1712.                     {
  1713.                         return $marca;
  1714.                     })
  1715.             )
  1716.         ;
  1717.         $form->getFormBuilder()->get('reloj__aspecto')
  1718.             ->addModelTransformer(new CallbackTransformer(
  1719.                     function ($aspecto//transform
  1720.                     {
  1721.                         return $aspecto?->getId() ? $aspecto null;
  1722.                     },
  1723.                     function ($aspecto//reverseTransform
  1724.                     {
  1725.                         return EstadoAbstractTransformer::toEstado($aspecto);
  1726.                     })
  1727.             )
  1728.             ->addViewTransformer(new CallbackTransformer(
  1729.                     function ($aspecto//transform
  1730.                     {
  1731.                         return EstadoAbstractTransformer::toString($aspecto);
  1732.                     },
  1733.                     function ($aspecto//reverseTransform
  1734.                     {
  1735.                         return $aspecto;
  1736.                     })
  1737.             )
  1738.         ;
  1739.         $form->getFormBuilder()->get('reloj__genero')
  1740.             ->addModelTransformer(new GeneroRelojEnumToStringTransformer())
  1741.         ;
  1742.         $form->getFormBuilder()->get('reloj__esferaIndice')
  1743.             ->addModelTransformer(new TipoEsferaIndiceEnumToStringTransformer())
  1744.         ;
  1745.         $form->getFormBuilder()->get('reloj__cajaRelojCristal')
  1746.             ->addModelTransformer(new TipoCristalEnumToStringTransformer())
  1747.         ;
  1748.         $form->getFormBuilder()->get('reloj__pulseraCierre')
  1749.             ->addModelTransformer(new TipoCierreEnumToStringTransformer())
  1750.         ;
  1751.         $form->getFormBuilder()->get('reloj__calibre')
  1752.             ->addModelTransformer(new CalibreEnumToStringTransformer())
  1753.         ;
  1754.         $form->getFormBuilder()->get('reloj__piezasRepuesto')
  1755.             ->addModelTransformer(new PiezaRepuestoEnumToStringTransformer())
  1756.         ;
  1757.         $form->getFormBuilder()->get('reloj__servicioMantenimiento')
  1758.             ->addModelTransformer(new ServicioMantenimientoEnumToStringTransformer())
  1759.         ;
  1760.     }
  1761. }