Liste dynamique des documents
This commit is contained in:
parent
440b2e3e66
commit
fa35d7479d
3 changed files with 144 additions and 75 deletions
108
lib/Facture.php
108
lib/Facture.php
|
|
@ -3,12 +3,22 @@
|
|||
namespace Garradin\Plugin\Facturation;
|
||||
|
||||
use DateTime;
|
||||
use Garradin\Config;
|
||||
use Garradin\DB;
|
||||
use Garradin\DynamicList;
|
||||
use Garradin\UserException;
|
||||
use Garradin\Utils;
|
||||
use Garradin\Services\Services_User;
|
||||
|
||||
class Facture
|
||||
{
|
||||
const TYPES_NAMES = [
|
||||
DEVIS => 'Devis',
|
||||
FACT => 'Facture',
|
||||
CERFA => 'Reçu fiscal',
|
||||
COTIS => 'Reçu de cotisation',
|
||||
];
|
||||
|
||||
private $keys = [
|
||||
'type_facture', // 0 : devis, 1 : facture, 2 : reçu cerfa, 3 : reçu cotis
|
||||
'numero',
|
||||
|
|
@ -235,6 +245,103 @@ class Facture
|
|||
return $r;
|
||||
}
|
||||
|
||||
public function list(): DynamicList
|
||||
{
|
||||
$id_field = Config::getInstance()->champ_identite;
|
||||
|
||||
$columns = [
|
||||
// Sélectionner cette colonne, mais ne pas la mettre dans la liste des colonnes
|
||||
// (absence de label)
|
||||
'id' => [
|
||||
'select' => 'f.id',
|
||||
],
|
||||
'type_facture' => [
|
||||
],
|
||||
'receveur_membre' => [
|
||||
],
|
||||
'receveur_id' => [
|
||||
],
|
||||
// Créer une colonne virtuelle
|
||||
'type' => [
|
||||
'label' => 'Type',
|
||||
'select' => null,
|
||||
],
|
||||
'numero' => [
|
||||
'label' => 'Numéro',
|
||||
'select' => 'f.numero',
|
||||
],
|
||||
'receveur' => [
|
||||
'label' => 'Receveur',
|
||||
'select' => sprintf('CASE WHEN receveur_membre THEN u.%s ELSE c.nom END', $id_field),
|
||||
],
|
||||
'receveur_adresse' => [
|
||||
'label' => 'Son adresse',
|
||||
'select' => 'CASE WHEN receveur_membre THEN u.adresse ELSE c.adresse END',
|
||||
],
|
||||
'receveur_ville' => [
|
||||
'label' => 'Sa ville',
|
||||
'select' => 'CASE WHEN receveur_membre THEN u.ville ELSE c.ville END',
|
||||
],
|
||||
'date_emission' => [
|
||||
'label' => 'Émission',
|
||||
],
|
||||
'date_echeance' => [
|
||||
'label' => 'Échéance',
|
||||
],
|
||||
'reglee' => [
|
||||
'label' => 'Réglée',
|
||||
],
|
||||
'archivee' => [
|
||||
'label' => 'Archivée',
|
||||
],
|
||||
'moyen_paiement' => [
|
||||
'label' => 'Moyen de paiement',
|
||||
'select' => 'mp.nom',
|
||||
],
|
||||
'contenu' => [
|
||||
'label' => 'Contenu',
|
||||
],
|
||||
'total' => [
|
||||
'label' => 'Total',
|
||||
],
|
||||
];
|
||||
|
||||
$tables = 'plugin_facturation_factures AS f
|
||||
INNER JOIN plugin_facturation_paiement AS mp ON mp.code = f.moyen_paiement
|
||||
LEFT JOIN membres AS u ON f.receveur_membre = 1 AND u.id = f.receveur_id
|
||||
LEFT JOIN plugin_facturation_clients AS c ON f.receveur_membre = 0 AND c.id = f.receveur_id';
|
||||
|
||||
$list = new DynamicList($columns, $tables);
|
||||
$list->orderBy('numero', true);
|
||||
|
||||
$currency = Config::getInstance()->monnaie;
|
||||
|
||||
$list->setModifier(function ($row) use ($currency) {
|
||||
// Remplir la colonne virtuelle
|
||||
$row->type = self::TYPES_NAMES[$row->type_facture] ?? null;
|
||||
$row->reglee = $row->reglee ? 'Réglée' : 'Non';
|
||||
$row->archivee = $row->archivee ? 'Archivée' : 'Non';
|
||||
|
||||
// Remplir le contenu
|
||||
$content = json_decode((string)$row->contenu);
|
||||
|
||||
if ($row->type_facture == FACT && isset($content->intitule, $content->souscription)) {
|
||||
$row->contenu = sprintf("Cotisation %s\nSouscrite le %s",
|
||||
$content->intitule,
|
||||
Utils::date_fr($content->souscription, 'd/m/Y')
|
||||
);
|
||||
}
|
||||
else {
|
||||
$row->contenu = implode("\n", array_map(function ($row) use ($currency) {
|
||||
return sprintf('%s : %s %s', $row->designation, Utils::money_format($row->prix), $currency);
|
||||
}, (array)$content));
|
||||
}
|
||||
});
|
||||
|
||||
$list->setPageSize(1000);
|
||||
return $list;
|
||||
}
|
||||
|
||||
public function edit($id, $data = [])
|
||||
{
|
||||
$db = DB::getInstance();
|
||||
|
|
@ -348,5 +455,4 @@ class Facture
|
|||
{
|
||||
return DB::getInstance()->delete('plugin_facturation_factures', 'id = '. (int)$id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue