<?php
namespace App\Controller;
use App\Entity\Deal;
use App\Entity\HistoriqueDeal;
use App\Entity\ChampsDeal;
use App\Entity\ChampsDefautDeal;
use App\Entity\CommentaireDeal;
use App\Form\DealType;
use App\Repository\DealRepository;
use App\Repository\ChampsDealRepository;
use App\Repository\EquipeRepository;
use App\Repository\ChampsDefautRepository;
use App\Repository\ChampsDefautDealRepository;
use App\Repository\ChampsInstallateurRepository;
use App\Repository\HistoriqueDealRepository;
use App\Repository\OperationStandardRepository;
use App\Repository\UserRepository;
use App\Repository\CommentaireDealRepository;
use App\Repository\NotificationsRepository;
use App\Repository\SoustraitantRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Champs;
use App\Entity\Notifications;
use App\Repository\InstallateurRepository;
use App\Repository\ObligesRepository;
use Datetime;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Process\Process;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
use App\Repository\ApporteurAffaireRepository;
use App\Repository\ActiviteDealRepository;
use App\Repository\ContratRepository;
use App\Repository\FactureAafRepository;
use App\Repository\AppelqualiteRepository;
use App\Entity\ActiviteDeal;
use App\Repository\ChampsSoustraitantRepository;
use App\Repository\DepotDossierRepository;
use App\Repository\ChampsDepotDossierRepository;
use App\Repository\CommentairesControlleRepository;
use App\Repository\DealobligeRepository;
use Symfony\Component\HttpFoundation\JsonResponse;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
/**
* @Route("/deal")
*/
class DealController extends AbstractController
{
/**
* @Route("/", name="app_deal_index", methods={"GET", "POST"})
*/
public function index(Request $request,DealRepository $dealRepository,InstallateurRepository $installateurRepository,ObligesRepository $obligesRepository,
ChampsDefautRepository $champsDefautRepository, ChampsInstallateurRepository $champsInstallateurRepository, UserRepository $userRepository,
HistoriqueDealRepository $historiqueDealRepository, OperationStandardRepository $operationStandardRepository): Response
{
$idexporte=0;
$exporte ="non";
if ($this->isGranted('ROLE_INSTALLATEUR')) {
$deal=$this->getUser()->getInstallateur()->getDeals();
}elseif($this->isGranted('ROLE_OBLIGE')){
$deal=$this->getUser()->getObliges()->getDeals();
}else{
$deal=[];
if ($request->getMethod() == "POST") {
$form = $request->request;
if($form->get("filtreinstallateur") != null ){
foreach ($form->get("filtreinstallateur") as $value) {
foreach ($dealRepository->findBy([], ['id' => 'DESC']) as $dl) {
if ($dl->getInstallateur()->getId() == $value) {
if ($form->get("filtreoblige") != null) {
foreach ($form->get("filtreoblige") as $obg) {
if ($dl->getDealoblige()->getOblige()->getId() == $obg) {
//dd($form->get("filtrestatus"));
if ($form->get("filtrestatus") != null) {
foreach ($form->get("filtrestatus") as $status) {
if ($dl->getStatus() == $status ) {
$deal[]=$dl;
}
}
}else{
$deal[]=$dl;
}
}
}
} else {
if ($form->get("filtrestatus") != null) {
foreach ($form->get("filtrestatus") as $status) {
if ($dl->getStatus() == $status ) {
$deal[]=$dl;
}
}
} else {
$deal[]=$dl;
}
}
}
}
}
}else{
if ($form->get("filtreoblige") != null) {
foreach ($dealRepository->findBy([], ['id' => 'DESC']) as $dl) {
foreach ($form->get("filtreoblige") as $obg) {
if ($dl->getDealoblige()->getOblige()->getId() == $obg) {
//dd($form->get("filtrestatus"));
if ($form->get("filtrestatus") != null) {
foreach ($form->get("filtrestatus") as $status) {
if ($dl->getStatus() == $status ) {
$deal[]=$dl;
}
}
}else{
$deal[]=$dl;
}
}
}
}
}else{
if ($form->get("filtrestatus") != null) {
foreach ($dealRepository->findBy([], ['id' => 'DESC']) as $dl) {
foreach ($form->get("filtrestatus") as $status) {
if ($dl->getStatus() == $status ) {
$deal[]=$dl;
}
}
}
}else{
$deal= $dealRepository->findBy([], ['id' => 'DESC']);
}
}
}
$exporte ="oui";
}else{
$deal= $dealRepository->findBy([], ['id' => 'DESC']);
}
}
$tab=[];
$deals=[];
$statuts = ["Contrat généré","Annulé","Bloqué","Contrat Signé","Validé", "En Attente","Nouveau"];
// id,type as owner,client as name ,date,file ,batiment
$i = 1;
foreach ($statuts as $statut) {
foreach ($deal as $value) {
if($statut == $value->getStatus()){
if ($idexporte == 0) {
$idexporte=$value->getId();
}
$tab['id']=$i;
$tab['id_deal']=$value->getId();
$tab['name']=$value->getNumero();
$tab['owner']=$value->getInstallateur()->getSociete();
$tab['owner_id']=$value->getInstallateur()->getId();
if($value->getDate()){
$tab['industry_type']=$value->getDate()->format('d-m-Y');
}
if($value->getTaux()){
$tab['location']=$value->getTaux();
}
if($value->getDealoblige()){
$tab['contact_email']=$value->getDealoblige()->getOblige()->getSociete();
$tab['contact_email_id']=$value->getDealoblige()->getOblige()->getId();
}
$tab['icone']="ri-archive-line";
if($value->getDatefin()){
$dateTime2 = $value->getDatefin();
$formattedDate2 = $dateTime2->format('d/m/Y');
$tab['datefin']=$formattedDate2;
}
$tab['action_deal']=[];
$historique = null;
if ($historiqueDealRepository->findBy(["deal" => $value->getId()])) {
foreach ($historiqueDealRepository->findBy(["deal" => $value->getId()]) as $hist) {
$historique = $hist;
}
}
if($historique != null) {
$userModif = $userRepository->findOneBy(["id" => $historique->getUser()]);
if($userModif->getInstallateur() != null){
$tab['action_deal']['action_id']=$userModif->getInstallateur()->getId();
$tab['action_deal']['action_nom']=$userModif->getInstallateur()->getNom();
$tab['action_deal']['action_prenom']=$userModif->getInstallateur()->getPrenom();
$tab['action_deal']['action_photo']= $userModif->getInstallateur()->getPhoto() != null ? "https://kaje-cee.net/assets/uplaod-installateur/".$userModif->getInstallateur()->getPhoto() : "https://kaje-cee.net/assets/images/user.png";
$tab['action_deal']['action_role']="Installateur";
} else{
$tab['action_deal']['action_id']=$userModif->getEquipe()->getId();
$tab['action_deal']['action_nom']=$userModif->getEquipe()->getNom();
$tab['action_deal']['action_prenom']=$userModif->getEquipe()->getPrenom();
$tab['action_deal']['action_photo']=$userModif->getEquipe()->getPhoto() != null ? "https://kaje-cee.net/assets/uplaod-equipe/".$userModif->getEquipe()->getPhoto() : "https://kaje-cee.net/assets/images/user.png";
$tab['action_deal']['action_role']="Administrateur";
}
$dateTime = $historique->getDate();
$formattedDate = $dateTime->format('d/m/Y');
$tab['action_deal']['action_date']=$formattedDate;
$tab['action_deal']['action_commentaire']=$historique->getAction();
}
$tab['employee']="deal";
if ($value->getStatus()=='Validé') {
$tab['star_value']='<span class="badge progress-green p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-green';
} elseif($value->getStatus()=="Annulé") {
$tab['star_value']='<span class="badge progress-red p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-red';
}elseif($value->getStatus()=="Bloqué") {
$tab['star_value']='<span class="badge progress-red p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-red';
}
elseif($value->getStatus()=="Contrat Déposé"){
$tab['star_value']='<span class="badge progress-yellow p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-yellow';
}elseif($value->getStatus()=="Contrat Signé"){
$tab['star_value']='<span class="badge progress-blue p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-blue';
}elseif($value->getStatus()=="Contrat généré"){
$tab['star_value']='<span class="badge progress-yellow p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-blue';
}elseif($value->getStatus()=="En Attente"){
$tab['star_value']='<span class="badge progress-yellow p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-yellow';
}else{
$tab['star_value']='<span class="badge progress-grey p-2 border-0" >Nouveau</span>';
$tab['row_tr']='row-grey';
}
$champsInstallateur = $value->getInstallateur()->getChampsinstallateur();
if(count($champsInstallateur) > 0){
foreach ( $champsInstallateur as $champ) {
if($champ->getNom() == "KBIS"){
if ($champ->getStatus()=='Validé') {
$tab['kbis']='<button class="badge progress-green p-2 border-0" >'.$champ->getStatus().'</button>';
} elseif($champ->getStatus()=="Non Valide") {
$tab['kbis']='<button class="badge progress-red p-2 border-0" >'.$champ->getStatus().'</button>';
}elseif($champ->getStatus()=="Transmis"){
$tab['kbis']='<button class="badge progress-yellow p-2 border-0" >'.$champ->getStatus().'</button>';
}else{
$tab['kbis']='<button class="badge progress-grey p-2 border-0" >Non Transmis</button>';
}
}
}
} else {
$tab['kbis']='<button class="badge progress-grey p-2 border-0" >Non Transmis</button>';
}
// logo, nom, prenom, role de la personne
// date
$tab['image_src']="https://kaje-cee.net/#";
$deals[]=$tab;
$i=$i + 1;
}
}
}
// dd($deals);
// die();
$clientjson = json_encode($deals);
file_put_contents('assets/json/deal-list.json', $clientjson);
return $this->render('deal/index.html.twig', [
'deals' => $dealRepository->findAll(),
'listinstallateurs' => $installateurRepository->findBy(["status"=>'Validé']),
'listobliges' => $obligesRepository->findAll(),
'champs' => $champsDefautRepository->findAll(),
'allInstallateurs' => $installateurRepository->findAll(),
'operationsStandard' => $operationStandardRepository->findAll(),
'exporte' => $exporte,
'idexporte' => $idexporte
]);
}
/**
* @Route("/archivesdeal", name="app_deal_archivesdeal", methods={"GET", "POST"})
*/
public function archivesdeal(Request $request,DealRepository $dealRepository,InstallateurRepository $installateurRepository,ObligesRepository $obligesRepository,
ChampsDefautRepository $champsDefautRepository, ChampsInstallateurRepository $champsInstallateurRepository, UserRepository $userRepository,
HistoriqueDealRepository $historiqueDealRepository, OperationStandardRepository $operationStandardRepository): Response
{
$deal= $dealRepository->findBy(['status' => 'archive'], ['id' => 'DESC']);
$tab=[];
$deals=[];
$statuts = ["archive"];
// id,type as owner,client as name ,date,file ,batiment
$i = 1;
foreach ($statuts as $statut) {
foreach ($deal as $value) {
if($statut == $value->getStatus()){
$tab['id']=$i;
$tab['id_deal']=$value->getId();
$tab['name']=$value->getNumero();
$tab['owner']=$value->getInstallateur()->getSociete();
$tab['owner_id']=$value->getInstallateur()->getId();
if ($value->getDate()) {
$tab['industry_type']=$value->getDate()->format('d-m-Y');
}
$tab['location']=$value->getTaux();
if ($value->getDealoblige()->getOblige()) {
$tab['contact_email']=$value->getDealoblige()->getOblige()->getSociete();
$tab['contact_email_id']=$value->getDealoblige()->getOblige()->getId();
}
$tab['icone']="ri-delete-bin-fill";
if ($value->getDatefin()) {
$dateTime2 = $value->getDatefin();
$formattedDate2 = $dateTime2->format('d/m/Y');
$tab['datefin']=$formattedDate2;
}
$tab['action_deal']=[];
$historique = null;
if ($historiqueDealRepository->findBy(["deal" => $value->getId()])) {
foreach ($historiqueDealRepository->findBy(["deal" => $value->getId()]) as $hist) {
$historique = $hist;
}
}
if($historique != null) {
$userModif = $userRepository->findOneBy(["id" => $historique->getUser()]);
if($userModif->getInstallateur() != null){
$tab['action_deal']['action_id']=$userModif->getInstallateur()->getId();
$tab['action_deal']['action_nom']=$userModif->getInstallateur()->getNom();
$tab['action_deal']['action_prenom']=$userModif->getInstallateur()->getPrenom();
$tab['action_deal']['action_photo']= $userModif->getInstallateur()->getPhoto() != null ? "https://kaje-cee.net/assets/uplaod-installateur/".$userModif->getInstallateur()->getPhoto() : "https://kaje-cee.net/assets/images/user.png";
$tab['action_deal']['action_role']="Installateur";
} else{
$tab['action_deal']['action_id']=$userModif->getEquipe()->getId();
$tab['action_deal']['action_nom']=$userModif->getEquipe()->getNom();
$tab['action_deal']['action_prenom']=$userModif->getEquipe()->getPrenom();
$tab['action_deal']['action_photo']=$userModif->getEquipe()->getPhoto() != null ? "https://kaje-cee.net/assets/uplaod-equipe/".$userModif->getEquipe()->getPhoto() : "https://kaje-cee.net/assets/images/user.png";
$tab['action_deal']['action_role']="Administrateur";
}
$dateTime = $historique->getDate();
$formattedDate = $dateTime->format('d/m/Y');
$tab['action_deal']['action_date']=$formattedDate;
$tab['action_deal']['action_commentaire']=$historique->getAction();
}
$tab['employee']="deal";
if($value->getStatus()=="archive") {
$tab['star_value']='<span class="badge progress-red p-2 border-0" >'.$value->getStatus().'</span>';
$tab['row_tr']='row-red';
}
$champsInstallateur = $value->getInstallateur()->getChampsinstallateur();
if(count($champsInstallateur) > 0){
foreach ( $champsInstallateur as $champ) {
if($champ->getNom() == "KBIS"){
if ($champ->getStatus()=='Validé') {
$tab['kbis']='<button class="badge progress-green p-2 border-0" >'.$champ->getStatus().'</button>';
} elseif($champ->getStatus()=="Non Valide") {
$tab['kbis']='<button class="badge progress-red p-2 border-0" >'.$champ->getStatus().'</button>';
}elseif($champ->getStatus()=="Transmis"){
$tab['kbis']='<button class="badge progress-yellow p-2 border-0" >'.$champ->getStatus().'</button>';
}else{
$tab['kbis']='<button class="badge progress-grey p-2 border-0" >Non Transmis</button>';
}
}
}
} else {
$tab['kbis']='<button class="badge progress-grey p-2 border-0" >Non Transmis</button>';
}
// logo, nom, prenom, role de la personne
// date
$tab['image_src']="https://kaje-cee.net/#";
$deals[]=$tab;
$i=$i + 1;
}
}
}
// dd($deals);
// die();
$clientjson = json_encode($deals);
file_put_contents('assets/json/deal-list.json', $clientjson);
return $this->render('deal/archivesdeal.html.twig', [
'deals' => $dealRepository->findAll(),
'allInstallateurs' => $installateurRepository->findAll()
]);
}
/**
* @Route("/dealdesarchives", name="app_deal_desarchives", methods={"GET", "POST"})
*/
public function dealdesarchives(Request $request,DepotDossierRepository $depotDossierRepository,DealRepository $dealRepository): Response
{
if ($request->getMethod() == "POST") {
$form = $request->request;
//dd($form);
if ($form->get("chk_deal") != null) {
foreach ($form->get("chk_deal") as $key => $value) {
$deal = $dealRepository->findOneBy(["id"=>intval($value)]);
if ($deal->getDepotDossiers() != null) {
foreach ($deal->getDepotDossiers() as $key => $dossier) {
$dossier->setStatus($dossier->getArchive());
$depotDossierRepository->add($dossier, true);
}
}
$deal->setStatus($deal->getArchive());
$dealRepository->add($deal, true);
}
}
}
return $this->redirectToRoute('app_deal_index', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/new", name="app_deal_new", methods={"GET", "POST"})
*/
public function new(Request $request, DealRepository $dealRepository,InstallateurRepository $installateurRepository,
ObligesRepository $obligesRepository,ChampsDealRepository $champsDealRepository,ChampsDefautDealRepository $champsDefautDealRepository,
ChampsDefautRepository $champsDefautRepository,OperationStandardRepository $operationStandardRepository,
ApporteurAffaireRepository $apporteurAffaireRepository,ActiviteDealRepository $activiteDealRepository,
NotificationsRepository $notificationsRepository, HistoriqueDealRepository $historiqueDealRepository,DealobligeRepository $dealobligeRepository): Response
{
$deal = new Deal();
if ($request->getMethod() == "POST") {
$form = $request->request;
$dealoblige= $dealobligeRepository->findOneBy(["id"=>intval($form->get('oblige'))]);
$installateur= $installateurRepository->findOneBy(["id"=>intval($form->get('installateur'))]);
$deal->setNumero($dealoblige->getNom().'-'.$installateur->getSociete());
$deal->setType($form->get('parties'));
$deal->setTaux($form->get('taux'));
$cible='';
// dd($form->get('cible'));
if ($form->get('cible')) {
foreach ($form->get('cible') as $key => $value) {
$cible.=$value."-";
}
}
$deal->setCible($cible);
$date = date('d-m-Y', strtotime($form->get('date'))) ;
$datetime = new Datetime($date);
$deal->setDatefin($datetime);
$deal->setDate(new Datetime());
$deal->setStatus("Nouveau");
$deal->setInstallateur($installateur);
$deal->setOblige($dealoblige->getOblige());
$deal->setDealoblige($dealoblige);
$oblige=$dealoblige->getOblige();
if ($form->get('apporteur')!=null) {
$apporteur= $apporteurAffaireRepository->findOneBy(["id"=>intval($form->get('apporteur'))]);
$deal->setApporteurAffaire($apporteur);
}
$dealRepository->add($deal, true);
foreach ($oblige->getChampsobliges() as $chmps) {
$champsDeal = new ChampsDeal();
$champsDeal->setNom($chmps->getNom());
$champsDeal->setType($chmps->getType());
if ($chmps->getType()== 'file') {
$champsDeal->setStatus('Non Transmis');
}
$champsDeal->setDurevalidite($chmps->getDurevalidite());
$champsDeal->setDeal($deal);
$champsDealRepository->add($champsDeal, true);
}
foreach ($form as $key => $value) {
if (count(explode("_",$key)) >2 && explode("_",$key)[1]=="old"){
$champsDeal = new ChampsDeal();
$chmps= $champsDefautDealRepository->find(["id"=>intval($value)]);
$champsDeal->setNom($chmps->getNom());
$champsDeal->setType($chmps->getType());
if ($chmps->getType()== 'file') {
$champsDeal->setStatus('Non Transmis');
}
$champsDeal->setDurevalidite($chmps->getDurevalidite());
$champsDeal->setDeal($deal);
$champsDealRepository->add($champsDeal, true);
}
if ( count(explode("_",$key)) >2 && explode("_",$key)[2]=="type") {
if (explode("_",$key)[3]=="nom") {
$champs->setNom($value);
}elseif(explode("_",$key)[3]=="dure"){
if($value!=null){
$champs->setDurevalidite($value);
}
$champsDefautDealRepository->add($champs, true);
$champsDeal = new ChampsDeal();
$champsDeal->setNom($champs->getNom());
$champsDeal->setType($champs->getType());
if ($champs->getType()== 'file') {
$champsDeal->setStatus('Non Transmis');
}
$champsDeal->setDurevalidite($champs->getDurevalidite());
$champsDeal->setDeal($deal);
$champsDealRepository->add($champsDeal, true);
}
else{
$champs = new ChampsDefautDeal();
$champs->setType($value);
}
}
}
// Notif Installateur
$notifications = new Notifications();
$notifications->setUserId($installateur->getUser());
$notifications->setMessage("Vous avez un nouveau deal. Veuillez remplir les informations.");
$notifications->setAction("app_deal_edit");
$notifications->setActionId($deal->getId());
$notifications->setSender($this->getUser());
$notifications->setStatuts("non lu");
$notifications->setDate(new DateTime());
$notificationsRepository->add($notifications, true);
// Notif Obligé
$notificationsOblige = new Notifications();
$notificationsOblige->setUserId($oblige->getUser());
$notificationsOblige->setMessage("Un nouveau deal a été créé.");
$notificationsOblige->setAction("app_deal_edit");
$notificationsOblige->setActionId($deal->getId());
$notificationsOblige->setSender($this->getUser());
$notificationsOblige->setStatuts("non lu");
$notificationsOblige->setDate(new DateTime());
$notificationsRepository->add($notificationsOblige, true);
$activiteDeal = new ActiviteDeal();
$activiteDeal->setFonction('equipe');
$activiteDeal->setEquipe($this->getUser()->getEquipe());
$activiteDeal->setCommentaire("Création du Deal entre l'installateur ".$deal->getInstallateur()->getSociete()." et l'obligé ".$deal->getDealoblige()->getOblige()->getSociete());
$activiteDeal->setDate(new Datetime());
$activiteDeal->setDeal($deal);
$activiteDealRepository->add($activiteDeal, true);
// Historique
$historiqueDeal = new HistoriqueDeal();
$historiqueDeal->setUser($this->getUser());
$historiqueDeal->setDeal($deal);
$historiqueDeal->setDate(new DateTime());
$historiqueDeal->setAction("Création du Deal ".$deal->getNumero());
$historiqueDealRepository->add($historiqueDeal, true);
return $this->redirectToRoute('app_deal_edit', ['id' =>$deal->getId()], Response::HTTP_SEE_OTHER);
}
// $form = $this->createForm(DealType::class, $deal);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// $dealRepository->add($deal, true);
// return $this->redirectToRoute('app_deal_index', [], Response::HTTP_SEE_OTHER);
// }
// 'listinstallateurs' => $installateurRepository->findBy(["status"=>'Validé']),
if ($request->query->get('insparam') != null ) {
$idinstallateurGet = $request->query->get('insparam');
} else {
$idinstallateurGet = 0;
}
return $this->renderForm('deal/new.html.twig', [
'deal' => $deal,
'listinstallateurs' => $installateurRepository->findAll(),
'listobliges' => $obligesRepository->findAll(),
'listdealobliges' => $dealobligeRepository->findAll(),
'champs' => $champsDefautRepository->findAll(),
'dealoperations' => $operationStandardRepository->findAll(),
'listapporteurs' => $apporteurAffaireRepository->findAll(),
'idinstallateurGet' => $idinstallateurGet
]);
}
/**
* @Route("/{id}", name="app_deal_show", methods={"GET"})
*/
public function show(Deal $deal): Response
{
if ($this->isGranted('ROLE_INSTALLATEUR')) {
$deals=$this->getUser()->getInstallateur()->getDeals();
foreach ($deals as $value) {
if ($value->getId() == $deal->getId()) {
return $this->redirectToRoute('app_deal_edit', ['id' =>$deal->getId()], Response::HTTP_SEE_OTHER);
}
}
return $this->redirectToRoute('app_deal_index', [], Response::HTTP_SEE_OTHER);
}else{
return $this->redirectToRoute('app_deal_edit', ['id' =>$deal->getId()], Response::HTTP_SEE_OTHER);
}
}
/**
* @Route("/{id}/edit", name="app_deal_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, Deal $deal, DealRepository $dealRepository,ChampsDealRepository $champsDealRepository,
ChampsDefautDealRepository $champsDefautDealRepository,ActiviteDealRepository $activiteDealRepository,NotificationsRepository $notificationsRepository,
EquipeRepository $equipeRepository, HistoriqueDealRepository $historiqueDealRepository,SoustraitantRepository $soustraitantRepository,
OperationStandardRepository $operationStandardRepository): Response
{
$dealCommentaire = $deal->getCommentaire();
$isCompleted = "oui";
if ($this->isGranted('ROLE_INSTALLATEUR')) {
if ($this->getUser()->getInstallateur()->getId() != $deal->getInstallateur()->getId()) {
return $this->redirectToRoute('app_deal_index', [], Response::HTTP_SEE_OTHER);
}
if($deal->getInstallateur()->getNom() == null || $deal->getInstallateur()->getPrenom() == null || $deal->getInstallateur()->getSociete() == null ||
$deal->getInstallateur()->getPhone() == null || $deal->getInstallateur()->getEmail() == null || $deal->getInstallateur()->getAdresse() == null ){
$isCompleted = "non";
}
foreach($deal->getInstallateur()->getChampsinstallateur() as $key => $value){
if($value->getType() !="file" && $value->getValeur() == null){
$isCompleted = "non";
}
if($value->getType() =="file" && $value->getStatus() == "Non Transmis"){
$isCompleted = "non";
}
}
if(count($deal->getInstallateur()->getOperationStandards()) < 1){
$isCompleted = "non";
}
}
if ($request->getMethod() == "POST") {
$form = $request->request;
// $deal->setNumero($form->get('nom'));
if (!$this->isGranted('ROLE_INSTALLATEUR')) {
$deal->setNumero($form->get('nom'));
if($form->get('parties')){
$deal->setType($form->get('parties'));
}
if($form->get('taux')){
$deal->setTaux($form->get('taux'));
}
$cible='';
// dd($form->get('cible'));
if ($form->get('cible')) {
foreach ($form->get('cible') as $key => $value) {
$cible.=$value."-";
}
$deal->setCible($cible);
}
$date = date('d-m-Y', strtotime($form->get('date'))) ;
$datetime = new Datetime($date);
// var_dump($form->get('date'));
// var_dump($date);
// var_dump($datetime);die('test');
$deal->setDatefin($datetime);
$deal->setDate(new Datetime());
$deal->setCommentaire($form->get('commentaire'));
}
if ($form->get('soustraitants') != null) {
foreach ($deal->getSoustraitants() as $value) {
if (!in_array($value->getId(),$form->get('soustraitants'))) {
$deal->removeSoustraitant($value);
}
}
foreach ($form->get('soustraitants') as $value) {
$soustraitant= $soustraitantRepository->findOneBy(["id"=>intval($value)]);
$deal->addSoustraitant($soustraitant);
}
}else{
foreach ($deal->getSoustraitants() as $value) {
$deal->removeSoustraitant($value);
}
}
if ($form->get('operations') != null) {
foreach ($deal->getOperation() as $value) {
if (!in_array($value->getId(),$form->get('operations'))) {
$deal->removeOperation($value);
}
}
foreach ($form->get('operations') as $value) {
$ops= $operationStandardRepository->findOneBy(["id"=>intval($value)]);
$deal->addOperation($ops);
}
}else{
foreach ($deal->getOperation() as $value) {
$deal->removeOperation($value);
}
}
$activiteDeal = new ActiviteDeal();
$historiqueDeal = new HistoriqueDeal();
if ($this->isGranted('ROLE_INSTALLATEUR')) {
$activiteDeal->setFonction('installateur');
$activiteDeal->setInstallateur($this->getUser()->getInstallateur());
$activiteDeal->setCommentaire("Modification des éléments ");
$historiqueDeal->setAction("Modification du Deal ".$deal->getNumero());
}else{
$activiteDeal->setFonction('equipe');
$activiteDeal->setEquipe($this->getUser()->getEquipe());
if($deal->getStatus() != $form->get('status')){
$activiteDeal->setCommentaire($this->getUser()->getEquipe()->getPrenom()." a modifié le statut en : ".$form->get('status'));
$historiqueDeal->setAction($this->getUser()->getEquipe()->getPrenom()." a modifié le statut en : ".$form->get('status'));
}else{
$activiteDeal->setCommentaire("Modification des éléments ");
$historiqueDeal->setAction("Modification du Deal ".$deal->getNumero());
}
$deal->setStatus($form->get('status'));
}
$activiteDeal->setDate(new Datetime());
$activiteDeal->setDeal($deal);
$activiteDealRepository->add($activiteDeal, true);
// Historique
$historiqueDeal->setUser($this->getUser());
$historiqueDeal->setDeal($deal);
$historiqueDeal->setDate(new DateTime());
$historiqueDealRepository->add($historiqueDeal, true);
$dealRepository->add($deal, true);
if ($form->get('status') == "Validé") {
// Notif Installateur
$notifications = new Notifications();
$notifications->setUserId($deal->getInstallateur()->getUser());
$notifications->setMessage("Deal ".$deal->getNumero()." est Validé !!!");
$notifications->setAction("app_deal_edit");
$notifications->setActionId($deal->getId());
$notifications->setSender($this->getUser());
$notifications->setStatuts("non lu");
$notifications->setDate(new DateTime());
$notificationsRepository->add($notifications, true);
$activiteDeal = new ActiviteDeal();
$activiteDeal->setFonction('equipe');
$activiteDeal->setEquipe($this->getUser()->getEquipe());
$activiteDeal->setCommentaire("Deal ".$deal->getNumero()." est Validé !!!");
$activiteDeal->setDate(new Datetime());
$activiteDeal->setDeal($deal);
$activiteDealRepository->add($activiteDeal, true);
}
foreach ($form as $key => $value) {
if (count(explode("-",$key)) ==2 && explode("-",$key)[0]=="champsinstallateur") {
$id=$form->get('champsinstvaleur-'.explode("-",$key)[1]);
$champsinst= $champsDealRepository->findOneBy(["id" => $id]);
$valeur=[];
$valeur[]=$value;
if ($champsinst->getValeur() != null ) {
foreach ($champsinst->getValeur() as $key => $val) {
$valeur[]=$val;
}
}
$champsinst->setValeur($valeur);
// $champsinst->setValeur($value);
if ($champsinst->getStatus()==null) {
$champsinst->setStatus('Non Transmis');
}else{
$champsinst->setStatus('Transmis');
}
$date = new Datetime();
$champsinst->setDate($date);
$champsDealRepository->add($champsinst, true);
}
if (count(explode("_",$key)) >2 && explode("_",$key)[1]=="old"){
$champsDeal = new ChampsDeal();
$chmps= $champsDefautDealRepository->find(["id"=>intval($value)]);
$champsDeal->setNom($chmps->getNom());
$champsDeal->setType($chmps->getType());
if($chmps->getDurevalidite()!=null){
$champsDeal->setDurevalidite($chmps->getDurevalidite());
}
if ($champsDeal->getStatus()==null) {
$champsDeal->setStatus('Non Transmis');
}else{
$champsDeal->setStatus('Transmis');
}
$champsDeal->setDeal($deal);
$champsDealRepository->add($champsDeal, true);
}
if ( count(explode("_",$key)) >2 && explode("_",$key)[2]=="type") {
if (explode("_",$key)[3]=="nom") {
$champs->setNom($value);
if($champs->getType() != "file"){
$champsDefautDealRepository->add($champs, true);
$champsDeal = new ChampsDeal();
$champsDeal->setNom($champs->getNom());
$champsDeal->setType($champs->getType());
$champsDeal->setDeal($deal);
$champsDealRepository->add($champsDeal, true);
}
}elseif(explode("_",$key)[3]=="dure"){
if($champs->getType() == "file"){
$champsDeal = new ChampsDeal();
if($value!=null){
$champsDeal->setDurevalidite($value);
}
$champsDeal->setNom($champs->getNom());
$champsDeal->setType($champs->getType());
$champsDeal->setDeal($deal);
if ($champsDeal->getStatus()==null) {
$champsDeal->setStatus('Non Transmis');
}else{
$champsDeal->setStatus('Transmis');
}
$champsDealRepository->add($champsDeal, true);
}
}
else{
$champs = new ChampsDefautDeal();
$champs->setType($value);
}
}
}
return $this->redirectToRoute('app_deal_edit', ['id' =>$deal->getId()], Response::HTTP_SEE_OTHER);
}
// $form = $this->createForm(DealType::class, $deal);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// $dealRepository->add($deal, true);
// return $this->redirectToRoute('app_deal_index', [], Response::HTTP_SEE_OTHER);
// }
if ($this->isGranted('ROLE_INSTALLATEUR')) {
$notif = $notificationsRepository->findAll(["user_id" => $deal->getInstallateur()->getUser(),"statuts"=> "non lu", "action" => "app_deal_edit", "action_id" => $deal->getId()]);
if ($notif) {
foreach ($notif as $key => $value) {
$datefinnotif = $value->getDate();
$dateday2 = new DateTime();
// Ajouter 2 jours
$datefinnotif->modify('+2 days');
// dd($datefinnotif);
$value->setStatuts("lu");
$notificationsRepository->add($value, true);
// if ($dateday2 > $datefinnotif) {
// }
}
}
}
$champsdefaut=[];
$champsvalide=0;
foreach ($deal->getChampsdeal() as $champs) {
foreach ($champsDefautDealRepository->findAll() as $value) {
if ($value->getNom() == $champs->getNom()) {
$champsdefaut[]=$value;
}
}
if ($champs->getStatus() != "Validé" and $champs->getType() == "file" ) {
$champsvalide=$champsvalide + 1;
}
}
foreach ($deal->getInstallateur()->getChampsinstallateur() as $champs) {
if ($champs->getStatus() != "Validé" and $champs->getType() == "file" ) {
$champsvalide=$champsvalide + 1;
}
}
//dd($champsvalide);
return $this->renderForm('deal/edit.html.twig', [
'deal' => $deal,
'champsdefaut' => $champsdefaut,
"dateday"=>new Datetime(),
'isCompleted' => $isCompleted,
'champsvalide' => $champsvalide,
'operationsStandars' => $operationStandardRepository->findAll(),
]);
}
/**
* @Route("/{id}", name="app_deal_delete", methods={"POST"})
*/
public function delete(Request $request, Deal $deal, DealRepository $dealRepository,ChampsDealRepository $champsDealRepository,ActiviteDealRepository $activiteDealRepository
, NotificationsRepository $notificationsRepository,HistoriqueDealRepository $historiqueDealRepository,FactureAafRepository $factureAafRepository,AppelqualiteRepository $appelqualiteRepository,
SoustraitantRepository $soustraitantRepositor,ContratRepository $contratRepository,
DepotDossierRepository $depotDossierRepository,ChampsDepotDossierRepository $champsDepotDossierRepository,CommentairesControlleRepository $commentairesControlleRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$deal->getId(), $request->request->get('_token'))) {
foreach ($deal->getChampsDeal() as $value) {
$deal->removeChampsDeal($value);
$champsDealRepository->remove($value, true);
}
foreach ($notificationsRepository->findBy(["action_id"=>$deal->getId()]) as $value) {
$notificationsRepository->remove($value, true);
}
foreach ($deal->getActiviteDeals() as $value) {
$deal->removeActiviteDeal($value);
$activiteDealRepository->remove($value, true);
}
foreach ($deal->getHistoriqueDeals() as $value) {
$deal->removeHistoriqueDeal($value);
$historiqueDealRepository->remove($value, true);
}
foreach ($deal->getOperation() as $value) {
$deal->removeOperation($value);
}
if($deal->getApporteurAffaire()){
$deal->setApporteurAffaire(NULL);
}
foreach ($deal->getDepotDossiers() as $dossier) {
foreach ($dossier->getChampsDepotDossiers() as $champdossier) {
$champsDepotDossierRepository->remove($champdossier, true);
}
foreach ($dossier->getCommentairesControlles() as $commentaire) {
$commentairesControlleRepository->remove($commentaire, true);
}
foreach ($dossier->getSoustraitants() as $value) {
$dossier->removeSoustraitant($value);
// $soustraitantRepository->remove($value, true);
}
foreach ($dossier->getFactureAafs() as $value) {
// $depotDossier->removeFactureAaf($value);
foreach ($value->getCommentaireFactureaafs() as $commentaire) {
$value->removeCommentaireFactureaaf($commentaire);
// $activiteDealRepository->remove($commentaire, true);
}
$factureAafRepository->remove($value, true);
}
foreach ($dossier->getAppelqualites() as $value) {
foreach ($value->getCommentaireAppelqualites() as $commentaire) {
$value->removeCommentaireAppelqualite($commentaire);
// $activiteDealRepository->remove($commentaire, true);
}
// $depotDossier->removeAppelqualite($value);
$appelqualiteRepository->remove($value, true);
}
$depotDossierRepository->remove($dossier, true);
}
foreach ($deal->getCommentaireDeals() as $commentaire) {
$deal->removeCommentaireDeal($commentaire);
// $activiteDealRepository->remove($commentaire, true);
}
foreach ($deal->getSoustraitants() as $soustritant) {
$deal->removeSoustraitant($soustritant);
// $activiteDealRepository->remove($commentaire, true);
}
if($deal->getContrat()){
foreach ($deal->getContrat()->getCommentaireContrats() as $commentaire) {
$deal->getContrat()->removeCommentaireContrat($commentaire);
// $activiteDealRepository->remove($commentaire, true);
}
$contratRepository->remove($deal->getContrat(), true);
}
$dealRepository->remove($deal, true);
}
return $this->redirectToRoute('app_deal_index', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/zip/{id}", name="app_deal_zip", methods={"GET", "POST"})
*/
public function zip(Deal $deal,Request $request): Response
{
// Créez un nom de fichier unique pour le fichier ZIP
$zipFileName = 'Archiver_Deal_'.$deal->getInstallateur()->getSociete().'_' . date('d-m-Y-His') . '.zip';
// Créez le chemin absolu vers le fichier ZIP
$zipFilePath = $this->getParameter('installateur_directory') . '/archiver/' . $zipFileName;
// Utilisez la classe ZipArchive pour créer le fichier ZIP
$zip = new \ZipArchive();
$zip->open($zipFilePath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
foreach ($deal->getInstallateur()->getChampsinstallateur() as $value) {
if ($value->getType()=="file") {
if ($value->getValeur()!=null) {
$filePath = $this->getParameter('installateur_directory')."/".$value->getValeur()[0];
$relativePath = $deal->getInstallateur()->getSociete()."/".$value->getValeur()[0];
if (file_exists($filePath)) {
$zip->addFile($filePath, $relativePath);
}
// $zip->addFile($filePath, $relativePath);
}
}
}
foreach ($deal->getChampsDeal() as $value) {
if ($value->getType()=="file") {
if ($value->getValeur()!=null) {
//dd($value->getValeur()[0]);
$filePath = $this->getParameter('installateur_directory')."/".$value->getValeur()[0];
$relativePath = $deal->getInstallateur()->getSociete()."/".$value->getValeur()[0];
if (file_exists($filePath)) {
$zip->addFile($filePath, $relativePath);
}
// $zip->addFile($filePath, $relativePath);
}
}
}
// Fermer le fichier ZIP
$zip->close();
// Envoyer le fichier ZIP en tant que réponse de téléchargement
$response = new BinaryFileResponse($zipFilePath);
$response->headers->set('Content-Type', 'application/zip');
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $zipFileName);
// if ($filesystem->exists($sourceFolder)) {
// // Supprimez tous les fichiers et dossiers à l'intérieur du dossier
// $filesystem->remove(glob($sourceFolder . '/*'));
// }
return $response;
// return $this->redirectToRoute('app_installateur_sow', ['id' => $this->getUser()->getInstallateur()->getId()], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/{id}/archives", name="app_deal_archives", methods={"GET", "POST"})
*/
public function archives(Request $request,Deal $deal): Response
{
if ($request->getMethod() == "POST") {
$form = $request->request;
// Créez un nom de fichier unique pour le fichier ZIP
$zipFileName = 'Deal_'.$deal->getInstallateur()->getSociete().'_' . date('d-m-Y-His') . '.zip';
// Créez le chemin absolu vers le fichier ZIP
$zipFilePath = $this->getParameter('installateur_directory') . '/archiver/' . $zipFileName;
// Utilisez la classe ZipArchive pour créer le fichier ZIP
$zip = new \ZipArchive();
$zip->open($zipFilePath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
// foreach ($deal->getInstallateur()->getChampsinstallateur() as $value) {
// if ($value->getType()=="file") {
// if ($value->getValeur()!=null) {
// $filePath = $this->getParameter('installateur_directory').'/'.$value->getValeur();
// $relativePath = $deal->getInstallateur()->getSociete()."/".$value->getValeur();
// $zip->addFile($filePath, $relativePath);
// }
// }
// }
if ($form->get("chk_archiverdeal") != null ) {
foreach ($form->get("chk_archiverdeal") as $key => $champs) {
foreach ($deal->getChampsDeal() as $value) {
if ($value->getType()=="file") {
if ($value->getId() == $champs) {
if ($value->getValeur()!=null) {
foreach ($value->getValeur() as $val) {
$filePath = $this->getParameter('installateur_directory').'/'.$val;
$relativePath = $deal->getInstallateur()->getSociete()."/".$val;
$zip->addFile($filePath, $relativePath);
}
}
}
}
}
}
}
if ($form->get("chk_archiverinstallateur") != null ) {
foreach ($form->get("chk_archiverinstallateur") as $key => $champs) {
foreach ($deal->getInstallateur()->getChampsinstallateur() as $value) {
if ($value->getType()=="file") {
if ($value->getId() == $champs) {
if ($value->getValeur()!=null) {
foreach ($value->getValeur() as $val) {
$filePath = $this->getParameter('installateur_directory').'/'.$val;
$relativePath = $deal->getInstallateur()->getSociete()."/".$val;
$zip->addFile($filePath, $relativePath);
}
}
}
}
}
}
}
// Fermer le fichier ZIP
$zip->close();
// Envoyer le fichier ZIP en tant que réponse de téléchargement
$response = new BinaryFileResponse($zipFilePath);
$response->headers->set('Content-Type', 'application/zip');
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $zipFileName);
// if ($filesystem->exists($sourceFolder)) {
// // Supprimez tous les fichiers et dossiers à l'intérieur du dossier
// $filesystem->remove(glob($sourceFolder . '/*'));
// }
return $response;
}
return $this->redirectToRoute('app_deal_edit', ['id' =>$deal->getId()], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/commentaire/{id}", methods={"POST"})
*/
public function commentaire(Request $request,CommentaireDealRepository $commentaireDealRepository,Deal $deal): JsonResponse
{
if ($request->getMethod() == "POST") {
// $file=$request->files->get('validedocument');
$commentaire = $request->request->get('commentaire');
if ($commentaire) {
$commentaireDeal = new CommentaireDeal();
$commentaireDeal->setCommentaire($commentaire);
$commentaireDeal->setDate(new DateTime());
$commentaireDeal->setDeal($deal);
$commentaireDeal->setUser($this->getUser());
$commentaireDealRepository->add($commentaireDeal, true);
return $this->json(['success' => true, 'message' => 'commentaire ajouter ']);
}
}
return $this->json(['success' => false, 'error' => 'Erreur ']);
}
/**
* @Route("/archiverdeal/{id}", methods={"POST"})
*/
public function archiverdeal(Request $request,Deal $deal,DealRepository $dealRepository,
DepotDossierRepository $depotDossierRepository): JsonResponse
{
if ($request->getMethod() == "POST") {
// $file=$request->files->get('validedocument');
$id = $request->request->get('id');
if ($id) {
foreach ($deal->getDepotDossiers() as $key => $dossier) {
$dossier->setArchive($dossier->getStatus());
$dossier->setStatus("archive");
$depotDossierRepository->add($dossier, true);
}
$deal->setArchive($deal->getStatus());
$deal->setStatus("archive");
$dealRepository->add($deal, true);
return $this->json(['success' => true, 'message' => 'deal archive']);
}
}
return $this->json(['success' => false, 'error' => 'Erreur ']);
}
/**
* @Route("/suprimercommentaire/{id}", methods={"POST"})
*/
public function suprimercommentaire(Request $request ,CommentaireDealRepository $commentaireDealRepository,CommentaireDeal $commentaireDeal): JsonResponse
{
if ($request->getMethod() == "POST") {
// $file=$request->files->get('validedocument');
$id = $request->request->get('id');
if ($id) {
$commentaireDealRepository->remove($commentaireDeal, true);
return $this->json(['success' => true, 'message' => 'champs supprimer succès']);
}
}
return $this->json(['success' => false, 'error' => 'Erreur ']);
}
/**
* @Route("/exporte/{id}", name="app_exporte", methods={"GET"})
*/
public function exporte(Deal $deal,DealRepository $dealRepository): Response
{
$jsonFilePath = 'assets/json/deal-list.json';
// Étape 1 : Récupérer le contenu JSON depuis le fichier
$jsonContent = file_get_contents($jsonFilePath);
// Étape 2 : Décoder le contenu JSON en tableau PHP
$phpArray = json_decode($jsonContent, true);
// Créer un nouveau classeur Excel
$spreadsheet = new Spreadsheet();
// Obtenir la feuille active
$sheet = $spreadsheet->getActiveSheet();
// Écrire des données dans la feuille
$sheet->setCellValue('A1', 'Deal');
$sheet->setCellValue('B1', 'Installateur');
$sheet->setCellValue('C1', 'Oblige');
$sheet->setCellValue('D1', 'Date de Fin');
$sheet->setCellValue('E1', 'Status');
$i=2;
if ($phpArray === null) {
echo "Erreur lors du décodage JSON : " . json_last_error_msg();
} else {
// Utilisez le tableau PHP $phpArray comme bon vous semble
foreach ($phpArray as $value) {
$dl=$dealRepository->findOneBy(["id"=>intval($value["id_deal"])]);
$sheet->setCellValue('A'.$i, $dl->getNumero());
$sheet->setCellValue('B'.$i, $dl->getInstallateur()->getSociete());
$sheet->setCellValue('C'.$i, $dl->getDealoblige()->getOblige()->getSociete());
$sheet->setCellValue('D'.$i, $dl->getDatefin());
$sheet->setCellValue('E'.$i, $dl->getStatus());
$i=$i+1;
}
}
// Créer un objet Writer pour enregistrer le fichier
$writer = new Xlsx($spreadsheet);
// Enregistrer le fichier à un emplacement
$now = new DateTime();
$date = $now->format('d-m-Y H-i-s');
$nomexecel = "deal-".$this->getUser()->getEquipe()->getPrenom()."-".$date;
$cheminFichier =$this->getParameter('installateur_directory') . "/export/export".$nomexecel.".xlsx";
$writer->save($cheminFichier);
// Renvoyer la réponse avec le fichier Excel en pièce jointe
return $this->file($cheminFichier);
}
/**
* @Route("/commentaireedite/{id}", methods={"POST"})
*/
public function commentaireedite(Request $request,CommentaireDealRepository $commentaireDealRepository,CommentaireDeal $commentaireDeal ): JsonResponse
{
if ($request->getMethod() == "POST") {
// $file=$request->files->get('validedocument');
$commentaire = $request->request->get('commentaire');
if ($commentaire) {
$commentaireDeal->setCommentaire($commentaire);
$commentaireDeal->setDate(new DateTime());
$commentaireDealRepository->add($commentaireDeal, true);
return $this->json(['success' => true, 'message' => 'commentaire ajouter ']);
}
}
return $this->json(['success' => false, 'error' => 'Erreur ']);
}
}