SET TERM ^ ;

CREATE OR ALTER PROCEDURE IMPR_ARTICULO(
    CODINI VARCHAR(20),
    CODFIN VARCHAR(20),
    CANT integer)
RETURNS (
    ARTICULO VARCHAR(15),
    DESCRIPCION VARCHAR(60),
    PRECIO NUMERIC(18,2),
    CODGRP VARCHAR(2),
    NOMGRP VARCHAR(30),
    COSUBG VARCHAR(3),
    NOMSUBG VARCHAR(30),
    CODMARC VARCHAR(3),
    NOMMARC VARCHAR(30),
    PESO NUMERIC(18,4),
    PUM NUMERIC(18,2),
    LISTA INTEGER,
    NOMLISTA VARCHAR(30),
    FECHA DATE)
AS
declare variable I INTEGER;
begin
EXECUTE PROCEDURE lee_configuracion('FACTURACION', 'FACTURAS', 'CODIGO DE LA LISTA DE PRECIOS A MOSTRAR EN ARTICULOS') returning_values (LISTA);
for select a.arti_cod, arti_des, a.grup_cod, a.subg_cod, a.marc_cod, arti_peso, p.lipr_cod, p.prar_fijo, grup_nom, lipr_nom
    from articulo a, precios_articulo p, grupo g, lista_precios l
    where a.arti_cod = p.arti_cod and a.grup_cod = g.grup_cod and l.lipr_cod = p.lipr_cod AND a.arti_cod >= :codini AND a.arti_cod <= :codfin AND P.lipr_cod = :LISTA
    into :articulo, :descripcion, :codgrp, :cosubg, :codmarc, :peso, :lista, :precio, :nomgrp, :nomlista
    do
    begin
    if (cosubg <> '') then
        select subg_nom from subgrupo where grup_cod = :codgrp and subg_cod = :cosubg into :nomsubg;
    if (codmarc <> '') then
        select marc_nom from marcas where marc_cod = :codmarc into :nommarc;
    if ((PESO <> 0) AND (PESO IS NOT NULL)) then
        PUM = PRECIO / PESO;
    ELSE
        PUM = 0;
    SELECT MAX(AUDI_FECHA) FROM AUDITORIA WHERE TIDO_COD = 126 AND AUDI_COD = :articulo AND AUDI_OPER <> 'D' INTO :fecha;
    if (cant = 0) then
        execute procedure saldo_total_inventario(:articulo, cast('now' as DATE)) returning_values (CANT);
    I = 1;
    WHILE (I < CANT) DO
        BEGIN
        SUSPEND;
        I = I + 1;
        END
    end
end
^

SET TERM ; ^



SET TERM ^ ;

CREATE OR ALTER TRIGGER INTERFAZ_VENTAS_AI FOR INTERFAZ_VENTAS
ACTIVE AFTER INSERT POSITION 0
as
declare variable ID INTEGER;
begin
if (new.tido_cod > 40) then
    begin
    /* es cartera */
    ID = gen_id(id_intercartera, 1);
    INSERT INTO INTERFAZ_CARTERA (INCA_ID, TIDO_COD, PREF_PRE, INCA_NOMBRE, TICO_COD, PRCO_PRE, INCA_CONFIRMAR,
        INCA_BASE, INCA_IVA, INCA_RTFTE, INCA_RTIVA, INCA_RTICA, INCA_CLIE,
        INCA_CTABASE, INCA_CTAIVA, INCA_CTARTFTE, INCA_CTARTIVA, INCA_CTARTICA, INCA_CTACLIE, INCA_USUARIO)
        VALUES (:ID, NEW.tido_cod, NEW.pref_pre, NEW.inve_nombre, NEW.tico_cod, NEW.prco_pre, NEW.inve_confirmar,
        NEW.inve_ventas, NEW.inve_iva, NEW.inve_rtfte, NEW.inve_rtiva, NEW.inve_rtica, NEW.inve_cartera,
        NEW.inve_ctaventas, NEW.inve_ctaiva,  NEW.inve_ctartfte, NEW.inve_ctartiva, NEW.inve_ctartica, NEW.inve_ctacartera, NEW.inve_usuario);

    INSERT INTO INTERFAZ_CARTERA_CTAS (INCA_ID, INCD_ITEM, INCD_CUENTA, INCD_PORC, INCD_BASE, INCD_VALOR, INCD_DB)
        SELECT :ID, INVC_ITEM, INVC_CUENTA, INVC_PORC, INVC_DB, INVC_BASE, INVC_VALOR FROM interfaz_ventas_ctas WHERE INVE_ID = NEW.inve_id;
    end
