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

update doc
set 
/* En-tête */
DOC_DESTINATAIRE             = ent.DESTINAT, 
DOC_CODE_TRANSITAIRE         = ent.TRANSIT, 
DOC_CONTACT_TRANSITAIRE      = ent.CTTRANSIT, 
DOC_MODE_TRANSPORT_EXP       = ent.MOD_TRS, 
DOC_ORGANISME_CONTROLE       = ent.ORGCTRL, 
DOC_CODE_ORGANISME           = ent.ORGCTRL, /* en double */ 
DOC_CONTACT_CONTROLE         = ent.CTORGCTR, 
DOC_DATE_CONTROLE_EFFECTUE   = CASE WHEN (ent.DTECTRFAI = ' ' OR ent.DTECTRFAI = '00000000' ) THEN NULL WHEN (ent.DTECTRFAI < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTECTRFAI ,103) END,
DOC_DATE_PRET_ENLEV          = CASE WHEN (ent.DTEPREENV = ' ' OR ent.DTEPREENV = '00000000' ) THEN NULL WHEN (ent.DTEPREENV < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEPREENV ,103) END,
DOC_DATE_DEPART_TRANSIT      = CASE WHEN (ent.DTEDEPTRS = ' ' OR ent.DTEDEPTRS = '00000000' ) THEN NULL WHEN (ent.DTEDEPTRS < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEDEPTRS ,103) END,
DOC_DATE_ARRIVEE_TRANSIT     = CASE WHEN (ent.DTEARRTRS = ' ' OR ent.DTEARRTRS = '00000000' ) THEN NULL WHEN (ent.DTEARRTRS < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEARRTRS ,103) END,
DOC_DATE_DEPART_PREVUE       = CASE WHEN (ent.DTEDEPPRV = ' ' OR ent.DTEDEPPRV = '00000000' ) THEN NULL WHEN (ent.DTEDEPPRV < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEDEPPRV ,103) END,
DOC_DATE_DEPART_REELLE       = CASE WHEN (ent.DTEDEPREE = ' ' OR ent.DTEDEPREE = '00000000' ) THEN NULL WHEN (ent.DTEDEPREE < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEDEPREE ,103) END,
DOC_DATE_ARRIVEE_PREVUE      = CASE WHEN (ent.DTEARRPRV = ' ' OR ent.DTEARRPRV = '00000000' ) THEN NULL WHEN (ent.DTEARRPRV < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEARRPRV ,103) END,
DOC_DATE_ARRIVEE_REELLE      = CASE WHEN (ent.DTEARRREE = ' ' OR ent.DTEARRREE = '00000000' ) THEN NULL WHEN (ent.DTEARRREE < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEARRREE ,103) END,
DOC_DATE_RECEP_DEST          = CASE WHEN (ent.DTERECDES = ' ' OR ent.DTERECDES = '00000000' ) THEN NULL WHEN (ent.DTERECDES < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTERECDES ,103) END,
DOC_DATE_FAC_EXP             = CASE WHEN (ent.DTEFACEXP = ' ' OR ent.DTEFACEXP = '00000000' ) THEN NULL WHEN (ent.DTEFACEXP < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEFACEXP ,103) END,
DOC_DATE_FAC_PROFORMA        = CASE WHEN (ent.DTEFACPF  = ' ' OR ent.DTEFACPF  = '00000000' ) THEN NULL WHEN (ent.DTEFACPF  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEFACPF  ,103) END,
   /* DOC_ID_DATE : Date référence = Date départ réelle, sinon date du jour */
DOC_ID_DATE                  = CASE WHEN (ent.DTEDEPREE = ' ' OR ent.DTEDEPREE = '00000000' ) THEN CONVERT (datetime,'<DATEDUJOUR>' ,103) WHEN (ent.DTEDEPREE < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTEDEPREE ,103) END,
DOC_REFERENCE_TRANSPORT      = ent.REFTRSP, 
DOC_NOM_TRANSPORT            = ent.NOMTRSP, 
DOC_ETAT_EXP                 = ent.ETATEXP, 
DOC_NUMERO_LICENCE           = ent.LICIMPORT, 
DOC_REF_EX_COM_VI            = ent.REFEXCOVI, 
DOC_INCOTERM_DEPART          = ent.INCDEP, 
DOC_INCOTERM_ARRIVEE         = ent.INCARR, 
DOC_LIEU_DEPART              = ent.LIEUDEP, 
DOC_LIEU_ARRIVEE             = ent.LIEUARR, 
DOC_NO_POLICE_ASSUR          = ent.NUM_ASSUR, 
DOC_DEVISE_EXP               = ent.DEVISE, 
DOC_TAUX_DEVISE              = 0, 
DOC_CODE_LOGISTICIEN_EXP     = ent.LOGIST, 
DOC_CODE_SOCIETE             = ent.SOCIETE, 
   /*     En-tête Expédition : Poids et Volume total, on ne les inscrit que sur la première ligne pour chaque expédition ? */
