<?php
/**
 * Script dédié à la création des factures
 */

// Tableau global utilisé pour les traductions : celui-ci doit être appelé en premier
require_once 'application/class/class_ManageSession.php';

if ('accueilBAP' == getValue('action')) {
    // On affiche le frontal de création du bap
    $xml_array = Bap::buildEnteteCreatBap();
    $xslt = new GenXslt();
    $xsl_file = 'application/xsl/template_bap/template_enteteBap.xsl';
    echo 'getObj(\'', ID_ANCRANGE, '\').innerHTML = "', HttpReplacePointeur($xslt->XslHtml($xsl_file, $xml_array)), '";';
} elseif ('validerEnteteBap' == getValue('action')) {
    // On réinitialise le BAP en cours
    Bap::deleteBapByUser($_SESSION['Session_Login']);
    
    // On contrôle la société
    if ('' == getValue('societe')) {
        Affichage::messageJS(trad('Veuillez saisir une société'));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle le fournisseur
    if ('' == getValue('fournisseur')) {
        Affichage::messageJS(trad('Veuillez saisir un fournisseur'));
        $connecteur->disconnect();
        exit();
        ;
    }
    
    // On contrôle la date d'enregistrement
    if ('' == getValue('dateEnregFac')) {
        Affichage::messageJS(trad("Veuillez saisir la date d'enregistrement"));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle la date d'effet
    if ('' == getValue('dateEffet')) {
        Affichage::messageJS(trad("Veuillez saisir la date d'effet"));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle la référence facture fournisseur
    if ('' == getValue('refBapFournisseur')) {
        Affichage::messageJS(trad('Veuillez saisir la référence de la facture fournisseur'));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle la date d'emission
    if ('' == getValue('dateEmission')) {
        Affichage::messageJS(trad("Veuillez saisir la date d'émission"));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle le montant HT
    if (! ControleSaisie::CtrlPrix(getValue('montantHT'))) {
        Affichage::messageJS(trad("Veuillez vérifier le montant HT, format attentu 9.2"));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle le montant TTC
    if (! ControleSaisie::CtrlPrix(getValue('montantTTC'))) {
        Affichage::messageJS(trad("Veuillez vérifier le montant TTC, format attentu 9.2"));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle le mode de paiement
    if ('' == getValue('modePaiement')) {
        Affichage::messageJS(trad('Veuillez saisir le mode de paiement'));
        $connecteur->disconnect();
        exit();
    }
    
    // On contrôle la date d'échéance
    if ('' == getValue('dateEcheance')) {
        Affichage::messageJS(trad("Veuillez saisir la date d'échéance"));
        $connecteur->disconnect();
        exit();
    }
    
    // On enregistre l'entête du BAP
    Bap::insertBapEntete($_SESSION['Session_Login'], getValue('societe'), getValue('type'), getValue('fournisseur'), getValue('dateEnregFac'), getValue('dateEffet'), getValue('refBapFournisseur'), getValue('dateEmission'), getValue('devise'), getValue('montantHT'), getValue('montantTTC'), getValue('modePaiement'), getValue('dateEcheance'));
    
    // On affiche la liste des commandes associées au fournisseur
    $xml_array = Bap::buildSelectionCommande(getValue('fournisseur'));
    $xslt = new GenXslt();
    $xsl_file = 'application/xsl/template_bap/template_selection_commandes.xsl';
    echo "getObj('td_selection_commandes').innerHTML = \"", HttpReplacePointeur($xslt->XslHtml($xsl_file, $xml_array)), '";';
    
    // On vide la liste des lignes de commandes sélectionnées
    echo 'getObj("td_selection_lignes_commandes").innerHTML = "";';
} elseif ('validerListeCommandes' == getValue('action')) {
    SqlBap::rqDeleteBapLigne($_SESSION['Session_Login'])->ExecuteSql();
    
    $listeCommandes = array();
    
    // On construit la liste des commandes à facturer sémectionnées par l'utilisateur
    foreach (getValueAll() as $key => $value)
        if (false !== stripos($key, 'cde_selected_'))
            if ('on' == $value) {
                $num_cde = explode('_', $key);
                $listeCommandes[] = $num_cde[2];
            }
    
    // Si aucune commande n'a été sélectionnée
    if (count($listeCommandes) == 0)
        Affichage::messageJS(trad('Vous devez sélectionner au moins une commande'));
    
    // On insère toutes les lignes associées aux commandes sélectionnées
    Bap::insertLignesCdesSelected($listeCommandes, getValue('fournisseur'));
    
    // Puis, on affiche l'ensemble des lignes
    $xml_array = Bap::buildSelectionLignesCommandes($_SESSION['Session_Login']);
    $xslt = new GenXslt();
    $xsl_file = 'application/xsl/template_bap/template_selection_lignes_commandes.xsl';
    echo "getObj('td_selection_lignes_commandes').innerHTML = \"", HttpReplacePointeur($xslt->XslHtml($xsl_file, $xml_array)), '";';
}// Si l'utilisateur met à jour un champ quelconque d'une ligne exepté la case "sélectionné ?".
elseif ('updateChamp' == getValue('action')) {
    // On contrôle la valeur du champ avant de le mettre à jour
    if ('SI' == getValue('CHAMP') || 'CDC' == getValue('CHAMP') || 'SCA' == getValue('CHAMP') || 'SSFAM' == getValue('CHAMP') || 'TYPETVA' == getValue('CHAMP')) {
        if (! ControleSaisie::ctrlExistData(getValue('CHAMP'), getValue('VALEUR'))) {
            Affichage::messageJS(trad("La valeur saisie n'a pas été trouvée veuillez vérifier"));
            $connecteur->disconnect();
            exit();
        }
    }
    
    if ('QTE_BAP' == getValue('CHAMP') && ! ControleSaisie::CtrlQuantite(getValue('VALEUR'))) {
        Affichage::messageJS(trad("La quantité facturée saisie doit être de la forme : 999999.999"));
        $connecteur->disconnect();
        exit();
    }
    
    if (('PU_BAP' == getValue('CHAMP') || 'TOTAL_BAP' == getValue('CHAMP')) && ! ControleSaisie::CtrlQuantite(getValue('VALEUR')))
        if ('PU_BAP' == getValue('CHAMP')) {
            Affichage::messageJS(trad("Le prix unitaire facturé saisie doit être de la forme : 999999999.99"));
            $connecteur->disconnect();
            exit();
        } elseif ('TOTAL_BAP' == getValue('CHAMP')) {
            Affichage::messageJS(trad("Le total facturé saisie doit être de la forme : 999999999.99"));
            $connecteur->disconnect();
            exit();
        }
    
    Bap::updateBapLigne($_SESSION['Session_Login'], getValue('NO_LIGNE'), getValue('CHAMP'), getValue('VALEUR'));
    
    Affichage::innerHTML('total', trad('Montant total : ') . FormatageData::formatMontant(Bap::getTotalBap($_SESSION['Session_Login']), 2, ' ')); // Dossier 23961
    
    $enteteBap = Bap::getBapEntete($_SESSION['Session_Login']);
    
    $ecart = $enteteBap['TOTAL_HT'] - Bap::getTotalBap($_SESSION['Session_Login']);
    if ($ecart >= 0) {
        $signe = '+';
    } else {
        $signe = '';
    }
    Affichage::innerHTML('ecart', trad('Ecart :') . ' ' . $signe . FormatageData::formatMontant($ecart), 2, ' ');
    
    if (0 == $ecart)
        Affichage::setAttribut('ecart', 'className', 'txtGreen14');
    else
        Affichage::setAttribut('ecart', 'className', 'couleur_skin');
}// Si l'utilisateur clique sur la checkbox 'sélec. ?' d'une ligne de commande.
elseif ('selectLigneCommande' == getValue('action')) {
    // On met à jour la propriété IS_SELECTED de la ligne de commande du bap
    $champ = getValue('OBJECT');
    $info_ligne = explode('_', $champ);
    Bap::updateBapLigne($_SESSION['Session_Login'], $info_ligne[2], 'IS_SELECTED', BoolSql(getValue($champ)));
    
    // Puis, on affiche l'ensemble des lignes
    $xml_array = Bap::buildSelectionLignesCommandes($_SESSION['Session_Login']);
    $xslt = new GenXslt();
    $xsl_file = 'application/xsl/template_bap/template_selection_lignes_commandes.xsl';
    echo "getObj('td_selection_lignes_commandes').innerHTML = \"", HttpReplacePointeur($xslt->XslHtml($xsl_file, $xml_array)), '";';
}// Si l'utilisateur clique sur le bouton "Toutes"
elseif ('selectAllCde' == getValue('action')) {
    
    foreach (getValueAll() as $key => $value)
        if (false !== stripos($key, 'cde_selected_'))
            Affichage::setAttribut($key, 'checked', true);
}// Si l'utilisateur clique sur le bouton "Aucune"
elseif ('selectNoCde' == getValue('action')) {
    foreach (getValueAll() as $key => $value)
        if (false !== stripos($key, 'cde_selected_'))
            Affichage::setAttribut($key, 'checked', false);
}// Si l'utilisateur clique le bouton "Enregistrer la facture"
elseif ('validerListeLignesCommandes' == getValue('action')) {
    $enteteBap = Bap::getBapEntete($_SESSION['Session_Login']);
    $ecart = $enteteBap['TOTAL_HT'] - Bap::getTotalBap($_SESSION['Session_Login']);
    
    if (0 != $ecart)
        Affichage::messageJS(trad("Pour enregistrer le BAP l'écart entre le montant de l'enête et le montant cumulé des lignes doit être de 0, veuillez vérifier"));
    else {
        $new_bap = Bap::saveBapInHaplus($_SESSION['Session_Login']);
        
        if (0 != $new_bap) {
            Affichage::messageJS(trad('Création du BAP N°') . $new_bap);
            echo "CallUrl('bap_creation.php?action=accueilBAP');";
        } else
            Affichage::messageJS(strBuild(trad("Une erreur est survenue lors de l'enregistrement du BAP@1@"), $new_bap));
    }
}// Si l'utilisateur clique sur le bouton "Toutes" permettant de sélectionner toutes les lignes de commandes
elseif ('selectAllLignesCommandes' == getValue('action')) {
    
    Bap::updateBapLigne($_SESSION['Session_Login'], '', 'IS_SELECTED', 1);
    
    // Puis, on affiche l'ensemble des lignes
    $xml_array = Bap::buildSelectionLignesCommandes($_SESSION['Session_Login']);
    $xslt = new GenXslt();
    $xsl_file = 'application/xsl/template_bap/template_selection_lignes_commandes.xsl';
    echo "getObj('td_selection_lignes_commandes').innerHTML = \"", HttpReplacePointeur($xslt->XslHtml($xsl_file, $xml_array)), '";';
}// Si l'utilisateur clique sur le bouton "Aucune" permettant de dé-sélectionner toutes les lignes de commandes
elseif ('selectNoneLignesCommandes' == getValue('action')) {
    
    Bap::updateBapLigne($_SESSION['Session_Login'], '', 'IS_SELECTED', 0);
    
    // Puis, on affiche l'ensemble des lignes
    $xml_array = Bap::buildSelectionLignesCommandes($_SESSION['Session_Login']);
    $xslt = new GenXslt();
    $xsl_file = 'application/xsl/template_bap/template_selection_lignes_commandes.xsl';
    echo "getObj('td_selection_lignes_commandes').innerHTML = \"", HttpReplacePointeur($xslt->XslHtml($xsl_file, $xml_array)), '";';
}

$connecteur->disconnect();
exit();