ELSE
    IF (NEW.INVE_ID <> 0) THEN
      INSERT INTO AUDITORIA(AUDI_USUARIO, TIDO_COD, AUDI_IDDOC, AUDI_OPER, AUDI_COD)
        VALUES (USER, 117, NEW.inve_id, 'I', NEW.pref_pre);
end
^

SET TERM ; ^

GRANT UPDATE,REFERENCES ON INTERFAZ_VENTAS TO TRIGGER INTERFAZ_VENTAS_AI;
GRANT INSERT ON INTERFAZ_CARTERA TO TRIGGER INTERFAZ_VENTAS_AI;
GRANT INSERT ON INTERFAZ_CARTERA_CTAS TO TRIGGER INTERFAZ_VENTAS_AI;
GRANT SELECT ON INTERFAZ_VENTAS_CTAS TO TRIGGER INTERFAZ_VENTAS_AI;
GRANT INSERT ON AUDITORIA TO TRIGGER INTERFAZ_VENTAS_AI;

SET TERM ^ ;

CREATE OR ALTER TRIGGER INTERFAZ_VENTAS_AU FOR INTERFAZ_VENTAS
ACTIVE AFTER UPDATE POSITION 0
as
declare variable id integer;
begin
if (new.tido_cod > 40) then
    begin
    DELETE FROM INTERFAZ_CARTERA WHERE TIDO_COD = OLD.tido_cod AND PREF_PRE = OLD.pref_pre AND INCA_NOMBRE = OLD.inve_nombre;

    /* es cartera */
    ID = gen_id(id_intercartera, 1);
    INSERT INTO INTERFAZ_CARTERA (INCA_ID, TIDO_COD, PREF_PRE, INCA_NOMBRE, TICO_COD, PRCO_PRE, INCA_CONFIRMAR,
        INCA_BASE, INCA_IVA, INCA_RTFTE, INCA_RTIVA, INCA_RTICA, INCA_CLIE,
        INCA_CTABASE, INCA_CTAIVA, INCA_CTARTFTE, INCA_CTARTIVA, INCA_CTARTICA, INCA_CTACLIE, INCA_USUARIO)
        VALUES (:ID, NEW.tido_cod, NEW.pref_pre, NEW.inve_nombre, NEW.tico_cod, NEW.prco_pre, NEW.inve_confirmar,
        NEW.inve_ventas, NEW.inve_iva, NEW.inve_rtfte, NEW.inve_rtiva, NEW.inve_rtica, NEW.inve_cartera,
        NEW.inve_ctaventas, NEW.inve_ctaiva,  NEW.inve_ctartfte, NEW.inve_ctartiva, NEW.inve_ctartica, NEW.inve_ctacartera, NEW.inve_usuario);

    INSERT INTO INTERFAZ_CARTERA_CTAS (INCA_ID, INCD_ITEM, INCD_CUENTA, INCD_PORC, INCD_BASE, INCD_VALOR, INCD_DB)
        SELECT :ID, INVC_ITEM, INVC_CUENTA, INVC_PORC, INVC_DB, INVC_BASE, INVC_VALOR FROM interfaz_ventas_ctas WHERE INVE_ID = NEW.inve_id;
    end
ELSE
  INSERT INTO AUDITORIA(AUDI_USUARIO, TIDO_COD, AUDI_IDDOC, AUDI_OPER, AUDI_COD)
    VALUES (USER, 117, NEW.inve_id, 'U', NEW.pref_pre);
end
^

SET TERM ; ^

GRANT UPDATE,REFERENCES ON INTERFAZ_VENTAS TO TRIGGER INTERFAZ_VENTAS_AU;
GRANT SELECT,INSERT,DELETE ON INTERFAZ_CARTERA TO TRIGGER INTERFAZ_VENTAS_AU;
GRANT INSERT ON INTERFAZ_CARTERA_CTAS TO TRIGGER INTERFAZ_VENTAS_AU;
GRANT SELECT ON INTERFAZ_VENTAS_CTAS TO TRIGGER INTERFAZ_VENTAS_AU;
GRANT INSERT ON AUDITORIA TO TRIGGER INTERFAZ_VENTAS_AU;

SET TERM ^ ;

CREATE OR ALTER TRIGGER INTERFAZ_VENTAS_AD FOR INTERFAZ_VENTAS
ACTIVE AFTER DELETE POSITION 0
as
begin
if (old.tido_cod > 40) then
    DELETE FROM INTERFAZ_CARTERA WHERE TIDO_COD = OLD.tido_cod AND PREF_PRE = OLD.pref_pre AND INCA_NOMBRE = OLD.inve_nombre;
else
  INSERT INTO AUDITORIA(AUDI_USUARIO, TIDO_COD, AUDI_IDDOC, AUDI_OPER, AUDI_COD)
    VALUES (USER, 117, OLD.inve_id, 'D', OLD.pref_pre);
