CREATE OR ALTER PROCEDURE MGADD_SUBURBIA_33 (
    docto_ve_id integer)
returns (
    detalle varchar(2000))
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 suburbia_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,
      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 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.SUBURBIA_UNIDAD_VTA = T.LISTA_ATRIB_ID )
WHERE DVD.DOCTO_VE_ID = :DOCTO_VE_ID
INTO POSICION, CLAVE_ART, ARTICULO, UNIDADES,SUBURBIA_UNIDAD_VTA, PRECIO_TOTAL_NETO, PRECIO_UNITARIO,
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(IMPORTE_IMPUESTO) IMPORTE_IMPUESTO
      FROM IMPUESTOS_DOCTOS_VE_DET A
      INNER JOIN IMPUESTOS C ON (A.IMPUESTO_ID = C.IMPUESTO_ID)
      INNER JOIN TIPOS_IMPUESTOS B ON ( C.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IEPS' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID
      INTO IMPTE_IEPS;

      SELECT SUM(A.PCTJE_IMPUESTO) PCTJE_IMPUESTO
      FROM IMPUESTOS_DOCTOS_VE_DET A
      INNER JOIN IMPUESTOS C ON (A.IMPUESTO_ID = C.IMPUESTO_ID)
      INNER JOIN TIPOS_IMPUESTOS B ON ( C.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IEPS' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID
      INTO PCTJE_IEPS;

      SELECT SUM(IMPORTE_IMPUESTO) IMPORTE_IMPUESTO
      FROM IMPUESTOS_DOCTOS_VE_DET A
      INNER JOIN IMPUESTOS C ON (A.IMPUESTO_ID = C.IMPUESTO_ID)
      INNER JOIN TIPOS_IMPUESTOS B ON ( C.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IVA' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID
      INTO IMPTE_IMPUESTO;

      SELECT SUM(A.PCTJE_IMPUESTO)
      FROM IMPUESTOS_DOCTOS_VE_DET A
      INNER JOIN IMPUESTOS C ON (A.IMPUESTO_ID = C.IMPUESTO_ID)
      INNER JOIN TIPOS_IMPUESTOS B ON ( C.TIPO_IMPTO_ID = B.TIPO_IMPTO_ID AND B.NOMBRE = 'IVA' )
      WHERE A.DOCTO_VE_DET_ID = :DOCTO_VE_DET_ID
      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(SUBURBIA_UNIDAD_VTA,'')||'';
     --QTY+47:72:CA
      --QTY+59:12:EA
     IF ( SUBURBIA_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)),'')||'::::'||SUBURBIA_UNIDAD_VTA||
               '''TAX+7+VAT+++:::'||CAST(PCTJE_IMPUESTO AS NUMERIC(9,2))||'+B'||
               '''MOA+124:'||COALESCE(CAST(IMPTE_IMPUESTO AS NUMERIC(18,2)),'');

               --'''TAX+7+VAT+++:::'||CAST(PCTJE_IMPUESTO AS NUMERIC(9,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_SUBURBIA_33 TO USUARIO_MICROSIP;

