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

update doc
set 
/* Entete */
DOC_TYPE_FAC                 = ent.TYPE, 
DOC_CODE_FOURNISSEUR         = ent.CODE_FOUR, 
DOC_DATE_VALID_BON_A_PAYER   = CASE WHEN (ent.DATE_BAP  = ' ' OR ent.DATE_BAP  = '00000000' ) THEN NULL WHEN (ent.DATE_BAP  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DATE_BAP  ,103) END,
DOC_DATE_PERIODE_FAC         = CASE WHEN (ent.DATE_PER  = ' ' OR ent.DATE_PER  = '00000000' ) THEN NULL WHEN (ent.DATE_PER  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DATE_PER  ,103) END,
DOC_DATE_PERIODE             = CASE WHEN (ent.DATE_PER  = ' ' OR ent.DATE_PER  = '00000000' ) THEN NULL WHEN (ent.DATE_PER  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DATE_PER  ,103) END,  
DOC_DATE_ECHEANCE_FAC        = CASE WHEN (ent.DTAE_ECH  = ' ' OR ent.DTAE_ECH  = '00000000' ) THEN NULL WHEN (ent.DTAE_ECH  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTAE_ECH  ,103) END,
DOC_DATE_FACTURE_FOURNISSEUR = CASE WHEN (ent.DATE_FAFO = ' ' OR ent.DATE_FAFO = '00000000' ) THEN NULL WHEN (ent.DATE_FAFO < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DATE_FAFO ,103) END,
DOC_DATE_ENREGISTREMENT_FAC  = CASE WHEN (ent.DATE_ENR  = ' ' OR ent.DATE_ENR  = '00000000' ) THEN NULL WHEN (ent.DATE_ENR  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DATE_ENR  ,103) END,
    /* DOC_ID_DATE : Date r�f�rence = Date p�riode */
DOC_ID_DATE                  = CASE WHEN (ent.DATE_PER  = ' ' OR ent.DATE_PER  = '00000000' ) THEN NULL WHEN (ent.DATE_PER  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DATE_PER  ,103) END, 
    /* DOC_DATE_SCAN : LAD : Date du scan (Spec 4198) */
DOC_DATE_SCAN_FAC            = CASE WHEN (ent.DATESCAN  = ' ' OR ent.DATESCAN  = '00000000' ) THEN NULL WHEN (ent.DATESCAN  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DATESCAN  ,103) END,

    /* DOC_DATE_DERN_REG_FAC : Date du dernier r�glement (Spec 4198) */
DOC_DATE_DERN_REG_FAC         = CASE WHEN (ent.DTE_DERNREG  = ' ' OR ent.DTE_DERNREG  = '00000000' ) THEN NULL WHEN (ent.DTE_DERNREG  < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,ent.DTE_DERNREG  ,103) END,
   /* DOC_MONTANT_TOT_REGLE_FAC_DEV : Montant total r�gl� HT, dans la Devise facture (Spec 4198) */
DOC_MONTANT_TOT_REGLE_FAC_DEV = ent.MT_TOTREG, 
   /* DOC_MONTANT_TOT_REGLE_FAC : Montant total r�gl� HT, dans la Devise R�f, conversion �ventuelle req. suivante (Spec 4198) */
DOC_MONTANT_TOT_REGLE_FAC     = ent.MT_TOTREG, 

