<?php
/**
* Created by PhpStorm.
*/
namespace App\Services;
use App\Entity\AvoirBrouillon;
use App\Entity\AvoirFactureFinance;
use App\Entity\DocUpload;
use App\Entity\Etap1;
use App\Entity\Etap160;
use App\Entity\Etap2;
use App\Entity\Etap23;
use App\Entity\Etap3;
use App\Entity\Etap4;
use App\Entity\Etap5;
use App\Entity\Etap6;
use App\Entity\Etap7;
use App\Entity\Etap8;
use App\Entity\Etap9;
use App\Entity\Etap10;
use App\Entity\Etap11;
use App\Entity\Etap12;
use App\Entity\Etap13;
use App\Entity\Etap14;
use App\Entity\Etap15;
use App\Entity\Etap16;
use App\Entity\Etap17;
use App\Entity\Etap18;
use App\Entity\Etap19;
use App\Entity\Etap20;
use App\Entity\Etap21;
use App\Entity\Etap22;
use App\Entity\Etaps;
use App\Entity\EtapsCategory;
use App\Entity\FactureFinance;
use App\Entity\Avoir;
use App\Entity\Fournisseur;
use App\Entity\PrmEnedis;
use App\Entity\Project;
use App\Entity\ProjectAvoir;
use App\Entity\ProjectEdit;
use App\Entity\ProjectFactureFinance;
use App\Entity\Rib;
use App\Entity\Spv;
use App\Entity\SpvEnedis;
use App\Entity\User;
use App\Entity\VisiteTerrainV2;
use App\Entity\VisiteTerrainV2EtapsName;
use App\Entity\VisiteTerrainV2Question;
use App\Entity\VisiteTerrainV2QuestionComment;
use App\Form\AvoirBrouillonType;
use App\Form\AvoirType;
use App\Form\FactureFinanceType;
use App\Form\ProjectEditType;
use App\Form\ProjectType;
use App\Form\SpvEnedisType;
use App\Form\UserType;
use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
use Kunnu\Dropbox\Exceptions\DropboxClientException;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Spipu\Html2Pdf\Html2Pdf;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Twig\Environment;
use App\Entity\Centrale;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Mindee\Client;
use Mindee\Product\Invoice\InvoiceV4;
class CompteRenduService
{
private $em;
private $trans;
private $params;
private $security;
private $session;
private $twig;
private $notification;
public function __construct(
Environment $twig,
SessionInterface $session,
Security $security,
ParameterBagInterface $params,
EntityManagerInterface $em,
TranslatorInterface $trans,
ValidatorInterface $validator,
FlashBagInterface $flashBag,
UserPasswordEncoderInterface $passwordEncoder,
Notifications $notifications,
EtapsService $etapsService,
FormFactoryInterface $form,
RouterInterface $router
) {
$this->em = $em;
$this->trans = $trans;
$this->params = $params;
$this->security = $security;
$this->session = $session;
$this->twig = $twig;
$this->validator = $validator;
$this->form = $form;
$this->flashBag = $flashBag;
$this->passwordEncoder = $passwordEncoder;
$this->notification = $notifications;
$this->etapsService = $etapsService;
$this->router = $router;
}
public function addCompteRendu($request,$user)
{
$dateVisiteTerrainV2 = $request->get('dateVisiteTerrainV2');
$numVisiteTerrainV2 = $request->get('numVisiteTerrainV2');
$etapToken = $request->get('etapToken');
$tokenProject = $request->get('tokenProject');
if($etapToken and $tokenProject){
$project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$tokenProject]);
$etap = $this->em->getRepository(Etap23::class)->findOneBy(['token'=>$etapToken]);
if($project && $etap){
$visiteTerrainV2 = new VisiteTerrainV2();
if($dateVisiteTerrainV2){
$visiteTerrainV2->setDateVisiteTerrain(new \DateTime($dateVisiteTerrainV2));
}else{
$visiteTerrainV2->setDateVisiteTerrain(null);
}
$visiteTerrainV2->setEtap23($etap);
$visiteTerrainV2->setIsFinished(false);
$visiteTerrainV2->setNum($numVisiteTerrainV2);
$visiteTerrainV2->setUser($this->security->getUser());
$this->em->persist($etap);
$this->em->flush();
$this->addQuestion($visiteTerrainV2);
return [
'etap' => $etap,
'visiteTerrainV2' => $visiteTerrainV2,
'success' => true
];
}
}
return [
'success' => false
];
}
public function addQuestion($visteTerrain){
$questions = $this->em->getRepository(VisiteTerrainV2EtapsName::class)->findBy([],['sort'=>'asc']);
foreach ($questions as $question){
$visiteTerrainV2Question = new VisiteTerrainV2Question();
$visiteTerrainV2Question->setVisiteTerrainV2($visteTerrain);
$visiteTerrainV2Question->setVisiteTerrainV2EtapsName($question);
$this->em->persist($visiteTerrainV2Question);
}
$this->em->flush();
}
public function getQuestionEmpty($token){
$question = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionEmpty($token);
return $question;
}
public function getVisiteByToken($token){
$visite = $this->em->getRepository(VisiteTerrainV2::class)->findOneBy(['token'=>$token]);
return $visite;
}
public function getAllQuestionByTokenVisite($token,$questionCurant = null){
$questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getAllQuestionByTokenVisite($token);
$array = [];
foreach ($questions as $question){
$array[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][] = $question ;
$array[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['category'] = $question->getVisiteTerrainV2EtapsName()->getCategory()->getName();
}
foreach ($array as &$value){
$countReponceNotVide = 0;
$isOpen = false;
foreach ($value['questions'] as $valueQuestion){
if($questionCurant && ($questionCurant->getId() == $valueQuestion->getId())){
$isOpen = true;
}
if($valueQuestion->getReponceQuestion()){
$countReponceNotVide += 1;
}
}
$value['countNotVide'] = $countReponceNotVide ;
$value['isOpen'] = $isOpen ;
}
return $array;
}
public function addCommentInQuestion($tokenQustion,$textComment){
$question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$tokenQustion]);
if($question){
$user = $this->security->getUser();
$comment = new VisiteTerrainV2QuestionComment();
$comment->setUser($user);
$comment->setComment($textComment);
$comment->setQuestion($question);
$comment->setCreatedAt(new \DateTime());
$this->em->persist($comment);
$this->em->flush();
}
}
public function getQuestionsByVisite($question){
$visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($question->getVisiteTerrainV2()->getEtap23());
$visitesIds = [];
foreach ($visites as $visite){
$visitesIds[]= $visite->getId();
}
$questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionsByVisitesAndQuestNum($visitesIds,$question->getVisiteTerrainV2EtapsName());
return $questions;
}
public function getQuestionColor($question){
if($question){
if($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_oui){
return 'border: 1px solid #447000;background: #BEF5BF;color: #447000;' ;
}elseif ($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_non){
return 'border: 1px solid #FF8889;background: #ff888924;color: #FF8889;' ;
}elseif ($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_pasConcerne){
return 'border: 1px solid #906E00;background: #FFFDCE;color: #906E00;' ;
}elseif ($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_nonControle){
return 'color: #0F3E9B;background: #fff;border: 1px solid #0F3E9B;' ;
}else{
return '';
}
}
$visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($question->getVisiteTerrainV2()->getEtap23());
$visitesIds = [];
foreach ($visites as $visite){
$visitesIds[]= $visite->getId();
}
$questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionsByVisitesAndQuestNum($visitesIds,$question->getVisiteTerrainV2EtapsName());
return $questions;
}
public function getNextQuestion($token){
$question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
$num = $question->getVisiteTerrainV2EtapsName()->getSort();
$questionNext = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionByNum($num+1 ,$question->getVisiteTerrainV2()->getToken());
if(!$questionNext){
$questionNext = 1;
}
return $questionNext;
}
public function getPrevQuestion($token){
$question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
$num = $question->getVisiteTerrainV2EtapsName()->getSort();
$questionPrev = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionByNum($num-1 ,$question->getVisiteTerrainV2()->getToken());
if(!$questionPrev){
$questionPrev = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionEmpty($question->getVisiteTerrainV2()->getToken());
}
return $questionPrev;
}
public function checkIsNext($token){
$question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
$num = $question->getVisiteTerrainV2EtapsName()->getSort();
$lastQuestionName = $this->em->getRepository(VisiteTerrainV2EtapsName::class)->getlastNum();
if($lastQuestionName && $num != $lastQuestionName->getSort()){
return true;
}else{
return false;
}
}
public function checkIsPrev($token){
$question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
$num = $question->getVisiteTerrainV2EtapsName()->getSort();
$lastQuestionName = $this->em->getRepository(VisiteTerrainV2EtapsName::class)->getFirstNum();
if($lastQuestionName && $num != $lastQuestionName->getSort()){
return true;
}else{
return false;
}
}
public function getAllVisiteByEtapTab($visite){
if($visite){
$etap = $visite->getEtap23();
$visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($etap);
if($visite->getIsFinished()){
}else{
$visites[] = $visite;
}
$tabQuestionsVisite = [];
$questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getAllQuestionByTokenVisite($visite->getToken());
foreach ($questions as $question){
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['question'] = $question ;
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['category'] = $question->getVisiteTerrainV2EtapsName()->getCategory()->getName();
foreach ($visites as $visiteItem) {
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['visites'][$visiteItem->getId()] = $visiteItem;
}
foreach ($visites as $visiteItem){
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteEntity'] = $visiteItem ;
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteQuestion'] = $this->getQuestionByVisteAndNameQuestion($visiteItem,$question->getVisiteTerrainV2EtapsName()) ;
}
}
return $tabQuestionsVisite;
}
return false;
}
public function getQuestionByVisteAndNameQuestion($visite,$nameQuestionEntity){
$question = $this->em->getRepository(VisiteTerrainV2Question::class)->getSingleQuestionByVisitesAndQuestNum($visite,$nameQuestionEntity);
return $question;
}
public function getAllVisiteFinishedByEtapTab($visite){
if($visite){
$etap = $visite->getEtap23();
$visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($etap);
$tabQuestionsVisite = [];
$questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getAllQuestionByTokenVisite($visite->getToken());
foreach ($questions as $question){
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['question'] = $question ;
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['category'] = $question->getVisiteTerrainV2EtapsName()->getCategory()->getName();
foreach ($visites as $visiteItem) {
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['visites'][$visiteItem->getId()] = $visiteItem;
}
foreach ($visites as $visiteItem){
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteEntity'] = $visiteItem ;
$tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteQuestion'] = $this->getQuestionByVisteAndNameQuestion($visiteItem,$question->getVisiteTerrainV2EtapsName()) ;
}
}
return $tabQuestionsVisite;
}
return false;
}
public function getCompteRenduPdf($visite){
if($visite){
$data = $this->getAllVisiteByEtapTab($visite);
$html = $this->twig->render('user/etaps/timelines/compteRenduPdf.html.twig',array('data'=>$data));
$html2pdf = new Html2Pdf('L', array(502 , 286), 'fr', true, 'UTF-8', array('0','0','0','0'));
$html2pdf->getSecurityService()->disableCheckAllowedHosts();
$html2pdf->pdf->SetAuthor('prejeance');
$html2pdf->pdf->SetTitle('Compte rendu ');
$html2pdf->pdf->SetSubject('Compte rendu ');
$html2pdf->pdf->SetKeywords('Compte rendu ');
$html2pdf->pdf->SetDisplayMode('real');
$html2pdf->WriteHTML($html);
$nameFichier = 'compte_rendu'.time().'.pdf';
$path_pdf = $this->params->get('images_directory').'/rapport/'.$nameFichier;
$html2pdf->Output($path_pdf,'F');
return $nameFichier ;
}
return false;
}
public function getAllPhotosForCompteRendu($project){
$etap23 = $this->em->getRepository(Etap23::class)->findOneBy(['project'=>$project->getId()]);
if($etap23){
$questionsPhotos = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionsByEtap($etap23->getToken());
$photos = $etap23->getFilePhotosVisiteTerainEtap23Multiple();
$array = [];
$i = 1;
if(count($photos) > 0){
foreach ($photos as $photo1){
$array[$i]['question'] = null;
$array[$i]['photo'] = $photo1;
$i++;
}
}
foreach ($questionsPhotos as $question){
foreach ($question->getFilePhotosMultiple() as $photo){
$array[$i]['question'] = $question;
$array[$i]['photo'] = $photo;
$i++;
}
}
return $array;
}
return [];
}
}