SET SQL DIALECT 3;
SET NAMES NONE;

SET TERM ^ ; 

/******************************************************************************/
/****                          Stored Procedures                           ****/
/****                       Metadatos Nueva Empresa                        ****/
/******************************************************************************/

CREATE PROCEDURE MGTOUCH_GEN_REP_PROPINAS (
    MOVTO_CAJA_ID INTEGER,
    TIPO_REPORTE VARCHAR(10),
    FECHA_INICIAL DATE,
    FECHA_FINAL DATE)
RETURNS (
    FOLIO VARCHAR(9),
    IMPORTE NUMERIC(15,2),
    VENDEDOR VARCHAR(50),
    FECHA_HORA_CREACION TIMESTAMP)
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MGTOUCH_GENERA_VENTA (
    CAJA_ID INTEGER,
    CAJERO_ID INTEGER,
    ALMACEN_ID INTEGER,
    MONEDA_ID INTEGER,
    TIPO_DOCTO CHAR(1),
    VENTA_COMEDOR_ID INTEGER,
    VENDEDOR_ID INTEGER,
    REFERENCIA VARCHAR(30),
    FP_ID1 INTEGER,
    IMP1 NUMERIC(15,2),
    FP_ID2 INTEGER,
    IMP2 NUMERIC(15,2),
    FP_ID3 INTEGER,
    IMP3 NUMERIC(15,2),
    FP_ID4 INTEGER,
    IMP4 NUMERIC(15,2),
    FP_ID5 INTEGER,
    IMP5 NUMERIC(15,2),
    FP_ID6 INTEGER,
    IMP6 NUMERIC(15,2),
    TOTAL NUMERIC(15,2),
    FP_REF_ID INTEGER,
    PROPINA NUMERIC(15,2))
RETURNS (
    FOLIO VARCHAR(9))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MGTOUCH_GET_PRECIO (
    E_ARTICULO_ID INTEGER,
    E_PRECIO_EMPRESA_ID INTEGER)
RETURNS (
    PRECIO NUMERIC(18,6),
    PRECIO_SIN_IMPTO NUMERIC(18,6),
    DSCTO NUMERIC(9,6))
AS
BEGIN
  EXIT;
END^



SET TERM ; ^


/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/



CREATE TABLE MGTOUCH_AREAS_IMP_LINEAS (
    AREA_IMP_LINEA_ID  INTEGER NOT NULL,
    AREA_IMPRESION_ID  INTEGER NOT NULL,
    LINEA_ARTICULO_ID  INTEGER NOT NULL,
    ESTACION           VARCHAR(20) NOT NULL
);


CREATE TABLE MGTOUCH_AREAS_IMPRESION (
    AREA_IMPRESION_ID  INTEGER NOT NULL,
    NOMBRE             VARCHAR(50),
    IMPRESORA          VARCHAR(100),
    ESTACION           VARCHAR(20) NOT NULL
);


CREATE TABLE MGTOUCH_COMENTARIOS (
    COMENTARIO_ID      INTEGER NOT NULL,
    COMENTARIO         VARCHAR(30),
    LINEA_ARTICULO_ID  INTEGER
);


CREATE TABLE MGTOUCH_CONFIG (
    CONFIG_ID                INTEGER NOT NULL,
    CLIENTE_EVENTUAL_ID      INTEGER,
    TIPO_CLIENTE_ID_COMEDOR  INTEGER,
    LOGOTIPO                 IMAGEN
);


CREATE TABLE MGTOUCH_ESTACIONES (
    ESTACION_ID  INTEGER NOT NULL,
    NOMBRE       VARCHAR(20)
);


CREATE TABLE MGTOUCH_LINEAS_MOSTRADAS (
    LINEA_MOSTRADA_ID  INTEGER NOT NULL,
    LINEA_ARTICULO_ID  INTEGER NOT NULL
);


CREATE TABLE MGTOUCH_PROPINAS (
    PROPINA_ID    INTEGER DEFAULT 0 NOT NULL,
    FOLIO         VARCHAR(9) NOT NULL,
    IMPORTE       NUMERIC(15,2) NOT NULL,
    FECHA         DATE DEFAULT 'NOW',
    VENDEDOR_ID   INTEGER,
    FECHA_Y_HORA  TIMESTAMP DEFAULT 'NOW'
);


