CREATE OR ALTER PROCEDURE MGADD_WALMART (
    docto_ve_id integer)
returns (
    detalle blob sub_type 0 segment size 80)
as
declare variable posicion integer;
declare variable clave_art varchar(20);
declare variable articulo varchar(100);
declare variable unidades numeric(18,5);
declare variable precio_total_neto numeric(15,2);
declare variable precio_unitario numeric(18,6);
declare variable pctje_impuesto numeric(9,6);
declare variable impte_impuesto numeric(18,6);
declare variable cont integer;
declare variable inicio varchar(20);
declare variable walmart_unidad_vta varchar(2);
declare variable contenido_unidad_compra numeric(18,5);
declare variable articulo_id integer;
declare variable clave_principal varchar(20);
declare variable tiene_ieps varchar(1);
declare variable impte_ieps numeric(18,6);
declare variable pctje_ieps numeric(9,6);
declare variable docto_ve_det_id integer;
BEGIN
  DETALLE = '';
  CONT = 0;
  INICIO = '';

  FOR SELECT DVD.POSICION,CA.CLAVE_ARTICULO,A.NOMBRE,DVD.UNIDADES,T.VALOR_DESPLEGADO,
  DVD.PRECIO_TOTAL_NETO,DVD.PRECIO_UNITARIO,--I.PCTJE_IMPUESTO,
 --(DVD.PRECIO_TOTAL_NETO*(I.PCTJE_IMPUESTO/100)),
 A.CONTENIDO_UNIDAD_COMPRA,DVD.ARTICULO_ID,DVD.DOCTO_VE_DET_ID
FROM DOCTOS_VE_DET DVD
INNER JOIN ARTICULOS A ON ( DVD.ARTICULO_ID = A.ARTICULO_ID )
--INNER JOIN IMPUESTOS_ARTICULOS IA ON ( A.ARTICULO_ID = IA.ARTICULO_ID )
--INNER JOIN IMPUESTOS I ON ( IA.IMPUESTO_ID = I.IMPUESTO_ID )
INNER JOIN CLAVES_ARTICULOS CA ON ( CA.ARTICULO_ID = DVD.ARTICULO_ID )
INNER JOIN ROLES_CLAVES_ARTICULOS RCA ON ( CA.ROL_CLAVE_ART_ID = RCA.ROL_CLAVE_ART_ID AND RCA.ES_GTIN = 'S' )
INNER JOIN LIBRES_ARTICULOS LA ON ( LA.ARTICULO_ID = A.ARTICULO_ID )
INNER JOIN LISTAS_ATRIBUTOS T ON ( LA.WALMART_UNIDAD_VTA = T.LISTA_ATRIB_ID )
WHERE DVD.DOCTO_VE_ID = :DOCTO_VE_ID
INTO POSICION, CLAVE_ART, ARTICULO, UNIDADES,WALMART_UNIDAD_VTA, PRECIO_TOTAL_NETO, PRECIO_UNITARIO,
--PCTJE_IMPUESTO, IMPTE_IMPUESTO,
CONTENIDO_UNIDAD_COMPRA,ARTICULO_ID,DOCTO_VE_DET_ID
DO
    BEGIN 

      SELECT COALESCE(A.CLAVE_ARTICULO,'')
      FROM CLAVES_ARTICULOS A
      INNER JOIN ROLES_CLAVES_ARTICULOS B ON ( A.ROL_CLAVE_ART_ID = B.ROL_CLAVE_ART_ID )
      WHERE A.ARTICULO_ID = :ARTICULO_ID AND B.ES_PPAL = 'S'
      INTO CLAVE_PRINCIPAL;

      PCTJE_IEPS = 0;
      IMPTE_IEPS = 0;
      IMPTE_IMPUESTO = 0;
      PCTJE_IMPUESTO = 0;

      SELECT SUM(A.IMPORTE_IMPUESTO) IMPTE_IEPS
      FROM IMPTOS_PARTIDAS_DOCTO_VE(:DOCTO_VE_ID,0) A
      INNER JOIN TIPOS_IMPUESTOS B ON ( A.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IEPS' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID AND A.TIPO_IMPUESTO = 'I'
      INTO IMPTE_IEPS;

      SELECT FIRST 1 A.PCTJE_IMPUESTO
      FROM IMPTOS_PARTIDAS_DOCTO_VE(:DOCTO_VE_ID,0) A
      INNER JOIN TIPOS_IMPUESTOS B ON ( A.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IEPS' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID AND A.TIPO_IMPUESTO = 'I'
      INTO PCTJE_IEPS;

      SELECT SUM(A.IMPORTE_IMPUESTO) IMPTE_IMPUESTO
      FROM IMPTOS_PARTIDAS_DOCTO_VE(:DOCTO_VE_ID,0) A
      INNER JOIN TIPOS_IMPUESTOS B ON ( A.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IVA' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID AND A.TIPO_IMPUESTO = 'I'
      INTO IMPTE_IMPUESTO;

      SELECT FIRST 1 A.PCTJE_IMPUESTO PCTJE_IMPUESTO
      FROM IMPTOS_PARTIDAS_DOCTO_VE(:DOCTO_VE_ID,0) A
      INNER JOIN TIPOS_IMPUESTOS B ON ( A.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IVA' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID AND A.TIPO_IMPUESTO = 'I'
      INTO PCTJE_IMPUESTO;

      CONT = CONT+1;
      IF (CONT > 1) THEN
             INICIO =  '''LIN+';
      ELSE 
            INICIO = 'LIN+';                                                                                                                    --||':IN+'||CLAVE_PRINCIPAL
      DETALLE = COALESCE(DETALLE,'')||COALESCE(INICIO,'')|| COALESCE(POSICION,'') ||'++'||COALESCE(CLAVE_ART,'')||
                ':SRV::9''PIA+1+'||CLAVE_PRINCIPAL||':SA''IMD+F++:::'||COALESCE(ARTICULO,'')||
                '::ES''QTY+47:'||COALESCE(CAST(UNIDADES AS NUMERIC(18,2)),'')||':'||COALESCE(WALMART_UNIDAD_VTA,'')||'';
     --QTY+47:72:CA
      --QTY+59:12:EA
     IF ( WALMART_UNIDAD_VTA = 'CA' ) THEN
               DETALLE = COALESCE(DETALLE,'')||''''||'QTY+59:'||COALESCE(CAST(CONTENIDO_UNIDAD_COMPRA AS NUMERIC(18,2)),'')||':EA';
     DETALLE = COALESCE(DETALLE,'')||'''MOA+203:'||
               COALESCE(CAST(PRECIO_TOTAL_NETO AS NUMERIC(15,2)),'')||
               '''PRI+AAA:'||COALESCE(CAST(PRECIO_UNITARIO AS NUMERIC(18,2)),'')||'::::'||WALMART_UNIDAD_VTA||
               '''TAX+7+VAT+++:::'||CAST(PCTJE_IMPUESTO AS NUMERIC(9,2))||
               '''MOA+124:'||COALESCE(CAST(IMPTE_IMPUESTO AS NUMERIC(18,2)),'');

     if ( IMPTE_IEPS > 0 ) then
     Begin
       DETALLE = COALESCE(DETALLE,'')||'''TAX+7+GST+++:::'||COALESCE(CAST(PCTJE_IEPS AS NUMERIC(9,2)),'')||
                 '''MOA+124:'||COALESCE(CAST(IMPTE_IEPS AS NUMERIC(18,2)),'');
     End

    END
SUSPEND;
end;



GRANT EXECUTE ON PROCEDURE MGADD_WALMART TO USUARIO_MICROSIP;
