Browse Source

Composition n'est pas obligatoire (pour l'instant). On évite une requete SQL en erreur si pas là.

On ajoute une autre fonction de calcul de numéro de facture (un exemple parmi d'autre).
master
marcimat@rezo.net 9 years ago
parent
commit
e074b073a0
  1. 67
      inc/facture_reference.php
  2. 2
      lang/facture_fr.php

67
inc/facture_reference.php

@ -15,8 +15,11 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Calcul un numéro de référence d'une facture
*
* Ici on ajoute 1 a la précédente facture si on en trouve une,
* Ici on ajoute +1 au dernier numéro de la précédente facture si on en trouve une,
* sinon 'F-YYYY-1', soit F-2013-1
*
* @note
* Cette fonction est à surcharger selon ses choix de nommages.
*
* @param array $valeurs
* Valeurs de chargement du formulaire CVT.
@ -30,18 +33,26 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* Numéro de référence de la nouvelle facture
**/
function inc_facture_reference_dist($valeurs) {
// composition n'est pas obligatoire ?
// une composition peut indiquer un type de facture (devis, proforma, avoir)
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('spip_factures');
$compo = isset($desc['field']['composition']) and $desc['field']['composition'];
$where = array();
if ($compo) {
$where[] = 'composition = '. sql_quote('');
}
// par défaut, on prend la dernière, et on ajoute 1 !
$precedent = sql_getfetsel('num_facture', 'spip_factures',
// facture… de type facture
'composition = '. sql_quote(''),
'', 'date_facture DESC', '0,1');
$precedent = sql_getfetsel('num_facture', 'spip_factures', $where, '', 'date_facture DESC', '0,1');
if ($precedent) {
if (preg_match('/([0-9]+)$/', $precedent, $matches)) {
$num = $matches[1] + 1;
// des 0 avant, tel que 055 -> 056 ou 099 -> 100
while (strlen($matches[1]) > strlen($num)) {
$num = '0' . $num;
}
str_pad($num, $matches[1], "0", STR_PAD_LEFT);
return substr($precedent, 0, -strlen($matches[1])) . $num;
} else {
// on sait pas faire
@ -51,3 +62,43 @@ function inc_facture_reference_dist($valeurs) {
return 'F-' . date('Y', time()) . '-1';
}
/**
* Calcul un numéro de référence d'une facture, format F-YY-NJOUR-NN
* tel que F-14-045-01
*
* On calcule la facture du jour, si une existe déjà on incrémente le NN
*
* @exemple
* ```
* // surcharge du calcul par défaut d'une référence de facture
* function inc_facture_reference($valeurs) {
* include_spip('inc/facture_reference');
* return inc_facture_reference_jours($valeurs);
* }
* ```
*
* @param array $valeurs
* Valeurs de chargement du formulaire CVT.
* Contient notamment les champs :
*
* - date_facture : date de la facture
* - id_organisation : organisation facturée
* - id_organisation_emettrice : organisation qui facture
*
* @return string
* Numéro de référence de la nouvelle facture
**/
function inc_facture_reference_jours($valeurs) {
$time = strtotime($valeurs['date_facture']);
$NN = 1;
$annee = date('y', $time);
$jour = str_pad(date('z', $time), 3, "0", STR_PAD_LEFT);
do {
$num_facture = "F-$annee-$jour-" . str_pad($NN, 2, "0", STR_PAD_LEFT);
$NN++;
} while (sql_getfetsel('num_facture', 'spip_factures', 'num_facture=' . sql_quote($num_facture)));
return $num_facture;
}

2
lang/facture_fr.php

@ -18,7 +18,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'explication_id_organisation_emettrice' => 'Sélectionnez l\'organisation émettrice de la facture ou du devis',
'explication_libelle_facture' => 'Saisissez un libellé explicite pour la facture ou le devis',
'explication_montant' => 'Indiquez le montant total de la facture ou corrigez celui calculé par SPIP à partir des lignes de factures',
'explication_nota_bene' => 'Indiquez un nota-bene qui apparaitra à la fin de la facture ou du devis (équivalent des \"mentions manuscrites\")',
'explication_nota_bene' => 'Indiquez un nota-bene qui apparaitra à la fin de la facture ou du devis (équivalent des « mentions manuscrites »)',
'explication_num_devis' => 'Indiquez une référence à un devis précédent (le cas échéant)',
'explication_num_facture' => 'Corrigez l\'identifiant de la facture ou corriges celui proposé par défaut',
'explication_quantite' => 'Indiquez une quantité globale relative à cette facture ou ce devis (en général un nombre d\'heures ou de jours)',

Loading…
Cancel
Save