end
^

SET TERM ; ^

GRANT UPDATE,REFERENCES ON INTERFAZ_VENTAS TO TRIGGER INTERFAZ_VENTAS_AD;
GRANT SELECT,DELETE ON INTERFAZ_CARTERA TO TRIGGER INTERFAZ_VENTAS_AD;
GRANT INSERT ON AUDITORIA TO TRIGGER INTERFAZ_VENTAS_AD;

/* CXPAGAR */
SET TERM ^ ;

CREATE OR ALTER TRIGGER INTERFAZ_COMPRAS_AI FOR INTERFAZ_COMPRAS
ACTIVE AFTER INSERT POSITION 0
as
declare variable ID INTEGER;
begin
if (new.tido_cod > 50) then
    begin
    /* es cartera */
    ID = gen_id(id_intercxpagar, 1);
    INSERT INTO interfaz_cxpagar (INCP_ID, TIDO_COD, PREF_PRE, INCP_NOMBRE, TICO_COD, PRCO_PRE, INCP_CONFIRMAR,
        INCP_BASE, INCP_IVA, INCP_RTFTE, INCP_RTIVA, INCP_RTICA, INCP_PROV,
        INCP_CTABASE, INCP_CTAIVA, INCP_CTARTFTE, INCP_CTARTIVA, INCP_CTARTICA, INCP_CTAPROV, INCP_USUARIO)
        VALUES (:ID, NEW.tido_cod, NEW.pref_pre, NEW.inco_nombre, NEW.tico_cod, NEW.prco_pre, NEW.inco_confirmar,
        NEW.inco_inven, NEW.inco_iva, NEW.inco_rtfte, NEW.inco_rtiva, NEW.inco_rtica, NEW.inco_cxp,
        NEW.inco_ctainven, NEW.inco_ctaiva,  NEW.inco_ctartfte, NEW.inco_ctartiva, NEW.inco_ctartica, NEW.inco_ctacxp, NEW.inco_usuario);

    INSERT INTO interfaz_cxpagar_ctas (INCP_ID, INPC_ITEM, INPC_CUENTA, INPC_PORC, INPC_BASE, INPC_VALOR, INPC_DB)
        SELECT :ID, INCC_ITEM, INCC_CUENTA, INCC_PORC, INCC_DB, INCC_BASE, INCC_VALOR FROM interfaz_compras_ctas WHERE INCO_ID = NEW.inco_id;
    end
ELSE
IF (NEW.INCO_ID <> 0) THEN
  INSERT INTO AUDITORIA(AUDI_USUARIO, TIDO_COD, AUDI_IDDOC, AUDI_OPER, AUDI_COD)
    VALUES (USER, 114, NEW.inco_id, 'I', NEW.pref_pre);
end
^

SET TERM ; ^

GRANT UPDATE,REFERENCES ON INTERFAZ_COMPRAS TO TRIGGER INTERFAZ_COMPRAS_AI;
GRANT INSERT ON INTERFAZ_CXPAGAR TO TRIGGER INTERFAZ_COMPRAS_AI;
GRANT INSERT ON INTERFAZ_CXPAGAR_CTAS TO TRIGGER INTERFAZ_COMPRAS_AI;
GRANT SELECT ON INTERFAZ_COMPRAS_CTAS TO TRIGGER INTERFAZ_COMPRAS_AI;
GRANT INSERT ON AUDITORIA TO TRIGGER INTERFAZ_COMPRAS_AI;

SET TERM ^ ;

CREATE OR ALTER TRIGGER INTERFAZ_COMPRAS_AU FOR INTERFAZ_COMPRAS
ACTIVE AFTER UPDATE POSITION 0
as
declare variable ID INTEGER;
begin
if (new.tido_cod > 50) then
    begin
    DELETE FROM interfaz_cxpagar WHERE TIDO_COD = OLD.tido_cod AND PREF_PRE = OLD.pref_pre AND INCP_NOMBRE = OLD.inco_nombre;
    /* es CXPAGAR */
    ID = gen_id(id_intercxpagar, 1);
    INSERT INTO interfaz_cxpagar (INCP_ID, TIDO_COD, PREF_PRE, INCP_NOMBRE, TICO_COD, PRCO_PRE, INCP_CONFIRMAR,
        INCP_BASE, INCP_IVA, INCP_RTFTE, INCP_RTIVA, INCP_RTICA, INCP_PROV,
        INCP_CTABASE, INCP_CTAIVA, INCP_CTARTFTE, INCP_CTARTIVA, INCP_CTARTICA, INCP_CTAPROV, INCP_USUARIO)
        VALUES (:ID, NEW.tido_cod, NEW.pref_pre, NEW.inco_nombre, NEW.tico_cod, NEW.prco_pre, NEW.inco_confirmar,
        NEW.inco_inven, NEW.inco_iva, NEW.inco_rtfte, NEW.inco_rtiva, NEW.inco_rtica, NEW.inco_cxp,
        NEW.inco_ctainven, NEW.inco_ctaiva,  NEW.inco_ctartfte, NEW.inco_ctartiva, NEW.inco_ctartica, NEW.inco_ctacxp, NEW.inco_usuario);

    INSERT INTO interfaz_cxpagar_ctas (INCP_ID, INPC_ITEM, INPC_CUENTA, INPC_PORC, INPC_BASE, INPC_VALOR, INPC_DB)
        SELECT :ID, INCC_ITEM, INCC_CUENTA, INCC_PORC, INCC_DB, INCC_BASE, INCC_VALOR FROM interfaz_compras_ctas WHERE INCO_ID = NEW.inco_id;
    end