CREATE TABLE MGTOUCH_USUARIOS (
    USUARIO_ID         INTEGER NOT NULL,
    NOMBRE             VARCHAR(50),
    PASSWD             INTEGER,
    P_COMEDOR          INTEGER,
    P_VENTA_RAPIDA     INTEGER,
    P_BORRAR_RENGLON   INTEGER,
    P_IMPRIMIR_CUENTA  INTEGER,
    P_REABRIR_CUENTA   INTEGER
);


CREATE TABLE MGTOUCH_VENTA_COMEDOR (
    VENTA_COMEDOR_ID  INTEGER NOT NULL,
    CLIENTE_ID        INTEGER,
    CLAVE_CLIENTE     VARCHAR(20),
    VENDEDOR_ID       INTEGER,
    TICKET_IMPRESO    CHAR(1) DEFAULT 'N',
    TIPO              CHAR(1) DEFAULT 'N' NOT NULL
);


CREATE TABLE MGTOUCH_VENTA_DET (
    VENTA_DET_ID           INTEGER NOT NULL,
    VENTA_COMEDOR_ID       INTEGER,
    NOMBRE                 VARCHAR(100) NOT NULL,
    ARTICULO_ID            INTEGER NOT NULL,
    UNIDADES               NUMERIC(18,5) NOT NULL,
    PRECIO_UNITARIO        NUMERIC(18,6) NOT NULL,
    DSCTO                  NUMERIC(15,2) DEFAULT 0 NOT NULL,
    PRECIO_TOTAL           NUMERIC(18,6) NOT NULL,
    PRECIO_UNITARIO_IMPTO  NUMERIC(18,6) NOT NULL,
    TIPO_DOCTO             CHAR(1),
    REGISTRADO             CHAR(1),
    TIEMPO                 INTEGER DEFAULT 1,
    COMENTARIO             VARCHAR(250)
);


CREATE TABLE MGTOUCH_VERSIONES_DB (
    VERSION_DB  INTEGER NOT NULL,
    SISTEMA     VARCHAR(30)
);




/******************************************************************************/
/****                          Unique Constraints                          ****/
/******************************************************************************/

ALTER TABLE MGTOUCH_USUARIOS ADD CONSTRAINT UNQ1_MGTOUCH_USUARIOS UNIQUE (NOMBRE)
USING INDEX NOMBRE;


/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE MGTOUCH_AREAS_IMPRESION ADD CONSTRAINT PK_MGTOUCH_AREAS_IMPRESION PRIMARY KEY (AREA_IMPRESION_ID);
ALTER TABLE MGTOUCH_AREAS_IMP_LINEAS ADD CONSTRAINT PK_MGTOUCH_AREAS_IMP_LINEAS PRIMARY KEY (AREA_IMP_LINEA_ID);
ALTER TABLE MGTOUCH_COMENTARIOS ADD CONSTRAINT PK_MGTOUCH_COMENTARIOS PRIMARY KEY (COMENTARIO_ID);
ALTER TABLE MGTOUCH_CONFIG ADD CONSTRAINT PK_MGTOUCH_CONFIG PRIMARY KEY (CONFIG_ID)
USING INDEX CONFIG_ID;
ALTER TABLE MGTOUCH_ESTACIONES ADD CONSTRAINT PK_MGTOUCH_ESTACIONES PRIMARY KEY (ESTACION_ID);
ALTER TABLE MGTOUCH_LINEAS_MOSTRADAS ADD CONSTRAINT PK_MGTOUCH_LINEAS_MOSTRADAS PRIMARY KEY (LINEA_MOSTRADA_ID)
USING INDEX LINEA_MOSTRADA;
ALTER TABLE MGTOUCH_PROPINAS ADD CONSTRAINT PK_MGTOUCH_PROPINAS PRIMARY KEY (PROPINA_ID);
ALTER TABLE MGTOUCH_USUARIOS ADD CONSTRAINT PK_MGTOUCH_USUARIOS PRIMARY KEY (USUARIO_ID);
ALTER TABLE MGTOUCH_VENTA_COMEDOR ADD CONSTRAINT PK_MGTOUCH_VENTA_COMEDOR PRIMARY KEY (VENTA_COMEDOR_ID);
ALTER TABLE MGTOUCH_VENTA_DET ADD CONSTRAINT PK_MGTOUCH_VENTA_DET PRIMARY KEY (VENTA_DET_ID);
ALTER TABLE MGTOUCH_VERSIONES_DB ADD CONSTRAINT PK_MGTOUCH_VERSIONES_DB PRIMARY KEY (VERSION_DB);


/******************************************************************************/
/****                             Foreign Keys                             ****/
/******************************************************************************/

