<?php

/**
 *  Classe permettant de traiter les contrôles qualité sur les BR
 */
class BR_qualite
{

    /**
     * Constructeur
     */
    public function __construct()
    {}

    /**
     * Fonction récupérant la liste des BR avec contrôle qualité à traiter
     */
    public static function getListBRwithCtrlQualite($type_ctrl = '')
    {
        return SqlBr::rqGetListBRwithCtrlQualite($type_ctrl)->TrouveTous();
    }

    /**
     * Fonction récupérant les informations relatives à l'entete d'un BR
     */
    public static function &getAllInfoOnBrEntete(& $num_br)
    {
        return SqlBr::rqGetAllInfoOnBrEntete($num_br)->Trouve1();
    }

    /**
     * Fonction récupérant les informations relatives aux lignes d'un BR
     */
    public static function getAllInfoOnBrLigne(& $num_br)
    {
        return SqlBr::rqGetAllInfoOnBrLigne($num_br)->TrouveTous();
    }

    /**
     * Fonction récupérant les informations relatives aux lignes d'un BR
     */
    public static function &getCumulForCtrlQualite($type_ctrl)
    {
        $result = SqlBr::rqGetCumulForCtrlQualite($type_ctrl)->Trouve1();
        return $result['CUMUL'];
    }

    /**
     * Fonction récupérant les informations relatives aux lignes d'un BR
     */
    public static function getTypeCtrlQualite()
    {
        return SqlBr::rqGetTypeCtrlQualite()->TrouveTous();
    }

    /**
     * Fonction générant un tableau contenant toutes les données à afficher pour la liste des BR avec contrôle qualité
     */
    public static function &buildXmlBrCtrlQualite($page, $nbLigne)
    {
        
        // On gère la pagination ici, on détermine en focntion de la page appelé les résultats qui seront affichés
        $debut = (($page - 1) * $nbLigne); // début de l'intervalle affciché
        $fin = ($page * $nbLigne) - 1; // fin de l'intervalle affiché
        $num_ligne = 0; // Nombre de résultats retournés par la requete
        
        $data = array();
        // On récupère dans un tableau les types de contrôle qualité à effectuer
        // Pour chaque contrôle qualité
        foreach (BR_qualite::getTypeCtrlQualite() as $i => $ligne) {
            // Pour chaque type de controle qualité on récupère le libelle, le cumul et les numéro de BR
            $data['controle'][$i] = array(
                '!type_ctrl' => $ligne['TYPE_CTRL'],
                '!libelle' => $ligne['LIBELLE'],
                '!cumul' => number_format((float) BR_qualite::getCumulForCtrlQualite($ligne['TYPE_CTRL']), 2, '.', ' ')
            );
            
            $p1 = & $data['controle'][$i];
            // Pour chaque BR ayant une ligne au moins avec un contrôle qualité du type en question
            $listeBR = BR_qualite::getListBRwithCtrlQualite($ligne['TYPE_CTRL']);
            foreach ($listeBR as $j => & $element) {
                // Si le numéro de la ligne courant est inclu dans l'intervalle a afficher
                if ($num_ligne >= $debut && $num_ligne <= $fin) {
                    $entete = BR_qualite::getAllInfoOnBrEntete($element['NUM_BR']);
                    
                    $p1['reception'][$j]['entete'] = array(
                        '!num_br' => & $entete['NUM_BR'],
                        '!num_cde' => & $entete['NUM_CDE'],
                        '!rs' => & $entete['RS'],
                        '!code' => & $entete['CODE'],
                        '!statut' => Trad('non validé'),
                        '!date_bl' => convertDateSqlToFr($entete['DATE_BL']),
                        '!date_per' => convertDateSqlToFr($entete['DATE_PER']),
                        '!total' => number_format((float) $entete['TOTAL_HT'], 2, '.', ' '),
                        '!devise' => & $entete['DEVISE'],
                        '!id_unique' => $num_ligne,
                        '!develop_ligne' => "collapseExpandMenuOuvrir('$num_ligne','bouton_" . $num_ligne . "','images/normal/suivi_close.GIF','Masquer les lignes du BR " . $entete['NUM_BR'] . "','images/normal/suivi_open.GIF','Afficher les lignes du BR " . $entete['NUM_BR'] . "');",
                        '!popup_frs' => "OpenPopup('ctrl_popup_frs.php?action=afficherPopupFrs&code_frs={$entete['CODE']}','win_popup_frs',700,600);",
                        '!select_br_to_ctrl' => "CallUrl('IU_br_creation.php?action=creatCtrlQualite','num_br={$entete['NUM_BR']}'); window.scrollTo(0,0);"
                    );
                    
                    $p2 = & $p1['reception'][$j];
                    // Pour chaque lignes du BR
                    $infoBR = BR_qualite::getAllInfoOnBrLigne($element['NUM_BR']);
                    foreach ($infoBR as & $ligneFinal) {
                        ;
                        if (BoolSql($ligneFinal['A_CONTROL']) && ! BoolSql($ligneFinal['CTRL_FAIT']))
                            $qte_a = 'Ctrl. qualité';
                        else
                            $qte_a = number_format((float) $ligneFinal['QTE_ACCEP'], 2, '.', ' ');
                        
                        $p2['ligne'][] = array(
                            '!no_po_br' => & $ligneFinal['NO_PO_BR'],
                            '!design' => & $ligneFinal['DES_SOMM'],
                            '!qte_r' => number_format((float) $ligneFinal['QTE_RECUE'], 2, '.', ' '),
                            '!qte_c' => number_format((float) $ligneFinal['QTE_COMPT'], 2, '.', ' '),
                            '!qte_a' => $qte_a,
                            '!unite' => & $ligneFinal['UNITE'],
                            '!is_ctrl' => BoolSql($ligneFinal['A_CONTROL']),
                            '!ctrl_done' => BoolSql($ligneFinal['CTRL_FAIT']),
                            '!SI' => & $ligneFinal['SECTIMP'],
                            '!SI_LIBELLE' => & $ligneFinal['SI_LIBELLE'],
                            '!CG' => & $ligneFinal['CODE_GESTION'],
                            '!CG_LIBELLE' => & $ligneFinal['CG_LIBELLE'],
                            '!CDC' => & $ligneFinal['CODE_COMP'],
                            '!CDC_LIBELLE' => & $ligneFinal['CDC_LIBELLE'],
                            '!SCA' => & $ligneFinal['SSCPTEANA'],
                            '!SCA_LIBELLE' => & $ligneFinal['SCA_LIBELLE']
                        );
                    }
                }
                
                // On incremente le numéro de ligne sur lequel on est positionné
                $num_ligne ++;
            }
        } // fin du for global
          // On supprime du tableau les types de ctrl sans BR associés
        foreach ($data['controle'] as & $element)
            if (array_key_exists('reception', $element))
                $final['controle'][] = $element;
        
        return $final;
    }
}