/** * @Security("has_role('ROLE_TRESO')") */ public function modifierAction($id, $etude_id) { $em = $this->getDoctrine()->getManager(); $tauxTVA = 20.0; $compteEtude = 705000; $compteFrais = 708500; $compteAcompte = 419100; if (!($facture = $em->getRepository('MgateTresoBundle:Facture')->find($id))) { $facture = new Facture(); $now = new \DateTime('now'); $facture->setDateEmission($now); if ($etude = $em->getRepository('MgateSuiviBundle:Etude')->find($etude_id)) { $formater = $this->container->get('Mgate.conversionlettre'); $facture->setEtude($etude); $facture->setBeneficiaire($etude->getProspect()); if (!count($etude->getFactures()) && $etude->getAcompte()) { $facture->setType(Facture::$TYPE_VENTE_ACCOMPTE); $facture->setObjet('Facture d\'acompte sur l\'étude ' . $etude->getReference() . ', correspondant au règlement de ' . $formater->moneyFormat($etude->getPourcentageAcompte() * 100) . ' % de l’étude.'); $detail = new FactureDetail(); $detail->setCompte($em->getRepository('MgateTresoBundle:Compte')->findOneBy(array('numero' => $compteAcompte))); $detail->setFacture($facture); $facture->addDetail($detail); $detail->setDescription('Acompte de ' . $formater->moneyFormat($etude->getPourcentageAcompte() * 100) . ' % sur l\'étude ' . $etude->getReference()); $detail->setMontantHT($etude->getPourcentageAcompte() * $etude->getMontantHT()); $detail->setTauxTVA($tauxTVA); } else { $facture->setType(Facture::$TYPE_VENTE_SOLDE); if ($etude->getAcompte() && $etude->getFa()) { $montantADeduire = new FactureDetail(); $montantADeduire->setDescription('Facture d\'acompte sur l\'étude ' . $etude->getReference() . ', correspondant au règlement de ' . $formater->moneyFormat($etude->getPourcentageAcompte() * 100) . ' % de l’étude.')->setFacture($facture); $facture->setMontantADeduire($montantADeduire); } $totalTTC = 0; foreach ($etude->getPhases() as $phase) { $detail = new FactureDetail(); $detail->setCompte($em->getRepository('MgateTresoBundle:Compte')->findOneBy(array('numero' => $compteEtude))); $detail->setFacture($facture); $facture->addDetail($detail); $detail->setDescription('Phase ' . ($phase->getPosition() + 1) . ' : ' . $phase->getTitre() . ' : ' . $phase->getNbrJEH() . ' JEH * ' . $formater->moneyFormat($phase->getPrixJEH()) . ' €'); $detail->setMontantHT($phase->getPrixJEH() * $phase->getNbrJEH()); $detail->setTauxTVA($tauxTVA); $totalTTC += $phase->getPrixJEH() * $phase->getNbrJEH(); } $detail = new FactureDetail(); $detail->setCompte($em->getRepository('MgateTresoBundle:Compte')->findOneBy(array('numero' => $compteFrais)))->setFacture($facture)->setDescription('Frais de dossier')->setMontantHT($etude->getFraisDossier()); $facture->addDetail($detail); $detail->setTauxTVA($tauxTVA); $totalTTC += $etude->getFraisDossier(); $totalTTC *= 1 + $tauxTVA / 100; $facture->setObjet('Facture de Solde sur l\'étude ' . $etude->getReference() . '.'); } } } $form = $this->createForm(new FactureType(), $facture); if ($this->get('request')->getMethod() == 'POST') { $form->handleRequest($this->get('request')); if ($form->isValid()) { foreach ($facture->getDetails() as $factured) { $factured->setFacture($facture); } if ($facture->getType() <= Facture::$TYPE_VENTE_ACCOMPTE || $facture->getMontantADeduire() === null || $facture->getMontantADeduire()->getMontantHT() == 0) { $facture->setMontantADeduire(null); } $em->persist($facture); $em->flush(); return $this->redirect($this->generateUrl('MgateTreso_Facture_voir', array('id' => $facture->getId()))); } } return $this->render('MgateTresoBundle:Facture:modifier.html.twig', array('form' => $form->createView())); }
public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('exercice', 'integer', array('label' => 'Exercice Comptable', 'required' => true))->add('numero', 'integer', array('label' => 'Numéro de la Facture', 'required' => true))->add('type', 'choice', array('choices' => Facture::getTypeChoices(), 'required' => true))->add('objet', 'textarea', array('label' => 'Objet de la Facture', 'required' => true, 'attr' => array('cols' => '100%', 'rows' => 5)))->add('details', 'collection', array('type' => new FactureDetailType(), 'allow_add' => true, 'allow_delete' => true, 'prototype' => true, 'by_reference' => false))->add('beneficiaire', 'genemu_jqueryselect2_entity', array('class' => 'Mgate\\PersonneBundle\\Entity\\Prospect', 'property' => 'nom', 'required' => true, 'label' => 'Facture émise pour/par'))->add('montantADeduire', new FactureDetailType(), array('label' => 'Montant à déduire', 'required' => true))->add('dateEmission', 'genemu_jquerydate', array('label' => 'Date d\'émission', 'required' => true, 'widget' => 'single_text'))->add('dateVersement', 'genemu_jquerydate', array('label' => 'Date de versement', 'required' => false, 'widget' => 'single_text')); }