ALTER TABLE MGTOUCH_AREAS_IMP_LINEAS ADD CONSTRAINT FK_MGTOUCH_AREAS_IMP_LINEAS_1 FOREIGN KEY (AREA_IMPRESION_ID) REFERENCES MGTOUCH_AREAS_IMPRESION (AREA_IMPRESION_ID);
ALTER TABLE MGTOUCH_VENTA_DET ADD CONSTRAINT FK_MGTOUCH_VENTA_DET_3 FOREIGN KEY (ARTICULO_ID) REFERENCES ARTICULOS (ARTICULO_ID);
ALTER TABLE MGTOUCH_VENTA_DET ADD CONSTRAINT FK_MGTOUCH_VENTA_DET_4 FOREIGN KEY (VENTA_COMEDOR_ID) REFERENCES MGTOUCH_VENTA_COMEDOR (VENTA_COMEDOR_ID);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE UNIQUE INDEX MGTOUCH_PROPINAS_IDX1 ON MGTOUCH_PROPINAS (FOLIO);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: MGTOUCH_AREAS_IMPRESION_BI */
CREATE TRIGGER MGTOUCH_AREAS_IMPRESION_BI FOR MGTOUCH_AREAS_IMPRESION
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.AREA_IMPRESION_ID = -1) THEN
    NEW.AREA_IMPRESION_ID = GEN_ID(ID_CATALOGOS,1);
END
^


/* Trigger: MGTOUCH_AREAS_IMP_LINEAS_BI */
CREATE TRIGGER MGTOUCH_AREAS_IMP_LINEAS_BI FOR MGTOUCH_AREAS_IMP_LINEAS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.AREA_IMP_LINEA_ID = -1) THEN
    NEW.AREA_IMP_LINEA_ID = GEN_ID(ID_CATALOGOS,1);
END
^


/* Trigger: MGTOUCH_CONFIG_BI */
CREATE TRIGGER MGTOUCH_CONFIG_BI FOR MGTOUCH_CONFIG
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CONFIG_ID = -1) THEN
    NEW.CONFIG_ID = GEN_ID(ID_CATALOGOS,1);
END
^


/* Trigger: MGTOUCH_USUARIOS_BI */
CREATE TRIGGER MGTOUCH_USUARIOS_BI FOR MGTOUCH_USUARIOS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.USUARIO_ID = -1) THEN
    NEW.USUARIO_ID = GEN_ID(ID_CATALOGOS,1);
END
^


/* Trigger: MGTOUCH_VENTA_COMEDOR_BD0 */
CREATE TRIGGER MGTOUCH_VENTA_COMEDOR_BD0 FOR MGTOUCH_VENTA_COMEDOR
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  /* Trigger text */
  DELETE FROM MGTOUCH_VENTA_DET
  WHERE VENTA_COMEDOR_ID = OLD.VENTA_COMEDOR_ID;
end
^


/* Trigger: MGTOUCH_VENTA_COMEDOR_BI */
CREATE TRIGGER MGTOUCH_VENTA_COMEDOR_BI FOR MGTOUCH_VENTA_COMEDOR
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.VENTA_COMEDOR_ID = -1) THEN
    NEW.VENTA_COMEDOR_ID = GEN_ID(ID_DOCTOS,1);
END
^


/* Trigger: MGTOUCH_VENTA_DET_BI */
CREATE TRIGGER MGTOUCH_VENTA_DET_BI FOR MGTOUCH_VENTA_DET
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.VENTA_DET_ID = -1) THEN
    NEW.VENTA_DET_ID = GEN_ID(ID_DOCTOS,1);
END
^


SET TERM ; ^



/******************************************************************************/
/****                          Stored Procedures                           ****/
/******************************************************************************/


SET TERM ^ ;

ALTER PROCEDURE MGTOUCH_GEN_REP_PROPINAS (
    MOVTO_CAJA_ID INTEGER,
    TIPO_REPORTE VARCHAR(10),
    FECHA_INICIAL DATE,
    FECHA_FINAL DATE)
RETURNS (
    FOLIO VARCHAR(9),
    IMPORTE NUMERIC(15,2),
    VENDEDOR VARCHAR(50),
    FECHA_HORA_CREACION TIMESTAMP)
