src/Admin/ValoracionesRelojesSinStockAdmin.php line 44

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use App\Entity\Configuracion;
  5. use App\Entity\EstadoAspecto;
  6. use App\Entity\Reloj;
  7. use App\Form\Type\HTMLType;
  8. use App\Transformer\EstadoAbstractTransformer;
  9. use App\Transformer\MarcaAbstractTransformer;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Sonata\AdminBundle\Admin\AbstractAdmin;
  12. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  13. use Sonata\AdminBundle\Datagrid\ListMapper;
  14. use Sonata\AdminBundle\Form\FormMapper;
  15. use Sonata\AdminBundle\Form\Type\ModelListType;
  16. use Sonata\AdminBundle\Show\ShowMapper;
  17. use Sonata\Form\Type\CollectionType;
  18. use Symfony\Component\Form\CallbackTransformer;
  19. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  20. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  21. use Vich\UploaderBundle\Form\Type\VichImageType;
  22. final class ValoracionesRelojesSinStockAdmin extends AbstractAdmin
  23. {
  24.     private $em;
  25.     public function __construct(string $codestring $classstring $baseControllerNameEntityManagerInterface $em)
  26.     {
  27.         parent::__construct($code$class$baseControllerName);
  28.         $this->em $em;
  29.     }
  30.     protected function configureDatagridFilters(DatagridMapper $filter): void
  31.     {
  32.     }
  33.     protected function configureListFields(ListMapper $list): void
  34.     {
  35.     }
  36.     protected function configureFormFields(FormMapper $form): void
  37.     {
  38.         $object $this->getSubject();
  39.         $editAction $object->getId() ? true false;
  40.         /*$relojesSinStocks = $object->getValoracion()?->getValoracionesRElojesSinStocks();
  41.         $files = $this->getRequest()->files->all();
  42.         $filesRelojesSinStock = reset($files)['valoracionesRelojesSinStocks']??[];
  43.         foreach($filesRelojesSinStock as $key => $file)
  44.         {
  45.             if($relojesSinStocks && $object == $relojesSinStocks[$key])
  46.             {
  47.                 $imagePath = ($file['relojFotoFile']['file'])->getPathName();
  48. // Leer la imagen y codificarla en base64
  49.                 $imageData = base64_encode(file_get_contents($imagePath));
  50. // Obtener el tipo MIME (jpg, png, gif, etc.)
  51.                 $imageType = pathinfo($imagePath, PATHINFO_EXTENSION);
  52. // Formato data URL
  53.                 $dataUrl = "data:image/$imageType;base64,$imageData";
  54.                 $object->setRelojFoto($dataUrl);
  55.             }
  56.         }*/
  57.         $ITP $object->getITP();
  58.         $comision $object->getComision();
  59.         $margenDeseado $object->getMargenDeseado();
  60.         if(!$editAction)
  61.         {
  62.             $configuracion $this->em->getRepository(Configuracion::class)->getConfiguracion('ValoracionesRelojes''ITP');
  63.             $ITP $configuracion $configuracion->getValue() : null;
  64.             $ITP is_numeric($ITP) ? $ITP null;
  65.             $configuracion $this->em->getRepository(Configuracion::class)->getConfiguracion('ValoracionesRelojes''comision');
  66.             $comision $configuracion $configuracion->getValue() : null;
  67.             $comision is_numeric($comision) ? $comision null;
  68.             $configuracion $this->em->getRepository(Configuracion::class)->getConfiguracion('ValoracionesRelojes''margenDeseado');
  69.             $margenDeseado $configuracion $configuracion->getValue() : null;
  70.             $margenDeseado is_numeric($margenDeseado) ? $margenDeseado null;
  71.         }
  72.         $hiddenReloj $object && $object->getIDPerseo();
  73.         $form
  74.             ->add('IDPerseo'null, [
  75.                 'disabled' => $hiddenReloj,
  76.                 'data' => $hiddenReloj ? (string)$object->getIDPerseo()??'VR0000/0000' 'VR0000/0000',
  77.                 'row_attr' => [
  78.                     'class' => !$hiddenReloj 'hidden' '',
  79.                 ],
  80.             ])
  81.         ;
  82.         /*if($hiddenReloj)
  83.         {*/
  84.             $form
  85.                 ->add('relojBaseIcon'HTMLType::class, [
  86.                 'label' => false,
  87.                 'mapped' => false,
  88.                 'row_attr' => [
  89.                     'class' => 'no-block '. (!$hiddenReloj 'hidden' ''),
  90.                 ],
  91.                 'template' => 'admin/reloj/icon_reloj_base.html.twig'
  92.             ]);
  93.        /* }
  94.         else
  95.         {*/
  96.             $form
  97.                 ->add('relojBase'ModelListType::class, [
  98.                     'label' => false,
  99.                     'class' => Reloj::class,
  100.                     'row_attr' => [
  101.                         'class' => 'display-model-list-type ' . ($hiddenReloj 'hidden' ''),
  102.                     ],
  103.                     'disabled' => $hiddenReloj,
  104.                     'btn_list' => !$this->isDisabled(),
  105.                     'btn_edit' => false,
  106.                     'btn_delete' => false,
  107.                     'btn_add' => false,
  108.                 ], [
  109.                     'placeholder' => 'form.valoraciones_relojes.placeholder.reloj',
  110.                     'link_parameters' => [
  111.                         'nav_prometeo' => true
  112.                     ],
  113.                 ]);
  114. //        }
  115.         if(!$this->isHidden()) {
  116.             $form
  117.                 ->add('relojFoto'HiddenType::class, [
  118.                     'attr' => [
  119.                         'class' => 'vich-image-delete-original'
  120.                     ],
  121.                     //'data' => $object->getRelojFoto() ? (strpos($object->getRelojFoto(), 'data:image/tmp;base64') !== false) ? null : $object->getRelojFoto() : null,
  122.                 ])
  123.                 ->add('relojFotoFile'VichImageType::class, [
  124.                     'label' => false,
  125.                     'required' => false,
  126.                     'allow_delete' => true,
  127.                     'download_uri' => true,
  128.                     'download_label' => false,
  129.                     //'download_label' => 'form.reloj.label.foto',
  130.                     'attr' => [
  131.                         'data-title_image_delete' => null,
  132.                         'data-message_image_delete' => null,
  133.                         'class' => 'vich-image-load'
  134.                     ]
  135.                 ])
  136.             ;
  137.         }
  138.         else
  139.         {
  140.             $form
  141.                 ->add('relojFoto'HTMLType::class, [
  142.                     'label' => false,
  143.                     'disabled' => true,
  144.                     'template' => 'admin/valoraciones-relojes/reloj_foto.html.twig'
  145.                 ])
  146.             ;
  147.         }
  148.         $form
  149.             ->add('relojMarca'ModelListType::class, [
  150.                 'label' => false,
  151.                 'disabled' => $this->isDisabled(),
  152.                 'attr' => [
  153.                     'data-max_length' => 10
  154.                 ],
  155.                 'row_attr' => [
  156.                     'class' => 'display-model-list-type',
  157.                 ],
  158.                 'btn_list' => !$this->isDisabled(),
  159.                 'btn_edit' => false,//!$this->isDisabled(),
  160.                 'btn_delete' => false,
  161.                 'btn_add' => false,//!$this->isDisabled()
  162.             ], [
  163.                 'placeholder' => 'form.valoraciones_relojes.placeholder.reloj.marca',
  164.                 'link_parameters' => [
  165.                     'nav_prometeo' => true
  166.                 ],
  167.             ])
  168.             ->add('relojModelo1'null, [
  169.                 'label' => false,
  170.                 'disabled' => $this->isDisabled(),
  171.                 'attr' => [
  172.                     'placeholder' => 'form.valoraciones_relojes.placeholder.reloj.modelo1'
  173.                 ]
  174.             ])
  175.             ->add('relojRef1'null, [
  176.                 'label' => false,
  177.                 'disabled' => $this->isDisabled(),
  178.                 'attr' => [
  179.                     'placeholder' => 'form.valoraciones_relojes.placeholder.reloj.ref1'
  180.                 ]
  181.             ])
  182.             ->add('relojCaja'CheckboxType::class, [
  183.                 'label' => false,
  184.                 'disabled' => $this->isDisabled(),
  185.                 'required' => false,
  186.                 'data' => $object->getRelojCaja() ? $object->getRelojCaja() : false,
  187.                 'attr' => [
  188.                     'placeholder' => 'form.valoraciones_relojes.placeholder.reloj.caja'
  189.                 ]
  190.             ])
  191.             ->add('relojPapeles'CheckboxType::class, [
  192.                 'label' => false,
  193.                 'disabled' => $this->isDisabled(),
  194.                 'required' => false,
  195.                 'data' => $object->getRelojPapeles() ? $object->getRelojPapeles() : false,
  196.                 'attr' => [
  197.                     'placeholder' => 'form.valoraciones_relojes.placeholder.reloj.papeles'
  198.                 ]
  199.             ])
  200.             ->add('relojFecha'/*DatePickerType::class*/ null, [
  201.                 'label' => false,
  202.                 'disabled' => $this->isDisabled(),
  203.                 //'format' => 'dd/MM/yyyy',
  204.                 'attr' => [
  205.                     'placeholder' => 'form.valoraciones_relojes.placeholder.reloj.fecha'
  206.                 ],
  207.             ])
  208.             ->add('relojAspecto'null, [
  209.                 'label' => false,
  210.                 'disabled' => $this->isDisabled(),
  211.                 'placeholder' => 'form.valoraciones_relojes.placeholder.reloj_aspecto',
  212.                 'query_builder' => $this->em->getRepository(EstadoAspecto::class)->qbAll(),
  213.             ])
  214.         ;
  215.         if(!$this->isHidden()) {
  216.             $form
  217.                 ->add('infoValoracion'null, [
  218.                     'label' => false,
  219.                     'attr' => [
  220.                         'placeholder' => 'form.valoraciones_relojes.placeholder.info_valoracion',
  221.                         'class' => 'clear-on-change-reloj'
  222.                     ],
  223.                     'row_attr' => [
  224.                         'class' => $object?->getInfoValoracion() ? 'more-info more-info-modal' 'more-info more-info-modal empty',
  225.                         'more_info' => [
  226.                             'class' => 'more-info-input-wrap more-info-input-wrap-modal'
  227.                         ]
  228.                     ]
  229.                 ])
  230.             ;
  231.         }
  232.         $form
  233.             ->add('precioOferta'null, [
  234.                 'label' => false,
  235.                 'attr' => [
  236.                     'readonly' => true,
  237.                     'placeholder' => 'form.valoraciones_relojes.placeholder.precio_oferta',
  238.                     'class' => 'numeric currencies clear-on-change-reloj'
  239.                 ],
  240.             ])
  241.             ->add('precioPromocion'null, [
  242.                 'label' => false,
  243.                 'disabled' => $this->isDisabled(),
  244.                 'attr' => [
  245.                     'placeholder' => 'form.valoraciones_relojes.placeholder.precio_promocion',
  246.                     'class' => 'numeric currencies clear-on-change-reloj'
  247.                 ]
  248.             ])
  249.             ->add('precioMinVenta'null, [
  250.                 'label' => false,
  251.                 'disabled' => $this->isDisabled(),
  252.                 'attr' => [
  253.                     'placeholder' => 'form.valoraciones_relojes.placeholder.precio_minimo_venta',
  254.                     'class' => 'numeric currencies clear-on-change-reloj'
  255.                 ]
  256.             ])
  257.             ->add('comision'null, [
  258.                 'label' => false,
  259.                 'disabled' => $this->isDisabled(),
  260.                 'data' => $comision,
  261.                 'attr' => [
  262.                     'placeholder' => 'form.valoraciones_relojes.placeholder.comision',
  263.                     'class' => 'numeric percents clear-on-change-reloj'
  264.                 ]
  265.             ])
  266.             ->add('costesTotal'null, [
  267.                 'label' => false,
  268.                 'disabled' => $this->isDisabled(),
  269.                 'attr' => [
  270.                     'placeholder' => 'form.valoraciones_relojes.placeholder.costes',
  271.                     'class' => 'numeric currencies clear-on-change-reloj input-left-more-info-join',
  272.                     'data-manual' => '0',
  273.                 ]
  274.             ])
  275.         ;
  276.         if(!$this->isHidden()) {
  277.             $form
  278.                 ->add('costes'CollectionType::class, [
  279.                     'label' => false,
  280.                     'row_attr' => [
  281.                         'class' => $object?->getCostes()->count() ? 'more-info more-info-modal more-info-input-left-join' 'more-info more-info-modal more-info-input-left-join empty',
  282.                         'more_info' => [
  283.                             'class' => 'more-info-input-wrap more-info-input-wrap-modal more-info-input-wrap-right'
  284.                         ]
  285.                     ],
  286.                     'by_reference' => false,
  287.                 ], [
  288.                     'edit' => 'inline',
  289.                     'inline' => 'table',
  290.                     'attr' => [
  291.                         'class' => 'table-costes-valoraciones-relojes-sin-stock'
  292.                     ],
  293.                 ])
  294. //                ->add('scriptCalcularCostesEventOnChangePrecio', ScriptType::class, [
  295. //                    'template' => 'SCRIPTS/ValoracionesRelojesSinStock/calcular_costes_event_on_change_precio.html.twig'
  296. //                ])
  297.             ;
  298.         }
  299.         $form
  300.             ->add('margenDeseado'null, [
  301.                 'label' => false,
  302.                 'disabled' => $this->isDisabled(),
  303.                 'data' => $margenDeseado,
  304.                 'attr' => [
  305.                     'placeholder' => 'form.valoraciones_relojes.placeholder.margen_deseado',
  306.                     'class' => 'numeric percents clear-on-change-reloj'
  307.                 ]
  308.             ])
  309.             ->add('margenPromocion'null, [
  310.                 'label' => false,
  311.                 'attr' => [
  312.                     'readonly' => true,
  313.                     'placeholder' => 'form.valoraciones_relojes.placeholder.margen_promocion',
  314.                     'class' => 'numeric percents clear-on-change-reloj'
  315.                 ]
  316.             ])
  317.             ->add('margenMinimo'null, [
  318.                 'label' => false,
  319.                 'attr' => [
  320.                     'readonly' => true,
  321.                     'placeholder' => 'form.valoraciones_relojes.placeholder.margen_minimo',
  322.                     'class' => 'numeric percents clear-on-change-reloj'
  323.                 ]
  324.             ])
  325.             ->add('ITP'null, [
  326.                 'label' => false,
  327.                 'disabled' => $this->isDisabled(),
  328.                 'data' => $ITP,
  329.                 'attr' => [
  330.                     'placeholder' => 'form.valoraciones_relojes.placeholder.itp',
  331.                     'class' => 'numeric percents clear-on-change-reloj'
  332.                 ]
  333.             ])
  334.             ->add('precioReferencia'null, [
  335.                 'label' => false,
  336.                 'disabled' => $this->isDisabled(),
  337.                 'attr' => [
  338.                     'placeholder' => 'form.valoraciones_relojes.placeholder.precio_referencia',
  339.                     'class' => 'numeric currencies clear-on-change-reloj input-left-more-info-join',
  340.                     'data-manual' => '0',
  341.                 ]
  342.             ])
  343.         ;
  344.         if(!$this->isHidden()) {
  345.             $form
  346.                 ->add('referencias'CollectionType::class, [
  347.                     'label' => false,
  348.                     'attr' => [
  349.                         'placeholder' => 'form.valoraciones_relojes.placeholder.referencias',
  350.                         'class' => 'more-info-input'
  351.                     ],
  352.                     'row_attr' => [
  353.                         'class' => $object?->getReferencias()->count() ? 'more-info more-info-modal more-info-input-left-join' 'more-info more-info-modal more-info-input-left-join empty',
  354.                         'more_info' => [
  355.                             'class' => 'more-info-input-wrap more-info-input-wrap-modal',
  356.                         ]
  357.                     ],
  358.                     'by_reference' => false,
  359.                 ], [
  360.                     'edit' => 'inline',
  361.                     'inline' => 'table',
  362.                     'attr' => [
  363.                         'class' => 'table-referencias-valoraciones-relojes-sin-stock'
  364.                     ],
  365.                 ]);
  366.         }
  367.         $form
  368.             ->add('precioPagar'null, [
  369.                 'label' => false,
  370.                 'disabled' => $this->isDisabled(),
  371.                 'attr' => [
  372.                     'placeholder' => 'form.valoraciones_relojes.placeholder.precio_pagar',
  373.                     'class' => 'numeric currencies clear-on-change-reloj'
  374.                 ]
  375.             ]);
  376.         /*$form->getFormBuilder()->get('relojFecha')
  377.             ->addModelTransformer(new CallbackTransformer(
  378.                     function ($fecha) //transform
  379.                     {
  380.                         return $fecha;
  381.                     },
  382.                     function ($fecha) //reverseTransform
  383.                     {
  384.                         return FechaAbstractTransformer::toDateTime($fecha);
  385.                     })
  386.             )
  387.             ->addViewTransformer(new CallbackTransformer(
  388.                     function ($fecha) //transform
  389.                     {
  390.                         return FechaAbstractTransformer::toString($fecha);
  391.                     },
  392.                     function ($fecha) //reverseTransform
  393.                     {
  394.                         return $fecha;
  395.                     })
  396.             )
  397.         ;*/
  398.         $form->getFormBuilder()->get('relojMarca')
  399.             ->addModelTransformer(new CallbackTransformer(
  400.                     function ($marca//transform
  401.                     {
  402.                         return $marca?->getId() ? $marca null;
  403.                     },
  404.                     function ($marca//reverseTransform
  405.                     {
  406.                         return MarcaAbstractTransformer::toMarca($marca);
  407.                     })
  408.             )
  409.             ->addViewTransformer(new CallbackTransformer(
  410.                     function ($marca//transform
  411.                     {
  412.                         return MarcaAbstractTransformer::toString($marca);
  413.                     },
  414.                     function ($marca//reverseTransform
  415.                     {
  416.                         return $marca;
  417.                     })
  418.             )
  419.         ;
  420.         $form->getFormBuilder()->get('relojAspecto')
  421.             ->addModelTransformer(new CallbackTransformer(
  422.                     function ($estado//transform
  423.                     {
  424.                         return $estado?->getId() ? $estado null;
  425.                     },
  426.                     function ($estado//reverseTransform
  427.                     {
  428.                         return EstadoAbstractTransformer::toEstado($estado);
  429.                     })
  430.             )
  431.             ->addViewTransformer(new CallbackTransformer(
  432.                     function ($estado//transform
  433.                     {
  434.                         return EstadoAbstractTransformer::toString($estado);
  435.                     },
  436.                     function ($estado//reverseTransform
  437.                     {
  438.                         return $estado;
  439.                     })
  440.             )
  441.         ;
  442.     }
  443.     protected function configureShowFields(ShowMapper $show): void
  444.     {
  445.     }
  446.     protected function preValidate(object $object): void
  447.     {
  448.         parent::preValidate($object);
  449.         if ($object && $object->getIDPerseo()) {
  450.             $object->setReloj(null);
  451.         }
  452.     }
  453.     private function isHidden()
  454.     {
  455.         return isset($_GET['modal']);
  456.     }
  457.     private function isDisabled()
  458.     {
  459.         return isset($_GET['modal']);
  460.     }
  461. }