src/Services/CompteRenduService.php line 102

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  */
  5. namespace App\Services;
  6. use App\Entity\AvoirBrouillon;
  7. use App\Entity\AvoirFactureFinance;
  8. use App\Entity\DocUpload;
  9. use App\Entity\Etap1;
  10. use App\Entity\Etap160;
  11. use App\Entity\Etap2;
  12. use App\Entity\Etap23;
  13. use App\Entity\Etap3;
  14. use App\Entity\Etap4;
  15. use App\Entity\Etap5;
  16. use App\Entity\Etap6;
  17. use App\Entity\Etap7;
  18. use App\Entity\Etap8;
  19. use App\Entity\Etap9;
  20. use App\Entity\Etap10;
  21. use App\Entity\Etap11;
  22. use App\Entity\Etap12;
  23. use App\Entity\Etap13;
  24. use App\Entity\Etap14;
  25. use App\Entity\Etap15;
  26. use App\Entity\Etap16;
  27. use App\Entity\Etap17;
  28. use App\Entity\Etap18;
  29. use App\Entity\Etap19;
  30. use App\Entity\Etap20;
  31. use App\Entity\Etap21;
  32. use App\Entity\Etap22;
  33. use App\Entity\Etaps;
  34. use App\Entity\EtapsCategory;
  35. use App\Entity\FactureFinance;
  36. use App\Entity\Avoir;
  37. use App\Entity\Fournisseur;
  38. use App\Entity\PrmEnedis;
  39. use App\Entity\Project;
  40. use App\Entity\ProjectAvoir;
  41. use App\Entity\ProjectEdit;
  42. use App\Entity\ProjectFactureFinance;
  43. use App\Entity\Rib;
  44. use App\Entity\Spv;
  45. use App\Entity\SpvEnedis;
  46. use App\Entity\User;
  47. use App\Entity\VisiteTerrainV2;
  48. use App\Entity\VisiteTerrainV2EtapsName;
  49. use App\Entity\VisiteTerrainV2Question;
  50. use App\Entity\VisiteTerrainV2QuestionComment;
  51. use App\Form\AvoirBrouillonType;
  52. use App\Form\AvoirType;
  53. use App\Form\FactureFinanceType;
  54. use App\Form\ProjectEditType;
  55. use App\Form\ProjectType;
  56. use App\Form\SpvEnedisType;
  57. use App\Form\UserType;
  58. use Kunnu\Dropbox\Dropbox;
  59. use Kunnu\Dropbox\DropboxApp;
  60. use Kunnu\Dropbox\Exceptions\DropboxClientException;
  61. use PhpOffice\PhpSpreadsheet\Shared\Date;
  62. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  63. use PhpOffice\PhpSpreadsheet\Style\Border;
  64. use PhpOffice\PhpSpreadsheet\Style\Color;
  65. use PhpOffice\PhpSpreadsheet\Style\Fill;
  66. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  67. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  68. use Spipu\Html2Pdf\Html2Pdf;
  69. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  70. use Doctrine\ORM\EntityManagerInterface;
  71. use Symfony\Component\Form\FormFactoryInterface;
  72. use Symfony\Component\HttpFoundation\File\UploadedFile;
  73. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  74. use Symfony\Component\Routing\RouterInterface;
  75. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  76. use Symfony\Contracts\Translation\TranslatorInterface;
  77. use Symfony\Component\Security\Core\Security;
  78. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  79. use Twig\Environment;
  80. use App\Entity\Centrale;
  81. use Symfony\Component\Validator\Constraints as Assert;
  82. use Symfony\Component\Validator\Validator\ValidatorInterface;
  83. use Mindee\Client;
  84. use Mindee\Product\Invoice\InvoiceV4;
  85. class CompteRenduService
  86. {
  87.     private $em;
  88.     private $trans;
  89.     private $params;
  90.     private $security;
  91.     private $session;
  92.     private $twig;
  93.     private $notification;
  94.     public function __construct(
  95.         Environment $twig,
  96.         SessionInterface $session,
  97.         Security $security,
  98.         ParameterBagInterface $params,
  99.         EntityManagerInterface $em,
  100.         TranslatorInterface $trans,
  101.         ValidatorInterface $validator,
  102.         FlashBagInterface $flashBag,
  103.         UserPasswordEncoderInterface $passwordEncoder,
  104.         Notifications $notifications,
  105.         EtapsService $etapsService,
  106.         FormFactoryInterface $form,
  107.         RouterInterface $router
  108.     ) {
  109.         $this->em = $em;
  110.         $this->trans = $trans;
  111.         $this->params = $params;
  112.         $this->security = $security;
  113.         $this->session = $session;
  114.         $this->twig = $twig;
  115.         $this->validator = $validator;
  116.         $this->form = $form;
  117.         $this->flashBag = $flashBag;
  118.         $this->passwordEncoder = $passwordEncoder;
  119.         $this->notification = $notifications;
  120.         $this->etapsService = $etapsService;
  121.         $this->router = $router;
  122.     }
  123.     public function addCompteRendu($request,$user)
  124.     {
  125.         $dateVisiteTerrainV2 = $request->get('dateVisiteTerrainV2');
  126.         $numVisiteTerrainV2 = $request->get('numVisiteTerrainV2');
  127.         $etapToken = $request->get('etapToken');
  128.         $tokenProject = $request->get('tokenProject');
  129.         if($etapToken and $tokenProject){
  130.             $project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$tokenProject]);
  131.             $etap = $this->em->getRepository(Etap23::class)->findOneBy(['token'=>$etapToken]);
  132.             if($project && $etap){
  133.                 $visiteTerrainV2 = new VisiteTerrainV2();
  134.                 if($dateVisiteTerrainV2){
  135.                     $visiteTerrainV2->setDateVisiteTerrain(new \DateTime($dateVisiteTerrainV2));
  136.                 }else{
  137.                     $visiteTerrainV2->setDateVisiteTerrain(null);
  138.                 }
  139.                 $visiteTerrainV2->setEtap23($etap);
  140.                 $visiteTerrainV2->setIsFinished(false);
  141.                 $visiteTerrainV2->setNum($numVisiteTerrainV2);
  142.                 $visiteTerrainV2->setUser($this->security->getUser());
  143.                 $this->em->persist($etap);
  144.                 $this->em->flush();
  145.                 $this->addQuestion($visiteTerrainV2);
  146.                 return [
  147.                     'etap' => $etap,
  148.                     'visiteTerrainV2' => $visiteTerrainV2,
  149.                     'success' => true
  150.                 ];
  151.             }
  152.         }
  153.         return [
  154.             'success' => false
  155.         ];
  156.     }
  157.     public function addQuestion($visteTerrain){
  158.         $questions = $this->em->getRepository(VisiteTerrainV2EtapsName::class)->findBy([],['sort'=>'asc']);
  159.         foreach ($questions as $question){
  160.             $visiteTerrainV2Question = new VisiteTerrainV2Question();
  161.             $visiteTerrainV2Question->setVisiteTerrainV2($visteTerrain);
  162.             $visiteTerrainV2Question->setVisiteTerrainV2EtapsName($question);
  163.             $this->em->persist($visiteTerrainV2Question);
  164.         }
  165.         $this->em->flush();
  166.     }
  167.     public function getQuestionEmpty($token){
  168.         $question = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionEmpty($token);
  169.         return $question;
  170.     }
  171.     public function getVisiteByToken($token){
  172.         $visite = $this->em->getRepository(VisiteTerrainV2::class)->findOneBy(['token'=>$token]);
  173.         return $visite;
  174.     }
  175.     public function getAllQuestionByTokenVisite($token,$questionCurant = null){
  176.         $questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getAllQuestionByTokenVisite($token);
  177.         $array = [];
  178.         foreach ($questions as $question){
  179.             $array[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][] = $question ;
  180.             $array[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['category'] = $question->getVisiteTerrainV2EtapsName()->getCategory()->getName();
  181.         }
  182.         foreach ($array as &$value){
  183.             $countReponceNotVide = 0;
  184.             $isOpen = false;
  185.             foreach ($value['questions'] as $valueQuestion){
  186.                 if($questionCurant && ($questionCurant->getId() == $valueQuestion->getId())){
  187.                     $isOpen = true;
  188.                 }
  189.                 if($valueQuestion->getReponceQuestion()){
  190.                     $countReponceNotVide += 1;
  191.                 }
  192.             }
  193.             $value['countNotVide'] = $countReponceNotVide ;
  194.             $value['isOpen'] = $isOpen ;
  195.         }
  196.         return $array;
  197.     }
  198.     public function addCommentInQuestion($tokenQustion,$textComment){
  199.         $question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$tokenQustion]);
  200.         if($question){
  201.             $user = $this->security->getUser();
  202.             $comment = new VisiteTerrainV2QuestionComment();
  203.             $comment->setUser($user);
  204.             $comment->setComment($textComment);
  205.             $comment->setQuestion($question);
  206.             $comment->setCreatedAt(new \DateTime());
  207.             $this->em->persist($comment);
  208.             $this->em->flush();
  209.         }
  210.     }
  211.     public function getQuestionsByVisite($question){
  212.         $visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($question->getVisiteTerrainV2()->getEtap23());
  213.         $visitesIds = [];
  214.         foreach ($visites as $visite){
  215.             $visitesIds[]= $visite->getId();
  216.         }
  217.         $questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionsByVisitesAndQuestNum($visitesIds,$question->getVisiteTerrainV2EtapsName());
  218.         return $questions;
  219.     }
  220.     public function getQuestionColor($question){
  221.         if($question){
  222.             if($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_oui){
  223.                 return 'border: 1px solid #447000;background: #BEF5BF;color: #447000;' ;
  224.             }elseif ($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_non){
  225.                 return 'border: 1px solid #FF8889;background: #ff888924;color: #FF8889;' ;
  226.             }elseif ($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_pasConcerne){
  227.                 return 'border: 1px solid #906E00;background: #FFFDCE;color: #906E00;' ;
  228.             }elseif ($question->getReponceQuestion() == VisiteTerrainV2Question::resp_question_nonControle){
  229.                 return 'color: #0F3E9B;background: #fff;border: 1px solid #0F3E9B;' ;
  230.             }else{
  231.                 return '';
  232.             }
  233.         }
  234.         $visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($question->getVisiteTerrainV2()->getEtap23());
  235.         $visitesIds = [];
  236.         foreach ($visites as $visite){
  237.             $visitesIds[]= $visite->getId();
  238.         }
  239.         $questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionsByVisitesAndQuestNum($visitesIds,$question->getVisiteTerrainV2EtapsName());
  240.         return $questions;
  241.     }
  242.     public function getNextQuestion($token){
  243.         $question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
  244.         $num = $question->getVisiteTerrainV2EtapsName()->getSort();
  245.         $questionNext = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionByNum($num+1 ,$question->getVisiteTerrainV2()->getToken());
  246.         if(!$questionNext){
  247.             $questionNext = 1;
  248.         }
  249.         return $questionNext;
  250.     }
  251.     public function getPrevQuestion($token){
  252.         $question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
  253.         $num = $question->getVisiteTerrainV2EtapsName()->getSort();
  254.         $questionPrev = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionByNum($num-1 ,$question->getVisiteTerrainV2()->getToken());
  255.         if(!$questionPrev){
  256.             $questionPrev = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionEmpty($question->getVisiteTerrainV2()->getToken());
  257.         }
  258.         return $questionPrev;
  259.     }
  260.     public function checkIsNext($token){
  261.         $question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
  262.         $num = $question->getVisiteTerrainV2EtapsName()->getSort();
  263.         $lastQuestionName = $this->em->getRepository(VisiteTerrainV2EtapsName::class)->getlastNum();
  264.         if($lastQuestionName && $num != $lastQuestionName->getSort()){
  265.             return true;
  266.         }else{
  267.             return false;
  268.         }
  269.     }
  270.     public function checkIsPrev($token){
  271.         $question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token'=>$token]);
  272.         $num = $question->getVisiteTerrainV2EtapsName()->getSort();
  273.         $lastQuestionName = $this->em->getRepository(VisiteTerrainV2EtapsName::class)->getFirstNum();
  274.         if($lastQuestionName && $num != $lastQuestionName->getSort()){
  275.             return true;
  276.         }else{
  277.             return false;
  278.         }
  279.     }
  280.     public function getAllVisiteByEtapTab($visite){
  281.         if($visite){
  282.             $etap = $visite->getEtap23();
  283.             $visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($etap);
  284.             if($visite->getIsFinished()){
  285.             }else{
  286.                 $visites[] = $visite;
  287.             }
  288.             $tabQuestionsVisite = [];
  289.             $questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getAllQuestionByTokenVisite($visite->getToken());
  290.             foreach ($questions as $question){
  291.                 $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['question'] = $question ;
  292.                 $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['category'] = $question->getVisiteTerrainV2EtapsName()->getCategory()->getName();
  293.                 foreach ($visites as $visiteItem) {
  294.                     $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['visites'][$visiteItem->getId()] = $visiteItem;
  295.                 }
  296.                 foreach ($visites as $visiteItem){
  297.                     $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteEntity'] = $visiteItem ;
  298.                     $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteQuestion'] = $this->getQuestionByVisteAndNameQuestion($visiteItem,$question->getVisiteTerrainV2EtapsName()) ;
  299.                 }
  300.             }
  301.             return $tabQuestionsVisite;
  302.         }
  303.         return false;
  304.     }
  305.     public function getQuestionByVisteAndNameQuestion($visite,$nameQuestionEntity){
  306.       $question = $this->em->getRepository(VisiteTerrainV2Question::class)->getSingleQuestionByVisitesAndQuestNum($visite,$nameQuestionEntity);
  307.       return $question;
  308.     }
  309.     public function getAllVisiteFinishedByEtapTab($visite){
  310.         if($visite){
  311.             $etap = $visite->getEtap23();
  312.             $visites = $this->em->getRepository(VisiteTerrainV2::class)->getAllVisiteFinishidByEtaps($etap);
  313.             $tabQuestionsVisite = [];
  314.             $questions = $this->em->getRepository(VisiteTerrainV2Question::class)->getAllQuestionByTokenVisite($visite->getToken());
  315.             foreach ($questions as $question){
  316.                 $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['question'] = $question ;
  317.                 $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['category'] = $question->getVisiteTerrainV2EtapsName()->getCategory()->getName();
  318.                 foreach ($visites as $visiteItem) {
  319.                     $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['visites'][$visiteItem->getId()] = $visiteItem;
  320.                 }
  321.                 foreach ($visites as $visiteItem){
  322.                     $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteEntity'] = $visiteItem ;
  323.                     $tabQuestionsVisite[$question->getVisiteTerrainV2EtapsName()->getCategory()->getId()]['questions'][$question->getId()]['visite'][$visiteItem->getId()]['visiteQuestion'] = $this->getQuestionByVisteAndNameQuestion($visiteItem,$question->getVisiteTerrainV2EtapsName()) ;
  324.                 }
  325.             }
  326.             return $tabQuestionsVisite;
  327.         }
  328.         return false;
  329.     }
  330.     public function getCompteRenduPdf($visite){
  331.         if($visite){
  332.             $data = $this->getAllVisiteByEtapTab($visite);
  333.             $html = $this->twig->render('user/etaps/timelines/compteRenduPdf.html.twig',array('data'=>$data));
  334.             $html2pdf = new Html2Pdf('L', array(502 , 286), 'fr', true, 'UTF-8', array('0','0','0','0'));
  335.             $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  336.             $html2pdf->pdf->SetAuthor('prejeance');
  337.             $html2pdf->pdf->SetTitle('Compte rendu ');
  338.             $html2pdf->pdf->SetSubject('Compte rendu ');
  339.             $html2pdf->pdf->SetKeywords('Compte rendu ');
  340.             $html2pdf->pdf->SetDisplayMode('real');
  341.             $html2pdf->WriteHTML($html);
  342.             $nameFichier = 'compte_rendu'.time().'.pdf';
  343.             $path_pdf = $this->params->get('images_directory').'/rapport/'.$nameFichier;
  344.             $html2pdf->Output($path_pdf,'F');
  345.             return $nameFichier ;
  346.         }
  347.         return false;
  348.     }
  349.     public function getAllPhotosForCompteRendu($project){
  350.         $etap23 = $this->em->getRepository(Etap23::class)->findOneBy(['project'=>$project->getId()]);
  351.         if($etap23){
  352.             $questionsPhotos = $this->em->getRepository(VisiteTerrainV2Question::class)->getQuestionsByEtap($etap23->getToken());
  353.             $photos = $etap23->getFilePhotosVisiteTerainEtap23Multiple();
  354.             $array = [];
  355.             $i = 1;
  356.             if(count($photos) > 0){
  357.                 foreach ($photos as $photo1){
  358.                     $array[$i]['question'] = null;
  359.                     $array[$i]['photo'] = $photo1;
  360.                     $i++;
  361.                 }
  362.             }
  363.             foreach ($questionsPhotos as $question){
  364.                 foreach ($question->getFilePhotosMultiple() as $photo){
  365.                     $array[$i]['question'] = $question;
  366.                     $array[$i]['photo'] = $photo;
  367.                     $i++;
  368.                 }
  369.             }
  370.             return $array;
  371.         }
  372.         return [];
  373.     }
  374. }