AS
declare variable vendedor_id integer;
declare variable caja_id integer;
declare variable fecha_hora_apertura timestamp;
declare variable fecha_hora_cierre timestamp;
begin
if (TIPO_REPORTE = 'CORTE') then
BEGIN
SELECT CAJA_ID, FECHA_HORA_CREACION
FROM MOVTOS_CAJAS
WHERE MOVTO_CAJA_ID = :MOVTO_CAJA_ID
INTO CAJA_ID, FECHA_HORA_CREACION;

  SELECT FECHA_HORA_APERTURA, FECHA_HORA_CIERRE
  FROM GET_PERIODO_CAJA(:MOVTO_CAJA_ID, :CAJA_ID)
  INTO  FECHA_HORA_APERTURA, FECHA_HORA_CIERRE;

        FOR SELECT FOLIO, IMPORTE, VENDEDOR_ID
        FROM MGTOUCH_PROPINAS
        WHERE FECHA_Y_HORA BETWEEN :FECHA_HORA_APERTURA AND :FECHA_HORA_CIERRE
        ORDER BY FOLIO
        INTO FOLIO, IMPORTE, VENDEDOR_ID
        DO
        BEGIN
            SELECT NOMBRE
            FROM VENDEDORES
            WHERE VENDEDOR_ID = :VENDEDOR_ID
            INTO VENDEDOR;
         suspend;
        END

END
if (TIPO_REPORTE = 'FECHA') then
BEGIN
        FOR SELECT FOLIO, IMPORTE, VENDEDOR_ID
        FROM MGTOUCH_PROPINAS
        WHERE FECHA BETWEEN :FECHA_INICIAL AND :FECHA_FINAL
        ORDER BY FOLIO
        INTO FOLIO, IMPORTE, VENDEDOR_ID
        DO
        BEGIN
            SELECT NOMBRE
            FROM VENDEDORES
            WHERE VENDEDOR_ID = :VENDEDOR_ID
            INTO VENDEDOR;
         suspend;
        END
END
end
^

ALTER PROCEDURE MGTOUCH_GENERA_VENTA (
    CAJA_ID INTEGER,
    CAJERO_ID INTEGER,
    ALMACEN_ID INTEGER,
    MONEDA_ID INTEGER,
    TIPO_DOCTO CHAR(1),
    VENTA_COMEDOR_ID INTEGER,
    VENDEDOR_ID INTEGER,
    REFERENCIA VARCHAR(30),
    FP_ID1 INTEGER,
    IMP1 NUMERIC(15,2),
    FP_ID2 INTEGER,
    IMP2 NUMERIC(15,2),
    FP_ID3 INTEGER,
    IMP3 NUMERIC(15,2),
    FP_ID4 INTEGER,
    IMP4 NUMERIC(15,2),
    FP_ID5 INTEGER,
    IMP5 NUMERIC(15,2),
    FP_ID6 INTEGER,
    IMP6 NUMERIC(15,2),
    TOTAL NUMERIC(15,2),
    FP_REF_ID INTEGER,
    PROPINA NUMERIC(15,2))
RETURNS (
    FOLIO VARCHAR(9))
AS
declare variable docto_pv_id integer;
declare variable consecutivo integer;
declare variable serie char(1);
declare variable consecutivo_str varchar(8);
declare variable clave_cliente integer;
declare variable importe_neto numeric(18,6);
declare variable total_impuestos numeric(18,6);
declare variable total_fpgc numeric(18,6);
declare variable clave_cliente_fac integer;
declare variable dir_cli_id integer;
declare variable cajero varchar(31);
declare variable consecutivo_sig integer;
declare variable articulo_id integer;
declare variable unidades numeric(18,5);
declare variable precio_unitario numeric(18,6);
declare variable precio_total numeric(18,6);
declare variable precio_unitario_impto numeric(18,6);
declare variable clave_articulo varchar(20);
declare variable es_juego char(1);
declare variable es_almacenable char(1);
declare variable componente_id integer;
declare variable unid_comp numeric(18,5);
declare variable clave_componente varchar(20);
declare variable det_id integer;
declare variable sub_det_id integer;
declare variable cliente_id integer;
declare variable cliente_fac_id integer;
declare variable cobro_id integer;
declare variable refer_id integer;
declare variable cobro_ref_id integer;
declare variable n integer;
declare variable cambio numeric(15,2);
declare variable forma_cobro_efect_id integer;
declare variable dscto numeric(9,6);
declare variable propina_id integer;
begin

/* VALIDAMOS DATOS */
SELECT COUNT(ARTICULO_ID) N
FROM MGTOUCH_VENTA_DET
WHERE VENTA_COMEDOR_ID = :VENTA_COMEDOR_ID
INTO N;

