/** * 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))); }
/** * @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))); }