ELSE
  INSERT INTO AUDITORIA(AUDI_USUARIO, TIDO_COD, AUDI_IDDOC, AUDI_OPER, AUDI_COD)
    VALUES (USER, 114, NEW.inco_id, 'U', NEW.pref_pre);
end
^

SET TERM ; ^

GRANT UPDATE,REFERENCES ON INTERFAZ_COMPRAS TO TRIGGER INTERFAZ_COMPRAS_AU;
GRANT SELECT,INSERT,DELETE ON INTERFAZ_CXPAGAR TO TRIGGER INTERFAZ_COMPRAS_AU;
GRANT INSERT ON INTERFAZ_CXPAGAR_CTAS TO TRIGGER INTERFAZ_COMPRAS_AU;
GRANT SELECT ON INTERFAZ_COMPRAS_CTAS TO TRIGGER INTERFAZ_COMPRAS_AU;
GRANT INSERT ON AUDITORIA TO TRIGGER INTERFAZ_COMPRAS_AU;

SET TERM ^ ;

CREATE OR ALTER TRIGGER INTERFAZ_COMPRAS_AD FOR INTERFAZ_COMPRAS
ACTIVE AFTER DELETE POSITION 0
as
begin
if (old.tido_cod > 40) then
    DELETE FROM interfaz_cxpagar WHERE TIDO_COD = OLD.tido_cod AND PREF_PRE = OLD.pref_pre AND INCP_NOMBRE = OLD.inco_nombre;
else
  INSERT INTO AUDITORIA(AUDI_USUARIO, TIDO_COD, AUDI_IDDOC, AUDI_OPER, AUDI_COD)
    VALUES (USER, 114, OLD.inco_id, 'D', OLD.pref_pre);
end
^

SET TERM ; ^

GRANT UPDATE,REFERENCES ON INTERFAZ_COMPRAS TO TRIGGER INTERFAZ_COMPRAS_AD;
GRANT SELECT,DELETE ON INTERFAZ_CXPAGAR TO TRIGGER INTERFAZ_COMPRAS_AD;
GRANT INSERT ON AUDITORIA TO TRIGGER INTERFAZ_COMPRAS_AD;


INSERT INTO IMPORTACION_INVENTARIO (IMIN_TIPO, IMIN_DATO, IMIN_COLUMNA, IMIN_ANCHO) VALUES (3, 'ENDE_CONSUMO', 8, 20);

INSERT INTO NOMBRES_CAMPOS (NOMBRE, DESCRIPCION) VALUES ('ENDE_CONSUMO', 'Impuesto al consumo');
commit work;


SET TERM ^ ;

CREATE OR ALTER PROCEDURE IMPR_FACTURA(
    ID INTEGER)