if (IMP1 IS NULL) then IMP1 = 0;
if (IMP2 IS NULL) then IMP2 = 0;
if (IMP3 IS NULL) then IMP3 = 0;
if (IMP4 IS NULL) then IMP4 = 0;
if (IMP5 IS NULL) then IMP5 = 0;
if (IMP6 IS NULL) then IMP6 = 0;

IF (N <= 0) THEN
 EXCEPTION EX_DATO_ES_NULL;

/*Buscamos diferente informacion del cliente*/
SELECT CLIENTE_ID
FROM  MGTOUCH_VENTA_COMEDOR
WHERE  VENTA_COMEDOR_ID = :VENTA_COMEDOR_ID
INTO CLIENTE_ID;

if (CLIENTE_ID = 0) then
BEGIN
SELECT CLIENTE_EVENTUAL_ID
FROM MGTOUCH_CONFIG
INTO  CLIENTE_ID;
END

if (CLIENTE_FAC_ID = 0) then
    CLIENTE_FAC_ID = CLIENTE_ID;

SELECT CLAVE_CLIENTE
FROM CLAVES_CLIENTES
WHERE CLAVE_CLIENTE_ID = :CLIENTE_ID
AND ROL_CLAVE_CLI_ID = 2
INTO CLAVE_CLIENTE;

SELECT DIR_CLI_ID
FROM DIRS_CLIENTES
WHERE CLIENTE_ID = :CLIENTE_ID AND ES_DIR_PPAL = 'S'
INTO DIR_CLI_ID;

if (VENDEDOR_ID = 0) then
    BEGIN
    SELECT VENDEDOR_ID
    FROM VENDEDORES
    WHERE  ES_PREDET = 'S'
    INTO VENDEDOR_ID;
    END

if (VENDEDOR_ID = 0) then
    BEGIN
    FOR SELECT VENDEDOR_ID
    FROM VENDEDORES
    INTO VENDEDOR_ID
    DO begin
       end
    END

SELECT CLAVE_CLIENTE
FROM CLAVES_CLIENTES
WHERE CLAVE_CLIENTE_ID = :CLIENTE_ID
AND ROL_CLAVE_CLI_ID = 2
INTO CLAVE_CLIENTE_FAC;

/*Buscamos el Nombre del Cajero*/
SELECT USUARIO
FROM CAJEROS
WHERE CAJERO_ID = :CAJERO_ID
INTO CAJERO;

  /* GENERAMOS FOLIO*/
SELECT SERIE, CONSECUTIVO
FROM FOLIOS_CAJAS
WHERE CAJA_ID = :CAJA_ID AND TIPO_DOCTO = 'V'
INTO SERIE,CONSECUTIVO;
CONSECUTIVO_SIG = CONSECUTIVO  +1;

UPDATE FOLIOS_CAJAS
SET CONSECUTIVO = :CONSECUTIVO_SIG
WHERE CAJA_ID = :CAJA_ID AND TIPO_DOCTO = 'V';

IF (CONSECUTIVO < 99999999) THEN
EXECUTE PROCEDURE JUST_INT(CONSECUTIVO,8)
RETURNING_VALUES CONSECUTIVO_STR;
FOLIO = SERIE || CONSECUTIVO_STR;

/*CALCULO DE TOTALES*/
IMPORTE_NETO = 0;
TOTAL_IMPUESTOS = 0;

DOCTO_PV_ID = GEN_ID(ID_DOCTOS,1);

INSERT INTO DOCTOS_PV(DOCTO_PV_ID, CAJA_ID, TIPO_DOCTO, FOLIO,
CAJERO_ID, CLAVE_CLIENTE, CLIENTE_ID, CLAVE_CLIENTE_FAC, CLIENTE_FAC_ID,
DIR_CLI_ID, ALMACEN_ID, MONEDA_ID, IMPUESTO_INCLUIDO, TIPO_CAMBIO,
TIPO_DSCTO, DSCTO_PCTJE, DSCTO_IMPORTE, ESTATUS, APLICADO, IMPORTE_NETO,
TOTAL_IMPUESTOS, TOTAL_FPGC, TICKET_EMITIDO, FORMA_EMITIDA, FORMA_GLOBAL_EMITIDA,
CONTABILIZADO, SISTEMA_ORIGEN, VENDEDOR_ID, CARGAR_SUN, USUARIO_CREADOR,
USUARIO_ULT_MODIF)
VALUES(:DOCTO_PV_ID,:CAJA_ID, 'V', :FOLIO, :CAJERO_ID, :CLAVE_CLIENTE,
:CLIENTE_ID, :CLAVE_CLIENTE_FAC, :CLIENTE_FAC_ID, :DIR_CLI_ID, :ALMACEN_ID,
:MONEDA_ID, 'S', 1, 'P', 0, 0, 'N', 'S', :IMPORTE_NETO, :TOTAL_IMPUESTOS, 0, 'S','N','N',
'N', 'PV', :VENDEDOR_ID, 'S', :CAJERO, :CAJERO);

