Discussion:Générateur de facture Sellsy

De INDYWiki

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
	
}