Discussion:Générateur de facture Sellsy
Apparence
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' => '<strong>DATA</strong><br>'.
'<ul>'.
'<li>Consommations dues à '.$qteForfaitDATA.' forfaits : '.koToGo($qteDATA).' Go</li>'.
'</ul>',
'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' => '<strong>SMS</strong><br>'.
'<ul>'.
'<li>Consommations dues à '.$qteForfaitSMS.' forfaits : '.$qteSMS.' SMS</li>'.
'</ul>',
'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' => '<strong>MMS</strong><br>'.
'<ul>'.
'<li>Consommations dues à '.$qteForfaitMMS.' forfaits : '.$qteMMS.' MMS</li>'.
'</ul>',
'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' => '<strong>Appels nationaux</strong><br>'.
'<ul>'.
'<li>Consommations dues à '.$qteForfaitAppelNat.' forfaits : '.$qteAppelNat.' appels</li>'.
'<li>Durée cumulée des appels : '.secondsToHour($DureeAppelNat).'</li>'.
'</ul>',
'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' => '<strong>Appels internationaux</strong><br>'.
'<ul>'.
'<li>Consommations dues à '.$qteForfaitAppelInter.' forfaits : '.$qteAppelInter.' appels</li>'.
'<li>Durée cumulée des appels : '.secondsToHour($DureeAppelInter).'</li>'.
'</ul>',
'row_unit' => 'unité',
'row_unitAmount' => $CoutAppelInter,
'row_qt' => 1,
'row_taxid' => 4047830
];
$nouvellesLignes[] = $nouvelleLigne;
}
return $nouvellesLignes; // Retourne le tableau mis à jour
}