DOC_CODE_ORDONNANCE          = ent.ORDO, 
DOC_LIBELLE_COMPTABLE_FAC    = substring( isnull(ent.LIB_COMPT,' '),1,120),
DOC_LITIGE_FAC               = CASE WHEN ent.LITIGE = 0x54 THEN 'OUI' ELSE 'NON' END, 
DOC_DEVISE_FAC               = ent.DEVISE, 
DOC_TAUX_DEVISE              = ent.TX_DEVISE, 
DOC_NUMERO_FACTURE_FRS       = ent.FACT_FOU, 
DOC_CODE_MODE_PAIEMENT_FAC   = ent.MODE_REG, 
DOC_CODE_SOCIETE             = ent.CODE_STE,
DOC_ENTETE_VALIDE_FAC        = case when ENT_VALID=0x54 then 1 else 0 end,
DOC_AFFECTATION_ENREGISTRE_FAC =case when AFF_ENREG=0x54 then 1 else 0 end,
DOC_AFFECTATION_VALIDE_FAC   =case when AFF_VALID=0x54 then 1 else 0 end,
DOC_BON_A_PAYER_FAC          =case when BON_A_PAY=0x54 then 1 else 0 end,
/* Lignes */
/*DOC_COMPTEUR_LIG             = convert(varchar(9),lig.NUM_FACT) + '-' + convert(varchar(3),lig.NUM_LIG) + '-' + '000',  Pour compteur lignes : P0?, encore utile? */
DOC_NUMERO_CDE               = lig.NUM_CDE, 
DOC_NUMERO_LIGNE_CDE         = lig.NUM_LICDE,
DOC_NUMERO_BR                = lig.NUM_BR, 
DOC_NUMERO_LIGNE_BR          = lig.NUM_LIBR,
DOC_DESIGNATION_FAC          = lig.DESIGNAT,
DOC_QUANTITE_LIGNE_FAC       = lig.QUANTITE, 
DOC_MONTANT_LIGNE_FAC        = lig.MONTANT, /* en Devise R�f : conversion �ventuelle req. suivante */      
DOC_MONTANT_LIGNE_TTC_FAC    = lig.MONTANT + (lig.MONTANT * (lig.TAUX_TVA /100) ),  
DOC_MONTANT_LIGNE_TTC_DEV_FAC= lig.MONTANT + (lig.MONTANT * (lig.TAUX_TVA /100) ),
DOC_MONTANT_LIGNE_FAC_DEV    = lig.MONTANT, /* en Devise Facture */ 
DOC_NUMERO_TERME_PAIEMENT    = lig.NUM_TERME, 
DOC_TAUX_TVA_FAC             = lig.TAUX_TVA, 
DOC_TYPE_TVA_FAC             = lig.TYPE_TVA, 
DOC_CODE_SECTION_IMPUTATION  = lig.CODE_SI, 
DOC_CODE_COMPLEMENTAIRE      = lig.CODE_CDC, 
DOC_CODE_SOUS_CPTE_ANALYSE   = lig.CODE_SCA, 
DOC_CODE_SOUS_FAMILLE        = lig.CODE_SFAM,
DOC_CODE_GESTION_INTERNE     = lig.ID_CG,
DOC_ENTETE_COMPTA_FAC        = case when ent.ENT_COMPT=0x54 then 1 else 0 end,
DOC_AFFECTATIONS_COMPTA_FAC  = case when ent.AFF_COMPT=0x54 then 1 else 0 end,
DOC_BAP_COMPTA_FAC           = case when ent.BAP_COMPT=0x54 then 1 else 0 end,
DOC_DATEMODI                 = lig.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>FAC_LIG<SUFFIXE_HA> lig <WITHNOLOCK>, <PREFIXE_HA>FAC_ENT<SUFFIXE_HA> ent <WITHNOLOCK>
where 
/* Crit�res */
    doc.DOC_TYPE_TRANSACTION     = 'FAC' 
and doc.DOC_NUMERO_DOC           = lig.NUM_FACT
and doc.DOC_NUMERO_LIGNE_1       = lig.NUM_LIG
and doc.DOC_NUMERO_LIGNE_2       = 0
/* Jointure interne lig/ent */
and lig.NUM_FACT    = ent.NUM_FACT
/* Diff�rentiel */
and lig.DATEMODI >= '<DATEMODIMIN>' and lig.DATEMODI <= '<DATEMODIMAX>'
<SEPARATEUR>