RETURNS (
    PREF VARCHAR(4),
    NUMERO VARCHAR(6),
    FECHA DATE,
    VENCE DATE,
    DIASVENCE INTEGER,
    CONTCRED CHAR(7),
    NIT VARCHAR(20),
    NOMTERCERO VARCHAR(60),
    NOMCLIENTE VARCHAR(60),
    VENDEDOR INTEGER,
    NOMVENDEDOR VARCHAR(60),
    PUNTOVTA INTEGER,
    NOMPUNTOVTA VARCHAR(30),
    CODBODEGA VARCHAR(2),
    NOMBODEGA VARCHAR(30),
    AUTORIZACION VARCHAR(20),
    DESPACHO VARCHAR(255),
    TRANSPORTADOR VARCHAR(60),
    COTIZACION VARCHAR(30),
    PEDIDO VARCHAR(30),
    REMISION VARCHAR(30),
    COMIPORC NUMERIC(9,2),
    COMIMONTO NUMERIC(18,2),
    SUBTOTAL NUMERIC(18,2),
    DTOPORC NUMERIC(9,2),
    DTOMONTO NUMERIC(18,2),
    ADICIONAL NUMERIC(18,2),
    IVAMONTO NUMERIC(18,2),
    RTEFTEPORC NUMERIC(9,2),
    RTEFTEMONTO NUMERIC(18,2),
    RTEIVAPORC NUMERIC(9,2),
    RTEIVAMONTO NUMERIC(18,2),
    RTEICAPORC NUMERIC(9,2),
    RTEICAMONTO NUMERIC(18,2),
    EXTRA NUMERIC(18,2),
    DTOFPORC NUMERIC(9,2),
    DTOFMONTO NUMERIC(18,2),
    FECHADTO DATE,
    TOTALFAC NUMERIC(18,2),
    TOTALPAGAR NUMERIC(18,2),
    OBS BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    ITEM INTEGER,
    ARTICULO VARCHAR(15),
    CODBAR VARCHAR(15),
    ARTIDES VARCHAR(60),
    CANT NUMERIC(18,4),
    LOTE VARCHAR(15),
    VLOTE DATE,
    UNIDAD VARCHAR(8),
    FACTOR INTEGER,
    LISTAPR INTEGER,
    REFITEM VARCHAR(60),
    BODITEM VARCHAR(2),
    PRUNIT NUMERIC(18,2),
    DTOITPORC NUMERIC(9,2),
    DTOITMONTO NUMERIC(18,2),
    PRNETO NUMERIC(18,2),
    IVAPORC NUMERIC(9,2),
    IVAITMONTO NUMERIC(18,2),
    CONSUMO NUMERIC(18,2),
    SUBTOTIT NUMERIC(18,2),
    SUBTOTITCON NUMERIC(18,2),
    TOTAL NUMERIC(18,2),
    CODIGOCL VARCHAR(20),
    ZONACOD VARCHAR(2),
    ZONANOM VARCHAR(60),
    DV CHAR(1),
    DIRECCION VARCHAR(60),
    CIUDAD VARCHAR(40),
    TELEFONO VARCHAR(40),
    CONTACTO VARCHAR(60),
    FAX VARCHAR(25),
    GRUPO VARCHAR(2),
    NOMGRUPO VARCHAR(30),
    SUBGRUPO VARCHAR(3),
    NOMSUBG VARCHAR(30),
    MARCA VARCHAR(3),
    NOMMARCA VARCHAR(30),
    PESO NUMERIC(9,4),
    ANCHO NUMERIC(18,4),
    ALTO NUMERIC(18,4),
    LARGO NUMERIC(18,4),
    SUMA1 NUMERIC(18,2),
    SUMA2 NUMERIC(18,2),
    SUMA3 NUMERIC(18,2),
    IVA1 NUMERIC(18,2),
    IVA2 NUMERIC(18,2),
    IVA3 NUMERIC(18,2),
    SUMAEX NUMERIC(18,2),
    SUMAGR NUMERIC(18,2),
    TOTCONSUMO NUMERIC(18,2),
    VEHICULO VARCHAR(8),
    RECIBIDO NUMERIC(18,2),
    CAMBIO NUMERIC(18,2),
    HORA TIME,
    FORMAPAGO1 VARCHAR(30),
    MONTOPAGO1 NUMERIC(18,2),
    FORMAPAGO2 VARCHAR(30),
    MONTOPAGO2 NUMERIC(18,2),
    FORMAPAGO3 VARCHAR(30),
    MONTOPAGO3 NUMERIC(18,2),
    PUNTOS INTEGER,
    PUNTOSACUM INTEGER,
    PUNTOSVENC INTEGER,
    SUCUR VARCHAR(10))