FOR SELECT ARTICULO_ID, UNIDADES, PRECIO_UNITARIO,
PRECIO_UNITARIO_IMPTO,PRECIO_TOTAL, DSCTO
FROM MGTOUCH_VENTA_DET
WHERE VENTA_COMEDOR_ID = :VENTA_COMEDOR_ID
INTO ARTICULO_ID, UNIDADES, PRECIO_UNITARIO,
PRECIO_UNITARIO_IMPTO, PRECIO_TOTAL, DSCTO
        DO
        BEGIN
        CLAVE_ARTICULO = '';
        SELECT CLAVE_ARTICULO
        FROM CLAVES_ARTICULOS
        WHERE ARTICULO_ID = :ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
        INTO CLAVE_ARTICULO;

        SELECT ES_JUEGO, ES_ALMACENABLE
        FROM ARTICULOS
        WHERE ARTICULO_ID = :ARTICULO_ID
        INTO ES_JUEGO, ES_ALMACENABLE;

            if (ES_JUEGO = 'S' AND ES_ALMACENABLE = 'N') then
            BEGIN
                DET_ID = GEN_ID(ID_DOCTOS,1);
                INSERT INTO DOCTOS_PV_DET(DOCTO_PV_DET_ID, DOCTO_PV_ID,
                CLAVE_ARTICULO, ARTICULO_ID, UNIDADES, UNIDADES_DEV,
                PRECIO_UNITARIO, PRECIO_UNITARIO_IMPTO,
                PCTJE_DSCTO, PRECIO_TOTAL_NETO, PRECIO_MODIFICADO, VENDEDOR_ID,
                PCTJE_COMIS, ROL, POSICION)
                VALUES(:DET_ID, :DOCTO_PV_ID, :CLAVE_ARTICULO, :ARTICULO_ID,
                :UNIDADES, 0, :PRECIO_UNITARIO, :PRECIO_UNITARIO_IMPTO,
                :DSCTO,:PRECIO_TOTAL,'N',:VENDEDOR_ID, 0,'J',-1);

                FOR SELECT COMPONENTE_ID, UNIDADES
                FROM JUEGOS_DET
                WHERE ARTICULO_ID = :ARTICULO_ID
                INTO COMPONENTE_ID, UNID_COMP
                DO
                BEGIN
                    CLAVE_COMPONENTE = '';
                    SELECT CLAVE_ARTICULO
                    FROM CLAVES_ARTICULOS
                    WHERE ARTICULO_ID = :COMPONENTE_ID AND ROL_CLAVE_ART_ID = 17
                    INTO CLAVE_COMPONENTE;

                    UNID_COMP = UNID_COMP * UNIDADES;

                    SUB_DET_ID = GEN_ID(ID_DOCTOS,1);
                    INSERT INTO DOCTOS_PV_DET(DOCTO_PV_DET_ID, DOCTO_PV_ID,
                    CLAVE_ARTICULO, ARTICULO_ID, UNIDADES, UNIDADES_DEV,
                    PRECIO_UNITARIO, PRECIO_UNITARIO_IMPTO,
                    PCTJE_DSCTO, PRECIO_TOTAL_NETO, PRECIO_MODIFICADO,
                    PCTJE_COMIS, ROL, POSICION)
                    VALUES(:SUB_DET_ID, :DOCTO_PV_ID, :CLAVE_COMPONENTE, :COMPONENTE_ID,
                    :UNID_COMP, 0, 0,0,0,0,'N', 0,'C',0);

                    INSERT INTO SUB_MOVTOS_PV(DOCTO_PV_DET_ID, SUB_MOVTO_PV_ID)
                    VALUES(:DET_ID, :SUB_DET_ID);

                END  /*for select de componentes*/
            END
            ELSE  /*No es Juego y no Almacenable*/
            BEGIN
            INSERT INTO DOCTOS_PV_DET(DOCTO_PV_DET_ID, DOCTO_PV_ID,
            CLAVE_ARTICULO, ARTICULO_ID, UNIDADES, UNIDADES_DEV,
            PRECIO_UNITARIO, PRECIO_UNITARIO_IMPTO,
            PCTJE_DSCTO, PRECIO_TOTAL_NETO, PRECIO_MODIFICADO, VENDEDOR_ID,
            PCTJE_COMIS, ROL, POSICION)
            VALUES(-1, :DOCTO_PV_ID, :CLAVE_ARTICULO, :ARTICULO_ID,
            :UNIDADES, 0, :PRECIO_UNITARIO, :PRECIO_UNITARIO_IMPTO,
            0,:PRECIO_TOTAL,'N',:VENDEDOR_ID, 0,'N',-1);
            END
        END

