コード例 #1
0
 /**
  * Clôture d'un decompte
  *
  * @param $marcheId
  * @param $decompteId
  * @return \Symfony\Component\HttpFoundation\RedirectResponse
  */
 public function clotureAction($marcheId, $decompteId)
 {
     $this->verifyAccess();
     $em = $this->getDoctrine()->getManager();
     $decompte = $em->getRepository('LaisoArmBundle:Decompte')->find($decompteId);
     if (!$decompte) {
         throw new NotFoundHttpException('Unable to find Decompte entity');
     }
     $allowed = true;
     if (count($decompte->getAttachements()) == 0) {
         $allowed = false;
     }
     for ($k = sizeof($decompte->getAttachements()) - 1; $k >= 0 && ($allowed = true); $k--) {
         if ($attachement = $decompte->getAttachements()[$k]->getValide() == false) {
             $allowed = false;
         }
     }
     if ($allowed) {
         $decompte->setFerme(true);
         $em->persist($decompte);
         $em->flush();
         $delai = $decompte->getAvenant()->getDelai();
         if ($decompte->getNumero() == ceil($delai)) {
             /** @var \Laiso\ArmBundle\Entity\Attachement $dernierAttachement */
             $dernierAttachement = $decompte->getAttachements()[count($decompte->getAttachements()) - 1];
             $restitution = new Attachement();
             $restitution->setType('RESTITUTION');
             $restitution->setDateAttachement($decompte->getDateDecompte());
             $restitution->setNumero($dernierAttachement->getNumero() + 1);
             $restitution->setDecompte($decompte);
             $restitution->setValide(true);
             $retenues = array();
             $montant = 0.0;
             $attachements = $this->getAllAttachement($decompte->getAvenant()->getMarche(), $decompte);
             /** @var \Laiso\ArmBundle\Entity\Attachement $attachement */
             foreach ($attachements as $attachement) {
                 if ($attachement->isRetenue()) {
                     array_push($retenues, $attachement);
                     $montant += $attachement->getMontantHTVA();
                 }
             }
             $restitution->setMontantHTVA($montant);
             /** @var \Laiso\ArmBundle\Entity\Attachement $retenue */
             foreach ($retenues as $retenue) {
                 $retenue->setAttachement($restitution);
                 $em->persist($retenue);
             }
             $em->persist($restitution);
             $em->flush();
             $this->addFlash('success', 'Attachement de restitution de retenues de garanties créé avec succès');
         }
     } else {
         $this->addFlash('error', 'Veuillez valider tous les attachements du décompte n° ' . $decompte->getNumero() . ' avant de le clôturer.');
     }
     $decompte = $decompte->selfUpdate();
     $em->persist($decompte);
     $em->flush();
     return $this->redirect($this->generateUrl('decompte_show', array('decompteId' => $decompteId, 'marcheId' => $marcheId)));
 }
コード例 #2
0
 /**
  * @param $attachementId
  * @param $marcheId
  * @param $decompteId
  * @return \Symfony\Component\HttpFoundation\RedirectResponse
  */
 public function validateAction($attachementId, $marcheId, $decompteId)
 {
     $em = $this->getDoctrine()->getManager();
     $successFlash = "";
     /** @var \Laiso\ArmBundle\Entity\Marche $marche */
     $marche = $em->getRepository('LaisoArmBundle:Marche')->find($marcheId);
     if (!$marche) {
         throw new NotFoundHttpException('Unable to find Marche entity');
     }
     /** @var \Laiso\ArmBundle\Entity\Attachement $attachement */
     $attachement = $em->getRepository('LaisoArmBundle:Attachement')->find($attachementId);
     if (!$attachement) {
         throw new NotFoundHttpException('Unable to find Attachement entity');
     }
     if ($attachement->getRetenue()) {
         $attachement->getRetenue()->setValide(true);
     }
     $attachement->setValide(true);
     $decompte = $attachement->getDecompte();
     $montantInitial = $marche->getMontantInitial();
     $montantDecompteHTVA = $decompte->getMontantsBrutsPrecedentsHTVA() + $decompte->getMontantBrutHTVA();
     $avancement = $montantDecompteHTVA * 100 / $montantInitial;
     $marche->setAvancementFinancier($avancement);
     $marche->setAvancementPhysique($avancement);
     $successFlash = $successFlash . "Marché à jour <br>";
     $attachement = $attachement->selfUpdate();
     // Créer attachement RETENUE de GARANTIE
     if ($attachement->hasRetenue()) {
         $retenue = $this->handleRetenue($attachement);
         $successFlash .= "Attahement de retenue de garantie créé <br>";
     }
     $em->persist($marche);
     $em->persist($attachement);
     $em->flush();
     $decompte = $decompte->selfUpdate();
     $em->persist($decompte);
     $successFlash .= "Decompte à jour <br>";
     $em->flush();
     if ($this->hasAvance($marche)) {
         $avance = $montantInitial * $decompte->getAvenant()->getMarche()->getLotissement()->getCampagne()->getTauxAvance() / 100;
         /** @var \Laiso\ArmBundle\Entity\Avenant $avenant */
         foreach ($marche->getAvenants() as $avenant) {
             /** @var \Laiso\ArmBundle\Entity\Decompte $decompte */
             foreach ($avenant->getDecomptes() as $decompte) {
                 $avance -= $decompte->getMontantAvance();
             }
         }
         if ($avancement >= 30) {
             $montantDecompteHTVA = $decompte->getMontantsBrutsPrecedentsHTVA() + $decompte->getMontantBrutHTVA();
             $montantRemboursement = $montantDecompteHTVA * 0.2 > $avance ? $avance : $montantDecompteHTVA * 0.2;
             if ($montantRemboursement > 0.01) {
                 $attachementRemboursement = new Attachement();
                 $attachementRemboursement->setType('REMBOURSEMENT');
                 $attachementRemboursement->setDecompte($decompte);
                 $attachementRemboursement->setMontantHTVA($montantRemboursement);
                 $attachementRemboursement->setValide(true);
                 $attachementRemboursement->setNumero($attachement->getRetenue() != null ? $attachement->getRetenue()->getNumero() + 1 : $attachement->getNumero() + 1);
                 $attachementRemboursement->setDateAttachement($attachement->getDateAttachement());
                 $decompte->setMontantAvance($montantRemboursement);
                 $successFlash .= "Attachement de remboursement de retenue de garantie créé <br>";
                 $em->persist($decompte);
                 $em->persist($attachementRemboursement);
                 $em->flush();
                 $this->addFlash('success', 'Attachement de remboursement d\'avance de démarrage créé avec succès');
             }
         }
     }
     $this->addFlash('success', $successFlash);
     return $this->redirect($this->generateUrl('attachement_show', array('id' => $attachementId, 'marcheId' => $marcheId, 'decompteId' => $decompteId)));
 }