<?php

class SqlCentreGene
{

    public static function selectCentreEmetBySTE($code_soc = '', $code = '', $libelle = '', $CP = '', $Ville = '')
    {
        if ($code_soc != '')
            $sql = 'select CODE_CTR as Code, RAIS_SOC as Libelle, ADRESSE' . ' from CENTRE with (nolock)' . " where CODE_STE = '" . ReplaceSqlPointeur($code_soc) . "' and EMISSION = 0x54";
        else
            $sql = 'select CODE_CTR as Code, RAIS_SOC as Libelle, ADRESSE' . ' from CENTRE with (nolock)' . ' where EMISSION = 0x54';
        
        if ($code != '')
            $sql .= " and upper(CODE_CTR) LIKE '%" . strtoupper(ReplaceSqlPointeur($code)) . "%'";
        
        if ($libelle != '')
            $sql .= " and upper(RAIS_SOC) LIKE '%" . strtoupper(ReplaceSqlPointeur($libelle)) . "%'";
        
        if ($CP != '')
            $sql .= " and upper(CPOSTAL) LIKE '%" . strtoupper(ReplaceSqlPointeur($CP)) . "%'";
        
        if ($Ville != '')
            $sql .= " and upper(VILLE1) LIKE '%" . strtoupper(ReplaceSqlPointeur($Ville)) . "%'";
        
        $sql .= " order by CODE_CTR";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function selectCentreLivBySTE($code_soc = '', $code = '', $libelle = '', $CP = '', $Ville = '', $si = '')
    {
        if ($code_soc != '') {
            $sql = " select CODE_CTR as Code, RAIS_SOC as Libelle, ADRESSE, VILLE1 VILLE, CPOSTAL, CTC_CTR.CTC_NOM, CTC_CTR.CTC_TEL, CTC_CTR.CTC_FAX, CTC_CTR.CTC_MAIL " . " from CENTRE with (nolock)" . " left outer join CTC_CTR with (nolock) on CENTRE.CODE_CTR = CTC_CTR.COD_CTR and CTC_IND = 0 " . " where CODE_STE = '" . ReplaceSqlPointeur($code_soc) . "' and LIVRAISON = 0x54";
        } else {
            $sql = " select CODE_CTR as Code, RAIS_SOC as Libelle, ADRESSE, VILLE1 VILLE, CPOSTAL, CTC_CTR.CTC_NOM, CTC_CTR.CTC_TEL, CTC_CTR.CTC_FAX, CTC_CTR.CTC_MAIL " . " from CENTRE with (nolock)" . " left outer join CTC_CTR with (nolock) on CENTRE.CODE_CTR = CTC_CTR.COD_CTR and CTC_IND = 0 " . " where LIVRAISON = 0x54";
        }
        
        if ($code != '')
            $sql .= " and UPPER(CODE_CTR) LIKE '%" . strtoupper(ReplaceSqlPointeur($code)) . "%'";
        if ($libelle != '')
            $sql .= " and UPPER(RAIS_SOC) LIKE '%" . strtoupper(ReplaceSqlPointeur($libelle)) . "%'";
        if ($CP != '')
            $sql .= " and upper(CPOSTAL) 	LIKE '%" . strtoupper(ReplaceSqlPointeur($CP)) . "%'";
        if ($Ville != '')
            $sql .= " and upper(VILLE1) 	LIKE '%" . strtoupper(ReplaceSqlPointeur($Ville)) . "%'";
        
        if (trim($si) != '')
            $sql .= " and exists (	select VALEUR from CS_DON with(nolock) where 
											COD_TAB = 'SECTIMPU' 
										and VALEUR  = CENTRE.CODE_CTR	
										and COD_ENR like ('" . ReplaceSqlPointeur(str_pad($code_soc, 7, ' ', STR_PAD_RIGHT)) . "' + '%" . ReplaceSqlPointeur($si) . "%')
										and NUM_FIX = (select LIB01DICO from DILISPEC with(nolock) where TYPEDICO='PARAMSAP' and CODEDICO='NCS_SECTIMPU_CENTRE_LIV'))";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant toutes les incormations liées à un centre donné
     * 
     * @param string $centre
     *            : code du centre recherché
     * @param string $type_centre
     *            : permet de préciser le type de centre recherche E : Emission | L : Livraison | F : Facturation
     * @param string $societe
     *            : Société de rattachement du centre
     */
    public static function getInfoOnCentre(& $centre, $type_centre = '', $societe = '', $array = null)
    {
        switch ($type_centre) {
            case 'E':
                $sql = "select * from CENTRE with (nolock) where CODE_CTR = '" . ReplaceSqlPointeur($centre) . "' and EMISSION = 0x54 ";
                break;
            case 'L':
                if (CLT_SPAC == $_SESSION['Session_NumClient']) {
                    // SPEC 3440
                    if (is_array($array) && $array['CODE_SI'] == $centre)
                        $sql = "select * from CENTRE with (nolock) where CODE_CTR = '" . ReplaceSqlPointeur($centre) . "' and LIVRAISON = 0x54 ";
                    else
                        $sql = "select * from CENTRE with (nolock) where CODE_CTR = '" . ReplaceSqlPointeur($centre) . "' and LIVRAISON = 0x54  and EMISSION = 0x54 ";
                } else {
                    $sql = "select * from CENTRE with (nolock) where CODE_CTR = '" . ReplaceSqlPointeur($centre) . "' and LIVRAISON = 0x54 ";
                }
                break;
            case 'F':
                $sql = "select * from CENTRE with (nolock) where CODE_CTR = '" . ReplaceSqlPointeur($centre) . "' and FACTURATION = 0x54 ";
                break;
            default:
                $sql = "select * from CENTRE with (nolock) where CODE_CTR = '" . ReplaceSqlPointeur($centre) . '\'';
                break;
        }
        if ('' != $societe)
            $sql .= " and CODE_STE = '" . ReplaceSqlPointeur($societe) . '\'';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction récupérant le contact pour un centre
     */
    public static function getContactForCentre($centre)
    {
        $sql = "select CTC_CTR.* from CTC_CTR with (nolock) 
					where COD_CTR = '" . ReplaceSqlPointeur($centre) . "'
					and CTC_IND = (select min(CTC_IND)  from  CTC_CTR with (nolock) where COD_CTR = '" . ReplaceSqlPointeur($centre) . "' and CTC_RCA = 0x54)";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la liste des adresse secondaire pour un centre de livraison principal donné
     * 
     * @param string $ste
     *            : societé de l'utilisateur
     * @param string $principal
     *            : code du centre de livraison principal dont on cherche les centres de livraison secondaires
     */
    public static function rqGetCentreAndCentreSecondaires($ste, $principal)
    {
        $sql = "select '000' as COD_ADR, CODE_CTR, ADRESSE, VILLE, CPOSTAL,TELEPHONE, FAX, E_MAIL, PAYS 
						from CENTRE with(nolock)" . "where CODE_CTR='" . ReplaceSqlPointeur($principal) . "' 
						and CENTRE.CODE_STE='" . ReplaceSqlPointeur($ste) . '\'';
        $sql .= ' UNION ';
        $sql .= "select ADRCTR.COD_ADR, ADRCTR.COD_CTR, ADRCTR.ADRESSE, ADRCTR.VILLE1 as VILLE, ADRCTR.CPOSTAL, ADRCTR.TELEPHONE, ADRCTR.FAX, ADRCTR.EMAIL as E_MAIL, CODPAYS as PAYS 
						from ADRCTR  with(nolock) 
						where COD_CTR='" . ReplaceSqlPointeur($principal) . '\'';
        $sql .= ' order by CODE_CTR';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requete permettant de connaitre pour un centre donné les coordonnées d'un code adresse donné
     * 
     * @param string $ste
     *            : code de la société recherchée
     * @param string $code_centre
     *            : code du centre recherché
     * @param int $code_adr
     *            : code de l'adresse recherchée
     */
    public static function getInfoForOneCentreSecondaire($ste, $code_centre, $code_adr)
    {
        // Si le code est 000 cela signifie qu'il s'agit de l'adresse prinicpale du centre de livraison => on cherche donc dans la table des centre
        if ($code_adr == '000') {
            
            $sql = ' select * from CENTRE with(nolock)' . " where CODE_CTR='" . ReplaceSqlPointeur($code_centre) . '\'' . " and CENTRE.CODE_STE='" . ReplaceSqlPointeur($ste) . '\'';
        }        // Si le code est un code de centre de livraison secondaire alors on cherche dans la table des adresse secondaire de centre
        else {
            
            $sql = ' select ADRCTR.COD_ADR, ADRCTR.COD_CTR, ADRCTR.ADRESSE, ADRCTR.VILLE1 as VILLE, ADRCTR.CPOSTAL, ADRCTR.TELEPHONE, ADRCTR.FAX, ADRCTR.EMAIL as E_MAIL, CODPAYS as PAYS' . ' from ADRCTR  with(nolock)' . " where COD_CTR='" . ReplaceSqlPointeur($code_centre) . '\'' . " and COD_ADR = '" . ReplaceSqlPointeur($code_adr) . '\'';
        }
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permetant de ramener pour un ACD donnée les centres de livraisons autorisés
     *
     * @return string sql
     */
    public static function getCentreLivrForACD($ACD)
    {
        $sql = "select ACCTRLIV.CODE_CTR from ACCTRLIV with(nolock) where CODE_ACD = '" . ReplaceSqlPointeur($ACD) . "' ";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permetant de ramener pour un ACD donnée les centres émetteurs autorisés
     *
     * @return string sql
     */
    public static function getCentreEmetForACD($ACD)
    {
        $sql = " select ACCTR.CODE_CTR from ACCTR with(nolock) where CODE_ACD = '" . ReplaceSqlPointeur($ACD) . "' ";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }


    /**
     * fonction retournant la requête sql permettant de sélectionner le centre de livraison associé à une SI via le CS défini à cet effet.
     *
     * @param string $si
     * @param string $ste
     * @return string $sql
     */
    public static function rqGetCtrLivBySiandStePanier(& $si, & $ste)
    {
        $sql = " select VALEUR from CS_DON with(nolock) where COD_TAB = 'SECTIMPU' 
					and COD_ENR = '" . ReplaceSqlPointeur(str_pad($ste, 7, ' ', STR_PAD_RIGHT)) . "'+'" . ReplaceSqlPointeur($si) . "'
					and NUM_FIX = 2";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    
    /**
    * Fonction pour recuperer les adresses de livraison lié au SI
    */
   public static function rqGetCtrLivByCS($si, $typedico, $codedico)
   {
       $sql = "select COD_ENR from CS_DON where COD_TAB ='CENTRE' and NUM_FIX =(select LIB01DICO from DILISPEC where TYPEDICO ='".ReplaceSqlPointeur($typedico)."' and CODEDICO = '".ReplaceSqlPointeur($codedico)."') and VALEUR = '".ReplaceSqlPointeur($si)."'";
       return new RequeteSQL($sql, DB_OXASQLDB);
   }

    
    
    /**
    * Fonction pour recuperer les adresses de livraison lié au CG
    */
   public static function rqGetCtrLivByCSCodeDeGestion($cg, $typedico, $codedico)
   {
       $sql = "select COD_ENR from CS_DON where COD_TAB ='CENTRE' and NUM_FIX =(select LIB01DICO from DILISPEC where TYPEDICO ='".ReplaceSqlPointeur($typedico)."' and CODEDICO = '".ReplaceSqlPointeur($codedico)."') and VALEUR = '".ReplaceSqlPointeur($cg)."'";
       return new RequeteSQL($sql, DB_OXASQLDB);
   }


    /**
     * fonction retournant la requête sql permettant de sélectionner le centre de livraison associé à une SI via le CS défini à cet effet.
     *
     * @param string $si
     * @param string $ste
     * @return string $sql
     */
    public static function rqGetCtrLivBySiandSte(& $si, & $ste)
    {
        $sql = " select VALEUR from CS_DON with(nolock) where COD_TAB = 'SECTIMPU' 
					and COD_ENR = '" . ReplaceSqlPointeur(str_pad($ste, 7, ' ', STR_PAD_RIGHT)) . "'+'" . ReplaceSqlPointeur($si) . "'
					and NUM_FIX = (select LIB01DICO from DILISPEC with(nolock) where TYPEDICO='PARAMSAP' and CODEDICO='NCS_SECTIMPU_CENTRE_LIV')";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requête permettant de sélectionner pour un centre de livraison donné le contact principal
     *
     * @param string $centre
     *            : Centre de livraison
     * @return string $sql : requête sql
     */
    public static function getContactLibByCentreLiv($centre, $ind_contact = 0)
    {
        $sql = "select CTC_NOM , CTC_FCT , CTC_TEL , CTC_FAX , CTC_MAIL	, CTC_GSM , COD_CTR CODE_CTR_LIV from CTC_CTR with (nolock) where COD_CTR = '" . ReplaceSqlPointeur($centre) . "' and CTC_IND = '".ReplaceSqlPointeur($ind_contact)."' ";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requête permettant de sélectionner les contacts pour un centre de livraison donné
     *
     * @param string $centre
     *            : Centre de livraison
     * @return string $sql : requête sql
     */
    public static function getAllContactByCentreLiv($centre, $nom = null)
    {
        $sql = "select CTC_IND	,CTC_NOM , CTC_FCT , CTC_TEL , CTC_FAX , CTC_MAIL , CTC_GSM , COD_CTR CODE_CTR_LIV from CTC_CTR with (nolock) where COD_CTR = '" . ReplaceSqlPointeur($centre) . "' and CTC_RCA = 0x54 ";
        if (numm != $nom && '' != trim($nom))
            $sql .= " and  upper(CTC_NOM) like '%" . ReplaceSql(strtoupper($nom)) . "%'";
        $sql .= ' order by  CTC_IND ';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    
    public static function insertCentreLivraison($centre, $value)
    {
        $sql = "INSERT INTO CTC_CTR (COD_CTR, CTC_IND, CTC_NOM, CTC_FCT, CTC_TEL, CTC_FAX, CTC_GSM, CTC_MAIL, CTC_CMQ, CTC_RCA, CTC_ROP, CTC_DARDA) values (
            	'".ReplaceSqlPointeur($centre)."',
            	ISNULL((select MAX(CTC_IND)+1 CTC_IND from CTC_CTR where COD_CTR='$centre'), 0),
            	'".ReplaceSqlPointeur($value['CTC_NOM'])."',
            	'".ReplaceSqlPointeur($value['CTC_FCT'])."',
            	'".ReplaceSqlPointeur($value['CTC_TEL'])."',
            	'".ReplaceSqlPointeur($value['CTC_FAX'])."',
            	'".ReplaceSqlPointeur($value['CTC_GSM'])."',
            	'".ReplaceSqlPointeur($value['CTC_MAIL'])."',
            	'',
            	0x54,
            	0x54,
            	0x46
            )
        ";

        return new RequeteSQL($sql, DB_OXASQLDB);
    }
}