<?php
namespace App\Controller\Admin;
use App\Entity\Appointment;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
use EasyCorp\Bundle\EasyAdminBundle\Filter\ChoiceFilter;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TelephoneField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
class AppointmentCrudController extends AbstractCrudController
{
private $states = array(
Appointment::APPOINTMENT_PENDING => 'En attente',
Appointment::APPOINTMENT_VALIDE => 'Valide',
Appointment::APPOINTMENT_UPDATED => 'Modifié',
Appointment::APPOINTMENT_REJECTED => 'Annulé',
);
public static function getEntityFqcn(): string
{
return Appointment::class;
}
public function configureCrud(Crud $crud): Crud
{
return $crud
->setEntityLabelInSingular('app.admin.appointment')
->setEntityLabelInPlural('app.admin.appointment')
->setEntityPermission('ROLE_USER')
->setPageTitle('index', 'Liste des %entity_label_plural%')
->setPageTitle('new', 'Ajouter un nouveau %entity_label_singular%')
->setPageTitle('detail', 'Détails')
->setPageTitle('edit', 'Modification')
->setHelp('new', 'Nouveau rendez-vous')
->setHelp('index', 'Gérer les rendez-vous')
->setSearchFields(['firstName', 'lastName', 'email', 'phone', 'details', 'object'])
->setDefaultSort(['id' => 'ASC'])
->setPaginatorPageSize(10)
->setPaginatorRangeSize(3)
->addFormTheme('@FOSCKEditor/Form/ckeditor_widget.html.twig')
;
}
public function configureActions(Actions $actions): Actions
{
return $actions
// PAGE_INDEX
->remove(Crud::PAGE_INDEX, Action::NEW)
->add(Crud::PAGE_INDEX, Action::DETAIL)
->update(Crud::PAGE_INDEX, Action::DETAIL, function (Action $action) {
return $action->setIcon('far fa-eye')->addCssClass('btn btn-sm btn-warning')->setLabel(false);
})
->update(Crud::PAGE_INDEX, Action::EDIT, function (Action $action) {
return $action->setIcon('far fa-edit')->addCssClass('btn btn-sm btn-success')->setLabel(false);
})
->update(Crud::PAGE_INDEX, Action::DELETE, function (Action $action) {
return $action->setIcon('far fa-trash-alt')->setCssClass('btn btn-sm btn-danger font-weight-bolder action-delete ')->setLabel(false);
})
// PAGE_NEW
->update(Crud::PAGE_NEW, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setIcon('fas fa-plus')->addCssClass('btn btn-sm btn-success');
})
->update(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER, function (Action $action) {
return $action->setIcon('fas fa-plus-circle')->setCssClass('btn btn-sm btn-primary');
})
->add(Crud::PAGE_NEW, Action::INDEX)->update(Crud::PAGE_NEW, Action::INDEX, function (Action $action) {
return $action->setIcon('fas fa-list')->setCssClass('btn btn-sm btn-warning');
})
// PAGE_EDIT
->remove(Crud::PAGE_EDIT, Action::SAVE_AND_CONTINUE)
->update(Crud::PAGE_EDIT, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setIcon('fas fa-edit')->addCssClass('btn btn-sm btn-success');
})
->add(Crud::PAGE_EDIT, Action::DETAIL)->update(Crud::PAGE_EDIT, Action::DETAIL, function (Action $action) {
return $action->setIcon('far fa-eye')->setCssClass('btn btn-sm btn-primary font-weight-bolder action-detail ss');
})
->add(Crud::PAGE_EDIT, Action::INDEX)->update(Crud::PAGE_EDIT, Action::INDEX, function (Action $action) {
return $action->setIcon('fas fa-list')->addCssClass('btn btn-sm btn-warning');
})
// PAGE_DETAIL
->update(Crud::PAGE_DETAIL, Action::EDIT, function (Action $action) {
return $action->setIcon('fas fa-edit')->addCssClass('btn btn-sm btn-success');
})
->update(Crud::PAGE_DETAIL, Action::DELETE, function (Action $action) {
return $action->setIcon('far fa-trash-alt')->setCssClass('btn btn-sm btn-danger font-weight-bolder action-delete ');
})
->update(Crud::PAGE_DETAIL, Action::INDEX, function (Action $action) {
return $action->setIcon('fas fa-list')->setCssClass('btn btn-sm btn-warning');
})
// BATCH ACTIONS
->update(Crud::PAGE_INDEX, Action::BATCH_DELETE, function (Action $action) {
return $action->setIcon('far fa-trash-alt')->setCssClass('btn btn-sm btn-danger font-weight-bolder action-batchDelete ss');
})
// Reorder actions
->reorder(Crud::PAGE_DETAIL, [Action::INDEX, Action::DELETE, Action::EDIT])
;
}
public function configureFields(string $pageName): iterable
{
return [
IdField::new('id')->hideOnForm(),
TextField::new('firstName', 'Firstname')->hideOnForm(),
TextField::new('lastName', 'Lastname')->hideOnForm(),
EmailField::new('email')->hideOnForm(),
TelephoneField::new('phone')->hideOnForm(),
TextField::new('object')->onlyOnDetail(),
TextField::new('details')->setFormType(CKEditorType::class)->onlyOnDetail(),
DateTimeField::new('availablity')->hideOnForm(),
DateTimeField::new('availablityConfirmed', 'Confirmation'),
ChoiceField::new('status')->setChoices(array_flip($this->states)),
DateTimeField::new('createdAt')->setFormat('dd/MM/yyyy HH:mm')->onlyOnDetail(),
DateTimeField::new('updatedAt')->setFormat('dd/MM/yyyy HH:mm')->onlyOnDetail(),
];
}
public function configureFilters(Filters $filters): Filters
{
return $filters
->add('firstName', 'Firstname')
->add('lastName', 'Lastname')
->add('email')
->add('phone')
->add('object')
->add('availablity')
->add('availablityConfirmed', 'Confirmation')
->add(ChoiceFilter::new('status')->setChoices(array_flip($this->states)))
->add('createdAt')
;
}
public function updateEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
$entityInstance->setUpdatedAt(new \DateTimeImmutable());
parent::updateEntity($entityManager, $entityInstance);
}
}