/* ================================================================================================ */
/* Transfert Pieds Exp - Phase 2 - Update des lignes présentes dans DW, à partir des valeurs de HA+ */
/* ================================================================================================ */

update doc
set 
/* Lignes de pied d'expédition */
/*DOC_COMPTEUR_LIG             = convert(varchar(9),lig.NUM_EXP) + '-' + convert(varchar(3),lig.NUM_LIG) + '-' + '000',  Pour compteur lignes : P0?, encore utile? */
DOC_PEX_TYPE_FOURNISSEUR     = CASE WHEN lig.TYP_FOUR = 'T' THEN 'TRANSITAIRE'            WHEN lig.TYP_FOUR = 'A' THEN 'ASSUREUR'                                  ELSE ' ' END, 
DOC_CODE_FOURNISSEUR         = CASE WHEN lig.TYP_FOUR = 'T' THEN ent.DOC_CODE_TRANSITAIRE WHEN lig.TYP_FOUR = 'A' THEN ' ' /* Màj par 1 req. suivante plus bas */  ELSE ' ' END, 
DOC_PEX_QTE                  = lig.QUANTITE, 
DOC_PEX_PU                   = lig.PRIX, /* en Devise Réf : conversion éventuelle req. suivante */ 
DOC_PEX_MNT_LIGNE            = CASE      /* en Devise Réf : conversion éventuelle req. suivante */  
                                 WHEN lig.TYP_TAR = 'N' THEN lig.QUANTITE * lig.PRIX 
                                 WHEN lig.TYP_TAR = 'F' THEN lig.PRIX 
                                 WHEN lig.TYP_TAR = 'P' THEN ent.DOC_POIDS_TOTAL  * lig.PRIX 
                                 WHEN lig.TYP_TAR = 'V' THEN ent.DOC_VOLUME_TOTAL * lig.PRIX 
                                 WHEN lig.TYP_TAR = 'U' THEN 
                                                         ( CASE 
                                                            WHEN ent.DOC_POIDS_TOTAL > ent.DOC_VOLUME_TOTAL * 1000 / (CASE WHEN mdt.EQPOIVOL <> 0 THEN mdt.EQPOIVOL ELSE 1 END) THEN ent.DOC_POIDS_TOTAL   
                                                            ELSE ent.DOC_VOLUME_TOTAL * 1000 / (CASE WHEN mdt.EQPOIVOL <> 0 THEN mdt.EQPOIVOL ELSE 1 END) 
                                                           END 
                                                          )
                                                          * lig.PRIX
                                 ELSE 0 
                                END, 
DOC_PEX_MNT_LIGNE_DEV        = CASE      /* en Devise Expé */  
                                 WHEN lig.TYP_TAR = 'N' THEN lig.QUANTITE * lig.PRIX 
                                 WHEN lig.TYP_TAR = 'F' THEN lig.PRIX 
                                 WHEN lig.TYP_TAR = 'P' THEN ent.DOC_POIDS_TOTAL  * lig.PRIX 
                                 WHEN lig.TYP_TAR = 'V' THEN ent.DOC_VOLUME_TOTAL * lig.PRIX 
                                 WHEN lig.TYP_TAR = 'U' THEN 
                                                         ( CASE 
                                                            WHEN ent.DOC_POIDS_TOTAL > ent.DOC_VOLUME_TOTAL * 1000 / (CASE WHEN mdt.EQPOIVOL <> 0 THEN mdt.EQPOIVOL ELSE 1 END) THEN ent.DOC_POIDS_TOTAL   
                                                            ELSE ent.DOC_VOLUME_TOTAL * 1000 / (CASE WHEN mdt.EQPOIVOL <> 0 THEN mdt.EQPOIVOL ELSE 1 END) 
                                                           END 
                                                          )
                                                          * lig.PRIX
                                 ELSE 0 
                                END, 
