<?php
namespace App\Controller\GestionComerciale;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\StatutCommande;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Form\GestionComerciale\CommandeType;
use App\Library\Datatable\Util\Datatable;
use App\Library\Uploader\Services\FileUploader;
use App\Security\Voter\EntityVoter;
use App\Service\GestionComerciale\EmailService;
use App\Service\Taxes\TaxeService;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use JMS\Serializer\SerializerBuilder;
use Knp\Component\Pager\PaginatorInterface;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class FactureController extends AbstractController
{
/**
* @Route("/compte/facture", name="dtc_facture_liste")
*/
public function listerAction(Request $request, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator, ColonneTableauService $serviceColonneTableau)
{
$tableau_class_cellule = array();
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [0], "visible" => false, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [1],"title"=>'<i style="font-size:1.5em;" class="fa fa-clipboard">', "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-left", "targets" => [2], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [3],"title"=>'<i style="font-size:1.5em;" class="fa fa-calendar"> <b>/</b> <i style="" class="fa fa-euro"> ', "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [4],"title"=>'<i style="font-size:1.5em;" class="fa fa-gear">', "visible" => true, "orderable" => false];
$response = new Response();
$this->datatable($request, $em, $datatable, $translator, $response);
$param = $request->query->all();
return $this->render('GestionComerciale/Facture/lister.html.twig',
[
'tableauClassColonne' => $tableau_class_cellule,
'parametres'=> $param,
]
,$response);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Request $request, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$user = $this->getUser();
$param = $request->query->all();
$datatable
->setDatatableId('liste_commande')
->setEntity(Commande::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
'date' => 'x.date',
$translator->trans("RÉFÉRENCE") => 'x.reference',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/type_document_vente.html.twig',
],
2 => [
'view' => 'FO/DataTable/reference_document_commercail.html.twig',
],
/*
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_liste',
],
],
*/
3 => [
'view' => 'FO/DataTable/prix_commande_heure.html.twig',
],
4 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_facture_liste',
'objet' => Commande::class,
'deplier' => false,
'table' => "liste_commande",
],
],
]
)
->setMultiple([])
->setOrder("x.date", "desc")
->setSearch(true)
->setSearchFields([]);
$where = "x.typeDocumentCommercial = :typeDocumentCommercial and x.client = :client and s.ordre != :ordre";
$parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::FACTURE,'ordre'=>0,'client'=>$user->getClient()];
if (array_key_exists('parametres', $param)) {
$response = new Response();
if (array_key_exists('client', $param["parametres"]) and $param["parametres"]["client"] > 0) {
//$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$parameters["client"] = $param["parametres"]["client"];
if ($where != "") {
$where .= " AND ";
}
$where .= "c.id = :client";
}
if (array_key_exists('date_debut', $param["parametres"]) and $param["parametres"]["date_debut"] != "") {
$param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y', $param["parametres"]["date_debut"]);
$param["parametres"]["date_debut"]->setTime(00, 00, 00);
$parameters["date_debut"] = $param["parametres"]["date_debut"];
if ($where != "") {
$where .= " AND ";
}
$where .= "x.date >= :date_debut";
}
if (array_key_exists('transporteur', $param["parametres"]) and $param["parametres"]["transporteur"] > 0) {
//$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$parameters["transporteur"] = $param["parametres"]["transporteur"];
if ($where != "") {
$where .= " AND ";
}
$where .= "t.id = :transporteur";
}
if (array_key_exists('date_fin', $param["parametres"]) and $param["parametres"]["date_fin"] != "") {
$param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y', $param["parametres"]["date_fin"]);
$param["parametres"]["date_fin"]->setTime(23, 59, 59);
$parameters["date_fin"] = $param["parametres"]["date_fin"];
if ($where != "") {
$where .= " AND ";
}
$where .= "x.date <= :date_fin";
}
}
if ($where != '') {
$datatable->setWhere($where, $parameters);
$qb = $datatable->getQueryBuilder()->getDoctrineQueryBuilder();
}
return $datatable;
}
/**
* @Route("/compte/facture/grid", name="dtc_facture_liste_grid")
*/
public function gridAction(Request $request, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($request, $em, $datatable, $translator)->execute();
}
}