C'est crade mais : on peut modifier un doc en reçu et il s'affiche

This commit is contained in:
Noizette 2020-10-24 05:40:42 +02:00
parent 0ab5fa5ad0
commit 2014dff1a1
8 changed files with 146 additions and 110 deletions

View File

@ -12,8 +12,8 @@ class Facture
'numero', 'numero',
'receveur_membre', 'receveur_membre',
'receveur_id', 'receveur_id',
'date_emission', 'date_emission', // Reçus : date du don
'date_echeance', 'date_echeance', // Reçus : date d'édition du reçu
'reglee', 'reglee',
'archivee', 'archivee',
'moyen_paiement', 'moyen_paiement',
@ -21,11 +21,19 @@ class Facture
'total' 'total'
]; ];
public $type = [
0 => 'devis',
1 => 'facture',
2 => 'cerfa',
3 => 'cotis',
];
public function __construct() public function __construct()
{ {
} }
// Wsh je sais que data c invariable, laissez-moi tranquille jsp comment faire sinon
public function _checkFields(&$datas) public function _checkFields(&$datas)
{ {
foreach($datas as $k=>$data) foreach($datas as $k=>$data)
@ -47,6 +55,11 @@ class Facture
switch($k) switch($k)
{ {
case 'type_facture': 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 'receveur_membre':
case 'reglee': case 'reglee':
case 'archivee': case 'archivee':
@ -69,8 +82,8 @@ class Facture
if (!strtotime($datas[$k])) { if (!strtotime($datas[$k])) {
throw new UserException("La date d'émission est non-attendue ($data)."); throw new UserException("La date d'émission est non-attendue ($data).");
} }
if (isset($datas['date_emission']) && (strtotime($datas[$k]) <= strtotime($datas['date_emission']))) { 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)."); throw new UserException("La date d'échéance est antérieure à la date d'émission ($data).");
} }
break; break;
case 'moyen_paiement': case 'moyen_paiement':
@ -81,7 +94,13 @@ class Facture
unset($cats); unset($cats);
break; break;
case 'contenu': 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)."); throw new UserException("Le contenu du document est vide ($data).");
} }
$total = 0; $total = 0;
@ -105,6 +124,10 @@ class Facture
$datas[$k] = json_encode($datas[$k]); $datas[$k] = json_encode($datas[$k]);
break; break;
case 'total': case 'total':
if ($datas['type_facture'] > 1) {
// $datas[$k] = null;
break;
}
if (!isset($datas['contenu'])) { if (!isset($datas['contenu'])) {
throw new UserException("Pas de contenu fourni pour vérifier le total."); 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'])) 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); $db->insert('plugin_facturation_factures', $data);
return $db->lastInsertRowId(); return $db->lastInsertRowId();
@ -141,10 +164,13 @@ class Facture
if(!$r) if(!$r)
{ {
throw new UserException("Pas de facture retournée avec cet id."); throw new UserException("Pas de document retournée avec cet id.");
} }
if ($r->contenu)
{
$r->contenu = json_decode($r->contenu, true); $r->contenu = json_decode($r->contenu, true);
}
return $r; return $r;
} }
@ -156,9 +182,12 @@ class Facture
FROM plugin_facturation_factures'); FROM plugin_facturation_factures');
foreach ($r as $e) foreach ($r as $e)
{
if($e->contenu)
{ {
$e->contenu = json_decode((string)$e->contenu, true); $e->contenu = json_decode((string)$e->contenu, true);
} }
}
return $r; 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)) 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)); return $db->update('plugin_facturation_factures', $data, $db->where('id', (int)$id));
} }
@ -180,14 +209,14 @@ class Facture
{ {
$client = new Client; $client = new Client;
if ($base == 0) if ($base == 0) // Si c'est un client
{ {
if(!$client->get($id)) if(!$client->get($id))
{ {
throw new UserException("Ce client n'existe pas."); 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"); throw new UserException("Woopsie, g pô encore implémenté l'usage des membres de l'asso comme clients");
} }
@ -198,9 +227,12 @@ class Facture
WHERE receveur_membre = ? AND receveur_id = ?', (int)$base, (int)$id); WHERE receveur_membre = ? AND receveur_id = ?', (int)$base, (int)$id);
foreach ($r as $e) foreach ($r as $e)
{
if ($e->contenu)
{ {
$e->contenu = json_decode((string)$e->contenu, true); $e->contenu = json_decode((string)$e->contenu, true);
} }
}
return empty($r)?false:$r; return empty($r)?false:$r;
} }
@ -209,14 +241,14 @@ class Facture
{ {
$client = new Client; $client = new Client;
if ($base == 0) if ($base == 0) // Si c'est un client
{ {
if(!$client->get($id)) if(!$client->get($id))
{ {
throw new UserException("Ce client n'existe pas."); 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"); throw new UserException("Woopsie, g pô encore implémenté l'usage des membres de l'asso comme clients");
} }

View File

@ -1,56 +0,0 @@
<?php
namespace Garradin\Plugin\RecuDon;
use Garradin\DB;
use Garradin\UserException;
class GenDon
{
public function __construct()
{
}
public function add($data)
{
//$this->_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;');
}
}

View File

@ -12,6 +12,10 @@
<button type="button" class="btn btn-primary">Télécharger ce document</button></a> <button type="button" class="btn btn-primary">Télécharger ce document</button></a>
<div> <div>
{if $type < 2}
<embed src="facture_pdf.php?id={$id}" type="application/pdf" width="100%" height="800px;" style="max-width: 900px;"> <embed src="facture_pdf.php?id={$id}" type="application/pdf" width="100%" height="800px;" style="max-width: 900px;">
{else}
<embed src="generation.php?id={$id}" type="application/pdf" width="100%" height="800px;" style="max-width: 900px;">
{/if}
</div> </div>
{include file="admin/_foot.tpl"} {include file="admin/_foot.tpl"}

View File

@ -17,6 +17,7 @@
<ul class="actions"> <ul class="actions">
<li><input type="radio" name="type" value="facture" {form_field name=type checked=facture default=facture} id="f_type_facture"{if $type !== "devis"} checked="checked"{/if}/><label for="f_type_facture">Facture</label></li> <li><input type="radio" name="type" value="facture" {form_field name=type checked=facture default=facture} id="f_type_facture"{if $type !== "devis"} checked="checked"{/if}/><label for="f_type_facture">Facture</label></li>
<li><input type="radio" name="type" value="devis" {form_field name=type checked=devis} id="f_type_devis" {if $type == "devis"} checked="checked"{/if}/><label for="f_type_devis">Devis</label></li> <li><input type="radio" name="type" value="devis" {form_field name=type checked=devis} id="f_type_devis" {if $type == "devis"} checked="checked"{/if}/><label for="f_type_devis">Devis</label></li>
<li><input type="radio" name="type" value="cerfa" {form_field name=type checked=cerfa} id="f_type_cerfa" {if $type == "cerfa"} checked="checked"{/if}/><label for="f_type_cerfa">Reçu fiscal</label></li>
</ul> </ul>
<fieldset> <fieldset>

View File

@ -4,6 +4,7 @@ namespace Garradin;
use Garradin\Plugin\Facturation\Facture; use Garradin\Plugin\Facturation\Facture;
use Garradin\Plugin\Facturation\Client; use Garradin\Plugin\Facturation\Client;
use Garradin\Plugin\Facturation\GenDon;
$client = new Client; $client = new Client;
$facture = new Facture; $facture = new Facture;

View File

@ -20,30 +20,32 @@ if (!$f)
throw new UserException("Ce document n'existe pas."); throw new UserException("Ce document n'existe pas.");
} }
$cats = new Compta\Categories; $tpl->assign('type', $f->type_facture);
$tpl->assign('moyens_paiement', $cats->listMoyensPaiement());
$tpl->assign('moyen_paiement', $cats->getMoyenPaiement($f->moyen_paiement)); // $cats = new Compta\Categories;
// $tpl->assign('moyens_paiement', $cats->listMoyensPaiement());
// $tpl->assign('moyen_paiement', $cats->getMoyenPaiement($f->moyen_paiement));
try try
{ {
if ($f->receveur_membre) // if ($f->receveur_membre)
{ // {
$c = $membres->get($f->receveur_id); // $c = $membres->get($f->receveur_id);
foreach(['ville','code_postal','adresse'] as $v) // foreach(['ville','code_postal','adresse'] as $v)
{ // {
if($c->$v == '') // if($c->$v == '')
{ // {
$c->$v = '[A RENSEIGNER DANS LA FICHE MEMBRE]'; // $c->$v = '[A RENSEIGNER DANS LA FICHE MEMBRE]';
} // }
} // }
} // }
else // else
{ // {
$c = $client->get($f->receveur_id); // $c = $client->get($f->receveur_id);
} // }
$tpl->assign('facture', $f); $tpl->assign('facture', $f);
$tpl->assign('client', $c); // $tpl->assign('client', $c);
} }
catch(UserException $e) catch(UserException $e)
{ {

View File

@ -26,7 +26,7 @@ $tpl->assign('moyen_paiement', f('moyen_paiement') ?: $f->moyen_paiement);
if(f('save')) if(f('save'))
{ {
$form->check('modifier_facture', [ $form->check('modifier_facture', [
'type' => 'required|in:facture,devis', 'type' => 'required|in:facture,devis,cerfa,cotis',
'numero_facture' => 'required|string', 'numero_facture' => 'required|string',
'date_emission' => 'required|date', 'date_emission' => 'required|date',
'date_echeance' => 'required|date', 'date_echeance' => 'required|date',
@ -60,13 +60,17 @@ if(f('save'))
'toto' => 0 'toto' => 0
]; ];
if (f('type') == 'facture') if (f('type') == 'devis')
{
$truc['type_facture'] = 0;
}
elseif (f('type') == 'facture')
{ {
$truc['type_facture'] = 1; $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) foreach(f('designation') as $k=>$value)
@ -101,8 +105,7 @@ if(f('save'))
} }
} }
$tpl->assign('type', $facture->type[$f->type_facture]);
$tpl->assign('type', f('type') ?: ($f->type_facture ?'facture':'devis'));
$tpl->assign('numero_facture', f('numero_facture') ?: $f->numero); $tpl->assign('numero_facture', f('numero_facture') ?: $f->numero);
$tpl->assign('date_emission', strtotime(f('date_emission')) ?: $f->date_emission); $tpl->assign('date_emission', strtotime(f('date_emission')) ?: $f->date_emission);
$tpl->assign('date_echeance', strtotime(f('date_echeance')) ?: $f->date_echeance); $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('client_id', f('client') ?: $f->receveur_id);
$tpl->assign('membre_id', f('membre') ?: $f->receveur_id); $tpl->assign('membre_id', f('membre') ?: $f->receveur_id);
if (($d = f('designation')) && ($p = f('prix'))) if (($d = f('designation')) && ($p = f('prix')))
{ {
foreach($d as $k=>$v) foreach($d as $k=>$v)
@ -123,7 +127,7 @@ if (($d = f('designation')) && ($p = f('prix')))
$prix[] = $p[$k]; $prix[] = $p[$k];
} }
} }
else else/*if ($f->contenu)*/
{ {
foreach($f->contenu as $k=>$v) foreach($f->contenu as $k=>$v)
{ {
@ -136,7 +140,9 @@ else
} }
} }
$tpl->assign('designations', $designations); $tpl->assign('designations', $designations);
// $tpl->assign('designations', [0=>'',1=>'']);
$tpl->assign('prix', $prix); $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('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()); $tpl->assign('clients', $client->listAll());

View File

@ -1,18 +1,63 @@
<?php <?php
namespace Garradin; namespace Garradin;
use Garradin\Plugin\Facturation\GenDon;
$session->requireAccess('compta', Membres::DROIT_ADMIN); $session->requireAccess('compta', Membres::DROIT_ADMIN);
require_once __DIR__ . '/_inc.php';
require_once PLUGIN_ROOT . '/lib/MPDF/vendor/autoload.php'; require_once PLUGIN_ROOT . '/lib/MPDF/vendor/autoload.php';
if (empty($_GET['id']) || !is_numeric($_GET['id'])) { qv(['id' => 'required|numeric']);
throw new UserException("Le numéro du reçu fiscal est manquant."); $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; try
$recu = $gendon->get($id); {
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([ $pdf = new \Mpdf\Mpdf([
'default_font_size' => 10, 'default_font_size' => 10,
@ -26,7 +71,7 @@ $pdf->useTemplate(
); );
$pdf->SetTextColor(0); $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(20, 43, $config->get('nom_asso'));
$pdf->WriteText(25, 54, utf8_decode($plugin->getConfig('numero_rue_asso'))); $pdf->WriteText(25, 54, utf8_decode($plugin->getConfig('numero_rue_asso')));
$pdf->WriteText(43, 54, utf8_decode($plugin->getConfig('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(41, 45, $recu->codepostal);
$pdf->WriteText(81, 45, utf8_decode($recu->ville)); $pdf->WriteText(81, 45, utf8_decode($recu->ville));
$pdf->WriteText(90, 70, utf8_decode("***".$recu->montant."***")); $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'); $pdf->WriteText(62, 80, utf8_decode(numfmt_create('fr_FR', \NumberFormatter::SPELLOUT)->format($recu->montant)) . ' euros');
$date = date_parse($recu->date); $date = date_parse($recu->date);