AS
DECLARE VARIABLE IMPTOS CHAR(1);
DECLARE VARIABLE TARIFA INTEGER;
declare variable DEVUELTO NUMERIC(18,2);
/*DECLARE VARIABLE NROCOPIA INTEGER;*/
declare variable ORDENCOD CHAR(2);
declare variable IMPRDEV CHAR(2);
declare variable IMPR CHAR(1);
declare variable ITEMFP INTEGER;
declare variable FORMAP VARCHAR(30);
declare variable MONTOP NUMERIC(18,2);
BEGIN
SELECT F.PREF_PRE, FACT_NUMERO, FACT_FECHA, FACT_VENCE, F.BODE_COD, BODE_NOM, F.TERC_NIT, FACT_NOMCLIENTE, F.VEND_COD, VEND_NOMBRE, F.PTVT_ID, PTVT_NOM,
    AUTO_NUMERO, FACT_DESPACHO, FACT_TRANSP, FACT_COTIZACI, FACT_PEDIDO, FACT_REMISION, FACT_COMIPORC, FACT_COMIMONTO, FACT_IVAINC, 
    FACT_DTOPOR, FACT_DTOMONTO, FACT_ADICIONAL, FACT_IVAMONTO, FACT_RTFTEPOR, FACT_RTFTEMONTO, FACT_RTIVAPOR, FACT_RTIVAMONTO, FACT_RTICAPOR, FACT_RTICAMONTO, FACT_EXTRA, FACT_DTOFPOR, FACT_DTOFMONTO, FACT_DTOFFECHA, FACT_TOTAL,
    TERC_DIR, TERC_CIU, TERC_TEL, TERC_CONTACTO, TERC_FAX, TERC_DV,
    FACT_OBS, VEHI_COD, /*FACT_NROCOPIA,*/ FACT_RECIBIDO, FACT_SUCURSAL, TERC_NOM
    FROM FACTURAS F, BODEGA B, VENDEDORES V, PUNTO_VENTA P, TERCEROS T
    WHERE F.BODE_COD = B.BODE_COD AND F.VEND_COD = V.VEND_COD AND F.PTVT_ID = P.PTVT_ID AND F.TERC_NIT = T.TERC_NIT AND F.FACT_ID = :ID
    into :PREF, :NUMERO, :FECHA, :VENCE, :CODBODEGA, :NOMBODEGA, :NIT, :NOMTERCERO, :VENDEDOR, :NOMVENDEDOR, :PUNTOVTA, :NOMPUNTOVTA,
    :AUTORIZACION, :DESPACHO, :TRANSPORTADOR, :COTIZACION, :PEDIDO, :REMISION, :COMIPORC, :COMIMONTO, :IMPTOS,
    :DTOPORC, :DTOMONTO, :ADICIONAL, :IVAMONTO, :RTEFTEPORC, :RTEFTEMONTO, :RTEIVAPORC, :RTEIVAMONTO, :RTEICAPORC, :RTEICAMONTO, :EXTRA, :DTOFPORC, :DTOFMONTO, :FECHADTO, :TOTALFAC,
    :DIRECCION, :CIUDAD, :TELEFONO, :CONTACTO, :FAX, :DV, :OBS, :VEHICULO,/* :NROCOPIA,*/ :RECIBIDO, :SUCUR, :nomcliente;

  /* ACUMULE LOS PUNTOS, SE HACE ACA POR SER POSTERIOR AL DETALLE */
  EXECUTE PROCEDURE acumula_puntos_vendedor (31, :id, :vendedor, :fecha) returning_values (:PUNTOS);
  EXECUTE PROCEDURE acumula_puntos_cliente (31, :id, :nit, :fecha) returning_values (:PUNTOS);
  EXECUTE PROCEDURE consulta_puntos_cliente (:id, :nit, :fecha) returning_values (:puntos, :puntosacum, :puntosvenc);

  SELECT CLIE_COD, C.ZONA_COD, ZONA_NOM
    FROM CLIENTES C, ZONAS Z
    WHERE TERC_NIT = :NIT AND C.ZONA_COD = Z.ZONA_COD
    INTO :CODIGOCL, :ZONACOD, :ZONANOM;
  /*SELECT NOCO_NOMBRE FROM NOMBRES_COPIAS where NOCO_ID = :NROCOPIA INTO :NOMCOPIA;*/
  SELECT CLSU_DIR, CLSU_CIUDAD, CLSU_TEL FROM CLIENTE_SUCURSALES WHERE TERC_NIT = :NIT AND CLCU_COD = :SUCUR
    INTO :DIRECCION, :CIUDAD, :TELEFONO;
  /*if (NOMCOPIA IS NULL) then
    NOMCOPIA = 'COPIA No. ' || NROCOPIA;**/
  DIASVENCE = VENCE - FECHA;
  if (DIASVENCE > 0) then
    CONTCRED = 'CREDITO';
  ELSE
    CONTCRED = 'CONTADO';
  SUBTOTAL = TOTALFAC - EXTRA - IVAMONTO - ADICIONAL + DTOMONTO;
  TOTALPAGAR = TOTALFAC - RTEFTEMONTO - RTEIVAMONTO - RTEICAMONTO;
  if (RECIBIDO <> 0) then
      CAMBIO = RECIBIDO - totalpagar;
  ELSE
    CAMBIO = 0;
  SUMAEX = 0;
  SUMA1 = 0;
  SUMA2 = 0;
  SUMA3 = 0;
  IVA1 = 0;
  IVA2 = 0;
  IVA3 = 0;
  TOTCONSUMO = 0;
  MONTOPAGO1 = 0;
  SELECT MAX(AUDI_HORA) FROM AUDITORIA WHERE TIDO_COD = 31 AND AUDI_IDDOC = :ID AND AUDI_OPER = 'I' INTO :HORA;
  /* AHORA LAS FORMAS DE PAGO, BUSQUE EL ABONO DE HOY A LA FACTURA */
  ITEMFP = 1;
  MONTOPAGO1 = 0;
  MONTOPAGO2 = 0;
  MONTOPAGO3 = 0;
  FOR SELECT FOPA_NOM, RCPA_MONTO FROM RECIBOS_CAJA_PAGO P, FORMAS_PAGO F, RECIBOS_CAJA R, RECIBOS_CAJA_DETALLE D
    WHERE R.RECA_ID = P.RECA_ID AND R.RECA_ID = D.RECA_ID AND P.FOPA_ID = F.FOPA_ID AND RECA_FECHA = :FECHA AND RCDE_TIPODOC = 31 AND RCDE_IDDOC = :ID
    INTO :formap, :MONTOP
    DO
    BEGIN
    if (ITEMFP = 1) then
        BEGIN
        FORMAPAGO1 = FORMAP;
        MONTOPAGO1 = MONTOP;
        END
    if (ITEMFP = 2) then
        BEGIN
        FORMAPAGO2 = FORMAP;
        MONTOPAGO2 = MONTOP;
        END
    if (ITEMFP = 3) then
        BEGIN
        FORMAPAGO3 = FORMAP;
        MONTOPAGO3 = MONTOP;
        END
    ITEMFP = ITEMFP + 1;
    END
  EXECUTE PROCEDURE lee_configuracion ('FACTURACION','DOCUMENTOS','ORDENAR ITEMS POR CODIGO DE ARTICULO') returning_values (:ORDENCOD);
  EXECUTE PROCEDURE lee_configuracion ('FACTURACION','POS', 'IMPRIMIR DEVOLUCIONES DE ARTICULOS NEGATIVOS') returning_values (:imprdev);
  if (ORDENCOD = 'SI') then
    BEGIN
    FOR SELECT FADE_ITEM, D.ARTI_COD, FADE_CODBAR, SUBSTR(FADE_DESC,1,60), FADE_CANT, FADE_UNIDAD, FADE_FACTOR, BODE_COD, FADE_LOTE, LIPR_COD, FADE_PRUNIT, FADE_DTOPORC, FADE_DTOMONTO, FADE_IVAPORC, FADE_IVAMONTO, FADE_CONSUMO, FADE_TOTAL, FADE_REFERENCIA,
        GRUP_COD, SUBG_COD, MARC_COD, ARTI_PESO, ARTI_ANCHO, ARTI_ALTO, ARTI_LARGO, TAIV_COD, FADE_DEVUELTO
        FROM FACTURAS_DETALLE D, ARTICULO A
        WHERE D.ARTI_COD = A.ARTI_COD AND D.FACT_ID = :ID
        ORDER BY D.ARTI_COD
        INTO :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :FACTOR, :BODITEM, :LOTE, :LISTAPR, :PRUNIT, :DTOITPORC, :DTOITMONTO, :IVAPORC, :IVAITMONTO, :CONSUMO, :TOTAL, :refitem,
        :GRUPO, :SUBGRUPO, :MARCA, :PESO, :ANCHO, :ALTO, :LARGO, :TARIFA, :devuelto
        DO
          BEGIN
          if (IMPRDEV <> 'SI') then
            BEGIN
            if ((CANT > 0) AND (DEVUELTO = 0)) then
                IMPR = 'S';
            ELSE
                IMPR = 'N'; /* ES DEVOLUCION */
            END
          ELSE
            IMPR = 'S';
          if (IMPR = 'S') then
            BEGIN
            if (IMPTOS = 'S') then
                PRNETO = PRUNIT - DTOITMONTO - ((IVAITMONTO+CONSUMO) / CANT);
            ELSE
                PRNETO = PRUNIT - DTOITMONTO;
            SUBTOTIT = TOTAL - IVAITMONTO - CONSUMO;
            SUBTOTITCON = TOTAL;
            TOTCONSUMO = TOTCONSUMO + CONSUMO;
            SELECT LOTE_VENCE FROM LOTES WHERE LOTE_NRO = :lote AND ARTI_COD = :ARTICULO INTO :vlote;
            if (TARIFA = 0) then
                SUMAEX = SUMAEX + TOTAL;
            if (TARIFA = 1) then
                BEGIN
                SUMA1 = SUMA1 + TOTAL - IVAITMONTO;
                IVA1 = IVA1 + IVAITMONTO;
                END
            if (TARIFA = 2) then
                BEGIN
                SUMA2 = SUMA2 + TOTAL - IVAITMONTO;
                IVA2 = IVA2 + IVAITMONTO;
                END
            if (TARIFA = 3) then
                BEGIN
                SUMA3 = SUMA3 + TOTAL - IVAITMONTO;
                IVA3 = IVA3 + IVAITMONTO;
                END
            SUMAGR = SUMA1 + SUMA2 + SUMA3;
            if (IMPTOS = 'N') then
                TOTAL = TOTAL - IVAITMONTO - CONSUMO;
            if (ANCHO IS NULL) then
                ANCHO = 0;
            if (ALTO IS NULL) then
                ALTO = 0;
            if (LARGO IS NULL) then
                LARGO = 0;
            if (PESO IS NULL) then
                PESO = 0;
            PESO = PESO * CANT;
            SUSPEND;
            END
          END
    END