DOC_PEX_DESIGN_ART           = lig.DESIGN, 
DOC_PEX_TVA_CDE              = lig.TX_TVA, 
DOC_PEX_TYPE_TARIF           = CASE 
                                 WHEN lig.TYP_TAR = 'N' THEN 'NORMAL'  
                                 WHEN lig.TYP_TAR = 'F' THEN 'FORFAIT' 
                                 WHEN lig.TYP_TAR = 'P' THEN 'POIDS' 
                                 WHEN lig.TYP_TAR = 'V' THEN 'VOLUME' 
                                 WHEN lig.TYP_TAR = 'U' THEN 'UNITE PAYANTE' 
                                 ELSE ' ' 
                                END, 
DOC_DEVISE_PEX               = ent.DOC_DEVISE_EXP, 
DOC_TAUX_DEVISE              = 0,
DOC_CODE_ARTICLE             = lig.COD_ART, 
DOC_CODE_SOUS_FAMILLE        = lig.SS_FAM, 
/* Infos en-tête EXP */
DOC_CODE_SOCIETE             = ent.DOC_CODE_SOCIETE,
DOC_DESTINATAIRE             = ent.DOC_DESTINATAIRE, 
DOC_CODE_TRANSITAIRE         = ent.DOC_CODE_TRANSITAIRE, 
DOC_CONTACT_TRANSITAIRE      = ent.DOC_CONTACT_TRANSITAIRE, 
DOC_MODE_TRANSPORT_EXP       = ent.DOC_MODE_TRANSPORT_EXP, 
DOC_ORGANISME_CONTROLE       = ent.DOC_ORGANISME_CONTROLE, 
DOC_CODE_ORGANISME           = ent.DOC_CODE_ORGANISME, /* en double */ 
DOC_CONTACT_CONTROLE         = ent.DOC_CONTACT_CONTROLE, 
DOC_DATE_CONTROLE_EFFECTUE   = ent.DOC_DATE_CONTROLE_EFFECTUE,
DOC_DATE_PRET_ENLEV          = ent.DOC_DATE_PRET_ENLEV, 
DOC_DATE_DEPART_TRANSIT      = ent.DOC_DATE_DEPART_TRANSIT, 
DOC_DATE_ARRIVEE_TRANSIT     = ent.DOC_DATE_ARRIVEE_TRANSIT, 
DOC_DATE_DEPART_PREVUE       = ent.DOC_DATE_DEPART_PREVUE, 
DOC_DATE_DEPART_REELLE       = ent.DOC_DATE_DEPART_REELLE, 
DOC_DATE_ARRIVEE_PREVUE      = ent.DOC_DATE_ARRIVEE_PREVUE, 
DOC_DATE_ARRIVEE_REELLE      = ent.DOC_DATE_ARRIVEE_REELLE, 
DOC_DATE_RECEP_DEST          = ent.DOC_DATE_RECEP_DEST, 
DOC_DATE_FAC_EXP             = ent.DOC_DATE_FAC_EXP, 
DOC_DATE_FAC_PROFORMA        = ent.DOC_DATE_FAC_PROFORMA, 
DOC_ID_DATE                  = ent.DOC_ID_DATE, 
DOC_REFERENCE_TRANSPORT      = ent.DOC_REFERENCE_TRANSPORT, 
DOC_NOM_TRANSPORT            = ent.DOC_NOM_TRANSPORT, 
DOC_ETAT_EXP                 = ent.DOC_ETAT_EXP, 
DOC_NUMERO_LICENCE           = ent.DOC_NUMERO_LICENCE, 
DOC_REF_EX_COM_VI            = ent.DOC_REF_EX_COM_VI, 
DOC_INCOTERM_DEPART          = ent.DOC_INCOTERM_DEPART, 
DOC_INCOTERM_ARRIVEE         = ent.DOC_INCOTERM_ARRIVEE, 
DOC_LIEU_DEPART              = ent.DOC_LIEU_DEPART, 
DOC_LIEU_ARRIVEE             = ent.DOC_LIEU_ARRIVEE, 
DOC_NO_POLICE_ASSUR          = ent.DOC_NO_POLICE_ASSUR, 
DOC_DEVISE_EXP               = ent.DOC_DEVISE_EXP, 
DOC_CODE_LOGISTICIEN_EXP     = ent.DOC_CODE_LOGISTICIEN_EXP, 
DOC_POIDS_TOTAL              = ent.DOC_POIDS_TOTAL, 
DOC_VOLUME_TOTAL             = ent.DOC_VOLUME_TOTAL 
/* Fin Infos en-tête EXP */
/* Remise à blanc des CS, avant la màj ultérieure (en cas de cght du paramétrage) */
/*DOC_CS01   = ' ',    
DOC_CS01_L = ' ',
DOC_CS02   = ' ',    
DOC_CS02_L = ' ',
DOC_CS03   = ' ',    
DOC_CS03_L = ' ',
DOC_CS04   = ' ',    
DOC_CS04_L = ' ',
DOC_CS05   = ' ',    
DOC_CS05_L = ' ',
DOC_CS06   = ' ',    
DOC_CS06_L = ' ',
DOC_CS07   = ' ',    
DOC_CS07_L = ' ',
DOC_CS08   = ' ',    
DOC_CS08_L = ' ',
DOC_CS09   = ' ',    
DOC_CS09_L = ' ',
DOC_CS10   = ' ',    
DOC_CS10_L = ' ' */
/* Tables */
from <PREFIXE_DW>DOCUMENTS doc,  
     <PREFIXE_HA>FAC_PIED<SUFFIXE_HA> lig <WITHNOLOCK>, 
     <PREFIXE_DW>DOCUMENTS ent <WITHNOLOCK> left outer join <PREFIXE_HA>MODTRANS<SUFFIXE_HA> mdt <WITHNOLOCK> on mdt.MOD_TRS = ent.DOC_MODE_TRANSPORT_EXP  
