Annulation "fusion branche simplification"

This reverts commit 16daac2e24, reversing
changes made to 46d0c838ae.
This commit is contained in:
Jean-Christophe Engel 2024-10-19 14:26:06 +02:00
parent 201682f4d7
commit f6eef8897e
11 changed files with 619 additions and 98 deletions

View file

@ -15,15 +15,17 @@ 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
'type_facture', // 0 : devis, 1 : facture, 2 : reçu cerfa, 3 : reçu cotis
'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',
@ -42,6 +44,16 @@ class Facture
'accounts' => [],
'label' => 'Facture',
'help' => ''],
CERFA => [
'id' => CERFA,
'accounts' => [],
'label' => 'Reçu fiscal',
'help' => 'Reçu fiscal pour un don (membre ou client)'],
COTIS => [
'id' => COTIS,
'accounts' => [],
'label' => 'Reçu de cotisation',
'help' => 'Reçu pour une cotisation payée par un·e membre'],
];
public function __construct()
@ -76,12 +88,18 @@ class Facture
}
if ($datas[$k] < 2) {
$fac = true;
$cerfa = false;
$recu = false;
}
elseif ($datas[$k] == 2) {
$fac = false;
$cerfa = true;
$recu = false;
}
elseif ($datas[$k] == 3) {
$fac = false;
$cerfa = false;
$recu = true;
}
break;
case 'receveur_membre':
@ -144,9 +162,21 @@ class Facture
throw new UserException("Toutes les désignations/prix sont vides.");
}
}
elseif ($cerfa)
{
}
elseif ($recu)
{
// $fields = ['id', 'intitule', 'date', 'expiration'];
// foreach ($datas[$k]as $)
}
$datas[$k] = json_encode($datas[$k]);
break;
case 'total':
if ($cerfa && $datas[$k] < 1) {
throw new UserException('Le total ne peut être inférieur à 1€ pour les reçus (bug encore non résolu).');
}
if ($fac && !isset($datas['contenu'])) {
throw new UserException("Pas de contenu fourni pour vérifier le total.");
}
@ -200,6 +230,15 @@ class Facture
$type = 'FACT';
$t = 'F';
}
elseif ($type == CERFA) {
$type = 'CERFA';
$t = 'RF';
}
else {
$type = 'COTIS';
$t = 'RC';
}
$year = $date->format('Y');
$y = $date->format('y');
@ -376,9 +415,21 @@ class Facture
// Remplir le contenu
$content = json_decode((string)$row->contenu);
$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));
if ($row->type_facture == COTIS && isset($content->intitule, $content->souscription)) {
$row->contenu = sprintf("Cotisation %s\nSouscrite le %s",
$content->intitule,
Utils::date_fr($content->souscription, 'd/m/Y')
);
}
elseif ($row->type_facture != CERFA) {
$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));
}
else
{
$row->contenu = '';
}
});
return $list;
@ -448,6 +499,31 @@ class Facture
return DB::getInstance()->test('plugin_facturation_factures', 'receveur_membre = ? AND receveur_id = ?', $base, $id);
}
// ** Pour type reçu **
public $recu_fields = ['id', 'label', 'amount', 'date', 'expiry', 'paid', 'paid_amount'];
public function getCotis(int $user_id, int $su_id = null)
{
$where = 'WHERE su.id_user = ?';
if (null !== $su_id)
{
$where .= ' AND su.id = '.$su_id;
}
$sql = 'SELECT su.id, s.label, su.date, MAX(su.expiry_date) as expiry, sf.label as fee, sf.amount as amount, su.paid, SUM(tl.debit) as paid_amount
FROM services_users su
INNER JOIN services s ON s.id = su.id_service
LEFT JOIN services_fees sf ON sf.id = su.id_fee
LEFT JOIN acc_transactions_users tu ON tu.id_service_user = su.id
LEFT JOIN acc_transactions_lines tl ON tl.id_transaction = tu.id_transaction
'.$where.'
GROUP BY su.id
ORDER BY su.date;';
return DB::getInstance()->get($sql, $user_id);
}
public function listMoyensPaiement($assoc = false)
{
$db = DB::getInstance();
@ -462,6 +538,17 @@ class Facture
}
}
/* modif DD -- lecture et retour des textes de CERFA -- */
public function listTextesCerfa($menu = true)
{
$db = DB::getInstance();
$sel = ($menu) ? 'id, menu' : 'id, texte';
$query = 'SELECT '.$sel.' FROM "plugin_facturation_txt_cerfa" WHERE 1 ORDER BY id ;';
return $db->getAssoc($query);
}
public function getMoyenPaiement($code)
{
$db = DB::getInstance();