Discussion:Générateur de facture Sellsy
Amélioration de la présentation des conso sur les factures clients
- regroupement des consommations des différentes offres sur une seule ligne
- Ajout de la fonction fusionnerLignesMobileData dans functions.php
- Appel de la fonction dans generate-document.php ligne 244
function fusionnerLignesMobileData($tableau) {
$nouvellesLignes = []; // Initialiser un tableau pour stocker les nouvelles lignes $qteForfaitDATA = 0;
$qteDATA = 0;
$qteForfaitSMS = 0; $qteSMS = 0; $qteForfaitMMS = 0; $qteMMS = 0;
$qteForfaitAppelNat = 0; $qteAppelNat = 0; $DureeAppelNat=0;
$qteForfaitAppelInter = 0; $qteAppelInter = 0; $DureeAppelInter=0; $CoutAppelInter=0;
// Pattern de détection $patternDATA = '/Volume \(en Ko\) : (\d+) Ko/';
$patternSMS = '/Nbr\. de messages : (\d+)/'; $patternMMS = '/Nbr\. de messages : (\d+)/'; $patternNbAppelNat = '/Nbr\. d\'appel([^0-9]+)(\d+)/';
// Parcourir chaque ligne du tableau d'origine
foreach ($tableau as $ligne) {
$shouldAdd = false; // Variable de drapeau
if (isset($ligne['Category']) && $ligne['Category'] == 'MOBILE' && isset($ligne['row_type1'])) { if ($ligne['row_type1'] == 'Mobile data') { $qteForfaitDATA += $ligne['row_qt']; if (preg_match($patternDATA, $ligne['row_notes'], $matches)) { $qteDATA += $matches[1]; } } elseif ($ligne['row_type1'] == 'Mobile SMS') { $qteForfaitSMS += $ligne['row_qt']; if (preg_match($patternSMS, $ligne['row_notes'], $matches)) { $qteSMS += $matches[1]; } } elseif ($ligne['row_type1'] == 'Mobile national') { $qteForfaitAppelNat += $ligne['row_qt']; if (preg_match($patternNbAppelNat, $ligne['row_notes'], $matches)) { $qteAppelNat += $matches[2]; } $DureeAppelNat += dureeEnSecondes($ligne['row_notes']); } elseif ($ligne['row_type1'] == 'Mobile international') { $qteForfaitAppelInter += $ligne['row_qt']; if (preg_match($patternNbAppelNat, $ligne['row_notes'], $matches)) { $qteAppelInter += $matches[2]; } $DureeAppelInter += dureeEnSecondes($ligne['row_notes']);
$CoutAppelInter+=$ligne['row_unitAmount'];
} elseif ($ligne['row_type1'] == 'Mobile MMS') { $qteForfaitMMS += $ligne['row_qt']; if (preg_match($patternMMS, $ligne['row_notes'], $matches)) { $qteMMS += $matches[1]; } } else { // La première condition est remplie, mais pas les conditions internes $shouldAdd = true; } } else { $shouldAdd = true; }
if ($shouldAdd) { $nouvellesLignes[] = $ligne; }
}
// Ajouter la nouvelle ligne fusionnée si on a de la conso 4G if ($qteDATA > 0)
{
$nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile Data', 'row_type' => 'item',
'row_linkedid' => '15120385',
'row_name' => 'OP_data_M1G_TOR', 'row_notes' => 'DATA
'.
'
- '.
'
- Consommations dues à '.$qteForfaitDATA.' forfaits : '.koToGo($qteDATA).' Go '. '
',
'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ];
$nouvellesLignes[] = $nouvelleLigne; }
// Ajouter la nouvelle ligne fusionnée si on a de la conso SMS
if ($qteSMS > 0)
{
$nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile SMS', 'row_type' => 'item',
'row_linkedid' => '15120385',
'row_name' => 'OP_data_M1G_TOR', 'row_notes' => 'SMS
'.
'
- '.
'
- Consommations dues à '.$qteForfaitSMS.' forfaits : '.$qteSMS.' SMS '. '
',
'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ];
$nouvellesLignes[] = $nouvelleLigne;
}
// Ajouter la nouvelle ligne fusionnée si on a de la conso SMS
if ($qteMMS > 0)
{
$nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile MMS', 'row_type' => 'item',
'row_linkedid' => '15120385',
'row_name' => 'OP_data_M1G_TOR', 'row_notes' => 'MMS
'.
'
- '.
'
- Consommations dues à '.$qteForfaitMMS.' forfaits : '.$qteMMS.' MMS '. '
',
'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ];
$nouvellesLignes[] = $nouvelleLigne;
}
// Ajouter la nouvelle ligne fusionnée si on a de la conso Appels nationaux
if ($qteAppelNat > 0)
{
$nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile national', 'row_type' => 'item',
'row_linkedid' => '15120385',
'row_name' => 'OP_data_M1G_TOR', 'row_notes' => 'Appels nationaux
'.
'
- '.
'
- Consommations dues à '.$qteForfaitAppelNat.' forfaits : '.$qteAppelNat.' appels '. '
- Durée cumulée des appels : '.secondsToHour($DureeAppelNat).' '. '
',
'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ];
$nouvellesLignes[] = $nouvelleLigne;
}
// Ajouter la nouvelle ligne fusionnée si on a de la conso Appels nationaux
if ($qteAppelInter > 0)
{
$nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile international', 'row_type' => 'item',
'row_linkedid' => '15120385',
'row_name' => 'OP_data_M1G_TOR', 'row_notes' => 'Appels internationaux
'.
'
- '.
'
- Consommations dues à '.$qteForfaitAppelInter.' forfaits : '.$qteAppelInter.' appels '. '
- Durée cumulée des appels : '.secondsToHour($DureeAppelInter).' '. '
',
'row_unit' => 'unité', 'row_unitAmount' => $CoutAppelInter, 'row_qt' => 1, 'row_taxid' => 4047830 ];
$nouvellesLignes[] = $nouvelleLigne;
}
return $nouvellesLignes; // Retourne le tableau mis à jour
}