/*REGISTRA LOS TOTALES*/
SELECT IMPORTE_NETO, TOTAL_IMPUESTOS, TOTAL_FPGC
FROM CALC_TOTALES_DOCTO_PV(:DOCTO_PV_ID,'N','N',1)
INTO  IMPORTE_NETO, TOTAL_IMPUESTOS, TOTAL_FPGC;

TOTAL = IMPORTE_NETO+TOTAL_IMPUESTOS+TOTAL_FPGC;

UPDATE DOCTOS_PV
SET IMPORTE_NETO = :IMPORTE_NETO, TOTAL_IMPUESTOS = :TOTAL_IMPUESTOS,
TOTAL_FPGC = :TOTAL_FPGC, IMPUESTO_INCLUIDO = 'S'
WHERE DOCTO_PV_ID = :DOCTO_PV_ID;

if (IMP1 > 0) then
BEGIN
COBRO_ID = GEN_ID(ID_DOCTOS,1);
if (FP_ID1 = FP_REF_ID) then COBRO_REF_ID = COBRO_ID;
INSERT INTO DOCTOS_PV_COBROS(DOCTO_PV_COBRO_ID, DOCTO_PV_ID, TIPO,
FORMA_COBRO_ID, IMPORTE, TIPO_CAMBIO, IMPORTE_MON_DOC)
VALUES(:COBRO_ID,:DOCTO_PV_ID,'C',:FP_ID1, :IMP1,1,:IMP1);
END

if (IMP2 > 0) then
BEGIN
COBRO_ID = GEN_ID(ID_DOCTOS,1);
if (FP_ID2 = FP_REF_ID) then COBRO_REF_ID = COBRO_ID;
INSERT INTO DOCTOS_PV_COBROS(DOCTO_PV_COBRO_ID, DOCTO_PV_ID, TIPO,
FORMA_COBRO_ID, IMPORTE, TIPO_CAMBIO, IMPORTE_MON_DOC)
VALUES(:COBRO_ID,:DOCTO_PV_ID,'C',:FP_ID2, :IMP2,1,:IMP2);
END

if (IMP3 > 0) then
BEGIN
COBRO_ID = GEN_ID(ID_DOCTOS,1);
if (FP_ID3 = FP_REF_ID) then COBRO_REF_ID = COBRO_ID;
INSERT INTO DOCTOS_PV_COBROS(DOCTO_PV_COBRO_ID, DOCTO_PV_ID, TIPO,
FORMA_COBRO_ID, IMPORTE, TIPO_CAMBIO, IMPORTE_MON_DOC)
VALUES(:COBRO_ID,:DOCTO_PV_ID,'C',:FP_ID3, :IMP3,1,:IMP3);
END

if (IMP4 > 0) then
BEGIN
COBRO_ID = GEN_ID(ID_DOCTOS,1);
if (FP_ID4 = FP_REF_ID) then COBRO_REF_ID = COBRO_ID;
INSERT INTO DOCTOS_PV_COBROS(DOCTO_PV_COBRO_ID, DOCTO_PV_ID, TIPO,
FORMA_COBRO_ID, IMPORTE, TIPO_CAMBIO, IMPORTE_MON_DOC)
VALUES(:COBRO_ID,:DOCTO_PV_ID,'C',:FP_ID4, :IMP4,1,:IMP4);
END

if (IMP5 > 0) then
BEGIN
COBRO_ID = GEN_ID(ID_DOCTOS,1);
if (FP_ID5 = FP_REF_ID) then COBRO_REF_ID = COBRO_ID;
INSERT INTO DOCTOS_PV_COBROS(DOCTO_PV_COBRO_ID, DOCTO_PV_ID, TIPO,
FORMA_COBRO_ID, IMPORTE, TIPO_CAMBIO, IMPORTE_MON_DOC)
VALUES(:COBRO_ID,:DOCTO_PV_ID,'C',:FP_ID5, :IMP5,1,:IMP5);
END