/* Conversion de devises */
update doc 
set 
DOC_MONTANT_LIGNE_FAC = DOC_MONTANT_LIGNE_FAC_DEV * 
 (
 CASE 
  /* Devise in euro */
  WHEN dev.INEURO = 0x54 and <EUROACTIF> = 1 and ( doc.DOC_DATE_PERIODE_FAC >= (CASE WHEN (dev.DTEENTEUR = ' ' OR dev.DTEENTEUR = '00000000' ) THEN NULL WHEN (dev.DTEENTEUR < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,dev.DTEENTEUR ,103) END ) OR doc.DOC_TAUX_DEVISE =0 ) THEN 1/dev.TXFROMEUR
 ELSE
  /* Devise hors euro */
  CASE WHEN doc.DOC_TAUX_DEVISE = 0  THEN dev.VALEUR ELSE doc.DOC_TAUX_DEVISE END
 END
 ),
DOC_MONTANT_TOT_REGLE_FAC = DOC_MONTANT_TOT_REGLE_FAC_DEV * 
 (
 CASE 
  /* Devise in euro */
  WHEN dev.INEURO = 0x54 and <EUROACTIF> = 1 and ( doc.DOC_DATE_PERIODE_FAC >= (CASE WHEN (dev.DTEENTEUR = ' ' OR dev.DTEENTEUR = '00000000' ) THEN NULL WHEN (dev.DTEENTEUR < '17530101') THEN CONVERT (datetime,'19000101' ,103) ELSE CONVERT (datetime,dev.DTEENTEUR ,103) END ) OR doc.DOC_TAUX_DEVISE =0 ) THEN 1/dev.TXFROMEUR
 ELSE
  /* Devise hors euro */
  CASE WHEN doc.DOC_TAUX_DEVISE = 0  THEN dev.VALEUR ELSE doc.DOC_TAUX_DEVISE END
 END
 )
from <PREFIXE_DW>DOCUMENTS doc, <PREFIXE_HA>DEVISES<SUFFIXE_HA> dev <WITHNOLOCK> 
/* Crit�res */
where doc.DOC_TYPE_TRANSACTION = 'FAC' 
and   doc.DOC_DEVISE_FAC      <> '<DEVISEREF>' 
/* Jointure interne dev/doc */
and dev.CODE_DEVI              = doc.DOC_DEVISE_FAC
and DOC_DATEMODI >= '<DATEMODIMIN>' and DOC_DATEMODI <= '<DATEMODIMAX>'
<SEPARATEUR>
/*Bloc Note*/
update doc
set DOC_BLOC_NOTE_FAC=SUBSTRING( CONTMEMO,1,100)
from <PREFIXE_DW>DOCUMENTS doc,   <PREFIXE_HA>FABNOTE fab <WITHNOLOCK>, <PREFIXE_HA>MEMOS mem <WITHNOLOCK>
where 
doc.DOC_TYPE_TRANSACTION = 'FAC' 
and doc.DOC_NUMERO_DOC = fab.NUM_FACT
and fab.NM_BNOTE       = mem.NODEMEMO
<SEPARATEUR>
/*Recalcul Montant TTC*/
update <PREFIXE_DW>DOCUMENTS set DOC_MONTANT_LIGNE_TTC_FAC=DOC_MONTANT_LIGNE_FAC+ (DOC_MONTANT_LIGNE_FAC * (DOC_TAUX_TVA_FAC /100) ) where DOC_MONTANT_LIGNE_TTC_FAC<>DOC_MONTANT_LIGNE_FAC+ (DOC_MONTANT_LIGNE_FAC * (DOC_TAUX_TVA_FAC /100) )

<SEPARATEUR>
/*Spec 4381 Ajout du champ qui vient de la LAD qui donne les numéros de commandes lues par la LAD. */
update doc set DOC_CDE_LUE_LAD_FAC=NUM_CDE
from <PREFIXE_DW>DOCUMENTS doc ,<PREFIXE_HA>FAC_CDELAD f where DOC_NUMERO_FAC=f.NUM_FACT 

<SEPARATEUR>
/*Spec 5176 surcharge TYPE = C acompte*/
update doc set doc.DOC_TYPE_FAC='C'
	from <PREFIXE_DW>DOCUMENTS doc, <PREFIXE_HA>FAC_ENT ent 
	where doc.DOC_NUMERO_FAC=ent.NUM_FACT and ent.ACOMPTE=0x54 and ent.TYPE='F' and doc.DOC_TYPE_FAC<>'C'