DOC_POIDS_TOTAL              = ent.PDSTOT, /* Poids brut total */ 
DOC_VOLUME_TOTAL             = ent.VOLTOT, 
/* Colis */
DOC_POIDS_COLIS              = col.POIDS,  /* Poids brut */
DOC_LONGUEUR_COLIS           = col.LONGU, 
DOC_LARGEUR_COLIS            = col.LARG, 
DOC_HAUTEUR_COLIS            = col.HAUT, 
DOC_VOLUME_COLIS             = col.VOLUME, 
DOC_TYPE_COLIS               = col.TYPCOLIS, 
DOC_FORMAT_COLIS             = col.FORMAT, 
DOC_NOMBRE_COLIS             = col.NB_COL, 
DOC_REFERENCE_COLIS          = col.REF_COL, 
DOC_ORIGINE_COLIS            = col.ORIGINE, 
/* Détail Colis */
DOC_DESIGNATION_ARTICLE_EXP  = det.DESIGN, 
DOC_QUANTITE_EXP             = det.QUANTITE, 
DOC_UNITE_EXP                = det.UNITE, 
DOC_UNITE_LIGNE              = det.UNITE,   /* en double */
DOC_PU_EXP                   = det.PRIXNET, /* en Devise Réf : conversion éventuelle req. suivante */
DOC_POIDS                    = det.POIDS,   /* Poids brut */ 
DOC_LONGUEUR                 = det.LONGU, 
DOC_LARGEUR                  = det.LARG, 
DOC_HAUTEUR                  = det.HAUT, 
DOC_VOLUME                   = det.VOLUME, 
DOC_PAYS_ORIGINE             = det.PAY_ORI, 
DOC_PAYS_PROVENANCE          = det.PAY_PRO, 
DOC_TVA_EXP                  = det.TX_TVA, 
DOC_CODE_DOUANE_EXP          = det.DOUANE, 
DOC_MONTANT_LIGNE_EXP        = det.QUANTITE * det.PRIXNET, /* en Devise Réf : conversion éventuelle req. suivante */
DOC_MONTANT_LIGNE_EXP_DEV    = det.QUANTITE * det.PRIXNET, /* en Devise Expé */
DOC_CODE_ARTICLE             = det.COD_ART, 
DOC_CODE_SOUS_FAMILLE        = det.SS_FAM, 
DOC_NUMERO_CDE               = det.NO_CDE, 
DOC_NUMERO_LIGNE_CDE         = det.NO_LICDE, 
DOC_NUMERO_BR                = det.NO_BR, 
DOC_NUMERO_LIGNE_BR          = det.NO_LIBR,
DOC_DATEMODI                 = det.DATEMODI 
/* 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>DETCOLIS<SUFFIXE_HA> det <WITHNOLOCK>, <PREFIXE_HA>EXPCOLIS<SUFFIXE_HA> col <WITHNOLOCK>, <PREFIXE_HA>EXPENTET<SUFFIXE_HA> ent <WITHNOLOCK>
where 
/* Critères */
    doc.DOC_TYPE_TRANSACTION     = 'EXP' 
and doc.DOC_NUMERO_DOC           = det.NUM_EXP
and doc.DOC_NUMERO_LIGNE_1       = det.NUM_COL
and doc.DOC_NUMERO_LIGNE_2       = det.NUM_LIG
/* Jointure interne det/col */
and det.NUM_EXP  = col.NUM_EXP
and det.NUM_COL  = col.NUM_COL
/* Jointure interne det/ent */
and det.NUM_EXP  = ent.NUM_EXP
and col.NUM_EXP  = ent.NUM_EXP
/* Différentiel */
and det.DATEMODI >= '<DATEMODIMIN>' and det.DATEMODI <= '<DATEMODIMAX>'
<SEPARATEUR>

/* Pays du centre destinataire */
update doc
set 
DOC_CODE_PAYS_DEST_EXP  = ctr.CL_PAYS 
from <PREFIXE_DW>DOCUMENTS doc,  
     <PREFIXE_DW>CENTRES_LIVRAISON ctr <WITHNOLOCK> 
where 
/* Critères */
    doc.DOC_TYPE_TRANSACTION     = 'EXP' 
/* Jointure interne ctr/doc */
and ctr.CL_CODE_CENTRE_LIVRAISON = doc.DOC_DESTINATAIRE 
/* le champs destination est en not null */
and ctr.CL_PAYS is not null 
and DOC_DATEMODI >= '<DATEMODIMIN>' and DOC_DATEMODI <= '<DATEMODIMAX>'
<SEPARATEUR>

/* Conversion de devises */
update doc 
set 
DOC_PU_EXP = DOC_PU_EXP * 
 (
 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_MONTANT_LIGNE_EXP = DOC_MONTANT_LIGNE_EXP_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     = 'EXP' 
and   doc.DOC_DEVISE_EXP          <> '<DEVISEREF>' 
/* Jointure interne dev/doc */
and dev.CODE_DEVI = doc.DOC_DEVISE_EXP
and DOC_DATEMODI >= '<DATEMODIMIN>' and DOC_DATEMODI <= '<DATEMODIMAX>'
<SEPARATEUR>

/* Mémo Désignation complémentaire ligne Expé */
update doc
set 
 DOC_DESIGNATION_COMP_EXP = substring(mem.CONTMEMO,1,200)
from  
 <PREFIXE_DW>DOCUMENTS doc,
 <PREFIXE_HA>DETCOLIS<SUFFIXE_HA> det <WITHNOLOCK>,
 <PREFIXE_HA>MEMOS<SUFFIXE_HA>    mem <WITHNOLOCK>
where 
/* Critères */
      det.NMDESCOMP <> 0 
/* Jointure interne det/doc */
and   det.NUM_EXP   = doc.DOC_NUMERO_DOC 
and   det.NUM_COL   = doc.DOC_NUMERO_LIGNE_1 
and   det.NUM_LIG   = doc.DOC_NUMERO_LIGNE_2 
/* Jointure interne mem/det */
and   mem.NODEMEMO  = det.NMDESCOMP 
/* Différentiel */
and DOC_DATEMODI >= '<DATEMODIMIN>' and DOC_DATEMODI <= '<DATEMODIMAX>'
<SEPARATEUR>
