src/Admin/DetalleCompraAdmin.php line 148

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use App\Entity\EstadoAspecto;
  5. use App\Entity\Marca;
  6. use App\Entity\Reloj;
  7. use App\Enum\EstadoOperacionEnum;
  8. use App\Enum\RegimenEnum;
  9. use App\Enum\TipoOperacionEnum;
  10. use App\Form\Type\HTMLType;
  11. use App\Form\Type\ScriptType;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Sonata\AdminBundle\Admin\AbstractAdmin;
  14. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  15. use Sonata\AdminBundle\Datagrid\ListMapper;
  16. use Sonata\AdminBundle\Form\FormMapper;
  17. use Sonata\AdminBundle\Form\Type\ModelListType;
  18. use Sonata\AdminBundle\Show\ShowMapper;
  19. use Sonata\Form\Type\DatePickerType;
  20. use Sonata\Form\Type\DateTimePickerType;
  21. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  22. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  23. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  24. use Symfony\Component\Validator\Constraints\Count;
  25. use Symfony\Component\Validator\Constraints\NotBlank;
  26. use Vich\UploaderBundle\Form\Type\VichImageType;
  27. final class DetalleCompraAdmin extends AbstractAdmin
  28. {
  29.     public function __construct(string $codestring $classstring $baseControllerName, private EntityManagerInterface $em)
  30.     {
  31.         parent::__construct($code$class$baseControllerName);
  32.         $this->setTranslationDomain('detalleCompraAdmin');
  33.     }
  34.     protected function configureDatagridFilters(DatagridMapper $filter): void
  35.     {
  36.         $filter
  37.         ;
  38.     }
  39.     protected function configureListFields(ListMapper $list): void
  40.     {
  41.         $list
  42.             ->add(ListMapper::NAME_ACTIONSnull, [
  43.                 'actions' => [
  44.                     'show' => [],
  45.                     'edit' => [],
  46.                     'delete' => [],
  47.                 ],
  48.             ])
  49.         ;
  50.     }
  51.     protected function configureFormFields(FormMapper $form): void
  52.     {
  53.         $this->setTranslationDomain('detalleCompraAdmin');
  54.         $object $this->getSubject();
  55.         $isCompraGestion $object->getCompra()?->getOperacion()?->isCompraGestion();
  56.         $operacion $object?->getCompra()?->getOperacion();
  57.         $estadoOperacion $operacion?->getEstado()?->getKey();
  58.         $classNoBlock $isCompraGestion && $estadoOperacion === EstadoOperacionEnum::ESTADO_EN_TRAMITACION 'no-block' '';
  59.         $regimenReadonly $operacion?->getExportacion() ? 'readonly' '';
  60.         $form
  61.             ->add('precioCoste'null, [
  62.                 'label' => false,
  63.                 'translation_domain' => 'detalleCompraAdmin',
  64.                 'attr' => [
  65.                     'placeholder' => 'form.detalle_compra.placeholder.precio_coste',
  66.                     'class' => 'numeric currencies',
  67.                     'style' => !$estadoOperacion || $estadoOperacion === EstadoOperacionEnum::ESTADO_EN_TRAMITACION 'height: 78px;' null
  68.                 ],
  69.                 'row_attr' => [
  70.                     'class' => "$classNoBlock control-block-unblock-fields",
  71.                 ]
  72.             ])
  73.             ->add('precioPromocion'null, [
  74.                 'label' => false,
  75.                 'translation_domain' => 'detalleCompraAdmin',
  76. //                'disabled' => true,
  77.                 'attr' => [
  78.                     'placeholder' => 'form.detalle_compra.placeholder.precio_promocion',
  79.                     'class' => 'numeric currencies'
  80.                 ]
  81.             ])
  82.             /*->add('reloj', null, [
  83.                 'label' => false,
  84.                 'disabled' => true,
  85.                 'placeholder' => 'form.detalle_compra.placeholder.reloj'
  86.             ])*/
  87. //            ->add('reloj', ModelListType::class, [
  88. //                'label' => false,
  89. //                'class' => Reloj::class,
  90. //                'attr' => [
  91. //                    'data-max_length' => 10
  92. //                ],
  93. //                'row_attr' => [
  94. //                    'class' => !$this->isDisabled() ? 'display-model-list-type disabled' : 'display-model-list-type',
  95. //                ],
  96. ////                'btn_list' => !$this->isDisabled(),
  97. //                'btn_edit' => false,
  98. //                'btn_delete' => false,
  99. //                'btn_add' => false
  100. //            ], [
  101. //                'placeholder' => 'form.detalle_compra.placeholder.reloj',
  102. //                'link_parameters' => [
  103. //                    'nav_prometeo' => true
  104. //                ],
  105. //            ])
  106.             ->add('relojFoto'HiddenType::class, [
  107.                 'attr' => [
  108.                     'class' => 'vich-image-delete-original'
  109.                 ]
  110.             ])
  111.             ->add('relojFotoFile'VichImageType::class, [
  112.                 'label' => false,
  113.                 'required' => false,
  114.                 'disabled' => $this->isDisabled(),
  115.                 'allow_delete' => true,
  116.                 'download_uri' => true,
  117.                 'download_label' => false,
  118.                 'attr' => [
  119.                     'data-title_image_delete' => null,
  120.                     'data-message_image_delete' => null,
  121.                     'class' => 'vich-image-load'
  122.                 ],
  123.                 'row_attr' => [
  124.                     'class' => 'no-block'
  125.                 ]
  126.             ])
  127.             ->add('reloj.promociones'HTMLType::class, [
  128.                 'label' => false,
  129.                 'row_attr' => [
  130.                     'class' => 'no-block',
  131.                 ],
  132.                 'template' => 'admin/reloj/icon_promocion.html.twig'
  133.             ])
  134.             ->add('relojRegimen'ChoiceType::class, [
  135.                 'label' => false,
  136.                 'placeholder' => 'form.detalle_compra.placeholder.reloj_regimen',
  137.                 'disabled' => $this->isDisabled(),
  138.                 'choices' => array_flip(RegimenEnum::getRegimenes()),
  139.                 'choice_label' => function ($choice$key$value) {
  140.                     return $this->getTranslator()->trans(RegimenEnum::getRegimen($choice), [], 'enum');
  141.                 },
  142.                 'data' => $object->getRelojRegimen() ? $object->getRelojRegimen() : RegimenEnum::REGIMEN_REBU,
  143.                 'row_attr' => [
  144.                     'class' => "control-unblock-block control-regimen $regimenReadonly"
  145.                 ]
  146.             ])
  147.             ->add('relojMarca'ModelListType::class, [
  148.                 'label' => false,
  149.                 'class' => Marca::class,
  150.                 'attr' => [
  151.                     'data-max_length' => 10
  152.                 ],
  153.                 'row_attr' => [
  154.                     'class' => $this->isDisabled() ? 'display-model-list-type disabled control-unblock-block' 'display-model-list-type control-unblock-block',
  155.                 ],
  156. //                'btn_list' => !$this->isDisabled(),
  157.                 'btn_edit' => false,
  158.                 'btn_delete' => false,
  159.                 'btn_add' => false,
  160.             ], [
  161.                 'placeholder' => 'form.detalle_compra.placeholder.reloj.marca',
  162.                 'link_parameters' => [
  163.                     'nav_prometeo' => true
  164.                 ],
  165.             ])
  166.             ->add('relojModelo1'null, [
  167.                 'label' => false,
  168.                 'translation_domain' => 'detalleCompraAdmin',
  169.                 'disabled' => $this->isDisabled(),
  170.                 'attr' => [
  171.                     'placeholder' => 'form.detalle_compra.placeholder.reloj.modelo1'
  172.                 ],
  173.                 'row_attr' => [
  174.                     'class' => 'control-unblock-block'
  175.                 ]
  176.             ])
  177.             ->add('relojModelo2'null, [
  178.                 'label' => false,
  179.                 'translation_domain' => 'detalleCompraAdmin',
  180.                 'disabled' => $this->isDisabled(),
  181.                 'attr' => [
  182.                     'placeholder' => 'form.detalle_compra.placeholder.reloj.modelo2'
  183.                 ],
  184.                 'row_attr' => [
  185.                     'class' => 'control-unblock-block'
  186.                 ]
  187.             ])
  188.             ->add('relojRef1'null, [
  189.                 'label' => false,
  190.                 'translation_domain' => 'detalleCompraAdmin',
  191.                 'disabled' => $this->isDisabled(),
  192.                 'attr' => [
  193.                     'placeholder' => 'form.detalle_compra.placeholder.reloj.ref1'
  194.                 ],
  195.                 'row_attr' => [
  196.                     'class' => 'control-unblock-block'
  197.                 ]
  198.             ])
  199.             ->add('relojRef2'null, [
  200.                 'label' => false,
  201.                 'translation_domain' => 'detalleCompraAdmin',
  202.                 'disabled' => $this->isDisabled(),
  203.                 'attr' => [
  204.                     'placeholder' => 'form.detalle_compra.placeholder.reloj.ref2'
  205.                 ],
  206.                 'row_attr' => [
  207.                     'class' => 'control-unblock-block'
  208.                 ]
  209.             ])
  210.             ->add('relojSerie'null, [
  211.                 'label' => false,
  212.                 'translation_domain' => 'detalleCompraAdmin',
  213.                 'disabled' => $this->isDisabled(),
  214.                 'attr' => [
  215.                     'placeholder' => 'form.detalle_compra.placeholder.reloj.serie'
  216.                 ],
  217.                 'row_attr' => [
  218.                     'class' => 'control-unblock-block'
  219.                 ]
  220.             ])
  221.             ->add('relojFecha'DatePickerType::class, [
  222.                 'label' => false,
  223.                 'translation_domain' => 'detalleCompraAdmin',
  224.                 'disabled' => $this->isDisabled(),
  225.                 'format' => 'dd-MM-yyyy',
  226.                 'attr' => [
  227.                     'placeholder' => 'form.detalle_compra.placeholder.reloj.fecha'
  228.                 ],
  229.                 'row_attr' => [
  230.                     'class' => 'control-unblock-block'
  231.                 ]
  232.             ])
  233.             ->add('relojAspecto'null, [
  234.                 'label' => false,
  235.                 'translation_domain' => 'detalleCompraAdmin',
  236.                 'disabled' => $this->isDisabled(),
  237.                 'placeholder' => 'form.detalle_compra.placeholder.reloj.aspecto',
  238.                 'query_builder' => $this->em->getRepository(EstadoAspecto::class)->qbAll(),
  239.                 'row_attr' => [
  240.                     'class' => 'control-unblock-block'
  241.                 ]
  242.             ])
  243.             ->add('relojCaja'CheckboxType::class, [
  244.                 'label' => false,
  245.                 'required' => false,
  246.                 'disabled' => $this->isDisabled(),
  247.                 'data' => $object->isRelojCaja() ?? false,
  248.                 'row_attr' => [
  249.                     'class' => 'control-unblock-block'
  250.                 ]
  251.             ])
  252.             ->add('relojPapeles'CheckboxType::class, [
  253.                 'label' => false,
  254.                 'required' => false,
  255.                 'data' => $object->isRelojPapeles() ?? false,
  256.                 'disabled' => $this->isDisabled(),
  257.                 'row_attr' => [
  258.                     'class' => 'control-unblock-block'
  259.                 ]
  260.             ])
  261.             ->add('comentario'null, [
  262.                 'label' => false,
  263.                 'translation_domain' => 'detalleCompraAdmin',
  264.                 'attr' => [
  265.                     'placeholder' => 'form.detalle_compra.placeholder.comentario'
  266.                 ],
  267.                 'row_attr' => [
  268.                     'class' => "control-unblock-block $classNoBlock"
  269.                 ]
  270.             ])
  271.         ;
  272.         /*if(!$isCompraGestion && $estadoOperacion && $estadoOperacion === EstadoOperacionEnum::ESTADO_TRAMITADA) {
  273.             $form
  274.                 ->add('_unblock_block', HTMLType::class, [
  275.                     'label' => false,
  276.                     'row_attr' => [
  277.                         'class' => 'no-block',
  278.                     ],
  279.                     'template' => 'admin/reloj/icon_unblock_block.html.twig'
  280.                 ])
  281.             ;
  282.         }*/
  283.         if(!$isCompraGestion && $estadoOperacion && $estadoOperacion !== EstadoOperacionEnum::ESTADO_EN_TRAMITACION) {
  284.            $reloj $object->getRelojGestion();
  285.             $form
  286.                 ->add('fechaVerificacion'DatePickerType::class, [
  287.                     'label' => false,
  288.                     'translation_domain' => 'detalleCompraAdmin',
  289.                     'format' => 'dd-MM-yyyy',
  290.                     'attr' => [
  291.                         'placeholder' => 'form.detalle_compra.placeholder.fecha_verificacion',
  292.                     ],
  293.                     'row_attr' => [
  294.                         'class' => $this->isBlock($estadoOperacion) || $reloj 'control-fecha-verificacion show-title-no-block' 'no-block control-fecha-verificacion'
  295.                     ],
  296.                     'datepicker_options' => [
  297.                         'useCurrent' => false,
  298.                     ]
  299.                     //'constraints' => [new NotBlank()],
  300.                 ])
  301.                 ->add('reloj.actividadCompra'HTMLType::class, [
  302.                     'label' => false,
  303.                     'row_attr' => [
  304.                         'class' => 'no-block',
  305.                     ],
  306.                     'template' => 'admin/reloj/icon_actividad_compra.html.twig'
  307.                 ])
  308.             ;
  309.         }
  310.         if(($operacion?->getTipo() === TipoOperacionEnum::OPERACION_GESTION &&
  311.             $estadoOperacion &&
  312.             ($estadoOperacion === EstadoOperacionEnum::ESTADO_CONFIRMADA || $estadoOperacion === EstadoOperacionEnum::ESTADO_FINALIZADA) &&
  313.             $object->getFechaCancelacion())
  314.         ) {
  315.             $form->add('fechaCancelacion'DatePickerType::class, [
  316.                 'label' => false,
  317.                 'translation_domain' => 'detalleCompraAdmin',
  318.                 'format' => 'dd-MM-yyyy',
  319.                 'attr' => [
  320.                     'placeholder' => 'form.detalle_compra.placeholder.fecha_cancelacion',
  321.                     'icon_title' => $this->getTranslator()->trans('form.detalle_compra.icon_title.fecha_cancelacion', [], 'detalleCompraAdmin')
  322.                 ],
  323.                 'row_attr' => [
  324.                     'class' => 'show-title-no-block'
  325.                 ],
  326.             ]);
  327.         }
  328.         if($operacion?->getTipo() === TipoOperacionEnum::OPERACION_GESTION &&
  329.             $estadoOperacion &&
  330.             ($estadoOperacion === EstadoOperacionEnum::ESTADO_CONFIRMADA || $estadoOperacion === EstadoOperacionEnum::ESTADO_FINALIZADA) &&
  331.             $object->getReloj()?->getFechaVenta())
  332.         {
  333.             $form->add('reloj.fechaVenta'DatePickerType::class, [
  334.                 'label' => false,
  335.                 'translation_domain' => 'detalleCompraAdmin',
  336.                 'format' => 'dd-MM-yyyy',
  337.                 'attr' => [
  338.                     'placeholder' => 'form.detalle_compra.placeholder.fecha_venta',
  339.                     'icon_title' => $this->getTranslator()->trans('form.detalle_compra.icon_title.fecha_venta', [], 'detalleCompraAdmin')
  340.                 ],
  341.                 'row_attr' => [
  342.                     'class' => 'show-title-no-block'
  343.                 ],
  344.             ]);
  345.         }
  346.         if($operacion?->getTipo() === TipoOperacionEnum::OPERACION_GESTION &&
  347.             $estadoOperacion &&
  348.             ($estadoOperacion === EstadoOperacionEnum::ESTADO_CONFIRMADA || $estadoOperacion === EstadoOperacionEnum::ESTADO_FINALIZADA) &&
  349.             $object->getReloj()?->getFechaCompra() && $object->getReloj()->isCompraDirecta())
  350.         {
  351.             $form->add('reloj.fechaCompra'DatePickerType::class, [
  352.                 'label' => false,
  353.                 'translation_domain' => 'detalleCompraAdmin',
  354.                 'format' => 'dd-MM-yyyy',
  355.                 'attr' => [
  356.                     'placeholder' => 'form.detalle_compra.placeholder.fecha_compra',
  357.                     'icon_title' => $this->getTranslator()->trans('form.detalle_compra.icon_title.fecha_compra', [], 'detalleCompraAdmin')
  358.                 ],
  359.                 'row_attr' => [
  360.                     'class' => 'show-title-no-block'
  361.                 ],
  362.             ]);
  363.         }
  364.         if($operacion?->getTipo() === TipoOperacionEnum::OPERACION_GESTION &&
  365.             $estadoOperacion &&
  366.             $estadoOperacion === EstadoOperacionEnum::ESTADO_CONFIRMADA &&
  367.             !($object->getReloj()?->hasBeenSold() || $object->getReloj()?->hasBeenBought()) &&
  368.             !$object->getFechaCancelacion()
  369.         )
  370.         {
  371.             $form
  372.                 ->add('_cancel'HTMLType::class, [
  373.                     'label' => false,
  374.                     'row_attr' => [
  375.                         'class' => 'no-block',
  376.                     ],
  377.                     'template' => 'admin/reloj/icon_cancel.html.twig',
  378.                 ])
  379.             ;
  380.         }
  381.         if($operacion->getExportacion())
  382.         {
  383.             $alertCosteImportacionIva = ($object->getCosteImportacionIva() !== 0.0 '' 'control-coste-importacion-alert');
  384.             $alertCosteImportacionOtros = ($object->getCosteImportacionOtros() !== 0.0 '' 'control-coste-importacion-alert');
  385.             $form
  386.                 ->add('costeImportacionIva'null, [
  387.                     'label' => false,
  388.                     'translation_domain' => 'detalleCompraAdmin',
  389. //                'disabled' => true,
  390.                     'attr' => [
  391.                         'placeholder' => 'form.detalle_compra.placeholder.coste_importacion_iva',
  392.                         'class' => "numeric currencies control-coste-importacion $alertCosteImportacionIva"
  393.                     ]
  394.                 ])
  395.                 ->add('costeImportacionOtros'null, [
  396.                     'label' => false,
  397.                     'translation_domain' => 'detalleCompraAdmin',
  398.         //                'disabled' => true,
  399.                     'attr' => [
  400.                         'placeholder' => 'form.detalle_compra.placeholder.coste_importacion_otros',
  401.                         'class' => "numeric currencies control-coste-importacion $alertCosteImportacionOtros"
  402.                     ]
  403.                 ])
  404.             ;
  405.         }
  406.     }
  407.     protected function configureShowFields(ShowMapper $show): void
  408.     {
  409.     }
  410.     private function isDisabled(): bool
  411.     {
  412.         $object $this->getSubject();
  413.         $operacion $object->getCompra()?->getOperacion();
  414.         return $object->getReloj() && ($operacion->getEstado()->getKey() === EstadoOperacionEnum::ESTADO_CONFIRMADA || $operacion->getEstado()->getKey() === EstadoOperacionEnum::ESTADO_ASENTADA) ? true false;
  415.     }
  416.     private function isBlock(string $estadoOperacion):bool
  417.     {
  418.         return !($estadoOperacion === EstadoOperacionEnum::ESTADO_TRAMITADA);
  419.     }
  420. }