<?php
namespace App\Controller;
use App\Entity\Formation;
use App\Entity\User;
use App\Helper\Helper;
use App\Repository\EafInstallationTransformationRepository;
use App\Entity\Fiche\Infrastructure\RemplisseurTransformation;
use App\Repository\OpCommunalRepository;
use App\Repository\OpRegionaleRepository;
use App\Repository\OrganisationPaysanneFiliereRepository;
use App\Service\Fiche\InstallationTransformationService;
use App\Service\Fiche\NiveauFicheService;
use DateTime;
use Doctrine\ORM\NonUniqueResultException;
use Ramsey\Uuid\Uuid;
use App\Entity\Fichier;
use App\Helper\ConstApp;
use App\Service\EmailService;
use App\Service\FicheService;
use App\Entity\PisteRehabilite;
use App\Entity\EquipementMachine;
use App\Form\PisteRehabiliteType;
use App\Repository\PoleRepository;
use App\Repository\UserRepository;
use Symfony\Component\Mime\Address;
use App\Repository\RegionRepository;
use App\Entity\FactureTransformation;
use App\Repository\FiliereRepository;
use App\Service\Fiche\FactureService;
use App\Service\Fiche\FichierService;
use App\Entity\FacturePisteRehabilite;
use App\Repository\FokontanyRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\StatutFicheRepository;
use App\Entity\InstallationTransformation;
use App\Form\InstallationTransformationType;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use App\Repository\FactureStockageRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use App\Repository\CanalFinancementRepository;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\SuiviInstallationTransformation;
use App\Entity\SuiviProductionTransfo;
use App\Repository\EquipementMachineRepository;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\Fiche\ResumeBeneficiaireService;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Repository\FactureTransformationRepository;
use App\Repository\InstallationTransformationRepository;
use App\Repository\SuiviProductionTransfoRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
/**
* @Route("/suivi/installation/transformation")
*/
class SuiviInstallationTransformationController extends AbstractController
{
private $params;
private $ficheService;
private $factureService;
private $fichierService;
private $factureTransformationRepo;
private $resumeBeneficiaireService;
private $canalFinancementRepository;
private $equipementMachineRepository;
private $constApp;
private $installationTransformationService;
private $userRepository;
private $organisationPaysanneFiliereRepository;
public function __construct(
ParameterBagInterface $params,
FicheService $ficheService,
FactureService $factureService,
FichierService $fichierService,
FactureTransformationRepository $factureTransformationRepo,
ResumeBeneficiaireService $resumeBeneficiaireService,
CanalFinancementRepository $canalFinancementRepository,
EquipementMachineRepository $equipementMachineRepository,
ConstApp $constApp,
InstallationTransformationService $installationTransformationService,
UserRepository $userRepository,
OrganisationPaysanneFiliereRepository $organisationPaysanneFiliereRepository
)
{
$this->params = $params;
$this->ficheService = $ficheService;
$this->factureService = $factureService;
$this->fichierService = $fichierService;
$this->factureTransformationRepo = $factureTransformationRepo;
$this->resumeBeneficiaireService = $resumeBeneficiaireService;
$this->canalFinancementRepository = $canalFinancementRepository;
$this->equipementMachineRepository = $equipementMachineRepository;
$this->constApp = $constApp;
$this->installationTransformationService = $installationTransformationService;
$this->userRepository = $userRepository;
$this->organisationPaysanneFiliereRepository = $organisationPaysanneFiliereRepository;
}
/**
* @Route("/", name="app_suivi_installation_transformation_index")
*/
public function index(): Response
{
return $this->render('suivi_installation_transformation/index.html.twig', []);
}
/**
* @Route("/api/installation-transformation-list", name="app_suivi_installation_transformation_list")
*/
public function getAllInstallationTransformation(Request $request): JsonResponse
{
$currentUser = $this->getUser();
$user = $this->userRepository->find($currentUser);
$profilUser = $user->getProfil()->getId();
$profilName = $user->getProfil()->getName();
$column = $request->query->get("column") ?? "";
$value = $request->query->get("value") ?? "";
$limit = $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
$page = $request->query->get("page") ? intval($request->query->get("page")) : 0;
$offset = ($limit * $page) - $limit;
$totalRows = [];
$ceps = [];
//-------Beginning of filter data by Locality level-------------
$userLevelLocality = $user->getProfil()->getNiveauLocalite();
$userLocality = [];
$localityMethods = $this->constApp->localityMethods();
if (isset($localityMethods[$userLevelLocality])) {
$method = $localityMethods[$userLevelLocality];
foreach ($user->$method() as $locality) {
$userLocality[] = $locality->getId();
}
}
//-------End of filter data by Locality level-------------
//Récuperation des données à afficher si l'utilisateur connecté est admin
if ($user->getProfil()->getNiveauLocalite() == "nat_") {
$ceps = $this->installationTransformationService->getAllInstallationTransformation(
$column, $value, $limit, $offset, [], null
);
$totalRows = $this->installationTransformationService->getAllInstallationTransformation(
$column, $value, null, null, [], null
);
} else {
$ceps = $this->installationTransformationService->getAllInstallationTransformation(
$column, $value, $limit, $offset,
$userLocality,
$userLevelLocality
);
$totalRows = $this->installationTransformationService->getAllInstallationTransformation(
$column, $value, null, null,
$userLocality,
$userLevelLocality
);
}
return new JsonResponse(
[
'title' => 'Récuperation liste installation transformation',
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => [
'rows' => $ceps,
'dataInfo' => [
'totalRows' => count($totalRows),
'limit' => $limit,
'page' => $page,
]
]
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/{id}/show", name="app_suivi_installation_transformation_show", methods={"GET", "POST"})
*/
public function show(InstallationTransformation $installationTransformation, Request $request, RegionRepository $regionRepository): Response
{
$route = $request->attributes->get("_route");
$form = $this->createForm(InstallationTransformationType::class, $installationTransformation, [
'action' => $this->generateUrl('app_installation_transformation_new'),
'method' => 'POST'
]);
$form->handleRequest($request);
$remplisseur = $installationTransformation->getRemplisseurInitiale();
$dateNow = new DateTime();
$userConnect = $this->getUser();
$user = $this->userRepository->find($userConnect);
//Get region cir only for all infrastructure
$regions = $user->getCoordinationZone() ? $user->getCoordinationZone()->getRegions() : $regionRepository->findAll();
$pole = $installationTransformation->getPole();
$district = $installationTransformation->getPole() && isset($installationTransformation->getPole()->getDistrict()[0]) ? $installationTransformation->getPole()->getDistrict()[0] : [];
$communes = $district ? $district->getCommunes() : [];
//Filter commune
foreach ($communes as $commune) {
//Push if remplisseur found
foreach ($commune->getUsers() as $user) {
//Get user CGEAF by commune
if ($user->getProfil()->getId() == $this->params->get('profil_cgeaf')) {
$dataCommunes[] = [
'id' => $commune->getId(),
'name' => $commune->getName(),
'remplisseurs' => [
'id' => $user->getId(),
'name' => $user->getLastName()
]
];
}
}
}
//Combine rempliseur meme commune
$communeList = [];
foreach ($dataCommunes as $item) {
$idCommune = $item['id'];
if (!isset($communeList[$idCommune])) {
$communeList[$idCommune] = [
'id' => $item['id'],
'name' => $item['name'],
'remplisseurs' => []
];
}
// Ajouter le remplisseur dans la liste
$communeList[$idCommune]['remplisseurs'][] = $item['remplisseurs'];
}
$remplisseurs = $installationTransformation->getRemplisseurTransformations();
$equipementMachine = $this->equipementMachineRepository->findBy(['installationTransformation' => $installationTransformation]);
$canalFinancement = $this->canalFinancementRepository->findAll();
$htmlViewFormFiche = $this->renderView('suivi_installation_transformation/show.html.twig', [
'installationTransformation' => $installationTransformation,
'equipementMachines' => $equipementMachine,
'sourceFinancements' => $canalFinancement,
'dateNow' => $dateNow->format('d - m - Y'),
'user' => $remplisseur,
'form' => $form->createView(),
'route' => $route,
'remplisseurs' => $remplisseurs,
'regions' => $regions,
'pole' => $pole,
'district' => $district,
'communes' => $communeList,
'region' => $installationTransformation->getPole()->getRegion(),
'editMode' => true,
'show' => true
]);
return new JsonResponse(
[
'title' => 'Affichage suivi installation transformation',
'message' => 'Affichage suivi installation transformation avec succès',
'status' => 'success',
'htmlViewFormFiche' => $htmlViewFormFiche,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/new", name="app_installation_transformation_new", methods={"GET", "POST"})
*/
public function new(
Request $request,
StatutFicheRepository $statutFicheRepository,
RegionRepository $regionRepository,
EntityManagerInterface $entityManager,
PoleRepository $poleRepository,
FokontanyRepository $fokontanyRepository,
OpCommunalRepository $opCommunalRepository,
OpRegionaleRepository $opRegionaleRepository
): Response
{
$route = $request->attributes->get("_route");
$installationTransformation = new InstallationTransformation();
$form = $this->createForm(InstallationTransformationType::class, $installationTransformation, [
'action' => $this->generateUrl('app_installation_transformation_new'),
'method' => 'POST'
]);
$form->handleRequest($request);
$remplisseur = $this->getUser();
$userConnect = $this->getUser();
$user = $this->userRepository->find($userConnect);
//Get region cir only for all infrastructure
$regions = $user->getCoordinationZone() ? $user->getCoordinationZone()->getRegions() : $regionRepository->findAll();
$dateNow = new DateTime();
$facture = new FactureTransformation();
$sourcesFinancement = $this->canalFinancementRepository->findAll();
$htmlViewFormFiche = $this->renderView('suivi_installation_transformation/new.html.twig', [
'installationTransformation' => $installationTransformation,
'sourcesFinancements' => $sourcesFinancement,
'dateNow' => $dateNow->format('d - m - Y'),
'user' => $remplisseur,
'form' => $form->createView(),
'route' => $route,
'fokontany' => null,
'regions' => $regions,
'editMode' => false
]);
if ($form->isSubmitted()) {
if ($request->get('equipement')) {
$this->createEquipementMachine($request->get('equipement'), $entityManager, $installationTransformation);
}
//récuperation des données depuis formulaire
$poleId = $request->request->get("pole");
if (isset($request->files->get("installation_transformation")["fichier"])) {
$files = $request->files->get("installation_transformation")["fichier"];
} else {
$files = [];
}
$stringFilesDeleted = $request->request->get("fichier_deleted");
//recuperation des factures de la fiche
$factureEtudes = $request->request->get("etude");
$factureTravaux = $request->request->get("travaux");
$stringFactureDeleted = $request->request->get("facture_deleted");
//Suppression des fichiers selectionnés
if ($stringFilesDeleted != null && $stringFilesDeleted != "0") {
$tabFichierDeleted = explode(",", $stringFilesDeleted);
$this->fichierService->deleteFichier($tabFichierDeleted);
}
$opCommunal = $request->request->get("installation_transformation")["opCommunal"];
$opRegionale = $request->request->get("installation_transformation")["opRegionale"];
if ($opCommunal != "") {
$findOpCommunal = $opCommunalRepository->find((int)$opCommunal);
$installationTransformation->setOpCommunal($findOpCommunal);
}
if ($opRegionale != "") {
$finOpRegionale = $opRegionaleRepository->find((int)$opRegionale);
$installationTransformation->setOpRegionale($finOpRegionale);
}
$uuid = Uuid::uuid4();
$installationTransformation->setUuid($uuid);
$installationTransformation->setPole($poleRepository->find((int)$poleId));
$installationTransformation->setRemplisseurInitiale($remplisseur);
$installationTransformation->setStatutFiche($statutFicheRepository->find(1));
$installationTransformation->setCreatedAt(new \DateTimeImmutable('now'));
$installationTransformation->setUpdatedAt(new \DateTimeImmutable('now'));
$entityManager->persist($installationTransformation);
//get all remplisseur
$remplisseurIds = $request->request->all('installation_transformation')['remplisseur'] ?? [];
if ($remplisseurIds) {
foreach ($remplisseurIds as $remplisseurId) {
$user = $this->userRepository->find(intval($remplisseurId));
//Insert each remplisseur for the transformation
$remplisseurTransformation = new RemplisseurTransformation();
$remplisseurTransformation->setRemplisseur($user);
$remplisseurTransformation->setUniteTransformation($installationTransformation);
$entityManager->persist($remplisseurTransformation);
}
}
//Traitement et creation objet Facture etude
$etapeEtude = $this->params->get("pi_etape_etude");
$this->factureService->createFacture(
$factureEtudes, $facture, $etapeEtude, $installationTransformation, $this->factureTransformationRepo
);
//Traitement et creation objet Facture Travaux
$etapeTravaux = $this->params->get("pi_etape_travaux");
$this->factureService->createFacture(
$factureTravaux, $facture, $etapeTravaux, $installationTransformation, $this->factureTransformationRepo
);
//Suppression des factures selectionnés
if ($stringFactureDeleted != null && $stringFactureDeleted != "0") {
$tabFactreDeleted = explode(",", $stringFactureDeleted);
$this->factureService->deleteFacture($this->factureTransformationRepo, $tabFactreDeleted);
}
$entityManager->flush();
//Traitement et creation objet Fichier et affectation des fichiers dans l'objet
$this->fichierService->createFile($files, $installationTransformation, "installation-transformation");
$entityManager->flush();
}
return new JsonResponse(
[
'title' => 'Création fiche suivi installation transformation',
'message' => 'Création fiche suivi installation transfromation avec succès',
'status' => 'success',
'htmlViewFormFiche' => $htmlViewFormFiche,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @throws \Exception
*/
public function createEquipementMachine($equipememnt, $entityManager, $installationTransformation)
{
for ($i = 0; $i < count($equipememnt); $i++) {
$uuid = Uuid::uuid4();
$item = $equipememnt['equipement' . ($i + 1)];
$findEquipementMachine = $this->equipementMachineRepository->find(intval($item['id']));
$findSourceFinancement = $this->canalFinancementRepository->find(intval($item['sourceFinancement']));
if (!$findEquipementMachine) {
$equipementMachine = new EquipementMachine();
$equipementMachine->setInstallationTransformation($installationTransformation);
$equipementMachine->setLibelle($item['libelle']);
$equipementMachine->setNombre(intval($item['nombre']));
$equipementMachine->setPrixUnitaire(intval($item['prixUnitaire']));
$equipementMachine->setCoutTotalAchat(intval($item['coutTotalAchat']));
$equipementMachine->setDateAcquisition((new DateTime($item['dateAcquisition'])));
$equipementMachine->setEtatMateriel($item['etatMateriel']);
$equipementMachine->setDateVerification((new DateTime($item['dateVerification'])));
$equipementMachine->setSourceFinancement($findSourceFinancement);
$equipementMachine->setUuid($uuid);
$entityManager->persist($equipementMachine);
} else {
$findEquipementMachine->setLibelle($item['libelle']);
$findEquipementMachine->setNombre(intval($item['nombre']));
$findEquipementMachine->setPrixUnitaire(intval($item['prixUnitaire']));
$findEquipementMachine->setCoutTotalAchat(intval($item['coutTotalAchat']));
$findEquipementMachine->setDateAcquisition((new DateTime($item['dateAcquisition'])));
$findEquipementMachine->setEtatMateriel($item['etatMateriel']);
$findEquipementMachine->setDateVerification((new DateTime($item['dateVerification'])));
$findEquipementMachine->setSourceFinancement($findSourceFinancement);
$entityManager->persist($findEquipementMachine);
}
}
}
/**
* @Route("/{id}/edit", name="app_installation_transformation_edit", methods={"GET", "POST"})
*/
public function edit(
InstallationTransformation $installationTransformation,
Request $request,
EntityManagerInterface $entityManager,
PoleRepository $poleRepository,
StatutFicheRepository $statutFicheRepo,
RegionRepository $regionRepository,
OpCommunalRepository $opCommunalRepository,
OpRegionaleRepository $opRegionaleRepository
): Response
{
$route = $request->attributes->get("_route");
$statutFiche = $this->constApp->statutFiche();
$form = $this->createForm(InstallationTransformationType::class, $installationTransformation, [
'action' => $this->generateUrl(
'app_installation_transformation_edit',
array('id' => $installationTransformation->getId())
),
'method' => 'POST'
]);
$form->handleRequest($request);
$remplisseur = $installationTransformation->getRemplisseurInitiale();
$dateNow = new DateTime();
$facture = new FactureTransformation();
$userConnect = $this->getUser();
$user = $this->userRepository->find($userConnect);
//Get region cir only for all infrastructure
$regions = $user->getCoordinationZone() ? $user->getCoordinationZone()->getRegions() : $regionRepository->findAll();
$pole = $installationTransformation->getPole();
$district = $installationTransformation->getPole() && isset($installationTransformation->getPole()->getDistrict()[0]) ? $installationTransformation->getPole()->getDistrict()[0] : [];
$communes = $district ? $district->getCommunes() : [];
$dataCommunes = [];
//Filter commune
foreach ($communes as $commune) {
//Push if remplisseur found
foreach ($commune->getUsers() as $user) {
//Get user CGEAF by commune
if ($user->getProfil()->getId() == $this->params->get('profil_cgeaf')) {
$dataCommunes[] = [
'id' => $commune->getId(),
'name' => $commune->getName(),
'remplisseurs' => [
'id' => $user->getId(),
'name' => $user->getLastName()
]
];
}
}
}
//Combine rempliseur meme commune
$communeList = [];
foreach ($dataCommunes as $item) {
$idCommune = $item['id'];
if (!isset($communeList[$idCommune])) {
$communeList[$idCommune] = [
'id' => $item['id'],
'name' => $item['name'],
'remplisseurs' => []
];
}
// Ajouter le remplisseur dans la liste
$communeList[$idCommune]['remplisseurs'][] = $item['remplisseurs'];
}
$remplisseurs = $installationTransformation->getRemplisseurTransformations();
$equipementMachine = $this->equipementMachineRepository->findBy(['installationTransformation' => $installationTransformation]);
$canalFinancement = $this->canalFinancementRepository->findAll();
$amount = $installationTransformation->getNumeroContratEtude()->getAmount();
$htmlViewFormFiche = $this->renderView('suivi_installation_transformation/edit.html.twig', [
'installationTransformation' => $installationTransformation,
'equipementMachines' => $equipementMachine,
'sourceFinancements' => $canalFinancement,
'dateNow' => $dateNow->format('d - m - Y'),
'user' => $remplisseur,
'form' => $form->createView(),
'route' => $route,
'remplisseurs' => $remplisseurs,
'regions' => $regions,
'pole' => $pole,
'district' => $district,
'communes' => $communeList,
'region' => $installationTransformation->getPole()->getRegion(),
'editMode' => true,
]);
if ($form->isSubmitted()) {
//récuperation des données depuis formulaire
$poleId = $request->request->get("pole");
if (isset($request->files->get("installation_transformation")["fichier"])) {
$files = $request->files->get("installation_transformation")["fichier"];
} else {
$files = [];
}
$stringFilesDeleted = $request->request->get("fichier_deleted");
//recuperation des factures de la fiche
$factureEtudes = $request->request->get("etude");
$factureTravaux = $request->request->get("travaux");
$stringFactureDeleted = $request->request->get("facture_deleted");
//Traitement et creation objet Fichier et affectation des fichiers dans l'objet
$this->fichierService->createFile($files, $installationTransformation, "installation-transformation");
//Suppression des fichiers selectionnés
if ($stringFilesDeleted != null && $stringFilesDeleted != "0") {
$tabFichierDeleted = explode(",", $stringFilesDeleted);
$this->fichierService->deleteFichier($tabFichierDeleted);
}
$opCommunal = $request->request->get("installation_transformation")["opCommunal"];
$opRegionale = $request->request->get("installation_transformation")["opRegionale"];
//Reset to null before set a new value
$installationTransformation->setOpCommunal(null);
$installationTransformation->setOpRegionale(null);
if ($opCommunal != "") {
$findOpCommunal = $opCommunalRepository->find((int)$opCommunal);
$installationTransformation->setOpCommunal($findOpCommunal);
}
if ($opRegionale != "") {
$finOpRegionale = $opRegionaleRepository->find((int)$opRegionale);
$installationTransformation->setOpRegionale($finOpRegionale);
}
$installationTransformation->setPole($poleRepository->find((int)$poleId));
if ($installationTransformation->getStatutFiche()->getId() == $statutFiche['REFUSE_CIR']['id']) {
$installationTransformation->setStatutFiche($statutFicheRepo->find($statutFiche['EN_ATTENTE']['id']));
}
$installationTransformation->setUpdatedAt(new \DateTimeImmutable('now'));
$entityManager->persist($installationTransformation);
//Clean remplisseur before update
$this->installationTransformationService->removeAllRemplisseurTransformation($installationTransformation->getId());
//Clean doctrine memory
$installationTransformation->getRemplisseurTransformations()->clear();
//get all remplisseur
$remplisseurIds = $request->request->all('installation_transformation')['remplisseur'] ?? [];
if ($remplisseurIds) {
foreach ($remplisseurIds as $remplisseurId) {
$user = $this->userRepository->find(intval($remplisseurId));
//Insert each remplisseur for the installation_transformation
$remplisseurTransformation = new RemplisseurTransformation();
$remplisseurTransformation->setRemplisseur($user);
$remplisseurTransformation->setUniteTransformation($installationTransformation);
$entityManager->persist($remplisseurTransformation);
}
}
//Traitement et creation objet Facture etude
$etapeEtude = $this->params->get("pi_etape_etude");
$this->factureService->createFacture(
$factureEtudes, $facture, $etapeEtude, $installationTransformation, $this->factureTransformationRepo
);
//Traitement et creation objet Facture Travaux
$etapeTravaux = $this->params->get("pi_etape_travaux");
$this->factureService->createFacture(
$factureTravaux, $facture, $etapeTravaux, $installationTransformation, $this->factureTransformationRepo
);
//Suppression des factures selectionnés
if ($stringFactureDeleted != null && $stringFactureDeleted != "0") {
$tabFactreDeleted = explode(",", $stringFactureDeleted);
$this->factureService->deleteFacture($this->factureTransformationRepo, $tabFactreDeleted);
}
//Suppression des equipements machines selectionnés
$stringEquipementDeleted = $request->get('equipement_deleted');
if ($stringEquipementDeleted != "" && $stringEquipementDeleted != "0") {
$tabEquipementDeleted = explode(",", $stringEquipementDeleted);
foreach ($tabEquipementDeleted as $equipementDeleted) {
$findEquipement = $this->equipementMachineRepository->find(intval($equipementDeleted));
$entityManager->remove($findEquipement);
}
}
//Création des equipements machines s'il y a des nouveaux
if ($request->get('equipement')) {
$this->createEquipementMachine($request->get('equipement'), $entityManager, $installationTransformation);
}
$entityManager->flush();
}
return new JsonResponse(
[
'title' => 'Affichage suivi installation transformation',
'message' => 'Affichage suivi installation transformation avec succès',
'status' => 'success',
'htmlViewFormFiche' => $htmlViewFormFiche,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/api/list_product", name="app_installation_transformation_api_list_product", methods={"GET"})
*/
public function getListProduct(): JsonResponse
{
return new JsonResponse(
[
'title' => 'Récuperation des partenaires mise en oeuvre',
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => $this->installationTransformationService->getProductService()
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/api/insert_product", name="app_installation_transformation_api_insert_product", methods={"POST"})
* @throws NonUniqueResultException
*/
public function insertProduct(): JsonResponse
{
$nameProduct = $_POST['name_produit'];
$findProduct = $this->installationTransformationService->findProductByName($nameProduct);
$message = "";
$status = "";
if ($findProduct) {
$message = "Produit déjà existé";
$status = 'error';
} else {
$this->installationTransformationService->insertProduct($nameProduct);
$message = "Insertion avec succès";
$status = 'success';
}
return new JsonResponse(
[
'title' => 'Création de produit mise en oeuvre',
'message' => $message,
'status' => $status,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/mobile/{id}", name="app_installation_transformation_mobile",methods={"GET","POST"})
*/
public function mobile(
InstallationTransformation $installationTransformation,
SuiviProductionTransfoRepository $suiviProdTransfoRepo
): Response
{
$user = $this->getUser();
$niveauUser = $user->getProfil()->getNiveau()->getid();
$profilUser = $user->getProfil()->getId();
$niveauConst = $this->constApp->niveauProfil();
$statutFiche = $this->constApp->statutFiche();
$eafBeneficiaires = $installationTransformation->getEafInstallationTransformations();
$suiviProductionTransfos = $installationTransformation->getSuiviProductionTransfos();
$beneficiaireInstallations = $this->resumeBeneficiaireService->getResumeBeneficiaire($eafBeneficiaires);
$niveau = null;
$op = null;
//Recuperation données validées par rapport au niveau de l'utilisateur
switch ($niveauUser) {
case $niveauConst['NIVEAU_POLE']['id'];
$suiviProductionTransfos = $suiviProdTransfoRepo->findBy([
"statut" => [$statutFiche['EN_ATTENTE']['id'], $statutFiche['REFUSE_REGIONALE']['id']],
"installationTransformation" => $installationTransformation
]);
break;
case $niveauConst['NIVEAU_REGIONALE']['id'];
$suiviProductionTransfos = $suiviProdTransfoRepo->findBy([
"statut" => [$statutFiche['VALIDE_POLE']['id'], $statutFiche['REFUSE_CIR']['id']],
"installationTransformation" => $installationTransformation
]);
break;
case $niveauConst['NIVEAU_CIR']['id'];
$suiviProductionTransfos = $suiviProdTransfoRepo->findBy([
"statut" => [$statutFiche['VALIDE_REGIONALE']['id'], $statutFiche['REFUSE_NATIONALE']['id']],
"installationTransformation" => $installationTransformation
]);
break;
case $niveauConst['NIVEAU_NATIONALE']['id'];
$suiviProductionTransfos = $suiviProdTransfoRepo->findBy([
"statut" => $statutFiche['VALIDE_CIR']['id'],
"installationTransformation" => $installationTransformation
]);
break;
default:
# code...
break;
}
//Récuperation des données à afficher si l'utilisateur connecté est admin
if ($user->getProfil()->getNiveauLocalite() == "nat_") {
$suiviProductionTransfos = $suiviProdTransfoRepo->findBy(
["installationTransformation" => $installationTransformation]
);
}
$opType = "";
if ($installationTransformation->getOpRegionale() == null && $installationTransformation->getOpCommunal() != null) {
$niveau = "Communal";
$op = $installationTransformation->getOpCommunal()->getOrganisationPaysanne();
$opType = $this->constApp->opType()[$installationTransformation->getOpCommunal()->getType()];
}
if ($installationTransformation->getOpRegionale() != null && $installationTransformation->getOpCommunal() == null) {
$niveau = "Régionale";
$op = $installationTransformation->getOpRegionale()->getOrganisationPaysanne();
$opType = $this->constApp->opType()[$installationTransformation->getOpRegionale()->getType()];
}
$filiereDeveloppes = $this->organisationPaysanneFiliereRepository->findBy(
['organisationPaysanne' => $op],
['priorite' => 'ASC']
);
$resumeOpBeneficiary = $this->installationTransformationService->getResumeOpBeneficiaryService($installationTransformation);
$resumeEafBeneficiary = $this->installationTransformationService->getResumeEafBeneficiaryService($installationTransformation);
$resumeFormation = $this->installationTransformationService->getResumeFormationReceivedService($installationTransformation);
return $this->render('suivi_installation_transformation/liste_donnee_mobile.html.twig', [
'controller_name' => 'Liste des suivi des installations de transformations',
'installationTransformation' => $installationTransformation,
'filiereDeveloppes' => $filiereDeveloppes,
'resumeOpBeneficiary' => $resumeOpBeneficiary,
'resumeEafBeneficiary' => $resumeEafBeneficiary,
'resumeFormation' => $resumeFormation,
'suiviProductionTransfos' => $suiviProductionTransfos,
'beneficiaireInstallations' => $beneficiaireInstallations,
'niveau' => $niveau,
'op' => $op,
'opType' => $opType
]);
}
/**
* @Route("/mobile/{id}/api/remplisseur_commune/{type}", name="app_installation_transformation_remplisseur_by_commune",methods={"GET","POST"})
*/
public function getCommunesByRemplisseur(
Request $request,
InstallationTransformation $installationTransformation,
string $type
): JsonResponse
{
/**
* This function will return the list of communes by remplisseur
* And the data of the first index(commune) by type [eaf or formation or suivi]
*/
$currentUser = $this->getUser();
$user = $this->userRepository->find($currentUser);
$niveauUser = $user->getProfil()->getNiveau()->getid();
$column = $request->query->get("column") ?? "";
$value = $request->query->get("value") ?? "";
$limit = $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
$page = $request->query->get("page") ? intval($request->query->get("page")) : 0;
$pjType = $request->query->get("pj") ? intval($request->query->get("pj")) : null;
$offset = ($limit * $page) - $limit;
$remplisseurs = $installationTransformation->getRemplisseurTransformations();
$index = 0;
$data = [];
$totalRows = [];
$data["firstIndexData"] = [];
$data["communes"] = [];
//Get Commune by remplisseur
foreach ($remplisseurs as $remplisseur) {
$communeRemplisseur = $remplisseur->getRemplisseur()
&& $remplisseur->getRemplisseur()->getCommunes()
? ($remplisseur->getRemplisseur()->getCommunes())[0] : null;
//Get Eaf or formation for first index(Remplisseur Commune)
if ($index == 0) {
$result = $this->getBeneficiaryOrEafOrFormationOrSuiviTransformationOrPj(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur->getRemplisseur(),
$type,
$pjType,
$request
);
$data["firstIndexData"] = $result['data'];
$totalRows = $result['totalRows'];
}
//Push the current remplisseur commune
$data["communes"][] = [
"id" => $communeRemplisseur->getId(),
"name" => $communeRemplisseur->getName(),
"remplisseur_id" => $remplisseur->getRemplisseur() ? $remplisseur->getRemplisseur()->getId() : '---',
"remplisseur_name" => $remplisseur->getRemplisseur() ? $remplisseur->getRemplisseur()->getLastname() : '---',
];
$index++;
}
$data["dataInfo"] = [
'totalRows' => count($totalRows),
'limit' => $limit,
'page' => $page,
'niveauUser' => $niveauUser,
];
return new JsonResponse(
[
'title' => 'Récuperation liste bénéficiaire',
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => $data
],
200,
['Content-Type' => 'application/json']
);
}
public function getBeneficiaryOrEafOrFormationOrSuiviTransformationOrPj(
InstallationTransformation $installationTransformation,
$column,
$value,
$limit,
$offset,
User $remplisseur,
$type,
$typePj = null,
Request $request
): array
{
$data = [];
$totalRows = [];
//Get first index data By type["eaf" or "formation" or "suivi"]
if ($type == "eaf") {
$data = $this->installationTransformationService->getListEafBeneficiaireService(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
$totalRows = $this->installationTransformationService->getListEafBeneficiaireService(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
} else if ($type === "op") {
//$type = "formation"
$data = $this->installationTransformationService->getOpBeneficiareTransformationService(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
$totalRows = $this->installationTransformationService->getOpBeneficiareTransformationService(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
} else if ($type === "formation") {
//$type = "formation"
$data = $this->installationTransformationService->getListFormationService(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
$totalRows = $this->installationTransformationService->getListFormationService(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
} else if ($type === "suivi") {
//$type = "suivi"
$data = $this->installationTransformationService->getSuiviProductionTransformation(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
$totalRows = $this->installationTransformationService->getSuiviProductionTransformation(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
} else if ($type === "pj") {
//$type = "pj"
$data = $this->installationTransformationService->getPieceJointByTypeService(
$installationTransformation,
$typePj,
$remplisseur,
$request
);
$totalRows = $this->installationTransformationService->getPieceJointByTypeService(
$installationTransformation,
$typePj,
$remplisseur,
$request
);
}
return [
"data" => $data,
"totalRows" => $totalRows
];
}
/**
* @Route("/mobile/{id}/api/op/beneficiaire/{remplisseurId}", name="app_installation_transformation_mobile_op_beneficiaire",methods="GET")
*/
public function getListOpBeneficiaire(
InstallationTransformation $installationTransformation,
$remplisseurId,
Request $request
): JsonResponse
{
$remplisseur = $this->userRepository->find(intval($remplisseurId));
$column = $request->query->get("column") ?? "";
$value = $request->query->get("value") ?? "";
$limit = $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
$page = $request->query->get("page") ? intval($request->query->get("page")) : 0;
$offset = ($limit * $page) - $limit;
//Get Data with pagination
$data = $this->installationTransformationService->getOpBeneficiareTransformationService(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
//Get only total rows so, no limit and page (no pagination)
$totalRows = $this->installationTransformationService->getOpBeneficiareTransformationService(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
return new JsonResponse(
[
'title' => 'Récuperation liste op bénéficiaires',
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => [
'rows' => $data,
'dataInfo' => [
'totalRows' => count($totalRows),
'limit' => $limit,
'page' => $page,
]
]
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/mobile/{id}/api/liste/formation/{remplisseurId}", name="app_installation_transformation_mobile_list_formation",methods="GET")
*/
public function getListFormation(
InstallationTransformation $installationTransformation,
$remplisseurId,
Request $request
): JsonResponse
{
$remplisseur = $this->userRepository->find(intval($remplisseurId));
$column = $request->query->get("column") ?? "";
$value = $request->query->get("value") ?? "";
$limit = $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
$page = $request->query->get("page") ? intval($request->query->get("page")) : 0;
$offset = ($limit * $page) - $limit;
//Get Data with pagination
$formations = $this->installationTransformationService->getListFormationService(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
//Get only total rows so, no limit and page (no pagination)
$totalRows = $this->installationTransformationService->getListFormationService(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
return new JsonResponse(
[
'title' => 'Récuperation liste formation',
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => [
'rows' => $formations,
'dataInfo' => [
'totalRows' => count($totalRows),
'limit' => $limit,
'page' => $page,
]
]
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/mobile/api/formation/{id}/beneficiaire", name="app_installation_transformation_mobile_formation_beneficiaire", methods="GET")
*/
public function getAllBeneficiaryFormation(Formation $formation, Request $request): JsonResponse
{
$column = $request->query->get("column") ?? "";
$value = $request->query->get("value") ?? "";
$limit = $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
$page = $request->query->get("page") ? intval($request->query->get("page")) : 0;
$offset = ($limit * $page) - $limit;
$data = $this->installationTransformationService->getAllBeneficiaryFormationService(
$formation,
$column,
$value,
$limit,
$offset
);
$totalRows = $this->installationTransformationService->getAllBeneficiaryFormationService(
$formation,
$column,
$value,
null,
null
);
return new JsonResponse(
[
'title' => 'Récuperation liste des bénéficiaires formations',
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => [
'rows' => $data,
'dataInfo' => [
'totalRows' => count($totalRows),
'limit' => $limit,
'page' => $page,
]
]
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/mobile/{id}/api/eaf/beneficiaire/{remplisseurId}", name="app_installation_transformation_mobile_eaf_beneficiaire",methods="GET")
*/
public function getListEafBeneficiaire(
InstallationTransformation $installationTransformation,
$remplisseurId,
Request $request
): JsonResponse
{
$remplisseur = $this->userRepository->find(intval($remplisseurId));
$column = $request->query->get("column") ?? "";
$value = $request->query->get("value") ?? "";
$limit = $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
$page = $request->query->get("page") ? intval($request->query->get("page")) : 0;
$offset = ($limit * $page) - $limit;
//Get Data with pagination
$eafBeneficiaires = $this->installationTransformationService->getListEafBeneficiaireService(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
//Get only total rows so, no limit and page (no pagination)
$totalRows = $this->installationTransformationService->getListEafBeneficiaireService(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
return new JsonResponse(
[
'title' => 'Récuperation liste bénéficiaire',
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => [
'rows' => $eafBeneficiaires,
'dataInfo' => [
'totalRows' => count($totalRows),
'limit' => $limit,
'page' => $page,
]
]
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/mobile/{id}/api/suivi_production_transfo/{remplisseurId}", name="app_installation_transformation_mobile_suivi_production",methods="GET")
*/
public function getListSuiviProductionTranfo(
InstallationTransformation $installationTransformation,
$remplisseurId,
Request $request
): JsonResponse
{
$currentUser = $this->getUser();
$user = $this->userRepository->find($currentUser);
$niveauUser = $user->getProfil()->getNiveau()->getid();
$remplisseur = $this->userRepository->find(intval($remplisseurId));
$column = $request->query->get("column") ?? "";
$value = $request->query->get("value") ?? "";
$limit = $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
$page = $request->query->get("page") ? intval($request->query->get("page")) : 0;
$offset = ($limit * $page) - $limit;
//Get Data with pagination
$data = $this->installationTransformationService->getSuiviProductionTransformation(
$installationTransformation,
$column,
$value,
$limit,
$offset,
$remplisseur
);
//Get only total rows so, no limit and page (no pagination)
$totalRows = $this->installationTransformationService->getSuiviProductionTransformation(
$installationTransformation,
$column,
$value,
null,
null,
$remplisseur
);
return new JsonResponse(
[
'title' => "Récuperation liste suivi de production",
'message' => 'Récuperation avec succès',
'status' => 'success',
'data' => [
'rows' => $data,
'dataInfo' => [
'totalRows' => count($totalRows),
'limit' => $limit,
'page' => $page,
'niveauUser' => $niveauUser
]
]
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/mobile/{id}/api/pieces/{remplisseurId}", name="app_installation_transformation_piece_joint", methods="GET")
*/
public function getPiecesJointCycleByType(
InstallationTransformation $installationTransformation,
$remplisseurId,
Request $request
): JsonResponse
{
$remplisseur = $this->userRepository->find(intval($remplisseurId));
$type = $request->query->get("type") ?? "";
$result = $this->installationTransformationService->getPieceJointByTypeService(
$installationTransformation,
$type,
$remplisseur,
$request
);
if (count($result['data']) == 0) {
$result['alt'] = $request->getSchemeAndHttpHost() . '/images/image.png';
}
return new JsonResponse(
[
'title' => 'Affichage cep café photos',
'message' => 'Affichage cep café photos avec succès',
'status' => 'success',
'data' => $result
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/canal-financement", name="get_all_cannal_financement",methods={"GET"})
*/
public function getAllCanalFinancement(): Response
{
$canalFinancement = $this->canalFinancementRepository->findAll();
$data = [];
foreach ($canalFinancement as $canal) {
$data[] = ["id" => $canal->getId(), "name" => $canal->getName()];
}
return new JsonResponse(
[
'title' => 'Affichage suivi installation transformation',
'message' => 'Affichage suivi installation transformation avec succès',
'status' => 'success',
'data' => $data,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/{id}/{id_statut}/{niveau}/valide", name="app_installation_transformation_valide", methods={"GET","POST"})
*/
public function valid(
StatutFicheRepository $statutFicheRepository,
InstallationTransformation $installationTransformation,
Request $request
): Response
{
$statutFiche = $statutFicheRepository->find($request->attributes->get('id_statut'));
$niveau = $request->attributes->get('niveau');
$user = $this->getUser();
$message = " ";
$status = " ";
try {
//Mise à jour statut de la fiche s'il n'y pas d'erreur et appel au fonction valide dans ficheService
$this->ficheService->valide($installationTransformation, $statutFiche, $user, $niveau);
$message = "Validation fiche de suivi installation de transformation avec succès";
$status = "success";
} catch (\Throwable $th) {
$message = "Validation fiche de suivi installation de transformation avec erreur";
$status = "error";
}
return new JsonResponse(
[
'title' => 'Validation fiche de suivi installation de transformation',
'message' => $message,
'status' => $status,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/{id}/{id_statut}/{niveau}/rejete", name="app_installation_transformation_rejete", methods={"POST"})
*/
public function rejete(
Request $request,
StatutFicheRepository $statutFicheRepository,
InstallationTransformation $installationTransformation
): Response
{
$user = $this->getUser();
$statutFiche = $statutFicheRepository->find($request->attributes->get('id_statut'));
$niveau = $request->attributes->get('niveau');
$observation = $request->request->get("observation");
$validations = $installationTransformation->getValidation();
$recentValidateur = null;
//recuperation du validateur recent de la fiche --> niveau inferieur de l'user connecté
for ($i = count($validations); $i > 0; $i--) {
$niveauValidation = $validations[$i - 1]->getNiveau();
$statutValidation = $validations[$i - 1]->getStatut();
if ($niveauValidation == $niveau - 1 && $statutValidation == $this->params->get("statut_valide")) {
$recentValidateur = $validations[$i - 1]->getValidateur();
break;
}
}
//recuperation remplisseur initiale si la fiche est refusE au niveau cir (validation niveau 3)
if ($recentValidateur == null) {
$recentValidateur = $installationTransformation->getRemplisseurInitiale();
}
//if (isset($recentValidateur)) {
//MAJ statut de la fiche
try {
$this->ficheService->rejete($installationTransformation, $statutFiche, $user, $observation, $niveau);
$message = "Refus fiche de suivi installation de tranformation avec succès";
$status = "success";
} catch (TransportExceptionInterface $e) {
$message = "Refus fiche de suivi installation de tranformation avec erreur";
$status = "error";
}
// } else {
// $message = "Refus invalide";
// $status = "error";
// }
return new JsonResponse(
[
'title' => 'Refus fiche de suivi installation de tranformation',
'message' => $message,
'status' => $status,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/{id_statut}/{niveau}/prod_valide", name="app_suivi_prod_valide", methods={"GET","POST"})
*/
public function valideProduction(
StatutFicheRepository $statutFicheRepository,
SuiviProductionTransfoRepository $suiviprodRepo,
Request $request,
EntityManagerInterface $entityManager
): Response
{
$message = " ";
$status = " ";
$statutFiche = $statutFicheRepository->find($request->attributes->get('id_statut'));
$listeSuiviProds = $request->request->get("listeObjet");
try {
//Mise à jour statut de tous les productions validées
foreach ($listeSuiviProds as $idSuiviProd) {
$suiviProd = $suiviprodRepo->find((int)$idSuiviProd);
$suiviProd->setStatut($statutFiche);
$entityManager->persist($suiviProd);
}
//MAJ base de données
$entityManager->flush();
//creation message et statut
$message = "Validation suivi production avec succès";
$status = "success";
} catch (\Throwable $th) {
$message = "Validation suivi production avec erreur";
$status = "error";
}
return new JsonResponse(
[
'title' => 'Validation suivi production',
'message' => $message,
'status' => $status,
],
200,
['Content-Type' => 'application/json']
);
}
/**
* @Route("/{id_statut}/{niveau}/prod_rejete", name="app_suivi_prod_rejete", methods={"POST"})
*/
public function rejeteProduction(
StatutFicheRepository $statutFicheRepository,
SuiviProductionTransfoRepository $suiviprodRepo,
Request $request,
EntityManagerInterface $entityManager
): Response
{
$message = " ";
$status = " ";
$statutFiche = $statutFicheRepository->find($request->attributes->get('id_statut'));
$listeSuiviProds = $request->request->get("listeObjet");
try {
//Mise à jour statut de tous les productions validées
foreach ($listeSuiviProds as $idSuiviProd) {
$suiviProd = $suiviprodRepo->find((int)$idSuiviProd);
$suiviProd->setStatut($statutFiche);
$entityManager->persist($suiviProd);
}
//MAJ base de données
$entityManager->flush();
//creation message et statut
$message = "Refus suivi production avec succès";
$status = "success";
} catch (\Throwable $th) {
$message = "Refus suivi production avec erreur";
$status = "error";
}
return new JsonResponse(
[
'title' => 'Refus suivi production',
'message' => $message,
'status' => $status,
],
200,
['Content-Type' => 'application/json']
);
}
}