if (IMP6 > 0) then
BEGIN
COBRO_ID = GEN_ID(ID_DOCTOS,1);
if (FP_ID6 = FP_REF_ID) then COBRO_REF_ID = COBRO_ID;
INSERT INTO DOCTOS_PV_COBROS(DOCTO_PV_COBRO_ID, DOCTO_PV_ID, TIPO,
FORMA_COBRO_ID, IMPORTE, TIPO_CAMBIO, IMPORTE_MON_DOC)
VALUES(:COBRO_ID,:DOCTO_PV_ID,'C',:FP_ID6, :IMP6,1,:IMP6);
END



if (REFERENCIA <> '') then
BEGIN
    SELECT FORMA_COBRO_REFER_ID
    FROM FORMAS_COBRO_REFER
    WHERE FORMA_COBRO_ID = :FP_REF_ID AND POSICION = 1
    INTO REFER_ID;

        if (REFER_ID IS NOT NULL) then
        BEGIN
        INSERT INTO DOCTOS_PV_COBROS_REFER(DOCTO_PV_COBRO_ID, FORMA_COBRO_REFER_ID, REFERENCIA)
        VALUES(:COBRO_REF_ID, :REFER_ID, :REFERENCIA);
        END
END
CAMBIO = TOTAL - IMP1-IMP2-IMP3-IMP4-IMP5-IMP6;
if (CAMBIO < 0) then CAMBIO = CAMBIO * -1;

if (CAMBIO > 0) then
BEGIN
    COBRO_ID = GEN_ID(ID_DOCTOS,1);

    SELECT FORMA_COBRO_ID FROM FORMAS_COBRO
    WHERE TIPO = 'E'
    INTO FORMA_COBRO_EFECT_ID;

    INSERT INTO DOCTOS_PV_COBROS(DOCTO_PV_COBRO_ID, DOCTO_PV_ID, TIPO,
    FORMA_COBRO_ID, IMPORTE, TIPO_CAMBIO, IMPORTE_MON_DOC)
    VALUES(:COBRO_ID,:DOCTO_PV_ID,'A',:FORMA_COBRO_EFECT_ID, :CAMBIO,1,:CAMBIO);
END

/*REGISTRO DE PROPINA*/
if (PROPINA IS NOT NULL) then
BEGIN
PROPINA_ID = GEN_ID(ID_DOCTOS,1);
INSERT INTO MGTOUCH_PROPINAS(PROPINA_ID, FOLIO, IMPORTE, VENDEDOR_ID)
VALUES(:PROPINA_ID,:FOLIO,:PROPINA, :VENDEDOR_ID);
END
/**/


EXECUTE PROCEDURE APLICA_DOCTO_PV(:DOCTO_PV_ID);

DELETE FROM MGTOUCH_VENTA_COMEDOR
WHERE VENTA_COMEDOR_ID = :VENTA_COMEDOR_ID;


SUSPEND;
end
^

ALTER PROCEDURE MGTOUCH_GET_PRECIO (
    E_ARTICULO_ID INTEGER,
    E_PRECIO_EMPRESA_ID INTEGER)
RETURNS (
    PRECIO NUMERIC(18,6),
    PRECIO_SIN_IMPTO NUMERIC(18,6),
    DSCTO NUMERIC(9,6))
AS
declare variable dummy numeric(18,6);
declare variable pctje_imp numeric(15,2);
begin
  SELECT PRECIO
  FROM PRECIOS_ARTICULOS
  WHERE ARTICULO_ID = :E_ARTICULO_ID AND PRECIO_EMPRESA_ID = :E_PRECIO_EMPRESA_ID AND MONEDA_ID = 1
  INTO :PRECIO_SIN_IMPTO;

  SELECT DESCUENTO
  FROM GET_POLS_DSCTO_PROMO(:E_ARTICULO_ID, 'NOW','NOW')
  INTO DSCTO;

  /*EXECUTE PROCEDURE PRECIO_CON_IMPTO E_ARTICULO_ID, PRECIO_SIN_IMPTO, 'S', 0, 0, 'TODAY', 'P'
  RETURNING_VALUES PRECIO, DUMMY; */

  suspend;
end
^


SET TERM ; ^