where 
/* Critères */
    doc.DOC_TYPE_TRANSACTION  = 'PEX' 
and doc.DOC_NUMERO_DOC        = lig.NUM_EXP
and doc.DOC_NUMERO_LIGNE_1    = lig.NUM_LIG
and doc.DOC_NUMERO_LIGNE_2    = 0
/* Jointure interne lig/ent */
and ent.DOC_TYPE_TRANSACTION  = 'EXP' /* J'ai bien dit EXP, et pas PEX... */
and lig.NUM_EXP               = ent.DOC_NUMERO_DOC
/* Différentiel */
<SEPARATEUR>


/* Récup de l'assureur */
update doc 
set 
DOC_CODE_FOURNISSEUR = soc.ASSUREUR 
from <PREFIXE_DW>DOCUMENTS doc, <PREFIXE_HA>SOCIETE<SUFFIXE_HA> soc <WITHNOLOCK> 
/* Critères */
where doc.DOC_TYPE_TRANSACTION     = 'PEX' 
and   doc.DOC_PEX_TYPE_FOURNISSEUR = 'ASSUREUR' 
/* Jointure interne soc/doc */
and soc.CODE_STE = doc.DOC_CODE_SOCIETE
<SEPARATEUR>


/* Conversion de devises */
update doc 
set 
DOC_PEX_PU = DOC_PEX_PU * 
 (
 CASE 
  /* Devise in euro */
  WHEN dev.INEURO = 0x54 and <EUROACTIF> = 1 and ( '<DATEDUJOUR>' >= dev.DTEENTEUR ) THEN 1/dev.TXFROMEUR
  ELSE
  /* Devise hors euro */
   dev.VALEUR 
 END
 )
,
DOC_PEX_MNT_LIGNE = DOC_PEX_MNT_LIGNE_DEV * 
 (
 CASE 
  /* Devise in euro */
  WHEN dev.INEURO = 0x54 and <EUROACTIF> = 1 and ( '<DATEDUJOUR>' >= dev.DTEENTEUR ) THEN 1/dev.TXFROMEUR
  ELSE
  /* Devise hors euro */
   dev.VALEUR 
 END
 )
from <PREFIXE_DW>DOCUMENTS doc, <PREFIXE_HA>DEVISES<SUFFIXE_HA> dev <WITHNOLOCK> 
/* Critères */
where doc.DOC_TYPE_TRANSACTION     = 'PEX' 
and   doc.DOC_DEVISE_PEX          <> '<DEVISEREF>' 
/* Jointure interne dev/doc */
and dev.CODE_DEVI = doc.DOC_DEVISE_PEX
<SEPARATEUR>

