236 lines
9.4 KiB
PHP
236 lines
9.4 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Core\Controller\Admin\Crud\CrudController;
|
|
use App\Core\Crud\CrudConfiguration;
|
|
use App\Core\Crud\Field;
|
|
use App\Core\Entity\EntityInterface;
|
|
use App\Core\Manager\EntityManager;
|
|
use App\Entity\Bill as Entity;
|
|
use App\Factory\BillFactory as Factory;
|
|
use App\Form\BillType as Type;
|
|
use App\Form\BillFilterType as FilterType;
|
|
use App\Repository\BillRepositoryQuery as RepositoryQuery;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpFoundation\Session\Session;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
use App\Core\Form\FileUploadHandler;
|
|
use Symfony\Component\Form\Form;
|
|
use function Symfony\Component\String\u;
|
|
use App\Repository\BillVendorRepositoryQuery;
|
|
use App\Factory\BillVendorFactory;
|
|
|
|
class BillAdminController extends CrudController
|
|
{
|
|
#[Route(path: '/admin/user/edit/{entity}', name: 'admin_user_edit', methods: ['GET', 'POST'])]
|
|
|
|
#[Route(path: "/admin/bill/{page}", name: "admin_bill_index", methods: ['GET'], requirements: ['page' => '\d+'])]
|
|
public function index(RepositoryQuery $query, Request $request, Session $session, int $page = 1): Response
|
|
{
|
|
return $this->doIndex($page, $query, $request, $session);
|
|
}
|
|
|
|
#[Route(path: "/admin/bill/new", name: "admin_bill_new", methods: ['GET', 'POST'])]
|
|
public function new(Factory $factory, EntityManager $entityManager, Request $request, FileUploadHandler $fileUpload): Response
|
|
{
|
|
return $this->doNew(
|
|
$factory->create(),
|
|
$entityManager,
|
|
$request,
|
|
function(Entity $entity, Form $form, Request $request) use ($fileUpload) {
|
|
$directory = 'uploads/Factures/';
|
|
|
|
$fileUpload->handleForm(
|
|
$form->get('file')->getData(),
|
|
$directory,
|
|
function ($filename) use ($entity, $directory) {
|
|
$entity->setFile($directory.'/'.$filename);
|
|
}
|
|
);
|
|
}
|
|
);
|
|
}
|
|
|
|
#[Route(path: "/admin/bill/show/{entity}", name: "admin_bill_show", methods: ['GET'])]
|
|
public function show(Entity $entity): Response
|
|
{
|
|
return $this->doShow($entity);
|
|
}
|
|
|
|
#[Route(path: "/admin/bill/filter", name: "admin_bill_filter", methods: ['GET'])]
|
|
public function filter(Session $session): Response
|
|
{
|
|
return $this->doFilter($session);
|
|
}
|
|
|
|
#[Route(path: "/admin/bill/edit/{entity}", name: "admin_bill_edit", methods: ['GET', 'POST'])]
|
|
public function edit(
|
|
Entity $entity,
|
|
EntityManager $entityManager,
|
|
BillVendorRepositoryQuery $vendorQuery,
|
|
BillVendorFactory $vendorFactory,
|
|
Request $request
|
|
): Response
|
|
{
|
|
return $this->doEdit(
|
|
$entity,
|
|
$entityManager,
|
|
$request,
|
|
function(Entity $entity, Form $form, Request $request) use ($entityManager, $vendorQuery, $vendorFactory) {
|
|
$vendor = $form->get('vendor')->getData();
|
|
$customVendor = $form->get('customVendor')->getData();
|
|
|
|
if ($customVendor !== null) {
|
|
$customVendor = u($customVendor)->upper();
|
|
$vendor = $vendorQuery->create()
|
|
->where('.label = :label')
|
|
->setParameter(':label', $customVendor)
|
|
->findOne()
|
|
;
|
|
|
|
if ($vendor === null) {
|
|
$vendor = $vendorFactory->create($customVendor);
|
|
$entityManager->create($vendor);
|
|
}
|
|
}
|
|
|
|
$entity->setVendor($vendor);
|
|
}
|
|
);
|
|
}
|
|
|
|
#[Route(path: "/admin/bill/sort/{page}", name: "admin_bill_sort", methods: ['POST'], requirements: ['page' => '\d+'])]
|
|
public function sort(RepositoryQuery $query, EntityManager $entityManager, Request $request, Session $session, int $page = 1): Response
|
|
{
|
|
return $this->doSort($page, $query, $entityManager, $request, $session);
|
|
}
|
|
|
|
#[Route(path: "/admin/bill/batch/{page}", name: "admin_bill_batch", methods: ['POST'], requirements: ['page' => '\d+'])]
|
|
public function batch(RepositoryQuery $query, EntityManager $entityManager, Request $request, Session $session, int $page = 1): Response
|
|
{
|
|
return $this->doBatch($page, $query, $entityManager, $request, $session);
|
|
}
|
|
|
|
#[Route(path: "/admin/bill/delete/{entity}", name: "admin_bill_delete", methods: ['DELETE', 'POST'])]
|
|
public function delete(Entity $entity, EntityManager $entityManager, Request $request): Response
|
|
{
|
|
return $this->doDelete($entity, $entityManager, $request);
|
|
}
|
|
|
|
protected function getConfiguration(): CrudConfiguration
|
|
{
|
|
return CrudConfiguration::create()
|
|
->setPageTitle('index', 'Factures')
|
|
->setPageTitle('edit', 'Facture #{id}')
|
|
->setPageTitle('new', 'Nouvelle facture')
|
|
->setPageTitle('show', 'Facture #{id}')
|
|
|
|
->setPageRoute('index', 'admin_bill_index')
|
|
->setPageRoute('new', 'admin_bill_new')
|
|
->setPageRoute('edit', 'admin_bill_edit')
|
|
->setPageRoute('show', 'admin_bill_show')
|
|
->setPageRoute('sort', 'admin_bill_sort')
|
|
->setPageRoute('batch', 'admin_bill_batch')
|
|
->setPageRoute('delete', 'admin_bill_delete')
|
|
->setPageRoute('filter', 'admin_bill_filter')
|
|
|
|
->setForm('edit', Type::class, [])
|
|
->setForm('new', Type::class)
|
|
->setForm('filter', FilterType::class)
|
|
|
|
// ->setMaxPerPage('index', 20)
|
|
|
|
// ->setIsSortableCollection('index', false)
|
|
// ->setSortableCollectionProperty('sortOrder')
|
|
|
|
// ->setAction('index', 'new', true)
|
|
// ->setAction('index', 'show', true)
|
|
// ->setAction('index', 'edit', true)
|
|
// ->setAction('index', 'delete', true)
|
|
|
|
// ->setAction('edit', 'back', true)
|
|
// ->setAction('edit', 'show', true)
|
|
// ->setAction('edit', 'delete', true)
|
|
|
|
// ->setAction('show', 'back', true)
|
|
// ->setAction('show', 'edit', true)
|
|
|
|
->setView('form', 'admin/bill/_form.html.twig')
|
|
->setView('show_entity', 'admin/bill/_show.html.twig')
|
|
->setDefaultSort('index', 'id', 'desc')
|
|
->setField('index', 'ID', Field\TextField::class, [
|
|
'property_builder' => function (EntityInterface $entity) {
|
|
return sprintf('#%d', $entity->getId());
|
|
},
|
|
'sort' => ['id', '.id'],
|
|
])
|
|
->setField('index', 'Rérérence', Field\ButtonField::class, [
|
|
'property' => 'reference',
|
|
'button_tag' => 'span',
|
|
'button_attr' => ['style' => 'user-select: all'],
|
|
'sort' => ['reference', '.reference'],
|
|
])
|
|
->setField('index', 'Fournisseur', Field\ButtonField::class, [
|
|
'property' => 'vendor',
|
|
'button_tag' => 'span',
|
|
'button_attr' => ['style' => 'user-select: all'],
|
|
'sort' => ['vendor', '.vendor'],
|
|
])
|
|
->setField('index', 'Date', Field\DateField::class, [
|
|
'property' => 'date',
|
|
'sort' => ['date', '.date'],
|
|
'format' => 'd/m/Y',
|
|
])
|
|
->setField('index', 'Date limite de paiement', Field\DateField::class, [
|
|
'property' => 'paymentDeadlineDate',
|
|
'sort' => ['paymentDeadlineDate', '.paymentDeadlineDate'],
|
|
'format' => 'd/m/Y',
|
|
])
|
|
->setField('index', 'Montant TTC', Field\TextField::class, [
|
|
'property_builder' => function(EntityInterface $entity) {
|
|
if ($entity->getAmountTtc()) {
|
|
return sprintf('<span style="user-select: all">%01.2f</span> €', $entity->getAmountTtc());
|
|
}
|
|
},
|
|
'raw' => true,
|
|
'sort' => ['amountTtc', '.amountTtc'],
|
|
'attr' => ['class' => 'text-right'],
|
|
])
|
|
->setField('index', 'Montant HT', Field\TextField::class, [
|
|
'property_builder' => function(EntityInterface $entity) {
|
|
if ($entity->getAmountHt()) {
|
|
return sprintf('<span style="user-select: all">%01.2f</span> €', $entity->getAmountHt());
|
|
}
|
|
},
|
|
'raw' => true,
|
|
'sort' => ['amountHt', '.amountHt'],
|
|
'attr' => ['class' => 'text-right'],
|
|
])
|
|
->setField('index', 'Statut', Field\ButtonField::class, [
|
|
'property' => 'humanStatus',
|
|
'button_attr_builder' => function(EntityInterface $entity) {
|
|
$classes = [
|
|
0 => 'btn btn-sm btn-light',
|
|
1 => 'btn btn-sm btn-warning',
|
|
2 => 'btn btn-sm btn-success',
|
|
];
|
|
|
|
return ['class' => $classes[$entity->getStatus()]];
|
|
},
|
|
'sort' => ['status', '.status'],
|
|
])
|
|
|
|
// ->setBatchAction('index', 'delete', 'Delete', function(EntityInterface $entity, EntityManager $manager) {
|
|
// $manager->delete($entity);
|
|
// })
|
|
;
|
|
}
|
|
|
|
protected function getSection(): string
|
|
{
|
|
return 'bill';
|
|
}
|
|
}
|