src/Form/Mobile/BankMouvementType.php line 18

  1. <?php
  2. namespace App\Form\Mobile;
  3. use App\Entity\AdminFinance\Bank\BankCompte;
  4. use App\Entity\AdminFinance\Bank\BankMouvement;
  5. use App\Entity\AdminFinance\Bank\BankMouvementCategorie;
  6. use App\Repository\AdminFinance\Bank\BankCompteRepository;
  7. use App\Repository\AdminFinance\Bank\BankMouvementCategorieRepository;
  8. use Symfony\Component\Form\AbstractType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\OptionsResolver\OptionsResolver;
  11. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  12. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  15. class BankMouvementType extends AbstractType
  16. {
  17.     
  18.     public function __construct(
  19.         private BankCompteRepository $compteRepository
  20.         private BankMouvementCategorieRepository $categorieRepository
  21.     )
  22.     {
  23.     }
  24.     
  25.     public function buildForm(FormBuilderInterface $builder, array $options)
  26.     {
  27.         $comptes $this->fullListeComptes();
  28.         $categories $this->fullListeCategories();
  29.         $builder
  30.             ->add('compteDebit'ChoiceType::class, [ 
  31.                 'label'=> 'Compte Débit''choices'=> $comptes,
  32.                 'choice_label' => function(BankCompte $compte$key$value) {
  33.                     return $compte->getNom();    
  34.                 }
  35.                 ])
  36.             ->add('compteCredit'ChoiceType::class, [ 
  37.                 'label'=> 'Compte Crédit''choices'=> $comptes
  38.                 'choice_label' => function(BankCompte $compte$key$value) {
  39.                     return $compte->getNom();    
  40.                 }
  41.                 ])
  42.             ->add('categorie'ChoiceType::class, [ 
  43.                 'choices'=> $categories
  44.                 'choice_label' => function($categorie$key$value) {
  45.                     if($categorie instanceof BankMouvementCategorie) {
  46.                         return $categorie->getLibelle();
  47.                     }
  48.                 }
  49.                 ])
  50.             ->add('description'TextType::class)
  51.             ->add('montant'NumberType::class, [
  52.                 'html5' => true,
  53.                 'scale' => 2,
  54.                 'attr' => ['min' => 0'step' => 'any']
  55.             ])
  56.             ->add('save'SubmitType::class)
  57.         ;
  58.     }
  59.     public function configureOptions(OptionsResolver $resolver)
  60.     {
  61.         $resolver->setDefaults([
  62.             'data_class' => BankMouvement::class,
  63.         ]);
  64.     }
  65.     private function fullListeComptes() {
  66.         $comptes = [ '' => new BankCompte()];
  67.         foreach ($this->compteRepository->findAll() as $key => $value) {
  68.             $comptes[] = $value;
  69.         }
  70.         return $comptes;
  71.     }
  72.     
  73.     private function fullListeCategories() {
  74.         $depenses $revenus = [];
  75.         
  76.         $listes $this->categorieRepository->findBy([
  77.                 'parent' => null'selection' => true
  78.             ], [
  79.                 'libelle' => 'ASC'
  80.             ]
  81.         );
  82.         
  83.         foreach ($listes as $cat) {
  84.             if($cat->getParent() === null) {
  85.                 if($cat->getType() == BankMouvementCategorie::TYPE_DEBIT) {
  86.                     $sousListes $this->categorieRepository->findBy(['parent' => $cat->getId()], ['libelle' => 'ASC']);
  87.                     foreach($sousListes as $ss) {
  88.                         $depenses[$cat->getLibelle()][] = $ss;
  89.                     }
  90.                 } elseif ($cat->getType() == BankMouvementCategorie::TYPE_CREDIT) {
  91.                     $sousListes $this->categorieRepository->findBy(['parent' => $cat->getId()], ['libelle' => 'ASC']);
  92.                     foreach($sousListes as $ss) {
  93.                         $revenus[$cat->getLibelle()][] = $ss;
  94.                     }
  95.                 }
  96.             }
  97.         }
  98.         
  99.         return ['' => '''Dépenses' => $depenses'Revenus' => $revenus];
  100.     }
  101. }