/*============CREATION DES TRANSITAIRE A PARTIR DES EXPES==========*/
insert into <PREFIXE_DW>TRANSITAIRES (TRA_CODE_TRANSITAIRE) 
select distinct DOC_CODE_TRANSITAIRE from <PREFIXE_DW>DOCUMENTS
where DOC_TYPE_TRANSACTION='EXP'
and DOC_CODE_TRANSITAIRE not in (select rtrim(TRA_CODE_TRANSITAIRE) from <PREFIXE_DW>TRANSITAIRES)
<SEPARATEUR>

/*==============2 RECHERCHE DES INFO A PARTIR TABLE OXADW.FOURNISSEURS===*/
update trans
set 
trans.TRA_LIBELLE=f.FRS_RAISON_SOCIALE,
trans.TRA_ADRESSE=f.FRS_ADRESSE,
trans.TRA_VILLE=f.FRS_VILLE,
trans.TRA_CODE_PAYS=f.FRS_PAYS,
trans.TRA_TELEPHONE=f.FRS_TEL ,
trans.TRA_FAX=f.FRS_FAX ,
trans.TRA_EMAIL= f.FRS_EMAIL 
from <PREFIXE_DW>FOURNISSEURS f <WITHNOLOCK>, <PREFIXE_DW>TRANSITAIRES trans
where rtrim(trans.TRA_CODE_TRANSITAIRE)=rtrim(f.FRS_CODE_FOURNISSEUR)
<SEPARATEUR>

/*==============3 RECHERCHE DES INFO A PARTIR TABLE HA.PAYS===*/
update <PREFIXE_DW>TRANSITAIRES
set 
TRA_LIBELLE_PAYS= 
(
select LIBELLE from <PREFIXE_HA>COUNTRY<SUFFIXE_HA> ha <WITHNOLOCK>
where trans.TRA_CODE_PAYS = ha.CODE_PAYS
)
from <PREFIXE_HA>COUNTRY<SUFFIXE_HA> ha <WITHNOLOCK>, <PREFIXE_DW>TRANSITAIRES trans
where trans.TRA_CODE_PAYS = ha.CODE_PAYS
<SEPARATEUR>

/*============CREATION DES ORGANISMES A PARTIR DES EXPES ATTENTION NE PAS METTRE DATAMODI==========*/
insert into <PREFIXE_DW>ORGANISMES (ORG_CODE_ORGANISME,ORG_LIBELLE) 
select distinct DOC_CODE_ORGANISME,' ' from <PREFIXE_DW>DOCUMENTS
where DOC_CODE_ORGANISME not in (select rtrim(ORG_CODE_ORGANISME) from <PREFIXE_DW>ORGANISMES)
and DOC_TYPE_TRANSACTION='EXP'
<SEPARATEUR>

/*==============2 RECHERCHE DES INFO A PARTIR TABLE OXADW.FOURNISSEURS===*/
update org
set 
org.ORG_LIBELLE=f.FRS_RAISON_SOCIALE,
org.ORG_ADRESSE=f.FRS_ADRESSE,
org.ORG_VILLE=f.FRS_VILLE,
org.ORG_CODE_PAYS=f.FRS_PAYS,
org.ORG_TELEPHONE=f.FRS_TEL ,
org.ORG_FAX=f.FRS_FAX ,
org.ORG_EMAIL= f.FRS_EMAIL 
from <PREFIXE_DW>FOURNISSEURS f <WITHNOLOCK>, <PREFIXE_DW>ORGANISMES org
where rtrim(org.ORG_CODE_ORGANISME)=rtrim(f.FRS_CODE_FOURNISSEUR)
<SEPARATEUR>

/*==============3 RECHERCHE DES INFO A PARTIR TABLE HA.PAYS===*/
update <PREFIXE_DW>ORGANISMES
set 
ORG_LIBELLE_PAYS= 
(
select LIBELLE from <PREFIXE_HA>COUNTRY<SUFFIXE_HA> ha <WITHNOLOCK>
where org.ORG_CODE_PAYS = ha.CODE_PAYS
)
from <PREFIXE_HA>COUNTRY<SUFFIXE_HA> ha <WITHNOLOCK>, <PREFIXE_DW>ORGANISMES org
where org.ORG_CODE_PAYS = ha.CODE_PAYS
<SEPARATEUR>
