Skip to content

Commit f4731ba

Browse files
committed
Refonte - suppression classe comptabilite
1 parent 7d3af6d commit f4731ba

5 files changed

Lines changed: 147 additions & 353 deletions

File tree

sources/Afup/Comptabilite/Comptabilite.php

Lines changed: 0 additions & 194 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
use Afup\Site\Forum\Forum;
1313
use Afup\Site\Utils\Base_De_Donnees;
14-
use AppBundle\Compta\Importer\AutoQualifier;
15-
use AppBundle\Compta\Importer\Importer;
1614

1715
class Comptabilite
1816
{
@@ -27,128 +25,6 @@ class Comptabilite
2725
public function __construct(protected Base_De_Donnees $_bdd) {}
2826

2927

30-
/* affiche le journal de :
31-
* courant = Compte courant
32-
* Livret A
33-
* Espece
34-
* Paypal
35-
*
36-
*/
37-
public function obtenirJournalBanque($compte = 1,
38-
$periode_debut = '',
39-
$periode_fin = '',
40-
) {
41-
$periode_debut = $this->periodeDebutFin($debutFin = 'debut', $periode_debut);
42-
$periode_fin = $this->periodeDebutFin($debutFin = 'fin', $periode_fin);
43-
$requete = 'SELECT ';
44-
$requete .= 'compta.date_regl, compta.description, compta.montant, compta.idoperation, ';
45-
$requete .= 'MONTH(compta.date_regl) as mois, compta.id as idtmp, compta.comment,';
46-
$requete .= 'compta_reglement.reglement, ';
47-
$requete .= 'compta_evenement.evenement, compta.idevenement, ';
48-
$requete .= 'compta_categorie.categorie, compta.idcategorie, ';
49-
$requete .= 'compta.attachment_required, compta.attachment_filename, ';
50-
$requete .= 'compta_compte.nom_compte as compta_compte_nom_compte ';
51-
$requete .= 'FROM ';
52-
$requete .= 'compta ';
53-
$requete .= 'LEFT JOIN ';
54-
$requete .= 'compta_categorie on compta_categorie.id=compta.idcategorie ';
55-
$requete .= 'LEFT JOIN ';
56-
$requete .= 'compta_reglement on compta_reglement.id=compta.idmode_regl ';
57-
$requete .= 'LEFT JOIN ';
58-
$requete .= 'compta_evenement on compta_evenement.id=compta.idevenement ';
59-
$requete .= 'LEFT JOIN ';
60-
$requete .= 'compta_compte on compta_compte.id=compta.idcompte ';
61-
$requete .= 'WHERE ';
62-
$requete .= 'compta.date_regl >= \'' . $periode_debut . '\' ';
63-
$requete .= 'AND compta.date_regl <= \'' . $periode_fin . '\' ';
64-
$requete .= 'AND compta.montant != \'0.00\' ';
65-
$requete .= 'AND compta.idmode_regl = compta_reglement.id ';
66-
$requete .= 'AND idcompte = ' . (int) $compte . ' ';
67-
$requete .= 'ORDER BY ';
68-
$requete .= 'compta.date_regl ';
69-
return $this->_bdd->obtenirTous($requete);
70-
}
71-
72-
73-
public function obtenirSousTotalJournalBanque($periode_debut, $periode_fin, $compte = 1)
74-
{
75-
$data = $this->obtenirJournalBanque($compte, $periode_debut, $periode_fin);
76-
77-
for ($i = 1; $i <= 12; $i++) {
78-
$credit[$i] = 0;
79-
$debit[$i] = 0;
80-
$nligne[$i] = 0;
81-
}
82-
foreach ($data as $row) {
83-
if ($row['idoperation'] == "1") {
84-
$debit[$row['mois']] += $row['montant'];
85-
}
86-
if ($row['idoperation'] == "2") {
87-
$credit[$row['mois']] += $row['montant'];
88-
}
89-
if ($row['idoperation'] == "1" || $row['idoperation'] == "2") {
90-
$nligne[$row['mois']]++;
91-
}
92-
}
93-
94-
$dif_old = 0;
95-
for ($i = 1; $i <= 12; $i++) {
96-
$dif = $dif_old + $credit[$i] - $debit[$i];
97-
$tableau[$i] = ["mois" => $i,
98-
"debit" => $debit[$i],
99-
"credit" => $credit[$i],
100-
"dif" => $dif,
101-
"nligne" => $nligne[$i],
102-
];
103-
$dif_old = $dif;
104-
}
105-
106-
return $tableau;
107-
}
108-
109-
public function obtenirTotalJournalBanque($periode_debut, $periode_fin, $compte = 1): array
110-
{
111-
$data = $this->obtenirJournalBanque($compte, $periode_debut, $periode_fin);
112-
/* echo "<pre>";
113-
print_r($data);
114-
echo "</pre>";*/
115-
$credit = 0;
116-
$debit = 0;
117-
118-
foreach ($data as $row) {
119-
if ($row['idoperation'] == "1") {
120-
$debit += $row['montant'];
121-
}
122-
if ($row['idoperation'] == "2") {
123-
$credit += $row['montant'];
124-
}
125-
}
126-
//print_r($credit);
127-
//$dif_old=0;
128-
//for ($i=1;$i<=12;$i++)
129-
//{
130-
// $dif=$dif_old+$credit[$i]-$debit[$i];
131-
$tableau = [
132-
"debit" => $debit,
133-
"credit" => $credit,
134-
"dif" => $credit - $debit,
135-
];
136-
// $dif_old=$dif;
137-
//}
138-
139-
return $tableau;
140-
/* $total=0;
141-
foreach ($data as $id=>$row)
142-
{
143-
144-
if ($idoperation==$row['idoperation'])
145-
$total += $row['montant'];
146-
}
147-
148-
return $total;
149-
*/
150-
}
151-
15228
/* Journal des opération
15329
*
15430
*/
@@ -689,76 +565,6 @@ public function obtenirEvenementParIdForum($id)
689565
return $this->_bdd->obtenirUn($requete);
690566
}
691567

