<?php
declare(strict_types=1);
namespace App\Admin;
use App\Entity\AccionEstado;
use App\Entity\Canal;
use App\Entity\Competencia;
use App\Entity\EstadoAspecto;
use App\Entity\EstadoCheck;
use App\Entity\Marca;
use App\Entity\Material;
use App\Entity\Promocion;
use App\Entity\TipoCargoMejora;
use App\Entity\TipoCargoServicio;
use App\Entity\TipoCargoVenta;
use App\Entity\UbicacionAbstract;
use App\Enum\CalibreCaracteristicasEnum;
use App\Enum\CalibreEnum;
use App\Enum\CalibreFuncionesEnum;
use App\Enum\EstadoOperacionEnum;
use App\Enum\EstadoRelojEnum;
use App\Enum\ExportacionEnum;
use App\Enum\GeneroRelojEnum;
use App\Enum\PiezaRepuestoEnum;
use App\Enum\RegimenEnum;
use App\Enum\ServicioMantenimientoEnum;
use App\Enum\SiNoEnum;
use App\Enum\TipoAccionEnum;
use App\Enum\TipoCierreEnum;
use App\Enum\TipoCristalEnum;
use App\Enum\TipoEsferaIndiceEnum;
use App\Enum\TipoGarantiaEnum;
use App\Enum\TipoOperacionEnum;
use App\Form\Type\HTMLType;
use App\Form\Type\ScriptType;
use App\Transformer\CalibreEnumToStringTransformer;
use App\Transformer\EstadoAbstractTransformer;
use App\Transformer\GeneroRelojEnumToStringTransformer;
use App\Transformer\MarcaAbstractTransformer;
use App\Transformer\PiezaRepuestoEnumToStringTransformer;
use App\Transformer\ServicioMantenimientoEnumToStringTransformer;
use App\Transformer\TipoCierreEnumToStringTransformer;
use App\Transformer\TipoCristalEnumToStringTransformer;
use App\Transformer\TipoEsferaIndiceEnumToStringTransformer;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridInterface;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\Operator\EqualOperatorType;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery;
use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
use Sonata\Form\Type\DatePickerType;
use Sonata\Form\Type\DateRangePickerType;
use Sonata\Form\Type\DateTimePickerType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\ColorType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RangeType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Security\Core\Security;
use Vich\UploaderBundle\Form\Type\VichFileType;
use Vich\UploaderBundle\Form\Type\VichImageType;
final class PromocionAdmin extends AbstractAdmin
{
public function __construct(string $code, string $class, string $baseControllerName,
private Security $security,
private EntityManagerInterface $em)
{
parent::__construct($code, $class, $baseControllerName);
$this->setTranslationDomain('promocionAdmin');
}
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->remove('create');
$collection->remove('delete');
$collection->add('show-operacion');
$collection->add('show-inventario');
$collection->add('show-reloj-base');
// Acciones personalizadas que operan sobre una acción concreta
$collection->add('edit-accion', $this->getRouterIdParameter() . '/accion/{accionId}/edit');
$collection->add('delete-accion', $this->getRouterIdParameter() . '/accion/{accionId}/delete');
parent::configureRoutes($collection);
}
protected function configureQuery(ProxyQueryInterface $query): ProxyQueryInterface
{
$filterFecha = $this->getRequest()->get('filter')['fechaActiva'] ?? null;
$query = $filterFecha ? $this->em->getRepository(Promocion::class)->qbPromocionAll() : $this->em->getRepository(Promocion::class)->qbPromocion();
return parent::configureQuery(new ProxyQuery($query));
}
/*protected function configureDefaultFilterValues(array &$filterValues): void
{
$filter = $this->getRequest()->get('filter');
if (!$filter || !@$filter['relojTipo']['type'] || $filter['relojTipo']['type'] === '')
{
$filterValues = [
'relojTipo' => [
'type' => EqualOperatorType::TYPE_EQUAL,
'value' => ['GESTION_VENTA', 'STOCK']
],
];
}
if (!$filter || !@$filter['relojEstado']['type'] || $filter['relojEstado']['type'] === '')
{
$filterValues = [
'relojEstado' => [
'type' => EqualOperatorType::TYPE_EQUAL,
'value' => [EstadoRelojEnum::ESTADO_SIN_ANUNCIAR, EstadoRelojEnum::ESTADO_ANUNCIO, EstadoRelojEnum::ESTADO_EN_TRAMITACION]
],
];
}
parent::configureDefaultFilterValues($filterValues);
}*/
protected function configureDefaultSortValues(array &$sortValues): void
{
parent::configureDefaultSortValues($sortValues);
$sortValues[DatagridInterface::PER_PAGE] = 50;
}
protected function configureDatagridFilters(DatagridMapper $filter): void
{
if(!@$_REQUEST['filter'][DatagridInterface::PER_PAGE]) $this->getDatagrid()->setValue(DatagridInterface::PER_PAGE, null, 50);
$filter
->add('busqueda', CallbackFilter::class, [
'label' => null,
'attr' => [
'class' => 'filter-to-navbar-left filter-to-navbar',
'data-order' => '1',
'placeholder' => 'filter.placeholder.busqueda',
],
'callback' => function ($queryBuilder, $alias, $field, $value) {
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
},
])
->add('relojTipo', CallbackFilter::class, [
'label' => false,
'attr' => [
'class' => 'filter-to-navbar-right filter-to-navbar',
'data-order' => '2',
'data-id' => 'filter-filters'
],
'callback' => function ($queryBuilder, $alias, $field, $value) {
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
},
], [
'field_type' => ChoiceType::class,
'field_options' => [
'choices' => ['GESTION_VENTA', 'STOCK'],
'multiple' => true,
'expanded' => true,
'choice_label' => function ($choice, $key, $value) {
$labels = ['filter.promocion.reloj_gestion_venta', 'filter.promocion.reloj_stock'];
return $this->getTranslator()->trans($labels[$key], [], 'promocionAdmin');
},
// 'choice_attr' => function ($choice, $key, $value) use ($existFilter){
// if (!$existFilter && !$this->getRequest()->get('filter') && in_array($value, [EstadoValoracionEnum::ESTADO_ABIERTA, EstadoValoracionEnum::ESTADO_ESPERA, EstadoValoracionEnum::ESTADO_ACEPTADA])) {
// return [
// 'checked' => true
// ];
// }
//
// return [];
// },
]
])
->add('relojEstado', CallbackFilter::class, [
'label' => false,
'attr' => [
'class' => 'filter-to-navbar-right filter-to-navbar',
'data-order' => '3',
'data-id' => 'filter-filters'
],
'callback' => function ($queryBuilder, $alias, $field, $value) {
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
},
], [
'field_type' => ChoiceType::class,
'field_options' => [
'choices' => [EstadoRelojEnum::ESTADO_SIN_ANUNCIAR, EstadoRelojEnum::ESTADO_ANUNCIO, EstadoRelojEnum::ESTADO_EN_TRAMITACION],
'multiple' => true,
'expanded' => true,
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(EstadoRelojEnum::getEstado($choice), [], 'enum');
},
// 'choice_attr' => function ($choice, $key, $value) use ($existFilter){
// if (!$existFilter && !$this->getRequest()->get('filter') && in_array($value, [EstadoValoracionEnum::ESTADO_ABIERTA, EstadoValoracionEnum::ESTADO_ESPERA, EstadoValoracionEnum::ESTADO_ACEPTADA])) {
// return [
// 'checked' => true
// ];
// }
//
// return [];
// },
]
])
->add('relojServicio', CallbackFilter::class, [
'label' => false,
'attr' => [
'class' => 'filter-to-navbar-right filter-to-navbar',
'data-order' => '4',
'data-id' => 'filter-filters'
],
'callback' => function ($queryBuilder, $alias, $field, $value) {
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
},
], [
'field_type' => ChoiceType::class,
'field_options' => [
'choices' => ['SERVICIO', 'CHECK'],
'multiple' => true,
'expanded' => true,
'choice_label' => function ($choice, $key, $value) {
$labels = ['filter.promocion.reloj_servicio', 'filter.promocion.reloj_check'];
return $this->getTranslator()->trans($labels[$key], [], 'promocionAdmin');
},
'attr' => [
'class' => 'filter-unique'
]
// 'choice_attr' => function ($choice, $key, $value) use ($existFilter){
// if (!$existFilter && !$this->getRequest()->get('filter') && in_array($value, [EstadoValoracionEnum::ESTADO_ABIERTA, EstadoValoracionEnum::ESTADO_ESPERA, EstadoValoracionEnum::ESTADO_ACEPTADA])) {
// return [
// 'checked' => true
// ];
// }
//
// return [];
// },
]
])
;
$filter
->add('fechaActiva', CallbackFilter::class, [
'label' => false,
'attr' => [
'data-order' => '1',
'class' => 'filter-date-range'
],
'field_type' => DateRangePickerType::class,
'field_options' => [
'field_options_start' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_activa_start']
],
'field_options_end' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_activa_end']
]
],
'callback' => function ($queryBuilder, $alias, $field, $value)
{
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
}
])
->add('fechaEntrada', CallbackFilter::class, [
'label' => false,
'attr' => [
'data-order' => '2',
'class' => 'filter-date-range'
],
'field_type' => DateRangePickerType::class,
'field_options' => [
'field_options_start' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_entrada_start']
],
'field_options_end' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_entrada_end']
]
],
'callback' => function ($queryBuilder, $alias, $field, $value)
{
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
}
])
->add('fechaAnuncio', CallbackFilter::class, [
'label' => false,
'attr' => [
'data-order' => '3',
'class' => 'filter-date-range'
],
'field_type' => DateRangePickerType::class,
'field_options' => [
'field_options_start' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_anuncio_start']
],
'field_options_end' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_anuncio_end']
]
],
'callback' => function ($queryBuilder, $alias, $field, $value)
{
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
}
])
->add('fechaVenta', CallbackFilter::class, [
'label' => false,
'attr' => [
'data-order' => '4',
'class' => 'filter-date-range'
],
'field_type' => DateRangePickerType::class,
'field_options' => [
'field_options_start' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_venta_start']
],
'field_options_end' => [
'label' => false,
'format' => 'dd/MM/yyyy',
'attr' => ['placeholder' => 'filter.promocion.placeholder.fecha_venta_end']
]
],
'callback' => function ($queryBuilder, $alias, $field, $value)
{
if (!$value->hasValue()) {
return;
}
$this->em->getRepository(Promocion::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
}
])
;
}
protected function configureListFields(ListMapper $list): void
{
$this->setTranslationDomain('promocionAdmin');
$list
// ->add('IDperseo', null, [
// 'label' => 'list.promocion.label.idperseo',
// 'identifier' => true,
// 'route' => [
// 'name' => 'edit'
// ],
// 'header_style' => 'width: 95px',
// //'template' => 'admin/CRUD/Promocion/list_field_identifier_idperseo.html.twig',
// ])
->addIdentifier('reloj.codigo', null, [
'label' => 'list.promocion.label.reloj.codigo',
//'identifier' => true,
'route' => [
'name' => 'edit'
],
'header_style' => 'width: 80px',
])
->add('tipoEconomico', null, [
'label' => 'list.promocion.label.tipo',
'virtual_field' => true,
'header_style' => 'width: 75px',
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'tipo'],
'sort_parent_association_mappings' => [],
'template' => 'admin/CRUD/Promocion/list_field_tipo_economico.html.twig',
])
->add('fechaEstadoCompraStr', null, [
'label' => 'list.promocion.label.fecha_estado_compra',
'header_style' => 'width: 90px;word-break: break-word;',
])
->add('reloj.marca', null, [
'label' => 'list.promocion.label.reloj.marca',
'identifier' => false,
'header_style' => 'min-width: 75px',
'collapse' => [
// height in px
'height' => 20,
// content of the "read more" link
'more' => '[+]',
// content of the "read less" link
'less' => '[-]',
],
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'nombre'],
'sort_parent_association_mappings' => [['fieldName' => 'reloj'], ['fieldName' => 'marca']],
'template' => 'admin/CRUD/list_field_collapse.html.twig'
])
->add('reloj.modelo1', null, [
'label' => 'list.promocion.label.reloj.modelo1',
'header_style' => 'min-width: 75px',
'collapse' => [
// height in px
'height' => 20,
// content of the "read more" link
'more' => '[+]',
// content of the "read less" link
'less' => '[-]',
],
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'modelo1'],
'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
'template' => 'admin/CRUD/list_field_collapse.html.twig',
])
->add('reloj.ref1', null, [
'label' => 'list.promocion.label.reloj.ref1',
'header_style' => 'width: 75px',
'collapse' => [
// height in px
'height' => 20,
// content of the "read more" link
'more' => '[+]',
// content of the "read less" link
'less' => '[-]',
],
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'ref1'],
'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
'template' => 'admin/CRUD/list_field_collapse.html.twig',
])
->add('reloj.precioCosteTotal', null, [
'label' => 'list.promocion.label.reloj.precio_coste_total',
'header_style' => 'width: 90px;word-break: break-word;',
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'precioCosteTotal'],
'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
'template' => 'admin/CRUD/list_field_currency.html.twig',
])
->add('precio', null, [
'label' => 'list.promocion.label.precio',
'header_style' => 'width: 100px;word-break: break-word;',
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'precio'],
'sort_parent_association_mappings' => [],
'template' => 'admin/CRUD/list_field_currency.html.twig',
])
->add('reloj.tiempoEnVenta', null, [
'label' => 'list.promocion.label.dias_en_venta',
'header_style' => 'width: 90px;word-break: break-word;',
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'tiempoEnVenta'],
'sort_parent_association_mappings' => [['fieldName' => 'reloj']],
])
->add('fechaPromocion', null, [
'label' => 'list.promocion.label.fecha',
'header_style' => 'width: 90px;',
'format' => 'd/m/Y',
])
->add('estadoActual', 'trans', [
'label' => 'list.promocion.label.estado',
'header_style' => 'width: 125px',
'translationDomain' => 'enum',
'collapse' => [
// height in px
'height' => 20,
// content of the "read more" link
'more' => '[+]',
// content of the "read less" link
'less' => '[-]',
],
])
/*->add('acciones', null, [
'label' => 'list.promocion.label.acciones',
'header_style' => 'width: 90px',
'template' => 'admin/CRUD/Promocion/list_field_actions.html.twig',
])*/
->add('ubicacionActual', null, [
'label' => 'list.promocion.label.ubicacion',
'header_style' => 'width: 100px',
])
/*->add('reloj.fotoFile', null, [
'label' => 'list.promocion.label.reloj.foto',
'header_style' => 'width: 75px;',
'className' => (new ReflectionClass(Reloj::class))->getShortName(),
'template' => 'admin/CRUD/list_field_image.html.twig',
])*/
// ->add('canal', null, [
// 'label' => 'list.promocion.label.fecha_promocion'
// ])
// ->add(ListMapper::NAME_ACTIONS, null, [
// 'actions' => [
// 'show' => [],
// 'edit' => [],
// 'delete' => [],
// ],
// ])
;
}
protected function configureFormFields(FormMapper $form): void
{
$this->setTranslationDomain('promocionAdmin');
$object = $this->getSubject();
$reloj = $object->getReloj();
$costes = $reloj->calculateCostesCompra();
$now = new DateTime();
//
// $diasDesdeRecepcion = $object->fechaEstadoRecepcion() ? ($object->getFechaListo() ? $object->fechaEstadoRecepcion()->diff($object->getFechaListo())->format('%a') : $object->fechaEstadoRecepcion()->diff($now)->format('%a')) : null;
// $diasDesdeListo = $object->getFechaListo() ? ($object->getFechaAnuncio() ? $object->getFechaListo()->diff($object->getFechaAnuncio())->format('%a') : $object->getFechaListo()->diff($now)->format('%a')) : null;
// $diasDesdeAnuncio = $object->getFechaAnuncio() ? ($object->getFechaVenta() ? $object->getFechaAnuncio()->diff($object->getFechaVenta())->format('%a') : $object->getFechaAnuncio()->diff($now)->format('%a')) : null;
if ($this->security->isGranted('ROLE_SUPER_ADMIN')) {
$form
->with('with_buy', [
'label' => false //'form.promocion.with_buy.label'
])
->add('reloj.operacionCompra', null, [
'label' => false,
'disabled' => true,
'data' => $object->getTipo() === TipoOperacionEnum::OPERACION_GESTION ? null : $object->getReloj()->getOperacionCompra(),
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.operacion',
]
])
->add('reloj.actividad', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.actividad',
]
])
// compra o permuta
->add('tipoCompra', ChoiceType::class, [
'label' => false,
'placeholder' => 'form.promocion.placeholder.reloj_type',
'mapped' => false,
'disabled' => true,
'choices' => array_flip(TipoOperacionEnum::getOperaciones()),
'choice_value' => function ($choice) {
return ($choice === TipoOperacionEnum::OPERACION_COMPRA || $choice === TipoOperacionEnum::OPERACION_PERMUTA) ? $choice : null;
},
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(TipoOperacionEnum::getOperacion($choice), [], 'enum');
},
'data' => $object->getTipo(),
])
->add('reloj.regimen', ChoiceType::class, [
'label' => false,
'placeholder' => 'form.promocion.placeholder.regimen',
'disabled' => true,
'choices' => array_flip(RegimenEnum::getRegimenes()),
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(RegimenEnum::getRegimen($choice), [], 'enum');
},
'data' => $object->getReloj()?->getRegimen() ? $object->getReloj()?->getRegimen() : RegimenEnum::REGIMEN_REBU,
])
// Europa o Exportacion
->add('reloj.exportacion', ChoiceType::class, [
'label' => false,
'placeholder' => 'form.promocion.placeholder.exportacion',
'disabled' => true,
'choices' => array_flip(ExportacionEnum::getRegimenes()),
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(ExportacionEnum::getRegimen($choice), [], 'enum');
},
])
->end()
->with('with_times', [
'label' => false //'form.promocion.with_times.label'
])
//fecha que se asienta en actividad
->add('reloj.fechaRecepcion', DateTimePickerType::class, [
'label' => false,
'disabled' => true,
'data' => $reloj->getFechaRecepcion(),
'format' => 'dd-MM-yyyy',
'datepicker_use_button' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_fecha_recepcion',
'class' => 'datepicker-text',
]
], [
'dp_use_icons' => false,
])
->add('dias_fecha_recepcion', null, [
'label' => 'form.promocion.label.dias_fecha_recepcion',
'mapped' => false,
'disabled' => true,
'data' => $reloj->getDiasDesdeRecepcion(),
'row_attr' => [
'class' => 'field-calculate-with-label'
]
])
// derivado de acciones
->add('fechaListo', DateTimePickerType::class, [
'label' => false,
'disabled' => true,
'format' => 'dd-MM-yyyy',
'datepicker_use_button' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.fecha_listo',
'class' => 'datepicker-text',
]
])
->add('dias_fecha_listo', null, [
'label' => 'form.promocion.label.dias_fecha_listo',
'mapped' => false,
'disabled' => true,
'data' => $reloj->getDiasDesdeListo(),
'row_attr' => [
'class' => 'field-calculate-with-label'
]
])
->add('fechaAnuncio', DateTimePickerType::class, [
'mapped' => false,
'label' => false,
'disabled' => true,
'data' => $object->getFechaAnuncio(),
'format' => 'dd-MM-yyyy',
'datepicker_use_button' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.fecha_anuncio',
'class' => 'datepicker-text',
]
])
->add('dias_fecha_anuncio', null, [
'label' => 'form.promocion.label.dias_fecha_anuncio',
'mapped' => false,
'disabled' => true,
'data' => $reloj->getDiasDesdeAnuncio(),
'row_attr' => [
'class' => 'field-calculate-with-label'
]
])
->end()
;
}
$form
->with('with_reloj_resume', [
'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>'
])
->add('id', HiddenType::class)
->add('_unblock_block', HTMLType::class, [
'label' => false,
'template' => 'admin/reloj/icon_unblock_block.html.twig'
])
->add('relojFotoFile', VichImageType::class, [
'label' => false,
'required' => false,
'allow_delete' => false,
'download_uri' => true,
'download_label' => false,
'attr' => [
'data-title_image_delete' => null,
'data-message_image_delete' => null,
'class' => 'vich-image-load'
]
])
->add('reloj.codigo', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.codigo'
]
])
->add('reloj.marca', EntityType::class, [
'label' => false,
'placeholder' => 'form.promocion.placeholder.reloj.marca',
'class' => Marca::class,
'row_attr' => [
'class' => 'readonly',
],
'attr' => [
'class' => 'block',
'readonly' => true,
]
])
->add('reloj.IDperseo', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.id_perseo'
]
])
->add('reloj.modelos', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'disabled' => true,
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.modelos',
// 'class' => 'block',
'readonly' => true,
],
'row_attr' => [
'class' => 'control-block',
]
])
->add('reloj.modelo1', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.modelo1',
'class' => 'block',
'readonly' => true,
],
'row_attr' => [
'class' => 'hide control-block',
]
])
->add('reloj.modelo2', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.modelo2',
'class' => 'block',
'readonly' => true,
],
'row_attr' => [
'class' => 'hide control-block',
]
])
->add('reloj.refs', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'disabled' => true,
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.refs',
'readonly' => true,
],
'row_attr' => [
'class' => 'control-block',
]
])
->add('reloj.ref1', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.ref1',
'class' => 'block',
'readonly' => true,
],
'row_attr' => [
'class' => 'hide control-block',
]
])
->add('reloj.ref2', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.ref2',
'class' => 'block',
'readonly' => true,
],
'row_attr' => [
'class' => 'hide control-block',
]
])
->add('reloj.serie', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj.serie',
'readonly' => true,
'class' => 'block'
]
])
->add('reloj.caja', CheckboxType::class, [
'label' => false,
'required' => false,
'data' => $object->getReloj()?->isCaja() ?? false,
'row_attr' => [
'class' => 'readonly relojCaja',
],
'attr' => [
'class' => 'block',
'readonly' => true
]
])
->add('reloj.papeles', CheckboxType::class, [
'label' => false,
'required' => false,
'data' => $object->getReloj()?->isPapeles() ?? false,
'row_attr' => [
'class' => 'readonly relojPapeles',
],
'attr' => [
'class' => 'block',
'readonly' => true
]
])
->add('reloj.aspecto', EntityType::class, [
'label' => false,
'class' => EstadoAspecto::class,
'translation_domain' => 'promocionAdmin',
'placeholder' => 'form.promocion.placeholder.reloj.aspecto',
'query_builder' => $this->em->getRepository(EstadoAspecto::class)->qbAll(),
])
->add('reloj.fecha', DatePickerType::class, [
'label' => false,
'format' => 'dd-MM-yyyy',
'translation_domain' => 'promocionAdmin',
'row_attr' => [
'class' => 'readonly',
],
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_fecha',
'class' => 'block',
'readonly' => true,
]
])
->end()
->with('with_economic', [
'label' => false //'form.promocion.with_economic.label'
])
->add('fechaCompraEconomic', DateTimePickerType::class, [
'mapped' => false,
'label' => false,
'disabled' => true,
'data' => $object->getReloj()?->getFechaCompra(),
'format' => 'dd-MM-yyyy',
'datepicker_use_button' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_fecha_compra',
'class' => 'datepicker-text',
]
])
->add('reloj.precioCompra', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_precio_compra',
'class' => 'numeric currencies',
]
])
->add('reloj.precioCosteTotal', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_precio_coste_total',
'class' => 'numeric currencies bolder',
]
])
->add('tipoEconomico', ChoiceType::class, [
'label' => false,
'placeholder' => 'form.promocion.placeholder.compra_gestion',
'mapped' => false,
'disabled' => true,
'choices' => array_flip(TipoOperacionEnum::getOperaciones()),
'choice_value' => function ($choice) {
return ($choice === TipoOperacionEnum::OPERACION_COMPRA or $choice === TipoOperacionEnum::OPERACION_GESTION) ? $choice : null;
},
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(TipoOperacionEnum::getOperacion($choice), [], 'enum');
},
'data' => $object->getTipo() === TipoOperacionEnum::OPERACION_PERMUTA ? TipoOperacionEnum::OPERACION_COMPRA : $object->getTipo(),
])
->add('fechaPromocionEconomic', DateTimePickerType::class, [
'mapped' => false,
'label' => false,
'disabled' => true,
'data' => $object->getFechaPromocion(),
'format' => 'dd-MM-yyyy',
'datepicker_use_button' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.fecha',
'class' => 'datepicker-text',
]
])
->add('precio', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.precio',
'class' => 'numeric currencies bolder',
]
])
->add('ubicacionActual', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.ubicacion',
]
])
->add('fechaUbicacionActual', DateTimePickerType::class, [
'label' => false,
'disabled' => true,
'format' => 'dd-MM-yyyy',
'datepicker_use_button' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.fecha_ubicacion',
'class' => 'datepicker-text',
]
])
->add('estadoActual', null, [
'label' => false,
'disabled' => true,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.estado_actual',
]
])
->add('fechaEstadoActual', DateTimePickerType::class, [
'label' => false,
'disabled' => true,
'format' => 'dd-MM-yyyy',
'datepicker_use_button' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.fecha_estado_actual',
'class' => 'datepicker-text',
]
])
->end()
->with('with_reloj_review', [
'label' => false //'form.promocion.with_reloj_review.label'
])
->add('reloj.fotoValoracion', HTMLType::class, [
'label' => false,
'template' => 'admin/reloj/imagen.html.twig'
])
->add('relojFotoSetFile', VichImageType::class, [
'label' => false,
'required' => false,
'allow_delete' => true,
'download_uri' => true,
'download_label' => false,
'attr' => [
'data-title_image_delete' => null,
'data-message_image_delete' => null,
'class' => 'vich-image-load'
]
//'template' => 'admin/image_default.html.twig'
])
->add('relojFotoCronoFile', VichImageType::class, [
'label' => false,
'required' => false,
'allow_delete' => true,
'download_uri' => true,
'download_label' => false,
'attr' => [
'data-title_image_delete' => null,
'data-message_image_delete' => null,
'class' => 'vich-image-load'
]
//'template' => 'admin/image_default.html.twig'
])
->add('relojVideoFile', VichFileType::class, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'required' => false,
'allow_delete' => true,
'download_uri' => true,
'download_label' => 'label.download.video',
'attr' => [
'data-translation_domain' => 'promocionAdmin',
'data-upload_label' => 'label.upload.video',
'data-selector_file_original' => 'video',
'data-title_file_delete' => null,
'data-message_file_delete' => null,
'class' => 'vich-file-load'
]
//'template' => 'admin/image_default.html.twig'
])
->add('reloj.recompra', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_recompra',
'class' => 'numeric percents'
],
])
->add('reloj.garantia', ChoiceType::class, [
'label' => false,
'placeholder' => 'form.promocion.placeholder.reloj_garantia',
'choices' => array_flip(TipoGarantiaEnum::getGarantias()),
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(TipoGarantiaEnum::getGarantia($choice), [], 'enum');
},
])
->add('reloj.peso', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_peso',
'class' => 'numeric grams'
],
])
->add('reloj.comentario', TextareaType::class, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'rows' => 3,
'placeholder' => 'form.promocion.placeholder.reloj_comentario'
]
])
->add('reloj.descripcion', null, [
'label' => false,
'translation_domain' => 'promocionAdmin',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_descripcion'
]
])
->end()
->with('with_actions_list', [
'label' => false //'form.promocion.with_actions_list.label'
])
->add('acciones', HTMLType::class, [
'label' => false,
'template' => 'admin/promocion/acciones.html.twig'
])
->end()
->with('with_actions', [
'label' => false //'form.promocion.with_actions.label'
])
->add('accionFecha', DatePickerType::class, [
'label' => 'form.promocion.label.accion_fecha',
'mapped' => false,
'required' => false,
'translation_domain' => 'promocionAdmin',
'format' => 'dd-MM-yyyy',
'data' => $now,
'attr' => [
'placeholder' => 'form.promocion.placeholder.accion_fecha',
]
])
->add('accionTipo', ChoiceType::class, [
'label' => 'form.promocion.label.accion_tipo',
'mapped' => false,
'required' => false,
'placeholder' => 'form.promocion.placeholder.accion_tipo',
'choices' => array_flip(TipoAccionEnum::getAcciones()),
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(TipoAccionEnum::getAccion($choice), [], 'enum');
},
'choice_value' => function ($choice) use ($object)
{
$returnChoice = null;
$countAcciones = ($object->getAcciones()->filter(
fn($acciones) => !$acciones instanceof AccionEstado || ($acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_GESTION && $acciones?->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_COMPRA ))
)->count();
$countAccioneslisto = ($object->getAcciones()->filter(
fn($acciones) => $acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() === EstadoRelojEnum::ESTADO_LISTO && $acciones->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_GESTION && $acciones->getEstado()?->getKey() !== EstadoRelojEnum::ESTADO_COMPRA )
)->count();
if($countAcciones === 0 && $choice === TipoAccionEnum::ACCION_ESTADO)
{
$returnChoice = $choice;
}
elseif($countAcciones === 1 && $choice === TipoAccionEnum::ACCION_UBICACION)
{
$returnChoice = $choice;
}
elseif($countAcciones > 1 && !$countAccioneslisto && $choice !== TipoAccionEnum::ACCION_ANUNCIO && $choice !== TipoAccionEnum::ACCION_CHECK)
{
$returnChoice = $choice;
}
elseif($countAcciones > 1 && $countAccioneslisto)
{
$returnChoice = $choice;
}
if(
$returnChoice &&
!is_null($object->getReloj()->getTipoBloqueo()) &&
(
$returnChoice === TipoAccionEnum::ACCION_ESTADO ||
$returnChoice === TipoAccionEnum::ACCION_UBICACION ||
$returnChoice === TipoAccionEnum::ACCION_ANUNCIO
)
)
{
$returnChoice = null;
}
if($returnChoice === TipoAccionEnum::ACCION_CHECK && in_array($object->getEstadoActual(), [EstadoRelojEnum::ESTADO_EN_TRAMITACION, EstadoRelojEnum::ESTADO_ENVIADO, EstadoRelojEnum::ESTADO_VENDIDO]) )
{
$returnChoice = null;
}
return $returnChoice;
},
'attr' => [
'class' => 'accion accion-tipo'
]
])
->add('accionPlataforma', EntityType::class, [
'label' => 'form.promocion.label.accion_plataforma',
'mapped' => false,
'required' => false,
'placeholder' => 'form.promocion.placeholder.accion_plataforma',
'class' => Canal::class,
'row_attr' => [
'class' => 'accion accion-anuncio accion-competencia',
'hidden' => true
]
])
->add('accionUbicacion', EntityType::class, [
'label' => 'form.promocion.label.accion_ubicacion',
'placeholder' => 'form.promocion.placeholder.accion_ubicacion',
'mapped' => false,
'required' => false,
'class' => UbicacionAbstract::class,
'row_attr' => [
'class' => 'accion accion-ubicacion',
'hidden' => true
],
])
->add('accionServicio', EntityType::class, [
'label' => 'form.promocion.label.accion_servicio',
'placeholder' => 'form.promocion.placeholder.accion_servicio',
'mapped' => false,
'required' => false,
'class' => TipoCargoServicio::class,
'row_attr' => [
'class' => 'accion accion-servicio',
'hidden' => true
]
])
->add('accionMejora', EntityType::class, [
'label' => 'form.promocion.label.accion_mejora',
'placeholder' => 'form.promocion.placeholder.accion_mejora',
'mapped' => false,
'required' => false,
'class' => TipoCargoMejora::class,
'row_attr' => [
'class' => 'accion accion-mejora',
'hidden' => true
]
])
->add('accionVenta', EntityType::class, [
'label' => 'form.promocion.label.accion_venta',
'placeholder' => 'form.promocion.placeholder.accion_venta',
'mapped' => false,
'required' => false,
'class' => TipoCargoVenta::class,
'row_attr' => [
'class' => 'accion accion-venta',
'hidden' => true
]
])
->add('accionCompetencia', EntityType::class, [
'label' => 'form.promocion.label.accion_competencia',
'placeholder' => 'form.promocion.placeholder.accion_competencia',
'mapped' => false,
'required' => false,
'class' => Competencia::class,
'row_attr' => [
'class' => 'numeric currencies accion accion-competencia',
'hidden' => true
],
])
->add('accionCheck', EntityType::class, [
'label' => 'form.promocion.label.accion_check',
'placeholder' => 'form.promocion.placeholder.accion_check',
'mapped' => false,
'required' => false,
'class' => EstadoCheck::class,
'row_attr' => [
'class' => 'accion accion-check',
'hidden' => true
],
])
->add('accionEstado', ChoiceType::class, [
'label' => 'form.promocion.label.accion_estado',
'mapped' => false,
'required' => false,
'placeholder' => 'form.promocion.placeholder.accion_estado',
'choices' => array_flip(EstadoRelojEnum::getEstados()),
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(EstadoRelojEnum::getEstado($choice), [], 'enum');
},
'choice_value' => function ($choice) use ($object)
{
$returnChoice = null;
$countAcciones = $object->getAcciones()->count();
$countAccioneslisto = ($object->getAcciones()->filter(
fn($acciones) => $acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() === EstadoRelojEnum::ESTADO_LISTO)
)->count();
$countAccionesEnTramitacion = ($object->getAcciones()->filter(
fn($acciones) => $acciones instanceof AccionEstado && $acciones->getEstado()?->getKey() === EstadoRelojEnum::ESTADO_EN_TRAMITACION)
)->count();
if((!$countAcciones && $choice === EstadoRelojEnum::ESTADO_RECEPCION) ||
($countAcciones > 0 && $countAccioneslisto) ||
($countAcciones > 0 && !$countAccioneslisto && $choice === EstadoRelojEnum::ESTADO_LISTO) ||
($countAcciones > 0 && $countAccioneslisto && $countAccionesEnTramitacion && $choice === EstadoRelojEnum::ESTADO_VENDIDO)
)
{
$returnChoice = $choice;
}
// if($choice === EstadoRelojEnum::ESTADO_VENDIDO &&
// $object->getReloj()->getOperacionVenta()?->getEstado()?->getKey() !== EstadoOperacionEnum::ESTADO_TRAMITADA)
// {
// $returnChoice = null;
// }
if(in_array($choice, [EstadoRelojEnum::ESTADO_RECEPCION, EstadoRelojEnum::ESTADO_ENVIADO, EstadoRelojEnum::ESTADO_SIN_ANUNCIAR, EstadoRelojEnum::ESTADO_EN_VENTA, EstadoRelojEnum::ESTADO_GESTION, EstadoRelojEnum::ESTADO_COMPRA])) $returnChoice = null;
/*$estadoAnuncioSinAnuncio = $object->getAcciones()->filter(
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)
)->toArray();
usort($estadoAnuncioSinAnuncio, fn($a, $b) => $b->getFecha() <=> $a->getFecha());
$estadoReciente = $estadoAnuncioSinAnuncio[0]??null;
$estadosNoValidos = [EstadoRelojEnum::ESTADO_RECEPCION, EstadoRelojEnum::ESTADO_ENVIADO, EstadoRelojEnum::ESTADO_SIN_ANUNCIAR, EstadoRelojEnum::ESTADO_EN_VENTA, EstadoRelojEnum::ESTADO_GESTION, EstadoRelojEnum::ESTADO_COMPRA];
if($estadoReciente?->getEstado()->getKey() === EstadoRelojEnum::ESTADO_ANUNCIO)
{
$estadosNoValidos = [EstadoRelojEnum::ESTADO_RECEPCION, EstadoRelojEnum::ESTADO_ENVIADO, EstadoRelojEnum::ESTADO_EN_VENTA, EstadoRelojEnum::ESTADO_GESTION, EstadoRelojEnum::ESTADO_COMPRA];
}
if(in_array($choice, $estadosNoValidos)) $returnChoice = null;*/
return $returnChoice;
},
'row_attr' => [
'class' => 'accion accion-estado',
'hidden' => true
],
])
->add('accionCoste', null, [
'label' => 'form.promocion.label.accion_coste',
'mapped' => false,
'required' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.accion_coste',
'class' => 'numeric currencies',
],
'row_attr' => [
'class' => 'numeric currencies accion accion-servicio accion-mejora accion-venta accion-estado-importacion',
'hidden' => true
],
'translation_domain' => 'promocionAdmin',
])
->add('accionPrecio', null, [
'label' => 'form.promocion.label.accion_precio',
'mapped' => false,
'required' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.accion_precio',
'class' => 'numeric currencies',
],
'row_attr' => [
'class' => 'numeric currencies accion accion-competencia accion-anuncio',
'hidden' => true
],
'translation_domain' => 'promocionAdmin',
])
->add('precioPromocion', null, [
'label' => 'form.promocion.label.precio_promocion',
'mapped' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.precio_promocion',
'class' => 'numeric currencies'
],
'row_attr' => [
'class' => 'numeric currencies accion accion-estado-anuncio',
'hidden' => true
],
'translation_domain' => 'promocionAdmin',
])
->add('accionDescripcion', TextareaType::class, [
'label' => 'form.promocion.label.accion_descripcion',
'mapped' => false,
'required' => false,
'attr' => [
'rows' => 5,
'placeholder' => 'form.promocion.placeholder.accion_descripcion',
],
'translation_domain' => 'promocionAdmin',
])
->add('accionAddButton', HTMLType::class, [
'label' => false,
'template' => 'admin/promocion/accion_add_button.html.twig'
])
->add('scriptControlFieldsAccion', ScriptType::class, [
'template' => 'SCRIPTS/Promocion/control_fields_accion.html.twig'
])
->add('scriptAddAccion', ScriptType::class, [
'template' => 'SCRIPTS/Promocion/add_accion.html.twig'
])
->end()
// ->with('with_card_reloj', [
// 'label' => 'form.promocion.with_card_reloj.label',
// 'class' => 'with-collapse col-md-12'
// ])
// ->add('desarrollo', HTMLType::class, [
// 'label' => false,
// 'data' => '<p style="color: red; font-size: x-large; font-weight: bolder;">Este apartado se encuentra aún en desarrollo</p>'
// ])
// ->end()
->with('with_card_reloj', [
'label' => 'form.promocion.with_card_reloj.label',
'class' => 'with-collapse col-md-12'
])
// Bloque General
->add('bloque_general', HTMLType::class, [
'label' => false,
'data' => '<h2>'.$this->getTranslator()->trans('bloque_general', [], 'promocionAdmin').'</h2>'
])
->add('reloj.genero', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_genero',
'choices' => array_flip(GeneroRelojEnum::all()),
'placeholder' => 'form.promocion.placeholder.reloj_genero',
'required' => false,
'attr' => ['class'=>'col-md-6'],
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
->add('relojEstadoGeneral', EntityType::class, [
'label' => 'form.promocion.label.reloj_estado_general',
'placeholder' => 'form.promocion.placeholder.reloj_estado_general',
'required' => false,
'mapped' => false,
'class' => EstadoAspecto::class,
'disabled' => true,
'data' => $reloj->getAspecto(),
'attr' => [
'class'=>'condition-slider row mb-3'
]
])
->add('reloj.estadoCaja', RangeType::class, [
'label'=>'Caja',
'required' => false,
'attr' => [
'min' => 1,
'max' => 5,
'step' => 1,
'class' => 'static-gradient-slider rating-slider',
],
'row_attr' => [
'class' => 'rating-slider-container'
]
])
->add('reloj.estadoCristal', RangeType::class, [
'label'=>'Cristal',
'required' => false,
'attr' => [
'min' => 1,
'max' => 5,
'step' => 1,
'class' => 'static-gradient-slider rating-slider',
],
'row_attr' => [
'class' => 'rating-slider-container'
]
])
->add('reloj.estadoDial', RangeType::class, [
'label'=>'Dial',
'required' => false,
'attr' => [
'min' => 1,
'max' => 5,
'step' => 1,
'class' => 'static-gradient-slider rating-slider',
],
'row_attr' => [
'class' => 'rating-slider-container'
]
])
->add('reloj.estadoAgujas', RangeType::class, [
'label'=>'Agujas',
'required' => false,
'attr' => [
'min' => 1,
'max' => 5,
'step' => 1,
'class' => 'static-gradient-slider rating-slider',
],
'row_attr' => [
'class' => 'rating-slider-container'
]
])
->add('reloj.estadoTapa', RangeType::class, [
'label'=>'Tapa',
'required' => false,
'attr' => [
'min' => 1,
'max' => 5,
'step' => 1,
'class' => 'static-gradient-slider rating-slider',
],
'row_attr' => [
'class' => 'rating-slider-container'
]
])
->add('reloj.estadoCorrea', RangeType::class, [
'label' => 'Brazalete/Correa',
'required' => false,
'attr' => [
'min' => 1,
'max' => 5,
'step' => 1,
'class' => 'static-gradient-slider rating-slider',
],
'row_attr' => [
'class' => 'rating-slider-container'
]
])
->add('leyenda_estado_reloj', HTMLType::class, [
'label' => false,
'data' => '<p>Leyeda estado reloj</p>'
])
// Esfera
->add('bloque_esfera', HTMLType::class, [
'label' => false,
'data' => '<h2>'.$this->getTranslator()->trans('bloque_esfera', [], 'promocionAdmin').'</h2>'
])
->add('reloj.esferaIndice', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_esfera_indice',
'choices' => array_flip(TipoEsferaIndiceEnum::all()),
'placeholder' => 'form.promocion.placeholder.reloj_esfera_indice',
'required' => false,
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
->add('reloj.esferaColor', ColorType::class, [
'label' => 'form.promocion.label.reloj_esfera_color',
'required' => false,
])
->add('reloj.esferaJoyas', CheckboxType::class, [
'label' => 'form.promocion.label.reloj_esfera_joyas',
'required' => false,
])
//Caja Reloj
->add('bloque_caja', HTMLType::class, [
'label' => false,
'data' => '<h2>'.$this->getTranslator()->trans('bloque_caja', [], 'promocionAdmin').'</h2>'
])
->add('reloj.cajaRelojDiametro', IntegerType::class, [
'label' => 'form.promocion.label.reloj_caja_reloj_diametro',
'required' => false,
'attr' => ['placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_diametro'],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.cajaRelojGrosor', IntegerType::class, [
'label' => 'form.promocion.label.reloj_caja_reloj_grosor',
'required' => false,
'attr' => ['placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_grosor'],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.cajaRelojResistenciaAgua', IntegerType::class, [
'label' => 'form.promocion.label.reloj_caja_reloj_resistencia_agua',
'required' => false,
'attr' => ['placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_resistencia_agua'],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.cajaRelojCristal', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_caja_reloj_cristal',
'choices' => array_flip(TipoCristalEnum::all()),
'placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_cristal',
'required' => false,
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
->add('reloj.cajaRelojMaterial', EntityType::class, [
'label' => 'form.promocion.label.reloj_caja_reloj_material',
'class' => Material::class,
'placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_material',
'required' => false,
])
->add('reloj.cajaRelojMaterialBisel', EntityType::class, [
'label' => 'form.promocion.label.reloj_caja_reloj_material_bisel',
'class' => Material::class,
'placeholder' => 'form.promocion.placeholder.reloj_caja_reloj_material_bisel',
'required' => false,
])
// Pulsera
->add('bloque_pulsera', HTMLType::class, [
'label' => false,
'data' => '<h2>'.$this->getTranslator()->trans('bloque_pulsera', [], 'promocionAdmin').'</h2>'
])
->add('reloj.pulseraMaterial', EntityType::class, [
'label' => 'form.promocion.label.reloj_pulsera_material',
'class' => Material::class,
'placeholder' => 'form.promocion.placeholder.reloj_pulsera_material',
'required' => false,
])
->add('reloj.pulseraColor', ColorType::class, [
'label' => 'form.promocion.label.reloj_pulsera_color',
'required' => false,
],[
'placeholder' => 'form.promocion.placeholder.reloj_pulsera_color'
])
->add('reloj.pulseraCierre', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_pulsera_cierre',
'choices' => array_flip(TipoCierreEnum::all()),
'placeholder' => 'form.promocion.placeholder.reloj_pulsera_cierre',
'required' => false,
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
->add('reloj.pulseraMaterialCierre', EntityType::class, [
'label' => 'form.promocion.label.reloj_pulsera_material_cierre',
'class' => Material::class,
'placeholder' => 'form.promocion.placeholder.reloj_pulsera_material_cierre',
'required' => false,
])
->add('reloj.pulseraMedidaMunieca', IntegerType::class, [
'label' => 'form.promocion.label.reloj_pulsera_medida_munieca',
'required' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_pulsera_medida_munieca'
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.pulseraAnchoCaja', IntegerType::class, [
'label' => 'form.promocion.label.reloj_pulsera_ancho_caja',
'required' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_pulsera_ancho_caja'
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.pulseraAnchoCierre', IntegerType::class, [
'label' => 'form.promocion.label.reloj_pulsera_ancho_cierre',
'required' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_pulsera_ancho_cierre'
],
'translation_domain' => 'promocionAdmin',
])
// Calibre
->add('bloque_calibre', HTMLType::class, [
'label' => false,
'data' => '<h2>'.$this->getTranslator()->trans('bloque_calibre', [], 'promocionAdmin').'</h2>'
])
->add('subbloque_calibre_avanzado', HTMLType::class, [
'label' => false,
'data' => '<h3>'.$this->getTranslator()->trans('subbloque_calibre_avanzado', [], 'promocionAdmin').'</h3>'
])
->add('reloj.calibre', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_calibre',
'choices' => array_flip(CalibreEnum::all()),
'placeholder' => 'form.promocion.placeholder.reloj_calibre',
'required' => false,
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
// ->add('reloj.calibreAvanzado', null, [
// 'label' => 'form.promocion.label.reloj_calibre_avanzado',
// 'attr' => [
// 'placeholder' => 'form.promocion.placeholder.reloj_calibre_avanzado',
// ],
// 'translation_domain' => 'promocionAdmin',
// ])
->add('reloj.calibreBasico', null, [
'label' => 'form.promocion.label.reloj_calibre_basico',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_calibre_basico',
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.calibreReservaMarcha', null, [
'label' => 'form.promocion.label.reloj_calibre_reserva_marcha',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_calibre_reserva_marcha',
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.calibreMarcha', null, [
'label' => 'form.promocion.label.reloj_calibre_marcha',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_calibre_marcha',
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.calibreNumeroJoyas', null, [
'label' => 'form.promocion.label.reloj_calibre_numero_joyas',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_calibre_numero_joyas',
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.calibreOscilacion', null, [
'label' => 'form.promocion.label.reloj_calibre_oscilacion',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_calibre_oscilacion',
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.calibreAmplitud', null, [
'label' => 'form.promocion.label.reloj_calibre_amplitud',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_calibre_amplitud',
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.piezasRepuesto', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_piezas_repuesto',
'choices' => array_flip(PiezaRepuestoEnum::all()),
'placeholder' => 'form.promocion.placeholder.reloj_piezas_repuesto',
'required' => false,
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
->add('reloj.piezasRepuestoObservaciones', TextareaType::class, [
'label' => 'form.promocion.label.reloj_piezas_repuesto_observaciones',
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_piezas_repuesto_observaciones',
],
'translation_domain' => 'promocionAdmin',
'required' => false,
])
->add('reloj.servicioMantenimiento', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_servicio_mantenimiento',
'choices' => array_flip(ServicioMantenimientoEnum::all()),
'placeholder' => 'form.promocion.placeholder.reloj_servicio_mantenimiento',
'required' => false,
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
->add('reloj.calibreCaracteristicas', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_calibre_caracteristicas',
'choices' => array_flip(CalibreCaracteristicasEnum::all()),
'multiple' => true,
'expanded' => false,
'placeholder' => 'form.promocion.placeholder.reloj_calibre_caracteristicas',
'required' => false,
'attr' => [
'class' => 'feature-checkbox row'
],
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
->add('reloj.calibreFunciones', ChoiceType::class, [
'label' => 'form.promocion.label.reloj_calibre_funciones',
'choices' => array_flip(CalibreFuncionesEnum::all()),
'multiple' => true,
'expanded' => false,
'placeholder' => 'form.promocion.placeholder.reloj_calibre_funciones',
'required' => false,
'attr' => [
'class'=>'feature-checkbox row'
],
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans($key, [], 'enum');
}
])
// Bloques de texto
->add('reloj.descripcionDetallada', TextareaType::class, [
'label' => 'form.promocion.label.reloj_descripcion_detallada',
'required' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_descripcion_detallada',
'class'=>'col-md-12 mb-3'
],
'translation_domain' => 'promocionAdmin',
])
->add('reloj.condiciones', TextareaType::class, [
'label' => 'form.promocion.label.reloj_condiciones',
'required' => false,
'attr' => [
'placeholder' => 'form.promocion.placeholder.reloj_condiciones',
'class' => 'col-md-12 mb-3'
],
'translation_domain' => 'promocionAdmin',
])
// ->add('bloque_anuncio', HTMLType::class, [
// 'label' => false,
// 'template' => 'admin/promocion/anuncio.html.twig',
// ])
->end()
;
$form->getFormBuilder()->get('reloj__marca')
->addModelTransformer(new CallbackTransformer(
function ($marca) //transform
{
return $marca?->getId() ? $marca : null;
},
function ($marca) //reverseTransform
{
return MarcaAbstractTransformer::toMarca($marca);
})
)
->addViewTransformer(new CallbackTransformer(
function ($marca) //transform
{
return MarcaAbstractTransformer::toString($marca);
},
function ($marca) //reverseTransform
{
return $marca;
})
)
;
$form->getFormBuilder()->get('reloj__aspecto')
->addModelTransformer(new CallbackTransformer(
function ($aspecto) //transform
{
return $aspecto?->getId() ? $aspecto : null;
},
function ($aspecto) //reverseTransform
{
return EstadoAbstractTransformer::toEstado($aspecto);
})
)
->addViewTransformer(new CallbackTransformer(
function ($aspecto) //transform
{
return EstadoAbstractTransformer::toString($aspecto);
},
function ($aspecto) //reverseTransform
{
return $aspecto;
})
)
;
$form->getFormBuilder()->get('reloj__genero')
->addModelTransformer(new GeneroRelojEnumToStringTransformer())
;
$form->getFormBuilder()->get('reloj__esferaIndice')
->addModelTransformer(new TipoEsferaIndiceEnumToStringTransformer())
;
$form->getFormBuilder()->get('reloj__cajaRelojCristal')
->addModelTransformer(new TipoCristalEnumToStringTransformer())
;
$form->getFormBuilder()->get('reloj__pulseraCierre')
->addModelTransformer(new TipoCierreEnumToStringTransformer())
;
$form->getFormBuilder()->get('reloj__calibre')
->addModelTransformer(new CalibreEnumToStringTransformer())
;
$form->getFormBuilder()->get('reloj__piezasRepuesto')
->addModelTransformer(new PiezaRepuestoEnumToStringTransformer())
;
$form->getFormBuilder()->get('reloj__servicioMantenimiento')
->addModelTransformer(new ServicioMantenimientoEnumToStringTransformer())
;
}
}