From 2014dff1a1e51956f5e412c333d81069731a83a6 Mon Sep 17 00:00:00 2001 From: Noizette Date: Sat, 24 Oct 2020 05:40:42 +0200 Subject: [PATCH] =?UTF-8?q?C'est=20crade=20mais=20:=20on=20peut=20modifier?= =?UTF-8?q?=20un=20doc=20en=20re=C3=A7u=20et=20il=20s'affiche?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Facture.php | 76 ++++++++++++++++++++++++---------- lib/GenDon.php | 56 ------------------------- templates/facture.tpl | 4 ++ templates/facture_modifier.tpl | 1 + www/admin/_inc.php | 1 + www/admin/facture.php | 40 +++++++++--------- www/admin/facture_modifier.php | 20 +++++---- www/admin/generation.php | 58 +++++++++++++++++++++++--- 8 files changed, 146 insertions(+), 110 deletions(-) delete mode 100644 lib/GenDon.php diff --git a/lib/Facture.php b/lib/Facture.php index 5f68f78..43fc626 100644 --- a/lib/Facture.php +++ b/lib/Facture.php @@ -12,8 +12,8 @@ class Facture 'numero', 'receveur_membre', 'receveur_id', - 'date_emission', - 'date_echeance', + 'date_emission', // Reçus : date du don + 'date_echeance', // Reçus : date d'édition du reçu 'reglee', 'archivee', 'moyen_paiement', @@ -21,11 +21,19 @@ class Facture 'total' ]; + public $type = [ + 0 => 'devis', + 1 => 'facture', + 2 => 'cerfa', + 3 => 'cotis', + ]; + public function __construct() { } + // Wsh je sais que data c invariable, laissez-moi tranquille jsp comment faire sinon public function _checkFields(&$datas) { foreach($datas as $k=>$data) @@ -46,13 +54,18 @@ class Facture switch($k) { - case 'type_facture': - case 'receveur_membre': - case 'reglee': - case 'archivee': - if ($datas[$k] != 1 && $datas[$k] != 0) - { - throw new UserException("$k est de valeur non-attendue ($data)."); + case 'type_facture': + if (!array_key_exists($datas[$k], $this->type)) + { + throw new UserException("$k est de type non-attendue ($data)."); + } + break; + case 'receveur_membre': + case 'reglee': + case 'archivee': + if ($datas[$k] != 1 && $datas[$k] != 0) + { + throw new UserException("$k est de valeur non-attendue ($data)."); } break; case 'receveur_id': @@ -69,8 +82,8 @@ class Facture if (!strtotime($datas[$k])) { throw new UserException("La date d'émission est non-attendue ($data)."); } - if (isset($datas['date_emission']) && (strtotime($datas[$k]) <= strtotime($datas['date_emission']))) { - throw new UserException("La date d'échéance est antérieure ou égale à la date d'émission ($data)."); + if (isset($datas['date_emission']) && (strtotime($datas[$k]) < strtotime($datas['date_emission']))) { + throw new UserException("La date d'échéance est antérieure à la date d'émission ($data)."); } break; case 'moyen_paiement': @@ -81,7 +94,13 @@ class Facture unset($cats); break; case 'contenu': - if (!is_array($datas[$k]) || empty($datas[$k])) { + $tmp = false; + if ($datas['type_facture'] > 1) { + // $datas[$k] = null; + // break; + $tmp = true; + } + if (!$tmp && !is_array($datas[$k]) || empty($datas[$k])) { throw new UserException("Le contenu du document est vide ($data)."); } $total = 0; @@ -105,6 +124,10 @@ class Facture $datas[$k] = json_encode($datas[$k]); break; case 'total': + if ($datas['type_facture'] > 1) { + // $datas[$k] = null; + break; + } if (!isset($datas['contenu'])) { throw new UserException("Pas de contenu fourni pour vérifier le total."); } @@ -125,7 +148,7 @@ class Facture if(isset($data['numero']) && $db->test('plugin_facturation_factures', 'numero = ? COLLATE NOCASE', $data['numero'])) { - throw new UserException('Une facture avec ce numéro existe déjà, hors le numéro doit être unique.'); + throw new UserException('Un document avec ce numéro existe déjà, hors le numéro doit être unique.'); } $db->insert('plugin_facturation_factures', $data); return $db->lastInsertRowId(); @@ -141,10 +164,13 @@ class Facture if(!$r) { - throw new UserException("Pas de facture retournée avec cet id."); + throw new UserException("Pas de document retournée avec cet id."); } - $r->contenu = json_decode($r->contenu, true); + if ($r->contenu) + { + $r->contenu = json_decode($r->contenu, true); + } return $r; } @@ -157,7 +183,10 @@ class Facture foreach ($r as $e) { - $e->contenu = json_decode((string)$e->contenu, true); + if($e->contenu) + { + $e->contenu = json_decode((string)$e->contenu, true); + } } return $r; @@ -171,7 +200,7 @@ class Facture if(isset($data['numero']) && $db->test('plugin_facturation_factures', 'numero = ? COLLATE NOCASE AND id != ?', $data['numero'], (int)$id)) { - throw new UserException('Une facture avec ce numéro existe déjà, hors le numéro doit être unique.'); + throw new UserException('Un document avec ce numéro existe déjà, hors le numéro doit être unique.'); } return $db->update('plugin_facturation_factures', $data, $db->where('id', (int)$id)); } @@ -180,14 +209,14 @@ class Facture { $client = new Client; - if ($base == 0) + if ($base == 0) // Si c'est un client { if(!$client->get($id)) { throw new UserException("Ce client n'existe pas."); } } - else + else // Si c'est un membre de l'asso { throw new UserException("Woopsie, g pô encore implémenté l'usage des membres de l'asso comme clients"); } @@ -199,7 +228,10 @@ class Facture foreach ($r as $e) { - $e->contenu = json_decode((string)$e->contenu, true); + if ($e->contenu) + { + $e->contenu = json_decode((string)$e->contenu, true); + } } return empty($r)?false:$r; @@ -209,14 +241,14 @@ class Facture { $client = new Client; - if ($base == 0) + if ($base == 0) // Si c'est un client { if(!$client->get($id)) { throw new UserException("Ce client n'existe pas."); } } - else + else // Si c'est un membre de l'asso { throw new UserException("Woopsie, g pô encore implémenté l'usage des membres de l'asso comme clients"); } diff --git a/lib/GenDon.php b/lib/GenDon.php deleted file mode 100644 index 83e8119..0000000 --- a/lib/GenDon.php +++ /dev/null @@ -1,56 +0,0 @@ -_checkData($data); - - /*if (!isset($data['numero']) == !trim($data['numero'])) { - throw new UserException('Le numéro d ordre existe déjà sur un autre reçu.'); - }*/ - - $db = DB::getInstance(); - $db->insert('plugin_recudon', $data); - - return $db->lastInsertRowID(); - } - - public function edit($id, $data) - { - //$this->_checkData($data); - - $db = DB::getInstance(); - return $db->simpleUpdate('plugin_recudon', $data, 'id = ' . (int) $id); - } - - public function get($id) - { - $db = DB::getInstance(); - - return $db->first('SELECT * FROM plugin_recudon WHERE id = ?;', (int) $id); - } - - public function remove($id) - { - $db = DB::getInstance(); - - return $db->simpleExec('DELETE FROM plugin_recudon WHERE id = ?;', (int) $id); - } - - public function listSimple() - { - $db = DB::getInstance(); - return $db->get('SELECT id, nom, prenom, ville, "date", gen_ordre, montant FROM plugin_recudon ORDER BY id;'); - } -} \ No newline at end of file diff --git a/templates/facture.tpl b/templates/facture.tpl index 8981705..23c495f 100644 --- a/templates/facture.tpl +++ b/templates/facture.tpl @@ -12,6 +12,10 @@
+{if $type < 2} +{else} + +{/if}
{include file="admin/_foot.tpl"} diff --git a/templates/facture_modifier.tpl b/templates/facture_modifier.tpl index fb65914..ea4a5a6 100644 --- a/templates/facture_modifier.tpl +++ b/templates/facture_modifier.tpl @@ -17,6 +17,7 @@
diff --git a/www/admin/_inc.php b/www/admin/_inc.php index ecacc4a..3a55878 100644 --- a/www/admin/_inc.php +++ b/www/admin/_inc.php @@ -4,6 +4,7 @@ namespace Garradin; use Garradin\Plugin\Facturation\Facture; use Garradin\Plugin\Facturation\Client; +use Garradin\Plugin\Facturation\GenDon; $client = new Client; $facture = new Facture; diff --git a/www/admin/facture.php b/www/admin/facture.php index 1941fd4..1c4aa59 100644 --- a/www/admin/facture.php +++ b/www/admin/facture.php @@ -20,30 +20,32 @@ if (!$f) throw new UserException("Ce document n'existe pas."); } -$cats = new Compta\Categories; -$tpl->assign('moyens_paiement', $cats->listMoyensPaiement()); -$tpl->assign('moyen_paiement', $cats->getMoyenPaiement($f->moyen_paiement)); +$tpl->assign('type', $f->type_facture); + +// $cats = new Compta\Categories; +// $tpl->assign('moyens_paiement', $cats->listMoyensPaiement()); +// $tpl->assign('moyen_paiement', $cats->getMoyenPaiement($f->moyen_paiement)); try { - if ($f->receveur_membre) - { - $c = $membres->get($f->receveur_id); - foreach(['ville','code_postal','adresse'] as $v) - { - if($c->$v == '') - { - $c->$v = '[A RENSEIGNER DANS LA FICHE MEMBRE]'; - } - } - } - else - { - $c = $client->get($f->receveur_id); - } + // if ($f->receveur_membre) + // { + // $c = $membres->get($f->receveur_id); + // foreach(['ville','code_postal','adresse'] as $v) + // { + // if($c->$v == '') + // { + // $c->$v = '[A RENSEIGNER DANS LA FICHE MEMBRE]'; + // } + // } + // } + // else + // { + // $c = $client->get($f->receveur_id); + // } $tpl->assign('facture', $f); - $tpl->assign('client', $c); + // $tpl->assign('client', $c); } catch(UserException $e) { diff --git a/www/admin/facture_modifier.php b/www/admin/facture_modifier.php index 6fd0ce2..8259923 100644 --- a/www/admin/facture_modifier.php +++ b/www/admin/facture_modifier.php @@ -26,7 +26,7 @@ $tpl->assign('moyen_paiement', f('moyen_paiement') ?: $f->moyen_paiement); if(f('save')) { $form->check('modifier_facture', [ - 'type' => 'required|in:facture,devis', + 'type' => 'required|in:facture,devis,cerfa,cotis', 'numero_facture' => 'required|string', 'date_emission' => 'required|date', 'date_echeance' => 'required|date', @@ -60,13 +60,17 @@ if(f('save')) 'toto' => 0 ]; - if (f('type') == 'facture') + if (f('type') == 'devis') + { + $truc['type_facture'] = 0; + } + elseif (f('type') == 'facture') { $truc['type_facture'] = 1; } - elseif (f('type') == 'devis') + elseif (f('type') == 'cerfa') { - $truc['type_facture'] = 0; + $truc['type_facture'] = 2; } foreach(f('designation') as $k=>$value) @@ -101,8 +105,7 @@ if(f('save')) } } - -$tpl->assign('type', f('type') ?: ($f->type_facture ?'facture':'devis')); +$tpl->assign('type', $facture->type[$f->type_facture]); $tpl->assign('numero_facture', f('numero_facture') ?: $f->numero); $tpl->assign('date_emission', strtotime(f('date_emission')) ?: $f->date_emission); $tpl->assign('date_echeance', strtotime(f('date_echeance')) ?: $f->date_echeance); @@ -111,6 +114,7 @@ $tpl->assign('base_receveur', f('base_receveur') ?: ($f->receveur_membre?'membre $tpl->assign('client_id', f('client') ?: $f->receveur_id); $tpl->assign('membre_id', f('membre') ?: $f->receveur_id); + if (($d = f('designation')) && ($p = f('prix'))) { foreach($d as $k=>$v) @@ -123,7 +127,7 @@ if (($d = f('designation')) && ($p = f('prix'))) $prix[] = $p[$k]; } } -else +else/*if ($f->contenu)*/ { foreach($f->contenu as $k=>$v) { @@ -136,7 +140,9 @@ else } } $tpl->assign('designations', $designations); +// $tpl->assign('designations', [0=>'',1=>'']); $tpl->assign('prix', $prix); +// $tpl->assign('prix', ['','']); $tpl->assign('membres', (array)DB::getInstance()->get('SELECT id, nom FROM membres WHERE id_categorie != -2 NOT IN (SELECT id FROM membres_categories WHERE cacher = 1);')); $tpl->assign('clients', $client->listAll()); diff --git a/www/admin/generation.php b/www/admin/generation.php index 0be4b3c..a09e9af 100644 --- a/www/admin/generation.php +++ b/www/admin/generation.php @@ -1,18 +1,63 @@ requireAccess('compta', Membres::DROIT_ADMIN); +require_once __DIR__ . '/_inc.php'; require_once PLUGIN_ROOT . '/lib/MPDF/vendor/autoload.php'; -if (empty($_GET['id']) || !is_numeric($_GET['id'])) { - throw new UserException("Le numéro du reçu fiscal est manquant."); +qv(['id' => 'required|numeric']); +$id = (int) qg('id'); + +if (!$recu = $facture->get($id)) +{ + throw new UserException("Ce document n'existe pas."); } -$id = (int) $_GET['id']; +$membres = new Membres; -$gendon = new Plugin\RecuDon\GenDon; -$recu = $gendon->get($id); +try +{ + if ($recu->receveur_membre) + { + $c = $membres->get($recu->receveur_id); + foreach(['ville','code_postal','adresse'] as $v) + { + if($c->$v == '') + { + $c->$v = '[A RENSEIGNER DANS LA FICHE MEMBRE]'; + } + } + } + else + { + $c = $client->get($recu->receveur_id); + } +} +catch(UserException $e) +{ + $form->addError("Pas de document correspondant à cet id trouvée."); +} + +// Oui bon faut juste harmoniser les choses, quoi +$recu->nom = $c->nom; +$recu->prenom = $c->nom; +$recu->adresse = $c->adresse; +$recu->codepostal = $c->code_postal; +$recu->ville = $c->ville; +$recu->montant = $recu->total; +$recu->date = $recu->date_emission; +$recu->mode_paiement = $recu->moyen_paiement; +$recu->gen_ordre = $recu->numero; + +// var_dump($recu->adresse); +// die(); + + +// Génération du PDF à partir du cerfa $pdf = new \Mpdf\Mpdf([ 'default_font_size' => 10, @@ -26,7 +71,7 @@ $pdf->useTemplate( ); $pdf->SetTextColor(0); -$pdf->WriteText(180, 18, $recu->gen_ordre); +$pdf->WriteText(180, 18, $recu->numero); $pdf->WriteText(20, 43, $config->get('nom_asso')); $pdf->WriteText(25, 54, utf8_decode($plugin->getConfig('numero_rue_asso'))); $pdf->WriteText(43, 54, utf8_decode($plugin->getConfig('rue_asso'))); @@ -48,6 +93,7 @@ $pdf->WriteText(22, 39, utf8_decode($recu->adresse)); $pdf->WriteText(41, 45, $recu->codepostal); $pdf->WriteText(81, 45, utf8_decode($recu->ville)); $pdf->WriteText(90, 70, utf8_decode("***".$recu->montant."***")); +// numfmt a l'air de patauger avec des valeurs < 1 $pdf->WriteText(62, 80, utf8_decode(numfmt_create('fr_FR', \NumberFormatter::SPELLOUT)->format($recu->montant)) . ' euros'); $date = date_parse($recu->date);