From 79b3a72ccac6f9078b7ad478ac8c6bc8fbb1d9d7 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Wed, 25 Feb 2026 13:40:05 +0100 Subject: [PATCH] =?UTF-8?q?Archivage=20plusieurs=20documents=20et=20interd?= =?UTF-8?q?iction=20modifier=20doc=20archiv=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/_facture_common.php | 8 ++++++-- admin/facture.php | 2 ++ admin/index.php | 12 +++++++++++- lib/Facture.php | 22 ++++++++++++++++++---- plugin.ini | 6 +++--- templates/facture.tpl | 10 ++++++++-- templates/index.tpl | 17 ++++++++++++----- 7 files changed, 60 insertions(+), 17 deletions(-) diff --git a/admin/_facture_common.php b/admin/_facture_common.php index b729f34..8b93c95 100644 --- a/admin/_facture_common.php +++ b/admin/_facture_common.php @@ -69,7 +69,10 @@ if ( !$target ) { throw new UserException("Ce document n'existe pas."); } } - +if ($f->archivee) +{ + throw new UserException("Ce document est archivé, vous n'avez pas le droit de le modifier"); +} // Traitement $data=[]; $form->runIf(f('save') && !$form->hasErrors(), @@ -227,7 +230,6 @@ if (! $form->hasErrors()) } // Affichage - if ($target) { $doc = null; @@ -274,6 +276,7 @@ else $doc['type'] = $f->type_facture; $doc['numero_facture'] = $f->numero; $doc['reglee'] = $f->reglee; + $doc['archivee'] = $f->archivee; $doc['base_receveur'] = $f->receveur_membre?'membre':'client'; $doc['client'] = $f->receveur_id; $doc['membre'] = $f->receveur_id; @@ -294,6 +297,7 @@ else $radio['type'] = f('type')??$doc['type']; } + $tpl->assign('types_details', $facture->types); $tpl->assign('client_id', f('client') ?: -1); diff --git a/admin/facture.php b/admin/facture.php index e375bf3..565b53c 100644 --- a/admin/facture.php +++ b/admin/facture.php @@ -20,10 +20,12 @@ if (!$f) throw new UserException("Ce document n'existe pas."); } +$archive = $f->archivee; $tpl->assign('type', $f->type_facture); $tpl->assign('facture', $f); $tpl->assign('id', $id); $tpl->assign('footer', $plugin->getConfig('footer')?:''); $tpl->assign('siret_asso', $plugin->getConfig('siret_asso')?:''); +$tpl->assign('archive', $archive); $tpl->display(PLUGIN_ROOT . '/templates/facture.tpl'); diff --git a/admin/index.php b/admin/index.php index 0cefefb..29d2d99 100644 --- a/admin/index.php +++ b/admin/index.php @@ -8,8 +8,18 @@ if ($plugin->needUpgrade()) { require_once __DIR__ . '/_inc.php'; $session->requireAccess($session::SECTION_ACCOUNTING, $session::ACCESS_READ); -$archive = isset($_GET['archive']) && $_GET['archive'] == 1; +$form->runIf(f('archiver') && !$form->hasErrors(), + function () use($facture) + { + foreach(f('selected') as $f) { + $facture->archiver($f); + } + + }, 'archiver_factures'); + + +$archive = isset($_GET['archive']) && $_GET['archive'] == 1; $list = $facture->list(! $archive); $list->loadFromQueryString(); $list->setPageSize(50); diff --git a/lib/Facture.php b/lib/Facture.php index 53e7762..761683f 100644 --- a/lib/Facture.php +++ b/lib/Facture.php @@ -343,6 +343,9 @@ class Facture 'receveur_id' => [ ], // Créer une colonne virtuelle + 'select' => [ + 'label' => '', + ], 'type' => [ 'label' => 'Type', 'select' => null, @@ -376,9 +379,6 @@ class Facture 'reglee' => [ 'label' => 'Réglée', ], - 'archivee' => [ - 'label' => 'Archivée', - ], 'moyen_paiement' => [ 'label' => 'Moyen de paiement', 'select' => 'mp.nom', @@ -410,7 +410,6 @@ class Facture // 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); @@ -559,4 +558,19 @@ class Facture { return DB::getInstance()->delete('plugin_facturation_factures', 'id = '. (int)$id); } + + public function archiver($id) + { + $f = $this->get($id); + $f->archivee = 1; + $f->date_emission = $f->date_emission->format('d/m/Y'); + $f->date_echeance = $f->date_echeance->format('d/m/Y'); + $id = $f->id; + unset($f->id); + $datas = (array)$f; + $this->_checkFields($datas); + $datas["id"] = $id; + $db = DB::getInstance(); + return $db->update('plugin_facturation_factures', $datas, $db->where('id', (int)$id)); + } } diff --git a/plugin.ini b/plugin.ini index c75a449..acd3b80 100644 --- a/plugin.ini +++ b/plugin.ini @@ -1,8 +1,8 @@ name="Facturation" description="Permet d'éditer des factures et devis à ses membres ainsi qu'à une base de clients supplémentaire." -author="zou ; adapté par jce" -url="https://git.roflcopter.fr/lesanges/paheko-plugin-facturation" -version="0.16" +author="zou ; adapté par Jean-Christophe Engel" +url="https://gitea.zaclys.com/lesanges/facturation" +version="0.17" menu=true restrict_section="accounting" restrict_level="read" diff --git a/templates/facture.tpl b/templates/facture.tpl index 1464bc4..e169014 100644 --- a/templates/facture.tpl +++ b/templates/facture.tpl @@ -1,10 +1,16 @@ {include file="_head.tpl" title="Document — %s"|args:$plugin.name current="plugin_%s"|args:$plugin.name} -{include file="%s/templates/_menu.tpl"|args:$plugin_root current="index"} +{if $archive} + {include file="%s/templates/_menu.tpl"|args:$plugin_root current="archives"} +{else} + {include file="%s/templates/_menu.tpl"|args:$plugin_root current="index"} +{/if} {form_errors} {if $session->canAccess($session::SECTION_ACCOUNTING, $session::ACCESS_WRITE)} -{linkbutton shape="edit" href="%sfacture_modifier.php?id=%d"|args:$plugin_admin_url,$facture.id label="Modifier ce document"} +{if ! $archive} + {linkbutton shape="edit" href="%sfacture_modifier.php?id=%d"|args:$plugin_admin_url,$facture.id label="Modifier ce document"} +{/if} {linkbutton shape="plus" href="%sfacture_ajouter.php?copy=%d"|args:$plugin_admin_url,$facture.id label="Dupliquer ce document"} {/if} diff --git a/templates/index.tpl b/templates/index.tpl index 292efd0..92d727c 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -7,13 +7,15 @@ {form_errors} +
{if $list->count()} {include file="common/dynamic_list_head.tpl"} {foreach from=$list->iterate() item="facture"} - - {$facture.type} - {$facture.numero} + + {if ! $archive}{input type="checkbox" name="selected[]" value=$facture.id}{/if} + {$facture.type} + {$facture.numero} {if $facture.receveur_membre} {link href="!users/details.php?id=%d"|args:$facture.receveur_id label=$facture.receveur} {else} @@ -24,7 +26,6 @@ {$facture.date_emission|date:'d/m/Y'} {$facture.date_echeance|date:'d/m/Y'} {$facture.reglee} - {$facture.archivee} {$facture.moyen_paiement} {$facture.contenu|escape|nl2br} {$facture.total|escape|money_currency} @@ -44,8 +45,14 @@ {linkbutton href="?export=csv" label="Export CSV" shape="download"} {linkbutton href="?export=ods" label="Export tableur" shape="download"}

+{if !$archive} +

+ {csrf_field key="archiver_factures"} + {button type="submit" name="archiver" label="Archiver les factures sélectionnées" shape="right" class="main"} +

+{/if} {else}

Aucun document, vous pouvez commencer par {link href="facture_ajouter.php" label="créer un nouveau document"}.

{/if} - +
{include file="_foot.tpl"}