692-
public function extraireComptaDepuisCSVBanque(Importer $importer): bool
693-
{
694-
if (!$importer->validate()) {
695-
return false;
696-
}
697-
698-
$qualifier = new AutoQualifier($this->obtenirListRegles(true));
699-
700-
foreach ($importer->extract() as $operation) {
701-
$numero_operation = $operation->numeroOperation;
702-
// On vérife si l'enregistrement existe déjà
703-
$enregistrement = $this->obtenirParNumeroOperation($numero_operation);
704-
705-
$operationQualified = $qualifier->qualify($operation);
706-
if (!is_array($enregistrement)) {
707-
$this->ajouter(
708-
$operationQualified['idoperation'],
709-
$importer->getCompteId(),
710-
$operationQualified['categorie'],
711-
$operationQualified['date_ecriture'],
712-
'',
713-
'',
714-
$operationQualified['montant'],
715-
$operationQualified['description'],
716-
'',
717-
$operationQualified['idModeReglement'],
718-
$operationQualified['date_ecriture'],
719-
'',
720-
$operationQualified['evenement'],
721-
$operationQualified['numero_operation'] ?? null,
722-
$operationQualified['attachmentRequired'],
723-
$operationQualified['montant_ht_soumis_tva_0'],
724-
$operationQualified['montant_ht_soumis_tva_5_5'],
725-
$operationQualified['montant_ht_soumis_tva_10'],
726-
$operationQualified['montant_ht_soumis_tva_20'],
727-
);
728-
} else {
729-
$modifier = false;
730-
if ($enregistrement['idcategorie'] == AutoQualifier::DEFAULT_CATEGORIE && $operationQualified['categorie'] != AutoQualifier::DEFAULT_CATEGORIE) {
731-
$enregistrement['idcategorie'] = $operationQualified['categorie'];
732-
$modifier = true;
733-
}
734-
if ($enregistrement['idevenement'] == AutoQualifier::DEFAULT_EVENEMENT && $operationQualified['evenement'] != AutoQualifier::DEFAULT_EVENEMENT) {
735-
$enregistrement['idevenement'] = $operationQualified['evenement'];
736-
$modifier = true;
737-
}
738-
if ($modifier) {
739-
$this->modifier($enregistrement['id'],
740-
$enregistrement['idoperation'],
741-
$importer->getCompteId(),
742-
$enregistrement['idcategorie'],
743-
$enregistrement['date_ecriture'],
744-
$enregistrement['nom_frs'],
745-
$enregistrement['tva_intra'],
746-
$enregistrement['montant'],
747-
$enregistrement['description'],
748-
$enregistrement['numero'],
749-
$enregistrement['idmode_regl'],
750-
$enregistrement['date_regl'],
751-
$enregistrement['obs_regl'],
752-
$enregistrement['idevenement'],
753-
$enregistrement['numero_operation'],
754-
$operationQualified['attachmentRequired'],
755-
);
756-
}
757-
}
758-
}
759-
return true;
760-
}
761-
762568
/**
763569
* Search in whole database
764570
* <p>We do multiple queries.</p>
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AppBundle\Compta;
6+
7+
use AppBundle\Accounting\Entity\Repository\RuleRepository;
8+
use AppBundle\Accounting\Model\Repository\TransactionRepository;
9+
use AppBundle\Accounting\Model\Transaction;
10+
use AppBundle\Compta\Importer\AutoQualifier;
11+
use AppBundle\Compta\Importer\Importer;
12+
13+
class CsvExtractor
14+
{
15+
public function __construct(
16+
private readonly RuleRepository $ruleRepository,
17+
private readonly TransactionRepository $transactionRepository,
18+
) {}
19+
20+
public function extract(Importer $importer)
21+
{
22+
if (!$importer->validate()) {
23+
return false;
24+
}
25+
26+
$rules = $this->ruleRepository->findAll();
27+
$qualifier = new AutoQualifier($rules);
28+
29+
foreach ($importer->extract() as $operation) {
30+
$numero_operation = $operation->numeroOperation;
31+
// On vérife si l'enregistrement existe déjà
32+
$enregistrement = $this->transactionRepository->getOneBy(['operationNumber' => $numero_operation]);
33+
34+
$operationQualified = $qualifier->qualify($operation);
35+
if (!$enregistrement instanceof Transaction) {
36+
$transaction = new Transaction();
37+
$transaction->setOperationId($operationQualified['idoperation'])
38+
->setAccountId($importer->getCompteId())
39+
->setCategoryId($operationQualified['categorie'])
40+
->setAccountingDate(new \DateTime($operationQualified['date_ecriture']))
41+
->setVendorName('')
42+
->setTvaIntra('')
43+
->setAmount($operationQualified['montant'])
44+
->setDescription($operationQualified['description'])
45+
->setNumber('')
46+
->setPaymentTypeId($operationQualified['idModeReglement'])
47+
->setAccountingDate(new \DateTime($operationQualified['date_ecriture']))
48+
->setPaymentComment('')
49+
->setEventId($operationQualified['evenement'])
50+
->setOperationNumber($operationQualified['numero_operation'] ?? null)
51+
->setAttachmentRequired($operationQualified['attachmentRequired'])
52+
->setAmountTva0($operationQualified['montant_ht_soumis_tva_0'])
53+
->setAmountTva55($operationQualified['montant_ht_soumis_tva_5_5'])
54+
->setAmountTva10($operationQualified['montant_ht_soumis_tva_10'])
55+
->setAmountTva20($operationQualified['montant_ht_soumis_tva_20']);
56+
$this->transactionRepository->save($transaction);
57+
} else {
58+
$modifier = false;
59+
if ($enregistrement->getCategoryId() == AutoQualifier::DEFAULT_CATEGORIE && $operationQualified['categorie'] != AutoQualifier::DEFAULT_CATEGORIE) {
60+
$enregistrement->setCategoryId($operationQualified['categorie']);
61+
$modifier = true;
62+
}
63+
if ($enregistrement->getEventId() == AutoQualifier::DEFAULT_EVENEMENT && $operationQualified['evenement'] != AutoQualifier::DEFAULT_EVENEMENT) {
64+
$enregistrement->setEventId($operationQualified['evenement']);
65+
$modifier = true;
66+
}
67+
if ($modifier) {
68+
$enregistrement->setAccountId($importer->getCompteId())
69+
->setAttachmentRequired($operationQualified['attachmentRequired']);
70+
$this->transactionRepository->save($enregistrement);
71+
}
72+
}
73+
}
74+
75+
return true;
76+
}
77+
}

sources/AppBundle/Compta/Importer/AutoQualifier.php

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace AppBundle\Compta\Importer;
66

77
use Afup\Site\Utils\Vat;
8+
use AppBundle\Accounting\Entity\Rule;
89
use AppBundle\Model\ComptaModeReglement;
910

1011
class AutoQualifier
@@ -14,6 +15,9 @@ class AutoQualifier
1415
public const DEFAULT_REGLEMENT = 9;
1516
public const DEFAULT_ATTACHMENT = 0;
1617

18+
/**
19+
* @param array<Rule> $rules
20+
*/
1721
public function __construct(protected array $rules) {}
1822