ELSE
    BEGIN
    FOR SELECT FADE_ITEM, D.ARTI_COD, FADE_CODBAR, SUBSTR(FADE_DESC,1,60), FADE_CANT, FADE_UNIDAD, FADE_FACTOR, BODE_COD, FADE_LOTE, LIPR_COD, FADE_PRUNIT, FADE_DTOPORC, FADE_DTOMONTO, FADE_IVAPORC, FADE_IVAMONTO, FADE_CONSUMO, FADE_TOTAL, FADE_REFERENCIA,
        GRUP_COD, SUBG_COD, MARC_COD, ARTI_PESO, ARTI_ANCHO, ARTI_ALTO, ARTI_LARGO, TAIV_COD, FADE_DEVUELTO
        FROM FACTURAS_DETALLE D, ARTICULO A
        WHERE D.ARTI_COD = A.ARTI_COD AND D.FACT_ID = :ID
        ORDER BY FADE_ITEM
        INTO :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :FACTOR, :BODITEM, :LOTE, :LISTAPR, :PRUNIT, :DTOITPORC, :DTOITMONTO, :IVAPORC, :IVAITMONTO, :CONSUMO, :TOTAL, :refitem, 
        :GRUPO, :SUBGRUPO, :MARCA, :PESO, :ANCHO, :ALTO, :LARGO, :TARIFA, :devuelto
        DO
          BEGIN
          if (IMPRDEV <> 'SI') then
            BEGIN
            if ((CANT > 0) AND (DEVUELTO = 0)) then
                IMPR = 'S';
            ELSE
                IMPR = 'N'; /* ES DEVOLUCION */
            END
          ELSE
            IMPR = 'S';
          if (IMPR = 'S') then
            BEGIN
            SELECT GRUP_NOM FROM GRUPO G WHERE GRUP_COD = :GRUPO INTO NOMGRUPO;
            SELECT MARC_NOM FROM MARCAS WHERE MARC_COD = :MARCA INTO NOMMARCA;
            SELECT SUBG_NOM FROM SUBGRUPO WHERE SUBG_COD = :SUBGRUPO AND GRUP_COD = :GRUPO INTO :NOMSUBG;
            if (IMPTOS = 'S') then
              PRNETO = PRUNIT - DTOITMONTO - ((IVAITMONTO+CONSUMO) / CANT);
            ELSE
              PRNETO = PRUNIT - DTOITMONTO;
            SUBTOTIT = TOTAL - IVAITMONTO - CONSUMO;
            SUBTOTITCON = TOTAL;
            TOTCONSUMO = TOTCONSUMO + CONSUMO;
            SELECT LOTE_VENCE FROM LOTES WHERE LOTE_NRO = :lote AND ARTI_COD = :ARTICULO INTO :vlote;
            if (IVAPORC = 0) then
                SUMAEX = SUMAEX + TOTAL;
            if (TARIFA = 1) then
                BEGIN
                SUMA1 = SUMA1 + TOTAL - IVAITMONTO;
                IVA1 = IVA1 + IVAITMONTO;
                END
            if (TARIFA = 2) then
                BEGIN
                SUMA2 = SUMA2 + TOTAL - IVAITMONTO;
                IVA2 = IVA2 + IVAITMONTO;
                END
            if (TARIFA = 3) then
                BEGIN
                SUMA3 = SUMA3 + TOTAL - IVAITMONTO;
                IVA3 = IVA3 + IVAITMONTO;
                END
            SUMAGR = SUMA1 + SUMA2 + SUMA3;
            if (IMPTOS = 'N') then
                TOTAL = TOTAL - IVAITMONTO - CONSUMO;
            if (ANCHO IS NULL) then
                ANCHO = 0;
            if (ALTO IS NULL) then
                ALTO = 0;
            if (LARGO IS NULL) then
                LARGO = 0;
            if (PESO IS NULL) then
                PESO = 0;
            PESO = PESO * CANT;
            SUSPEND;
            END
          END
    END
END
^

SET TERM ; ^


ALTER TABLE RECIBOS_CAJA_DETALLE
ADD RCDE_COMIP VARCHAR(2);

