<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://indywiki.fr/index.php?action=history&amp;feed=atom&amp;title=Discussion%3AG%C3%A9n%C3%A9rateur_de_facture_Sellsy</id>
	<title>Discussion:Générateur de facture Sellsy - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://indywiki.fr/index.php?action=history&amp;feed=atom&amp;title=Discussion%3AG%C3%A9n%C3%A9rateur_de_facture_Sellsy"/>
	<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Discussion:G%C3%A9n%C3%A9rateur_de_facture_Sellsy&amp;action=history"/>
	<updated>2026-04-18T14:00:41Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://indywiki.fr/index.php?title=Discussion:G%C3%A9n%C3%A9rateur_de_facture_Sellsy&amp;diff=3492&amp;oldid=prev</id>
		<title>Anthony le 28 décembre 2023 à 16:45</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Discussion:G%C3%A9n%C3%A9rateur_de_facture_Sellsy&amp;diff=3492&amp;oldid=prev"/>
		<updated>2023-12-28T16:45:57Z</updated>

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