1923
public function qualify(Operation $operation): array
@@ -54,22 +58,22 @@ public function qualify(Operation $operation): array
5458
$operationQualified['montant_ht_soumis_tva_20'] = null;
5559

5660
foreach ($this->rules as $rule) {
57-
if (($operation->isCredit() === (bool) $rule['is_credit'] || is_null($rule['is_credit'])) && str_contains($operationQualified['description'], (string) $rule['condition'])) {
58-
if (null !== $rule['event_id']) {
59-
$operationQualified['evenement'] = $rule['event_id'];
61+
if (($operation->isCredit() === (bool) $rule->isCredit || is_null($rule->isCredit)) && str_contains($operationQualified['description'], (string) $rule->condition)) {
62+
if (null !== $rule->event->id) {
63+
$operationQualified['evenement'] = $rule->event->id;
6064
}
61-
if (null !== $rule['category_id']) {
62-
$operationQualified['categorie'] = $rule['category_id'];
65+
if (null !== $rule->event->id) {
66+
$operationQualified['categorie'] = $rule->category->id;
6367
}
64-
if (null !== $rule['attachment_required']) {
65-
$operationQualified['attachmentRequired'] = $rule['attachment_required'];
68+
if (null !== $rule->attachmentRequired) {
69+
$operationQualified['attachmentRequired'] = $rule->attachmentRequired;
6670
}
67-
if (null !== $rule['mode_regl_id']) {
68-
$operationQualified['idModeReglement'] = $rule['mode_regl_id'];
71+
if (null !== $rule->paymentTypeId) {
72+
$operationQualified['idModeReglement'] = $rule->paymentTypeId;
6973
}
70-
if (null !== $rule['vat']) {
74+
if (null !== $rule->vat) {
7175
$tx = ['0' => 0, '5_5' => 0.055, '10' => 0.1, '20' => 0.2];
72-
$operationQualified['montant_ht_soumis_tva_' . $rule['vat']] = Vat::getRoundedWithoutVatPriceFromPriceWithVat($operationQualified['montant'], $tx[$rule['vat']]);
76+
$operationQualified['montant_ht_soumis_tva_' . $rule->vat] = Vat::getRoundedWithoutVatPriceFromPriceWithVat($operationQualified['montant'], $tx[$rule->vat]);
7377
}
7478
break;
7579
}

sources/AppBundle/Controller/Admin/Accounting/Journal/ImportAction.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace AppBundle\Controller\Admin\Accounting\Journal;
66

7-
use Afup\Site\Comptabilite\Comptabilite;
87
use AppBundle\Accounting\Form\TransactionsImportType;
98
use AppBundle\AuditLog\Audit;
9+
use AppBundle\Compta\CsvExtractor;
1010
use AppBundle\Compta\Importer\Factory;
1111
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1212
use Symfony\Component\DependencyInjection\Attribute\Autowire;
@@ -18,8 +18,8 @@ class ImportAction extends AbstractController
1818
{
1919
public function __construct(
2020
private readonly Audit $audit,
21-
private readonly Comptabilite $compta,
2221
private readonly Factory $importerFactory,
22+
private readonly CsvExtractor $csvExtractor,
2323
#[Autowire('%kernel.project_dir%/../tmp/')]
2424
private readonly string $uploadDir,
2525
) {}
@@ -34,7 +34,7 @@ public function __invoke(Request $request): Response
3434

3535
$uploadedFile->move($this->uploadDir, 'banque.csv');
3636
$importer = $this->importerFactory->create($this->uploadDir . 'banque.csv', $form->get('bankAccount')->getData());
37-
if ($this->compta->extraireComptaDepuisCSVBanque($importer)) {
37+
if ($this->csvExtractor->extract($importer)) {
3838
$this->audit->log('Chargement fichier banque');
3939
$this->addFlash('notice', "Le fichier a été importé");
4040
} else {

0 commit comments

Comments
 (0)