/******************************************************************************/
/****         TRUPER 2009         ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES NONE;


SET TERM ^ ; 



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

CREATE PROCEDURE MG_ARTS_POR_PEDIR (
    FECHA DATE,
    ALMACEN_ID INTEGER,
    FILTRO VARCHAR(1),
    COD_INI VARCHAR(20),
    COD_FIN VARCHAR(20))
RETURNS (
    ARTICULO_ID INTEGER,
    CLAVE_ARTICULO VARCHAR(20),
    NOMBRE VARCHAR(100),
    EXISTENCIA NUMERIC(18,5),
    POR_SURTIR NUMERIC(18,5),
    POR_RECIBIR NUMERIC(18,5),
    COSTO_ULTIMA_COMPRA NUMERIC(18,6),
    CANTIDAD_SUGERIDA NUMERIC(18,5),
    CANTIDAD_ESTACIONALIDAD NUMERIC(18,5),
    CANTIDAD_POR_PEDIR NUMERIC(18,5),
    CANTIDAD_A_INNER NUMERIC(18,5),
    SUBTOTAL NUMERIC(15,2),
    UNID_INNER NUMERIC(12,2),
    FACTOR_ESTACIONALIDAD NUMERIC(18,5),
    NO_INNERS NUMERIC(18,0),
    UNIDAD_COMPRA VARCHAR(5),
    CONTENIDO_UNIDAD_COMPRA NUMERIC(18,5),
    FACTOR_UNIDMED NUMERIC(18,5))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_DET_ENTREGAS (
    V_MG_DOCTO_ENTREGA_ID INTEGER,
    V_DOCTO_VE_ID INTEGER,
    V_ALMACEN_ID INTEGER)
RETURNS (
    DOCTO_VE_ID INTEGER,
    DOCTO_VE_DET_ID INTEGER,
    ARTICULO_ID INTEGER,
    NOMBRE_ARTICULO VARCHAR(100),
    CODIGO_ARTICULO VARCHAR(20),
    CLAVE_ARTICULO VARCHAR(20),
    CANT_COMPROM_ANT NUMERIC(18,5),
    CANT_COMPROM NUMERIC(18,5),
    CANT_COMPROM_ACT NUMERIC(18,5),
    UNIDADES NUMERIC(18,5),
    CANT_BACKORDER NUMERIC(18,5),
    EXIS_ACTUAL NUMERIC(18,5),
    EXIS_DISP NUMERIC(18,5),
    EXIS_COMPROM NUMERIC(18,5),
    NIVEL_SERVICIO_LINDET NUMERIC(9,6),
    PRECIO_TOTAL_NETO NUMERIC(15,2),
    IMPORTE_FACTURABLE NUMERIC(15,2),
    PRECIO_UNITARIO NUMERIC(18,6),
    PRECIO_UNITARIO_IMPTO NUMERIC(18,6),
    IMPORTE_PEDIDO NUMERIC(15,2))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_DET_PEDXSURT (
    V_DOCTO_VE_ID INTEGER,
    V_ALMACEN_ID INTEGER)
RETURNS (
    DOCTO_VE_ID INTEGER,
    ARTICULO_ID INTEGER,
    NOMBRE_ART VARCHAR(100),
    CODIGO_ARTICULO VARCHAR(20),
    CLAVE_ARTICULO VARCHAR(20),
    UNIDADES NUMERIC(18,5),
    UNIDADES_COMPROM NUMERIC(18,5),
    UNIDADES_X_COMPROM NUMERIC(18,5),
    UNIDADES_SURT_DEV NUMERIC(18,5),
    UNIDADES_PENDIENTES NUMERIC(18,5),
    UNIDADES_A_COMPROM NUMERIC(18,5),
    EXIS_ACTUAL NUMERIC(18,5),
    EXIS_DISP NUMERIC(18,5),
    EXIS_COMPROM NUMERIC(18,5),
    PRECIO_UNITARIO NUMERIC(15,2),
    PCTJE_DSCTO NUMERIC(9,6),
    PRECIO_TOTAL_NETO NUMERIC(15,2))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_FACTOR_ESTACIONALIDAD (
    V_ARTICULO_ID INTEGER)
RETURNS (
    MG_ESTACIONALIDAD_ID INTEGER,
    MG_ESTACIONALIDAD_DET_ID INTEGER,
    NOMBRE VARCHAR(100),
    PERIODO_ACTUAL INTEGER,
    PERIODO_INICIAL INTEGER,
    PERIODO_FINAL INTEGER,
    FACTOR NUMERIC(18,5))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_GET_LISTA_SURTIDO (
    V_MG_PEDIDO_SURTIDO_ID INTEGER,
    V_PROCESO CHAR(1))
RETURNS (
    MG_PEDIDO_SURTIDO_ID INTEGER,
    FOLIO_ENTREGA CHAR(9),
    FOLIO_PEDIDO CHAR(9),
    NO_LISTA_SURTIDO INTEGER,
    CLAVE_CLIENTE VARCHAR(20),
    NOMBRE_CLIENTE VARCHAR(100),
    ALMACEN VARCHAR(50),
    ZONA VARCHAR(50),
    RUTA VARCHAR(50),
    SECUENCIA_CARGA INTEGER,
    CODIGO VARCHAR(20),
    CLAVE VARCHAR(20),
    CODIGO_BARRAS VARCHAR(20),
    NOMBRE_ARTICULO VARCHAR(100),
    LOCALIZACION CHAR(15),
    CANT_COMPROM_ACT NUMERIC(18,5),
    IMPORTE NUMERIC(15,2),
    POSICION INTEGER,
    UNIDAD_VENTA VARCHAR(5),
    ARTICULO_ID INTEGER,
    ALMACEN_ID INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_GET_PEDIDO_VERIFICADO (
    V_MG_PEDIDO_VERIFICADO_ID INTEGER,
    V_INCLUIR_DETALLE CHAR(1))
RETURNS (
    NO_TICKET INTEGER,
    FOLIO_FACT CHAR(9),
    FOLIO_REM CHAR(9),
    TIPO_DOCTO_VE_FINAL VARCHAR(1),
    FOLIO_PED CHAR(9),
    NO_LISTA_SURTIDO INTEGER,
    SECUENCIA_CARGA INTEGER,
    FOLIO_ENTREGA CHAR(9),
    NOMBRE_CLIENTE VARCHAR(100),
    CLAVE_CLIENTE VARCHAR(20),
    NOMBRE_USUARIO VARCHAR(100),
    ZONA VARCHAR(50),
    RUTA VARCHAR(50),
    NOMBRE_ARTICULO VARCHAR(100),
    CODIGO VARCHAR(20),
    CLAVE VARCHAR(20),
    CODIGO_BARRAS VARCHAR(20),
    CANTIDAD_VERIFICADA NUMERIC(18,5),
    UNIDAD_VENTA VARCHAR(5))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_INSERTA_BACKORDER (
    V_DOCTO_VE_ID INTEGER,
    V_FECHA DATE,
    V_ESTADO CHAR(1))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_OBTRET_PEDIDOS (
    V_MG_PEDIDO_SURTIDO_ID INTEGER,
    V_MG_USUARIO_ID INTEGER,
    V_REFERENCIA VARCHAR(50),
    V_PROCESO CHAR(1))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_PEDIDOS_A_ENRUTAR (
    V_TIPO_DOCTO_VE VARCHAR(1),
    V_FECHA_INI DATE,
    V_FECHA_FIN DATE)
RETURNS (
    MG_DOCTO_ENTREGA_ID INTEGER,
    FOLIO_ENTREGA CHAR(9),
    FECHA_ENTREGA DATE,
    SECUENCIA_CARGA INTEGER,
    MG_PEDIDO_SURTIDO_ID INTEGER,
    DOCTO_VE_ID INTEGER,
    FOLIO_PEDIDO CHAR(9),
    NOM_CLIENTE VARCHAR(100),
    CLAVE_CLIENTE VARCHAR(20),
    CALLE VARCHAR(200),
    POBLACION VARCHAR(200),
    TELEFONO VARCHAR(35),
    RUTA VARCHAR(50),
    ZONA VARCHAR(50),
    MG_PEDIDO_VERIFICADO_ID INTEGER,
    NO_TICKET INTEGER,
    FECHA_FACTURA DATE,
    FOLIO_FACTURA CHAR(9),
    IMPORTE_FACTURABLE NUMERIC(15,2),
    CONDICION_PAGO VARCHAR(50),
    FACTURA_DOCTO_VE_ID INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_REASIGNA_FOLIOS
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_REP_BACKORDER (
    V_ALMACEN VARCHAR(50),
    V_FOLIO VARCHAR(9),
    V_CLIENTE VARCHAR(100),
    V_ZONA VARCHAR(50),
    V_RUTA VARCHAR(50),
    V_MOST_ARTS_BO CHAR(1),
    V_FECHA_INI DATE,
    V_FECHA_FIN DATE,
    V_ESTADO CHAR(1))
RETURNS (
    ARTICULO_ID INTEGER,
    CODIGO VARCHAR(20),
    CLAVE VARCHAR(20),
    NOMBRE VARCHAR(100),
    PZAS_PEDIDAS NUMERIC(18,5),
    PZAS_FACTURADAS NUMERIC(18,5),
    PZAS_BACKORDER NUMERIC(18,5),
    NIV_SERV_PZAS NUMERIC(18,5),
    MONTO_PEDIDO NUMERIC(15,2),
    MONTO_FACTURADO NUMERIC(15,2),
    MONTO_FACT_BACKORDER NUMERIC(15,2),
    NIV_SERV_IMPORTE NUMERIC(15,2))
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MG_ROUND_ARRIBA (
    V_CANT DOUBLE PRECISION,
    V_MIN DOUBLE PRECISION)
RETURNS (
    CANT DOUBLE PRECISION)
AS
BEGIN
  EXIT;
END^


CREATE PROCEDURE MGTRUPER_REP_DIAS_COBERTURA (
    FECHA DATE,
    ALMACEN_ID INTEGER,
    COD_INI VARCHAR(20),
    COD_FIN VARCHAR(20),
    PERIODO_HISTORICO INTEGER,
    MOVTOS_IN CHAR(1),
    CONCEPTO_IN_ID INTEGER)
RETURNS (
    ARTICULO_ID INTEGER,
    NOMBRE_LINEA VARCHAR(50),
    LINEA_ARTICULO_ID INTEGER,
    CLAVE_ARTICULO VARCHAR(20),
    NOMBRE VARCHAR(100),
    PUNTO_REORDEN NUMERIC(15,2),
    INVENTARIO_MAXIMO NUMERIC(15,2),
    INVENTARIO_MINIMO NUMERIC(15,2),
    VENTA_SEM1 NUMERIC(15,2),
    VENTA_SEM2 NUMERIC(15,2),
    VENTA_SEM3 NUMERIC(15,2),
    VENTA_SEM4 NUMERIC(15,2),
    VENTA_SEM5 NUMERIC(15,2),
    VENTA_SEM6 NUMERIC(15,2),
    VENTA_SEM7 NUMERIC(15,2),
    VENTA_SEM8 NUMERIC(15,2),
    VENTA_SEM9 NUMERIC(15,2),
    VENTA_SEM10 NUMERIC(15,2),
    VENTA_SEM11 NUMERIC(15,2),
    VENTA_SEM12 NUMERIC(15,2),
    VENTA_TOTAL NUMERIC(15,2),
    EXISTENCIA NUMERIC(15,2),
    POR_SURTIR NUMERIC(15,2),
    POR_REC NUMERIC(15,2))
AS
BEGIN
  EXIT;
END^



SET TERM ; ^


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



CREATE TABLE MG_ARTICULOS_CONFIG (
    MG_ARTICULO_CONFIG_ID   ENTERO_ID NOT NULL,
    ARTICULO_ID             ENTERO_ID NOT NULL,
    MG_ESTACIONALIDAD_ID    ENTERO_ID,
    ARTICULO_PADRE_ID       ENTERO_ID,
    REORDEN_INDEPENDIENTE   CHAR(1) NOT NULL,
    FECHA_CONFIG_ART_PADRE  FECHA NOT NULL,
    FECHA_ULT_CONFIG        FECHA_Y_HORA NOT NULL
);


CREATE TABLE MG_ARTICULOS_IMPORTADOS (
    MG_ARTICULO_IMPORTADO_ID  ENTERO_ID NOT NULL,
    ARTICULO_ID               ENTERO_ID,
    TIPO                      VARCHAR(1)
);


CREATE TABLE MG_ARTICULOS_RECIBIDOS (
    MG_ARTICULO_RECIBIDO_ID  ENTERO_ID NOT NULL,
    DOCTO_CM_ID              ENTERO_ID,
    ARTICULO_ID              ENTERO_ID,
    CLAVE_ARTICULO           CLAVE_MAESTRO_TYPE,
    NOMBRE                   NOMBRE_LARGO,
    UNIDADES                 UNIDADES_0,
    CANT_FACT                UNIDADES_0,
    CANT_RECIB               UNIDADES_0,
    CANT_DIFERENCIA          UNIDADES_0,
    PRECIO_UNITARIO          IMPORTE_UNITARIO,
    IMPORTE                  IMPORTE_MONETARIO_0,
    POSICION                 ENTERO
);


CREATE TABLE MG_ARTICULOS_SUGERIDOS (
    MG_ARTICULO_SUGERIDO_ID  ENTERO_ID NOT NULL,
    ARTICULO_ID              ENTERO_ID NOT NULL,
    CLAVE                    CLAVE_MAESTRO_TYPE,
    NOMBRE                   NOMBRE_LARGO,
    UNIDAD_COMPRA            VARCHAR(5),
    CONTENIDO_UNIDAD_COMPRA  UNIDADES_1,
    EXISTENCIA               UNIDADES_0,
    POR_SURTIR               UNIDADES_0,
    UNIDADES                 UNIDADES_0,
    UNIDADES_A_INNER         UNIDADES_0,
    COSTO_ULTIMA_COMPRA      IMPORTE_UNITARIO,
    IMPORTE                  IMPORTE_MONETARIO_0,
    COMPRAR                  SI_NO_N NOT NULL,
    POR_RECIBIR              UNIDADES_0,
    FACTOR_ESTACIONALIDAD    UNIDADES_0,
    UNIDADES_ESTACIONALIDAD  UNIDADES_0,
    FACTOR_UNIDMED           UNIDADES_0,
    UNIDADES_POR_PEDIR       UNIDADES_0,
    CANTIDAD_INNER           NUMERIC(12,2),
    NO_INNERS                NUMERIC(18,0)
);


CREATE TABLE MG_ARTICULOS_VERIFICADOS (
    MG_ARTICULO_VERIFICADO_ID  ENTERO_ID NOT NULL,
    FOLIO_ENTREGA              FOLIO_TYPE,
    FOLIO_PEDIDO               FOLIO_TYPE,
    SECUENCIA_CARGA            ENTERO,
    CLAVE_CLIENTE              CLAVE_MAESTRO_TYPE,
    NOMBRE_CLIENTE             NOMBRE_LARGO,
    ZONA                       NOMBRE_MEDIO,
    RUTA                       NOMBRE_MEDIO,
    CODIGO                     CLAVE_MAESTRO_TYPE,
    CLAVE                      CLAVE_MAESTRO_TYPE,
    CODIGO_BARRAS              CLAVE_MAESTRO_TYPE,
    NOMBRE_ARTICULO            NOMBRE_LARGO,
    CANTIDAD_POR_VERIFICAR     UNIDADES_0,
    CANTIDAD_VERIFICADA        UNIDADES_0,
    DIFERENCIA                 FLOAT DEFAULT 0 NOT NULL,
    IMPORTE                    IMPORTE_MONETARIO_0,
    POSICION                   ENTERO,
    MG_PEDIDO_SURTIDO_ID       ENTERO_ID NOT NULL,
    ARTICULO_ID                ENTERO_ID NOT NULL
);


CREATE TABLE MG_CONFIG_CM_VE (
    ELEMENTO_ID  ENTERO_ID NOT NULL,
    NOMBRE       NOMBRE_MEDIO NOT NULL,
    TIPO         CHAR(1) NOT NULL,
    VALOR        NOMBRE_LARGO
);


CREATE TABLE MG_DOCTOS_ENTREGAS (
    MG_DOCTO_ENTREGA_ID  ENTERO_ID NOT NULL,
    FOLIO                FOLIO_TYPE,
    FECHA                FECHA,
    IMPORTE_TOTAL        IMPORTE_MONETARIO_0
);


CREATE TABLE MG_DOCUMENTACION_RUTA (
    MG_DOCUMENTACION_RUTA_ID  INTEGER NOT NULL,
    MG_DOCTO_ENTREGA_ID       ENTERO_ID,
    MG_PEDIDO_SURTIDO_ID      ENTERO_ID,
    MG_PEDIDO_VERIFICADO_ID   ENTERO_ID,
    SECUENCIA_CARGA           ENTERO,
    RUTA_ID                   ENTERO_ID,
    RUTA                      NOMBRE_MEDIO,
    FOLIO_PEDIDO              FOLIO_TYPE,
    FOLIO_ENTREGA             FOLIO_TYPE,
    NO_TICKET                 ENTERO,
    CLIENTE_ID                ENTERO_ID,
    CLAVE_CLIENTE             CLAVE_MAESTRO_TYPE,
    NOM_CLIENTE               NOMBRE_LARGO,
    CALLE                     DESCRIPCION_LARGA,
    POBLACION                 DESCRIPCION_LARGA,
    TELEFONO                  TELEFONO_TYPE,
    FECHA_FACTURA             FECHA,
    FOLIO_FACTURA             FOLIO_TYPE,
    MONTO_FACTURA             IMPORTE_MONETARIO_0,
    CONDICION_PAGO_ID         ENTERO_ID,
    CONDICION_PAGO            NOMBRE_MEDIO,
    SELECCIONADO              SI_NO_N
);


CREATE TABLE MG_ESTACIONALIDADES (
    MG_ESTACIONALIDAD_ID  ENTERO_ID NOT NULL,
    NOMBRE                NOMBRE_LARGO NOT NULL
);


CREATE TABLE MG_ESTACIONALIDADES_DET (
    MG_ESTACIONALIDAD_DET_ID  ENTERO_ID NOT NULL,
    MG_ESTACIONALIDAD_ID      ENTERO_ID NOT NULL,
    PERIODO_INICIAL           ENTERO NOT NULL,
    PERIODO_FINAL             ENTERO NOT NULL,
    FACTOR                    UNIDADES_0
);


CREATE TABLE MG_HIST_BACKORDER (
    MG_HIST_BACKORDER_ID  ENTERO_ID NOT NULL,
    MG_PEDIDO_SURTIDO_ID  ENTERO_ID,
    DOCTO_VE_ID           ENTERO_ID,
    FOLIO_PEDIDO          FOLIO_TYPE,
    FECHA                 FECHA,
    ALMACEN               NOMBRE_MEDIO,
    CLIENTE               NOMBRE_LARGO,
    ZONA                  NOMBRE_MEDIO,
    RUTA                  NOMBRE_MEDIO,
    ARTICULO_ID           ENTERO_ID,
    CODIGO_ARTICULO       CLAVE_MAESTRO_TYPE,
    CLAVE_ARTICULO        CLAVE_MAESTRO_TYPE,
    NOMBRE                NOMBRE_LARGO,
    PZAS_PEDIDAS          UNIDADES_0,
    PZAS_FACTURADAS       UNIDADES_0,
    PZAS_BACKORDER        UNIDADES_0,
    MONTO_PEDIDO          IMPORTE_MONETARIO_0,
    MONTO_FACTURADO       IMPORTE_MONETARIO_0,
    MONTO_FACT_BACKORDER  IMPORTE_MONETARIO_0,
    ESTADO                CHAR(1) DEFAULT 'I' NOT NULL
);


CREATE TABLE MG_HIST_NIVEL_SERVICIO (
    MG_HIST_NIVEL_SERVICIO_ID  ENTERO_ID NOT NULL,
    DOCTO_VE_ID                ENTERO_ID,
    ALMACEN_ID                 ENTERO_ID,
    FECHA                      FECHA,
    FOLIO                      FOLIO_TYPE,
    CLIENTE_ID                 ENTERO_ID,
    CLAVE                      CLAVE_MAESTRO_TYPE,
    NOMBRE                     NOMBRE_LARGO,
    ZONA_ID                    ENTERO_ID,
    ZONA                       NOMBRE_MEDIO,
    RUTA_ID                    ENTERO_ID,
    RUTA                       NOMBRE_MEDIO,
    VENDEDOR_ID                ENTERO_ID,
    VENDEDOR                   NOMBRE_MEDIO,
    MONTO_PEDIDO               IMPORTE_MONETARIO_0,
    MONTO_FACTURABLE           IMPORTE_MONETARIO_0,
    NIVEL_SERVICIO             PORCENTAJE_0,
    FECHA_HORA_PEDIDO          FECHA_Y_HORA,
    FECHA_HORA_ENTREGA         FECHA_Y_HORA,
    TIEMPO_ENTREGA             NUMERICO_AMPLIO,
    MG_PEDIDO_SURTIDO_ID       ENTERO_ID NOT NULL,
    NIVEL_SERVICIO_REAL        PORCENTAJE_0,
    FOLIO_FACT                 FOLIO_TYPE,
    FOLIO_REM                  FOLIO_TYPE,
    TIPO_DOCTO_VE_FINAL        VARCHAR(1),
    ESTADO                     CHAR(1) DEFAULT 'I' NOT NULL
);


CREATE TABLE MG_PEDIDOS_ENRUTADOS (
    MG_PEDIDO_ENRUTADO_ID    ENTERO_ID NOT NULL,
    FOLIO                    ENTERO,
    MG_DOCTO_ENTREGA_ID      ENTERO_ID,
    MG_PEDIDO_SURTIDO_ID     ENTERO_ID,
    MG_PEDIDO_VERIFICADO_ID  ENTERO_ID,
    FOLIO_FACT               FOLIO_TYPE,
    FOLIO_REM                FOLIO_TYPE,
    TIPO_DOCTO_VE_FINAL      VARCHAR(1)
);


CREATE TABLE MG_PEDIDOS_POR_SURTIR (
    MG_PEDIDO_POR_SURTIR_ID  ENTERO_ID NOT NULL,
    DOCTO_VE_ID              ENTERO_ID,
    FECHA                    FECHA,
    FOLIO                    FOLIO_TYPE,
    CLIENTE_ID               ENTERO_ID,
    CLAVE                    CLAVE_MAESTRO_TYPE,
    NOMBRE                   NOMBRE_LARGO,
    ZONA_ID                  ENTERO_ID,
    ZONA                     NOMBRE_MEDIO,
    RUTA_ID                  ENTERO_ID,
    RUTA                     NOMBRE_MEDIO,
    IMPORTE                  IMPORTE_MONETARIO_0,
    NO_PARTIDAS              ENTERO,
    DIAS_ATRASO              ENTERO,
    IMPORTE_FACTURABLE       IMPORTE_MONETARIO_0,
    NIVEL_SERVICIO           PORCENTAJE_0,
    SECUENCIA_CARGA          ENTERO,
    COMPROMETER              SI_NO_N,
    ESTADO                   CHAR(1),
    CANCELAR                 SI_NO_N,
    NO_LISTA_SURTIDO         ENTERO NOT NULL
);


CREATE TABLE MG_PEDIDOS_RETENIDOS (
    MG_PEDIDO_RETENIDO_ID   ENTERO_ID NOT NULL,
    MG_PEDIDO_SURTIDO_ID    ENTERO_ID,
    REFERENCIA              NOMBRE_MEDIO,
    MG_USUARIO_ID           ENTERO_ID,
    USUARIO                 NOMBRE_LARGO,
    FOLIO_ENTREGA           FOLIO_TYPE,
    FOLIO_PEDIDO            FOLIO_TYPE,
    SECUENCIA_CARGA         ENTERO,
    CLAVE_CLIENTE           CLAVE_MAESTRO_TYPE,
    NOMBRE_CLIENTE          NOMBRE_LARGO,
    ZONA                    NOMBRE_MEDIO,
    RUTA                    NOMBRE_MEDIO,
    CODIGO                  CLAVE_MAESTRO_TYPE,
    CLAVE                   CLAVE_MAESTRO_TYPE,
    CODIGO_BARRAS           CLAVE_MAESTRO_TYPE,
    NOMBRE_ARTICULO         NOMBRE_LARGO,
    CANTIDAD_POR_VERIFICAR  UNIDADES_0,
    CANTIDAD_VERIFICADA     UNIDADES_0,
    DIFERENCIA              FLOAT DEFAULT 0 NOT NULL,
    IMPORTE                 IMPORTE_MONETARIO_0,
    POSICION                ENTERO,
    NO_LISTA_SURTIDO        ENTERO NOT NULL,
    ARTICULO_ID             ENTERO_ID NOT NULL
);


CREATE TABLE MG_PEDIDOS_SURTIDOS (
    MG_PEDIDO_SURTIDO_ID  ENTERO_ID NOT NULL,
    MG_DOCTO_ENTREGA_ID   ENTERO_ID,
    DOCTO_VE_ID           ENTERO_ID,
    FOLIO                 FOLIO_TYPE,
    CLIENTE_ID            ENTERO_ID,
    ZONA_ID               ENTERO_ID,
    RUTA_ID               ENTERO_ID,
    IMPORTE_FACTURABLE    IMPORTE_MONETARIO_0,
    NIVEL_SERVICIO        PORCENTAJE_0,
    DIAS_ATRASO           ENTERO,
    SECUENCIA_CARGA       ENTERO,
    NO_LISTA_SURTIDO      ENTERO NOT NULL
);


CREATE TABLE MG_PEDIDOS_SURTIDOS_DET (
    MG_PEDIDO_SURTIDO_DET_ID  ENTERO_ID NOT NULL,
    MG_PEDIDO_SURTIDO_ID      ENTERO_ID,
    ARTICULO_ID               ENTERO_ID,
    PRECIO_UNITARIO           IMPORTE_UNITARIO,
    CANT_COMPROM_ANT          UNIDADES_0,
    CANT_COMPROM              UNIDADES_0,
    CANT_COMPROM_ACT          UNIDADES_0,
    IMPORTE                   IMPORTE_MONETARIO_0,
    POSICION                  ENTERO
);


CREATE TABLE MG_PEDIDOS_VERIFICADOS (
    MG_PEDIDO_VERIFICADO_ID  ENTERO_ID NOT NULL,
    NO_TICKET                ENTERO NOT NULL,
    MG_PEDIDO_SURTIDO_ID     ENTERO_ID NOT NULL,
    MG_USUARIO_ID            ENTERO_ID NOT NULL,
    FECHA_HORA_CREACION      FECHA_Y_HORA,
    FOLIO_FACT               FOLIO_TYPE,
    IMPORTE_TOT_FACT         IMPORTE_MONETARIO_0,
    FOLIO_REM                FOLIO_TYPE,
    IMPORTE_TOT_REM          IMPORTE_MONETARIO_0,
    TIPO_DOCTO_VE_FINAL      VARCHAR(1)
);


CREATE TABLE MG_PEDIDOS_VERIFICADOS_DET (
    MG_PEDIDO_VERIFICADO_DET_ID  ENTERO_ID NOT NULL,
    MG_PEDIDO_VERIFICADO_ID      ENTERO_ID NOT NULL,
    ARTICULO_ID                  ENTERO_ID NOT NULL,
    CODIGO                       CLAVE_MAESTRO_TYPE,
    CLAVE                        CLAVE_MAESTRO_TYPE,
    CODIGO_BARRAS                CLAVE_MAESTRO_TYPE,
    CANTIDAD_POR_VERIFICAR       UNIDADES_0,
    CANTIDAD_VERIFICADA          UNIDADES_0,
    DIFERENCIA                   FLOAT,
    IMPORTE                      IMPORTE_MONETARIO_0,
    POSICION                     ENTERO
);


CREATE TABLE MG_USUARIOS (
    MG_USUARIO_ID  ENTERO_ID NOT NULL,
    NOMBRE         NOMBRE_LARGO,
    CLAVE          CLAVE_MAESTRO_TYPE,
    ES_PPAL        CHAR(1)
);


CREATE TABLE MG_VENTANAS_SEMAFOROS (
    NOMBRE    NOMBRE_MEDIO NOT NULL,
    SEMAFORO  ENTERO NOT NULL,
    MODULO    VARCHAR(2) NOT NULL
);




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

ALTER TABLE MG_ARTICULOS_CONFIG ADD CONSTRAINT PK_MG_ARTICULOS_CONFIG PRIMARY KEY (MG_ARTICULO_CONFIG_ID);
ALTER TABLE MG_ARTICULOS_IMPORTADOS ADD CONSTRAINT PK_MG_ARTICULOS_IMPORTADOS PRIMARY KEY (MG_ARTICULO_IMPORTADO_ID);
ALTER TABLE MG_ARTICULOS_RECIBIDOS ADD CONSTRAINT PK_MG_ARTICULOS_RECIBIDOS PRIMARY KEY (MG_ARTICULO_RECIBIDO_ID);
ALTER TABLE MG_ARTICULOS_SUGERIDOS ADD CONSTRAINT PK_MG_ARTICULOS_SUGERIDOS PRIMARY KEY (MG_ARTICULO_SUGERIDO_ID);
ALTER TABLE MG_ARTICULOS_VERIFICADOS ADD CONSTRAINT PK_MG_ARTICULOS_VERIFICADOS PRIMARY KEY (MG_ARTICULO_VERIFICADO_ID);
ALTER TABLE MG_CONFIG_CM_VE ADD CONSTRAINT PK_MG_CONFIG_CM_VE PRIMARY KEY (ELEMENTO_ID);
ALTER TABLE MG_DOCTOS_ENTREGAS ADD CONSTRAINT PK_MG_DOCTOS_ENTREGAS PRIMARY KEY (MG_DOCTO_ENTREGA_ID);
ALTER TABLE MG_DOCUMENTACION_RUTA ADD CONSTRAINT PK_MG_DOCUMENTACION_RUTA PRIMARY KEY (MG_DOCUMENTACION_RUTA_ID);
ALTER TABLE MG_ESTACIONALIDADES ADD CONSTRAINT PK_MG_ESTACIONALIDADES PRIMARY KEY (MG_ESTACIONALIDAD_ID);
ALTER TABLE MG_ESTACIONALIDADES_DET ADD CONSTRAINT PK_MG_ESTACIONALIDADES_DET PRIMARY KEY (MG_ESTACIONALIDAD_DET_ID);
ALTER TABLE MG_HIST_BACKORDER ADD CONSTRAINT PK_MG_HIST_BACKORDER PRIMARY KEY (MG_HIST_BACKORDER_ID);
ALTER TABLE MG_HIST_NIVEL_SERVICIO ADD CONSTRAINT PK_MG_HIST_NIVEL_SERVICIO PRIMARY KEY (MG_HIST_NIVEL_SERVICIO_ID);
ALTER TABLE MG_PEDIDOS_ENRUTADOS ADD CONSTRAINT PK_MG_PEDIDOS_ENRUTADOS PRIMARY KEY (MG_PEDIDO_ENRUTADO_ID);
ALTER TABLE MG_PEDIDOS_POR_SURTIR ADD CONSTRAINT PK_MG_PEDIDOS_POR_SURTIR PRIMARY KEY (MG_PEDIDO_POR_SURTIR_ID);
ALTER TABLE MG_PEDIDOS_RETENIDOS ADD CONSTRAINT PK_MG_PEDIDOS_RETENIDOS PRIMARY KEY (MG_PEDIDO_RETENIDO_ID);
ALTER TABLE MG_PEDIDOS_SURTIDOS ADD CONSTRAINT PK_MG_PEDIDOS_SURTIDOS PRIMARY KEY (MG_PEDIDO_SURTIDO_ID);
ALTER TABLE MG_PEDIDOS_SURTIDOS_DET ADD CONSTRAINT PK_MG_PEDIDOS_SURTIDOS_DET PRIMARY KEY (MG_PEDIDO_SURTIDO_DET_ID);
ALTER TABLE MG_PEDIDOS_VERIFICADOS ADD CONSTRAINT PK_MG_PEDIDOS_VERIFICADOS PRIMARY KEY (MG_PEDIDO_VERIFICADO_ID);
ALTER TABLE MG_PEDIDOS_VERIFICADOS_DET ADD CONSTRAINT PK_MG_PEDIDOS_VERIFICADOS_DET PRIMARY KEY (MG_PEDIDO_VERIFICADO_DET_ID);
ALTER TABLE MG_USUARIOS ADD CONSTRAINT PK_MG_USUARIOS PRIMARY KEY (MG_USUARIO_ID);
ALTER TABLE MG_VENTANAS_SEMAFOROS ADD CONSTRAINT PK_MG_VENTANAS_SEMAFOROS PRIMARY KEY (NOMBRE);


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


SET TERM ^ ;


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



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


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


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


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


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


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


/* Trigger: MG_DOCTOS_ENTREGAS_BD0 */
CREATE TRIGGER MG_DOCTOS_ENTREGAS_BD0 FOR MG_DOCTOS_ENTREGAS
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  /* Trigger text */
  DELETE FROM MG_PEDIDOS_SURTIDOS
  WHERE MG_DOCTO_ENTREGA_ID = OLD.MG_DOCTO_ENTREGA_ID;
end
^


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


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


/* Trigger: MG_ESTACIONALIDADES_AD0 */
CREATE TRIGGER MG_ESTACIONALIDADES_AD0 FOR MG_ESTACIONALIDADES
ACTIVE AFTER DELETE POSITION 0
AS
begin
  /* Trigger text */
  UPDATE MG_ARTICULOS_CONFIG SET MG_ESTACIONALIDAD_ID = 0
  WHERE MG_ESTACIONALIDAD_ID = OLD.MG_ESTACIONALIDAD_ID;
end
^


/* Trigger: MG_ESTACIONALIDADES_BD0 */
CREATE TRIGGER MG_ESTACIONALIDADES_BD0 FOR MG_ESTACIONALIDADES
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  /* Trigger text */
  DELETE FROM MG_ESTACIONALIDADES_DET
  WHERE MG_ESTACIONALIDAD_ID = OLD.MG_ESTACIONALIDAD_ID;
end
^


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


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


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


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


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


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


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


/* Trigger: MG_PEDIDOS_SURTIDOS_BD0 */
CREATE TRIGGER MG_PEDIDOS_SURTIDOS_BD0 FOR MG_PEDIDOS_SURTIDOS
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  /* Trigger text */
  DELETE FROM MG_PEDIDOS_SURTIDOS_DET
  WHERE MG_PEDIDO_SURTIDO_ID = OLD.MG_PEDIDO_SURTIDO_ID;
end
^


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


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


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


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


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


SET TERM ; ^



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


SET TERM ^ ;

ALTER PROCEDURE MG_DET_ENTREGAS (
    V_MG_DOCTO_ENTREGA_ID INTEGER,
    V_DOCTO_VE_ID INTEGER,
    V_ALMACEN_ID INTEGER)
RETURNS (
    DOCTO_VE_ID INTEGER,
    DOCTO_VE_DET_ID INTEGER,
    ARTICULO_ID INTEGER,
    NOMBRE_ARTICULO VARCHAR(100),
    CODIGO_ARTICULO VARCHAR(20),
    CLAVE_ARTICULO VARCHAR(20),
    CANT_COMPROM_ANT NUMERIC(18,5),
    CANT_COMPROM NUMERIC(18,5),
    CANT_COMPROM_ACT NUMERIC(18,5),
    UNIDADES NUMERIC(18,5),
    CANT_BACKORDER NUMERIC(18,5),
    EXIS_ACTUAL NUMERIC(18,5),
    EXIS_DISP NUMERIC(18,5),
    EXIS_COMPROM NUMERIC(18,5),
    NIVEL_SERVICIO_LINDET NUMERIC(9,6),
    PRECIO_TOTAL_NETO NUMERIC(15,2),
    IMPORTE_FACTURABLE NUMERIC(15,2),
    PRECIO_UNITARIO NUMERIC(18,6),
    PRECIO_UNITARIO_IMPTO NUMERIC(18,6),
    IMPORTE_PEDIDO NUMERIC(15,2))
AS
declare variable fact_impto double precision;
declare variable unidades_pedidas numeric(18,5);
declare variable unidades_surtidas numeric(18,5);
BEGIN
  /* Procedure Text */
    DOCTO_VE_ID = V_DOCTO_VE_ID;

    FOR SELECT A.DOCTO_VE_DET_ID,A.ARTICULO_ID,A.UNIDADES,A.UNIDADES_SURT_DEV,A.PRECIO_UNITARIO,A.PRECIO_TOTAL_NETO,
    C.CANT_COMPROM_ANT,C.CANT_COMPROM,C.CANT_COMPROM_ACT,C.IMPORTE,D.NOMBRE
    FROM DOCTOS_VE_DET A
    INNER JOIN MG_PEDIDOS_SURTIDOS B ON(A.DOCTO_VE_ID = B.DOCTO_VE_ID)
    LEFT JOIN MG_PEDIDOS_SURTIDOS_DET C ON(B.MG_PEDIDO_SURTIDO_ID = C.MG_PEDIDO_SURTIDO_ID
    AND A.ARTICULO_ID = C.ARTICULO_ID AND A.PRECIO_UNITARIO = C.PRECIO_UNITARIO)
    INNER JOIN ARTICULOS D ON(A.ARTICULO_ID = D.ARTICULO_ID)
    WHERE B.MG_DOCTO_ENTREGA_ID =:V_MG_DOCTO_ENTREGA_ID AND B.DOCTO_VE_ID =:V_DOCTO_VE_ID
    GROUP BY DOCTO_VE_DET_ID,A.ARTICULO_ID,A.UNIDADES,A.UNIDADES_SURT_DEV,A.PRECIO_TOTAL_NETO,A.PRECIO_UNITARIO,C.CANT_COMPROM_ANT,C.CANT_COMPROM,C.CANT_COMPROM_ACT,C.IMPORTE,D.NOMBRE,A.POSICION
    ORDER BY A.POSICION
    INTO DOCTO_VE_DET_ID,ARTICULO_ID,UNIDADES_PEDIDAS,UNIDADES_SURTIDAS,PRECIO_UNITARIO,PRECIO_TOTAL_NETO,
    CANT_COMPROM_ANT,CANT_COMPROM,CANT_COMPROM_ACT,IMPORTE_FACTURABLE,NOMBRE_ARTICULO
        DO
        BEGIN
            IF (UNIDADES_SURTIDAS > 0) THEN
                UNIDADES = UNIDADES_PEDIDAS - UNIDADES_SURTIDAS;
            ELSE
                UNIDADES = UNIDADES_PEDIDAS;

            IF (IMPORTE_FACTURABLE IS NULL) THEN IMPORTE_FACTURABLE = 0;
            IF (CANT_COMPROM_ANT IS NULL) THEN CANT_COMPROM_ANT = 0;
            IF (CANT_COMPROM IS NULL) THEN CANT_COMPROM = 0;
            IF (CANT_COMPROM_ACT IS NULL) THEN CANT_COMPROM_ACT = 0;

            EXECUTE PROCEDURE CALC_DISP_ARTALM(:ARTICULO_ID,:V_ALMACEN_ID)
            RETURNING_VALUES EXIS_ACTUAL,EXIS_COMPROM,EXIS_DISP;

            CODIGO_ARTICULO = '';
            SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CODIGO_ARTICULO;

            CLAVE_ARTICULO = '';
            FOR SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 18
            INTO CLAVE_ARTICULO
            DO BEGIN
            END

            CANT_BACKORDER = 0;
            CANT_BACKORDER = UNIDADES - CANT_COMPROM_ACT;

            /*SELECT (1+SUM(FACTOR_IMPUESTO)) AS FACT_IMPTO
            FROM FACTORES_IMPTO_ART(:ARTICULO_ID,'N',0)
            INTO FACT_IMPTO;*/
                PRECIO_UNITARIO_IMPTO = PRECIO_UNITARIO * FACT_IMPTO;

            IMPORTE_PEDIDO = PRECIO_TOTAL_NETO * FACT_IMPTO;

            if (UNIDADES > 0) then
            BEGIN
                NIVEL_SERVICIO_LINDET = (CANT_COMPROM_ACT / UNIDADES) * 100.0;
                IF (NIVEL_SERVICIO_LINDET > 100) THEN
                  NIVEL_SERVICIO_LINDET = 100;
            END
            ELSE
                NIVEL_SERVICIO_LINDET = 100;

            SUSPEND;
        END
END
^

ALTER PROCEDURE MG_DET_PEDXSURT (
    V_DOCTO_VE_ID INTEGER,
    V_ALMACEN_ID INTEGER)
RETURNS (
    DOCTO_VE_ID INTEGER,
    ARTICULO_ID INTEGER,
    NOMBRE_ART VARCHAR(100),
    CODIGO_ARTICULO VARCHAR(20),
    CLAVE_ARTICULO VARCHAR(20),
    UNIDADES NUMERIC(18,5),
    UNIDADES_COMPROM NUMERIC(18,5),
    UNIDADES_X_COMPROM NUMERIC(18,5),
    UNIDADES_SURT_DEV NUMERIC(18,5),
    UNIDADES_PENDIENTES NUMERIC(18,5),
    UNIDADES_A_COMPROM NUMERIC(18,5),
    EXIS_ACTUAL NUMERIC(18,5),
    EXIS_DISP NUMERIC(18,5),
    EXIS_COMPROM NUMERIC(18,5),
    PRECIO_UNITARIO NUMERIC(15,2),
    PCTJE_DSCTO NUMERIC(9,6),
    PRECIO_TOTAL_NETO NUMERIC(15,2))
AS
BEGIN
  /* Procedure Text */
    FOR SELECT A.DOCTO_VE_ID,A.ARTICULO_ID,A.UNIDADES,A.UNIDADES_COMPROM,
    A.UNIDADES_SURT_DEV,(A.UNIDADES - A.UNIDADES_SURT_DEV) AS UNIDADES_PENDIENTES,
    ((A.UNIDADES - A.UNIDADES_SURT_DEV)-A.UNIDADES_COMPROM) AS UNIDADES_X_COMPROM,
    A.PRECIO_UNITARIO,A.PCTJE_DSCTO,A.PRECIO_TOTAL_NETO,B.NOMBRE
    FROM DOCTOS_VE_DET A
    INNER JOIN ARTICULOS B ON(A.ARTICULO_ID = B.ARTICULO_ID)
    WHERE A.DOCTO_VE_ID =:V_DOCTO_VE_ID
    ORDER BY POSICION
        INTO DOCTO_VE_ID,ARTICULO_ID,UNIDADES,UNIDADES_COMPROM,UNIDADES_SURT_DEV,UNIDADES_PENDIENTES,
        UNIDADES_X_COMPROM,PRECIO_UNITARIO,PCTJE_DSCTO,PRECIO_TOTAL_NETO,NOMBRE_ART
        DO
        BEGIN
            EXECUTE PROCEDURE CALC_DISP_ARTALM(:ARTICULO_ID,:V_ALMACEN_ID)
            RETURNING_VALUES  EXIS_ACTUAL,EXIS_COMPROM,EXIS_DISP;

            CODIGO_ARTICULO = '';
            SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CODIGO_ARTICULO;

            CLAVE_ARTICULO = '';
            FOR SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 18
            INTO CLAVE_ARTICULO
            DO BEGIN
            END

            UNIDADES_A_COMPROM = 0;
            IF (EXIS_DISP > 0 AND EXIS_DISP < UNIDADES_X_COMPROM) THEN
                UNIDADES_A_COMPROM = EXIS_DISP;

            IF (EXIS_DISP > 0 AND EXIS_DISP >= UNIDADES_X_COMPROM) THEN
                UNIDADES_A_COMPROM = UNIDADES_X_COMPROM;

          SUSPEND;
        END
END
^

ALTER PROCEDURE MG_FACTOR_ESTACIONALIDAD (
    V_ARTICULO_ID INTEGER)
RETURNS (
    MG_ESTACIONALIDAD_ID INTEGER,
    MG_ESTACIONALIDAD_DET_ID INTEGER,
    NOMBRE VARCHAR(100),
    PERIODO_ACTUAL INTEGER,
    PERIODO_INICIAL INTEGER,
    PERIODO_FINAL INTEGER,
    FACTOR NUMERIC(18,5))
AS
BEGIN
  /* Procedure Text */
  SELECT MG_ESTACIONALIDAD_ID FROM MG_ARTICULOS_CONFIG
  WHERE ARTICULO_ID =:V_ARTICULO_ID
  INTO MG_ESTACIONALIDAD_ID;
    IF (MG_ESTACIONALIDAD_ID IS NOT NULL) THEN
    BEGIN
        PERIODO_ACTUAL = EXTRACT(MONTH FROM CURRENT_DATE);

        FOR SELECT A.NOMBRE,B.MG_ESTACIONALIDAD_DET_ID,B.PERIODO_INICIAL,B.PERIODO_FINAL,B.FACTOR
        FROM MG_ESTACIONALIDADES A
        INNER JOIN MG_ESTACIONALIDADES_DET B ON(A.MG_ESTACIONALIDAD_ID = B.MG_ESTACIONALIDAD_ID)
        WHERE A.MG_ESTACIONALIDAD_ID =:MG_ESTACIONALIDAD_ID
        AND (:PERIODO_ACTUAL BETWEEN PERIODO_INICIAL AND PERIODO_FINAL)
        INTO NOMBRE,MG_ESTACIONALIDAD_DET_ID,PERIODO_INICIAL,PERIODO_FINAL,FACTOR
        DO
        BEGIN
            SUSPEND;
        END
    END
END
^

ALTER PROCEDURE MG_ARTS_POR_PEDIR (
    FECHA DATE,
    ALMACEN_ID INTEGER,
    FILTRO VARCHAR(1),
    COD_INI VARCHAR(20),
    COD_FIN VARCHAR(20))
RETURNS (
    ARTICULO_ID INTEGER,
    CLAVE_ARTICULO VARCHAR(20),
    NOMBRE VARCHAR(100),
    EXISTENCIA NUMERIC(18,5),
    POR_SURTIR NUMERIC(18,5),
    POR_RECIBIR NUMERIC(18,5),
    COSTO_ULTIMA_COMPRA NUMERIC(18,6),
    CANTIDAD_SUGERIDA NUMERIC(18,5),
    CANTIDAD_ESTACIONALIDAD NUMERIC(18,5),
    CANTIDAD_POR_PEDIR NUMERIC(18,5),
    CANTIDAD_A_INNER NUMERIC(18,5),
    SUBTOTAL NUMERIC(15,2),
    UNID_INNER NUMERIC(12,2),
    FACTOR_ESTACIONALIDAD NUMERIC(18,5),
    NO_INNERS NUMERIC(18,0),
    UNIDAD_COMPRA VARCHAR(5),
    CONTENIDO_UNIDAD_COMPRA NUMERIC(18,5),
    FACTOR_UNIDMED NUMERIC(18,5))
AS
declare variable precio_lista numeric(18,6);
declare variable inventario_maximo numeric(18,5);
declare variable inv_seguridad numeric(18,5);
declare variable exis_real numeric(18,5);
BEGIN
IF (FILTRO = 'T') THEN
BEGIN
  /* Procedure Text */
  /*CM*/
FOR SELECT A.ARTICULO_ID,A.COSTO_ULTIMA_COMPRA,UNIDAD_COMPRA,CONTENIDO_UNIDAD_COMPRA
FROM ARTICULOS A
INNER JOIN LIBRES_ARTICULOS B ON(A.ARTICULO_ID = B.ARTICULO_ID)
WHERE A.ES_ALMACENABLE = 'S' AND B.ESTADO = 'V'
INTO ARTICULO_ID,COSTO_ULTIMA_COMPRA,UNIDAD_COMPRA,CONTENIDO_UNIDAD_COMPRA
DO
BEGIN
    if (COSTO_ULTIMA_COMPRA = 0) then
    begin
        SELECT A.PRECIO AS PRECIO_LISTA
        FROM PRECIOS_ARTICULOS A
        INNER JOIN PRECIOS_EMPRESA B ON(A.PRECIO_EMPRESA_ID = B.PRECIO_EMPRESA_ID)
        WHERE A.ARTICULO_ID =:ARTICULO_ID AND B.NOMBRE = 'Precio de lista Truper'
        INTO PRECIO_LISTA;
        COSTO_ULTIMA_COMPRA = PRECIO_LISTA - (PRECIO_LISTA * (53.0 / 100.0));
    end

    EXISTENCIA = 0;
    SELECT A.EXISTENCIA
    FROM EXIVAL_ART(:ARTICULO_ID,:ALMACEN_ID,:FECHA,'N') A
    INTO EXISTENCIA;
    IF (EXISTENCIA IS NULL) THEN EXISTENCIA = 0;

    POR_RECIBIR = 0;
    SELECT SUM(B.UNID_POR_RECIBIR) AS POR_RECIBIR
    FROM PENDIENTES_REC(0,:ARTICULO_ID,:ALMACEN_ID,:FECHA) B
    GROUP BY B.ARTICULO_ID
    INTO POR_RECIBIR;
    IF (POR_RECIBIR IS NULL) THEN POR_RECIBIR = 0;

    SELECT SUM(UNID_POR_SURTIR) AS POR_SURTIR
    FROM PENDIENTES_SURT(0,:ARTICULO_ID,:ALMACEN_ID,:FECHA)
    INTO POR_SURTIR;
    IF (POR_SURTIR IS NULL) THEN POR_SURTIR = 0;

    EXIS_REAL = (EXISTENCIA + POR_RECIBIR) - POR_SURTIR;

        INVENTARIO_MAXIMO = 0;
        INV_SEGURIDAD = 0;
        SELECT INVENTARIO_MAXIMO,PUNTO_REORDEN AS INV_SEGURIDAD FROM NIVELES_ARTICULOS A
        WHERE ARTICULO_ID =:ARTICULO_ID AND ALMACEN_ID =:ALMACEN_ID
        INTO INVENTARIO_MAXIMO,INV_SEGURIDAD;
        IF (INVENTARIO_MAXIMO IS NULL) THEN INVENTARIO_MAXIMO = 0;
        IF (INV_SEGURIDAD IS NULL) THEN INV_SEGURIDAD = 0;

        IF (EXIS_REAL < INV_SEGURIDAD) THEN
        BEGIN
            CANTIDAD_SUGERIDA = INVENTARIO_MAXIMO - EXIS_REAL;

            /*ESTACION*/
            CANTIDAD_ESTACIONALIDAD = 0;
            FACTOR_ESTACIONALIDAD = NULL;
            FOR SELECT FACTOR FROM MG_FACTOR_ESTACIONALIDAD(:ARTICULO_ID)
            ORDER BY MG_ESTACIONALIDAD_DET_ID DESC
            INTO FACTOR_ESTACIONALIDAD
            DO
            BEGIN
                /*TOMA LA ULTIMA (PRIMER REGISTRO DADO DE ALTA)*/
            END

            IF (FACTOR_ESTACIONALIDAD IS NOT NULL) THEN
            BEGIN
                EXECUTE PROCEDURE MG_ROUND_ARRIBA (CANTIDAD_SUGERIDA * FACTOR_ESTACIONALIDAD), 1
                RETURNING_VALUES CANTIDAD_ESTACIONALIDAD;
            END
            ELSE
            BEGIN
                EXECUTE PROCEDURE MG_ROUND_ARRIBA CANTIDAD_SUGERIDA, 1
                RETURNING_VALUES CANTIDAD_ESTACIONALIDAD;
                FACTOR_ESTACIONALIDAD = 1;
            END

            /*Factor de conversin entre la unidad de compra y unidad de venta*/
            CANTIDAD_POR_PEDIR = 0;
            SELECT FACTOR FROM LIBRES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO FACTOR_UNIDMED;
                IF (FACTOR_UNIDMED > 0) THEN
                    CANTIDAD_POR_PEDIR = CANTIDAD_ESTACIONALIDAD * FACTOR_UNIDMED;
                ELSE
                    CANTIDAD_POR_PEDIR = CANTIDAD_ESTACIONALIDAD;

            /*CANTIDAD A INNER*/
            UNID_INNER = 0;
            SELECT CANTIDAD_INNER AS UNID_INNER FROM LIBRES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO UNID_INNER;
            IF (UNID_INNER IS NULL) THEN UNID_INNER = 0;
            IF (UNID_INNER > 0) THEN
            BEGIN
                NO_INNERS = 0;
                EXECUTE PROCEDURE MG_ROUND_ARRIBA (CANTIDAD_POR_PEDIR / UNID_INNER), 1
                RETURNING_VALUES NO_INNERS;
                CANTIDAD_A_INNER = NO_INNERS * UNID_INNER;
            END
            ELSE
            BEGIN
                CANTIDAD_A_INNER = CANTIDAD_POR_PEDIR;
            END

            SUBTOTAL = CANTIDAD_A_INNER * COSTO_ULTIMA_COMPRA;

            SELECT A.NOMBRE FROM ARTICULOS A
            WHERE A.ARTICULO_ID =:ARTICULO_ID
            INTO NOMBRE;

            SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CLAVE_ARTICULO;

        SUSPEND;
        END
/*  suspend;*/
END
END /* COD_INI IS NULL */

IF (FILTRO = 'R') THEN
BEGIN
FOR SELECT A.ARTICULO_ID,A.COSTO_ULTIMA_COMPRA,A.UNIDAD_COMPRA,A.CONTENIDO_UNIDAD_COMPRA
FROM ARTICULOS A
INNER JOIN CLAVES_ARTICULOS B ON (A.ARTICULO_ID = B.ARTICULO_ID)
INNER JOIN LIBRES_ARTICULOS C ON(A.ARTICULO_ID = C.ARTICULO_ID)
WHERE A.ES_ALMACENABLE = 'S'
AND B.CLAVE_ARTICULO BETWEEN :COD_INI AND :COD_FIN
AND B.ROL_CLAVE_ART_ID = 17 AND C.ESTADO = 'V'
INTO ARTICULO_ID,COSTO_ULTIMA_COMPRA,UNIDAD_COMPRA,CONTENIDO_UNIDAD_COMPRA
DO
BEGIN
    if (COSTO_ULTIMA_COMPRA = 0) then
    begin
        SELECT A.PRECIO AS PRECIO_LISTA
        FROM PRECIOS_ARTICULOS A
        INNER JOIN PRECIOS_EMPRESA B ON(A.PRECIO_EMPRESA_ID = B.PRECIO_EMPRESA_ID)
        WHERE A.ARTICULO_ID =:ARTICULO_ID AND B.NOMBRE = 'Precio de lista Truper'
        INTO PRECIO_LISTA;
        COSTO_ULTIMA_COMPRA = PRECIO_LISTA - (PRECIO_LISTA * (53.0 / 100.0));
    end

    EXISTENCIA = 0;
    SELECT A.EXISTENCIA
    FROM EXIVAL_ART(:ARTICULO_ID,:ALMACEN_ID,:FECHA,'N') A
    INTO EXISTENCIA;
    IF (EXISTENCIA IS NULL) THEN EXISTENCIA = 0;

    POR_RECIBIR = 0;
    SELECT SUM(B.UNID_POR_RECIBIR) AS POR_RECIBIR
    FROM PENDIENTES_REC(0,:ARTICULO_ID,:ALMACEN_ID,:FECHA) B
    GROUP BY B.ARTICULO_ID
    INTO POR_RECIBIR;
    IF (POR_RECIBIR IS NULL) THEN POR_RECIBIR = 0;

    SELECT SUM(UNID_POR_SURTIR) AS POR_SURTIR
    FROM PENDIENTES_SURT(0,:ARTICULO_ID,:ALMACEN_ID,:FECHA)
    INTO POR_SURTIR;
    IF (POR_SURTIR IS NULL) THEN POR_SURTIR = 0;

    EXIS_REAL = (EXISTENCIA + POR_RECIBIR) - POR_SURTIR;

        INVENTARIO_MAXIMO = 0;
        INV_SEGURIDAD = 0;
        SELECT INVENTARIO_MAXIMO,PUNTO_REORDEN AS INV_SEGURIDAD FROM NIVELES_ARTICULOS A
        WHERE ARTICULO_ID =:ARTICULO_ID AND ALMACEN_ID =:ALMACEN_ID
        INTO INVENTARIO_MAXIMO,INV_SEGURIDAD;
        IF (INVENTARIO_MAXIMO IS NULL) THEN INVENTARIO_MAXIMO = 0;
        IF (INV_SEGURIDAD IS NULL) THEN INV_SEGURIDAD = 0;

        IF (EXIS_REAL < INV_SEGURIDAD) THEN
        BEGIN
            CANTIDAD_SUGERIDA = INVENTARIO_MAXIMO - EXIS_REAL;

            /*ESTACION*/
            CANTIDAD_ESTACIONALIDAD = 0;
            FACTOR_ESTACIONALIDAD = NULL;
            FOR SELECT FACTOR FROM MG_FACTOR_ESTACIONALIDAD(:ARTICULO_ID)
            ORDER BY MG_ESTACIONALIDAD_DET_ID DESC
            INTO FACTOR_ESTACIONALIDAD
            DO
            BEGIN
                /*TOMA LA ULTIMA (PRIMER REGISTRO DADO DE ALTA)*/
            END

            IF (FACTOR_ESTACIONALIDAD IS NOT NULL) THEN
            BEGIN
                EXECUTE PROCEDURE MG_ROUND_ARRIBA (CANTIDAD_SUGERIDA * FACTOR_ESTACIONALIDAD), 1
                RETURNING_VALUES CANTIDAD_ESTACIONALIDAD;
            END
            ELSE
            BEGIN
                EXECUTE PROCEDURE MG_ROUND_ARRIBA CANTIDAD_SUGERIDA, 1
                RETURNING_VALUES CANTIDAD_ESTACIONALIDAD;
                FACTOR_ESTACIONALIDAD = 1;
            END

            /*Factor de conversin entre la unidad de compra y unidad de venta*/
            CANTIDAD_POR_PEDIR = 0;
            SELECT FACTOR FROM LIBRES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO FACTOR_UNIDMED;
                IF (FACTOR_UNIDMED > 0) THEN
                    CANTIDAD_POR_PEDIR = CANTIDAD_ESTACIONALIDAD * FACTOR_UNIDMED;
                ELSE
                    CANTIDAD_POR_PEDIR = CANTIDAD_ESTACIONALIDAD;

            /*CANTIDAD A INNER*/
            UNID_INNER = 0;
            SELECT CANTIDAD_INNER AS UNID_INNER FROM LIBRES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO UNID_INNER;
            IF (UNID_INNER IS NULL) THEN UNID_INNER = 0;
            IF (UNID_INNER > 0) THEN
            BEGIN
                NO_INNERS = 0;
                EXECUTE PROCEDURE MG_ROUND_ARRIBA (CANTIDAD_POR_PEDIR / UNID_INNER), 1
                RETURNING_VALUES NO_INNERS;
                CANTIDAD_A_INNER = NO_INNERS * UNID_INNER;
            END
            ELSE
            BEGIN
                CANTIDAD_A_INNER = CANTIDAD_POR_PEDIR;
            END

            SUBTOTAL = CANTIDAD_A_INNER * COSTO_ULTIMA_COMPRA;

            SELECT A.NOMBRE FROM ARTICULOS A
            WHERE A.ARTICULO_ID =:ARTICULO_ID
            INTO NOMBRE;

            SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CLAVE_ARTICULO;

        SUSPEND;
        END
/*  suspend;*/
END
END /* COD_INI IS NOT NULL */


END
^


ALTER PROCEDURE MG_GET_LISTA_SURTIDO (
    V_MG_PEDIDO_SURTIDO_ID INTEGER,
    V_PROCESO CHAR(1))
RETURNS (
    MG_PEDIDO_SURTIDO_ID INTEGER,
    FOLIO_ENTREGA CHAR(9),
    FOLIO_PEDIDO CHAR(9),
    NO_LISTA_SURTIDO INTEGER,
    CLAVE_CLIENTE VARCHAR(20),
    NOMBRE_CLIENTE VARCHAR(100),
    ALMACEN VARCHAR(50),
    ZONA VARCHAR(50),
    RUTA VARCHAR(50),
    SECUENCIA_CARGA INTEGER,
    CODIGO VARCHAR(20),
    CLAVE VARCHAR(20),
    CODIGO_BARRAS VARCHAR(20),
    NOMBRE_ARTICULO VARCHAR(100),
    LOCALIZACION CHAR(15),
    CANT_COMPROM_ACT NUMERIC(18,5),
    IMPORTE NUMERIC(15,2),
    POSICION INTEGER,
    UNIDAD_VENTA VARCHAR(5),
    ARTICULO_ID INTEGER,
    ALMACEN_ID INTEGER)
AS
DECLARE VARIABLE CLIENTE_ID INTEGER;
DECLARE VARIABLE ZONA_ID INTEGER;
DECLARE VARIABLE RUTA_ID INTEGER;
begin
  /* V_PROCESO
     S = PEDIDO SURTIDO ENVIA DATOS PARA PREVIEW E IMPRESION
     V = PEDIDO SURTIDO EN VERIFICACION GRABA DATOS TEMP EN TABLA
     V_ALMACEN_ID = SOLO SE OCUPARA CUANDO EL PROCESO SEA = S

     */
    MG_PEDIDO_SURTIDO_ID = V_MG_PEDIDO_SURTIDO_ID;

    FOR SELECT A.FOLIO,B.FOLIO,B.NO_LISTA_SURTIDO,B.SECUENCIA_CARGA,B.CLIENTE_ID,B.ZONA_ID,B.RUTA_ID,
    C.ARTICULO_ID,C.CANT_COMPROM_ACT,C.IMPORTE,C.POSICION
    FROM MG_DOCTOS_ENTREGAS A
    INNER JOIN MG_PEDIDOS_SURTIDOS B ON(A.MG_DOCTO_ENTREGA_ID = B.MG_DOCTO_ENTREGA_ID)
    INNER JOIN MG_PEDIDOS_SURTIDOS_DET C ON(B.MG_PEDIDO_SURTIDO_ID = C.MG_PEDIDO_SURTIDO_ID)
    WHERE B.MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID
    ORDER BY C.POSICION
    INTO FOLIO_ENTREGA,FOLIO_PEDIDO,NO_LISTA_SURTIDO,SECUENCIA_CARGA,CLIENTE_ID,
    ZONA_ID,RUTA_ID,ARTICULO_ID,CANT_COMPROM_ACT,IMPORTE,POSICION
        DO
        BEGIN
            UNIDAD_VENTA = '';
            SELECT UNIDAD_VENTA
            FROM ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO UNIDAD_VENTA;

            ALMACEN_ID = 0;
            ALMACEN = '';
            SELECT A.ALMACEN_ID,B.NOMBRE FROM DOCTOS_VE A
            INNER JOIN ALMACENES B ON(A.ALMACEN_ID = B.ALMACEN_ID)
            WHERE A.FOLIO =:FOLIO_PEDIDO AND A.TIPO_DOCTO = 'P'
            INTO ALMACEN_ID,ALMACEN;

            NOMBRE_CLIENTE = '';
            SELECT NOMBRE FROM CLIENTES
            WHERE CLIENTE_ID =:CLIENTE_ID
            INTO NOMBRE_CLIENTE;

            CLAVE_CLIENTE = '';
            SELECT CLAVE_CLIENTE FROM CLAVES_CLIENTES A
            INNER JOIN ROLES_CLAVES_CLIENTES B ON(A.ROL_CLAVE_CLI_ID = B.ROL_CLAVE_CLI_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID AND B.ES_PPAL = 'S'
            INTO CLAVE_CLIENTE;

            ZONA = '';
            SELECT NOMBRE FROM ZONAS_CLIENTES
            WHERE ZONA_CLIENTE_ID =:ZONA_ID
            INTO ZONA;

            RUTA = '';
            SELECT NOMBRE FROM VIAS_EMBARQUE
            WHERE VIA_EMBARQUE_ID =:RUTA_ID
            INTO RUTA;

            NOMBRE_ARTICULO = '';
            SELECT NOMBRE FROM ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO NOMBRE_ARTICULO;

            CODIGO = '';
            SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CODIGO;

            CLAVE = '';
            FOR SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 18
            INTO CLAVE
            DO BEGIN
            END

            CODIGO_BARRAS = '';
            FOR SELECT 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.NOMBRE = 'CODIGO DE BARRAS'
            INTO CODIGO_BARRAS
            DO BEGIN
            END

            IF (V_PROCESO = 'S') THEN
            BEGIN
              LOCALIZACION = '';
              SELECT LOCALIZACION FROM NIVELES_ARTICULOS
              WHERE ARTICULO_ID =:ARTICULO_ID AND ALMACEN_ID =:ALMACEN_ID
              INTO LOCALIZACION;

              SUSPEND;
            END


            IF (V_PROCESO = 'V') THEN
            BEGIN
              INSERT INTO MG_ARTICULOS_VERIFICADOS (MG_ARTICULO_VERIFICADO_ID,FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,CLAVE_CLIENTE,NOMBRE_CLIENTE,
              ZONA,RUTA,CODIGO,CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,MG_PEDIDO_SURTIDO_ID,ARTICULO_ID)
              VALUES (-1,:FOLIO_ENTREGA,:FOLIO_PEDIDO,:SECUENCIA_CARGA,:CLAVE_CLIENTE,:NOMBRE_CLIENTE,
              :ZONA,:RUTA,:CODIGO,:CLAVE,:CODIGO_BARRAS,:NOMBRE_ARTICULO,:CANT_COMPROM_ACT,0,:CANT_COMPROM_ACT,:IMPORTE,:POSICION,:V_MG_PEDIDO_SURTIDO_ID,:ARTICULO_ID);
            END
        END
end
^

ALTER PROCEDURE MG_GET_PEDIDO_VERIFICADO (
    V_MG_PEDIDO_VERIFICADO_ID INTEGER,
    V_INCLUIR_DETALLE CHAR(1))
RETURNS (
    NO_TICKET INTEGER,
    FOLIO_FACT CHAR(9),
    FOLIO_REM CHAR(9),
    TIPO_DOCTO_VE_FINAL VARCHAR(1),
    FOLIO_PED CHAR(9),
    NO_LISTA_SURTIDO INTEGER,
    SECUENCIA_CARGA INTEGER,
    FOLIO_ENTREGA CHAR(9),
    NOMBRE_CLIENTE VARCHAR(100),
    CLAVE_CLIENTE VARCHAR(20),
    NOMBRE_USUARIO VARCHAR(100),
    ZONA VARCHAR(50),
    RUTA VARCHAR(50),
    NOMBRE_ARTICULO VARCHAR(100),
    CODIGO VARCHAR(20),
    CLAVE VARCHAR(20),
    CODIGO_BARRAS VARCHAR(20),
    CANTIDAD_VERIFICADA NUMERIC(18,5),
    UNIDAD_VENTA VARCHAR(5))
AS
DECLARE VARIABLE MG_PEDIDO_SURTIDO_ID INTEGER;
DECLARE VARIABLE MG_USUARIO_ID INTEGER;
DECLARE VARIABLE CLIENTE_ID INTEGER;
DECLARE VARIABLE ZONA_ID INTEGER;
DECLARE VARIABLE RUTA_ID INTEGER;
DECLARE VARIABLE ARTICULO_ID INTEGER;
BEGIN
  /* Procedure Text */
  SELECT NO_TICKET,MG_PEDIDO_SURTIDO_ID,MG_USUARIO_ID,FOLIO_FACT,FOLIO_REM,TIPO_DOCTO_VE_FINAL
  FROM MG_PEDIDOS_VERIFICADOS
  WHERE MG_PEDIDO_VERIFICADO_ID =:V_MG_PEDIDO_VERIFICADO_ID
  INTO NO_TICKET,MG_PEDIDO_SURTIDO_ID,MG_USUARIO_ID,FOLIO_FACT,FOLIO_REM,TIPO_DOCTO_VE_FINAL;

  SELECT A.FOLIO,A.CLIENTE_ID,A.ZONA_ID,A.RUTA_ID,A.NO_LISTA_SURTIDO,A.SECUENCIA_CARGA,B.FOLIO,C.NOMBRE,D.CLAVE_CLIENTE
  FROM MG_PEDIDOS_SURTIDOS A
  INNER JOIN MG_DOCTOS_ENTREGAS B ON(A.MG_DOCTO_ENTREGA_ID = B.MG_DOCTO_ENTREGA_ID)
  INNER JOIN CLIENTES C ON(A.CLIENTE_ID = C.CLIENTE_ID)
  LEFT JOIN GET_CLAVE_CLI (C.CLIENTE_ID) D ON(C.CLIENTE_ID = D.CLIENTE_ID)
  WHERE MG_PEDIDO_SURTIDO_ID =:MG_PEDIDO_SURTIDO_ID
  INTO FOLIO_PED,CLIENTE_ID,ZONA_ID,RUTA_ID,NO_LISTA_SURTIDO,SECUENCIA_CARGA,FOLIO_ENTREGA,NOMBRE_CLIENTE,CLAVE_CLIENTE;

  SELECT NOMBRE FROM MG_USUARIOS
  WHERE MG_USUARIO_ID =:MG_USUARIO_ID
  INTO NOMBRE_USUARIO;

  SELECT NOMBRE FROM ZONAS_CLIENTES
  WHERE ZONA_CLIENTE_ID =:ZONA_ID
  INTO ZONA;

  SELECT NOMBRE FROM VIAS_EMBARQUE
  WHERE VIA_EMBARQUE_ID =:RUTA_ID
  INTO RUTA;

  IF (V_INCLUIR_DETALLE = 'S') THEN
  BEGIN
      FOR SELECT ARTICULO_ID,CODIGO,CLAVE,CODIGO_BARRAS,CANTIDAD_VERIFICADA
      FROM MG_PEDIDOS_VERIFICADOS_DET
      WHERE MG_PEDIDO_VERIFICADO_ID =:V_MG_PEDIDO_VERIFICADO_ID
      ORDER BY POSICION
      INTO ARTICULO_ID,CODIGO,CLAVE,CODIGO_BARRAS,CANTIDAD_VERIFICADA
      DO
      BEGIN
        SELECT NOMBRE,UNIDAD_VENTA FROM ARTICULOS
        WHERE ARTICULO_ID =:ARTICULO_ID
        INTO NOMBRE_ARTICULO,UNIDAD_VENTA;

        SUSPEND;
      END
  END
  ELSE
    SUSPEND;
END
^

ALTER PROCEDURE MG_INSERTA_BACKORDER (
    V_DOCTO_VE_ID INTEGER,
    V_FECHA DATE,
    V_ESTADO CHAR(1))
AS
declare variable folio_pedido char(9) character set none;
declare variable mg_pedido_surtido_id integer;
declare variable folio char(9) character set none;
declare variable almacen_id integer;
declare variable nom_almacen varchar(50) character set none;
declare variable cliente_id integer;
declare variable nom_cliente varchar(100) character set none;
declare variable zona_cliente_id integer;
declare variable nom_zona varchar(50) character set none;
declare variable ruta_id integer;
declare variable nom_ruta varchar(50) character set none;
declare variable articulo_id integer;
declare variable codigo_articulo varchar(20) character set none;
declare variable clave_articulo varchar(20) character set none;
declare variable nom_articulo varchar(100) character set none;
declare variable unidades numeric(18,5);
declare variable unidades_comprom numeric(18,5);
declare variable unidades_surt_dev numeric(18,5);
declare variable unidades_backorder numeric(18,5);
declare variable precio_total_neto numeric(15,2);
declare variable fact_impto double precision;
declare variable importe_pedido numeric(15,2);
declare variable importe_facturado numeric(15,2);
declare variable importe_backorder numeric(15,2);
declare variable prec_tot_neto_det_ped numeric(15,2);
declare variable prec_tot_neto_det_fact numeric(15,2);
declare variable unidades_fact numeric(18,5);
BEGIN
/* Procedure Text */
/*
V_DOCTO_VE_ID Id del documento pedido
V_FECHA fecha en la que se gener el registro a partir del desarrollo
V_ESTADO 'I' inicial unids pedido vs unids comprom pedido
       'F' final unids fact vs unids pedido
*/

SELECT FOLIO FROM DOCTOS_VE
WHERE DOCTO_VE_ID =:V_DOCTO_VE_ID
INTO FOLIO_PEDIDO;

IF (V_ESTADO = 'I') THEN
BEGIN
FOR SELECT ARTICULO_ID,UNIDADES,UNIDADES_COMPROM,UNIDADES_SURT_DEV,PRECIO_TOTAL_NETO FROM DOCTOS_VE_DET
WHERE DOCTO_VE_ID =:V_DOCTO_VE_ID
ORDER BY POSICION
INTO ARTICULO_ID,UNIDADES,UNIDADES_COMPROM,UNIDADES_SURT_DEV,PRECIO_TOTAL_NETO
    DO
    BEGIN
        IF (PRECIO_TOTAL_NETO IS NULL) THEN PRECIO_TOTAL_NETO = 0;

        SELECT MG_PEDIDO_SURTIDO_ID FROM MG_PEDIDOS_SURTIDOS
        WHERE FOLIO =:FOLIO_PEDIDO
        INTO MG_PEDIDO_SURTIDO_ID;

        SELECT FOLIO,ALMACEN_ID,CLIENTE_ID,VIA_EMBARQUE_ID FROM DOCTOS_VE
        WHERE DOCTO_VE_ID =:V_DOCTO_VE_ID
        INTO FOLIO,ALMACEN_ID,CLIENTE_ID,RUTA_ID;

        SELECT NOMBRE FROM ALMACENES
        WHERE ALMACEN_ID =:ALMACEN_ID
        INTO NOM_ALMACEN;

        SELECT ZONA_CLIENTE_ID,NOMBRE FROM CLIENTES
        WHERE CLIENTE_ID =:CLIENTE_ID
        INTO ZONA_CLIENTE_ID,NOM_CLIENTE;

        SELECT NOMBRE FROM ZONAS_CLIENTES
        WHERE ZONA_CLIENTE_ID =:ZONA_CLIENTE_ID
        INTO NOM_ZONA;
        IF (NOM_ZONA IS NULL) THEN NOM_ZONA = ' ';

        SELECT NOMBRE FROM VIAS_EMBARQUE
        WHERE VIA_EMBARQUE_ID =:RUTA_ID
        INTO NOM_RUTA;
        IF (NOM_RUTA IS NULL) THEN NOM_RUTA = ' ';

        CODIGO_ARTICULO = '';
        SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
        WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
        INTO CODIGO_ARTICULO;

        CLAVE_ARTICULO = '';
        FOR SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
        WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 18
        INTO CLAVE_ARTICULO
        DO BEGIN
        END

        SELECT NOMBRE FROM ARTICULOS
        WHERE ARTICULO_ID =:ARTICULO_ID
        INTO NOM_ARTICULO;

        UNIDADES_BACKORDER = 0;
        UNIDADES_BACKORDER = UNIDADES - (UNIDADES_COMPROM + UNIDADES_SURT_DEV);

        /*SELECT (1+SUM(FACTOR_IMPUESTO)) AS FACT_IMPTO
        FROM FACTORES_IMPTO_ART(:ARTICULO_ID,'N',0)
        INTO FACT_IMPTO;*/

        IF ((FACT_IMPTO = 0) OR (FACT_IMPTO IS NULL)) THEN
            FACT_IMPTO = 1;

        IMPORTE_PEDIDO = PRECIO_TOTAL_NETO * FACT_IMPTO;

        IMPORTE_FACTURADO = (UNIDADES_COMPROM * IMPORTE_PEDIDO) / UNIDADES;

        IMPORTE_BACKORDER = IMPORTE_PEDIDO - IMPORTE_FACTURADO;

        INSERT INTO MG_HIST_BACKORDER(MG_HIST_BACKORDER_ID,MG_PEDIDO_SURTIDO_ID,DOCTO_VE_ID,FOLIO_PEDIDO,FECHA,ALMACEN,
        CLIENTE,ZONA,RUTA,ARTICULO_ID,CODIGO_ARTICULO,CLAVE_ARTICULO,NOMBRE,PZAS_PEDIDAS,
        PZAS_FACTURADAS,PZAS_BACKORDER,MONTO_PEDIDO,MONTO_FACTURADO,MONTO_FACT_BACKORDER,ESTADO)
        VALUES(-1,:MG_PEDIDO_SURTIDO_ID,:V_DOCTO_VE_ID,:FOLIO,:V_FECHA,:NOM_ALMACEN,
        :NOM_CLIENTE,:NOM_ZONA,:NOM_RUTA,:ARTICULO_ID,:CODIGO_ARTICULO,:CLAVE_ARTICULO,:NOM_ARTICULO,:UNIDADES,
        :UNIDADES_COMPROM,:UNIDADES_BACKORDER,:IMPORTE_PEDIDO,:IMPORTE_FACTURADO,:IMPORTE_BACKORDER,:V_ESTADO);
    END
END

IF (V_ESTADO = 'F') THEN
BEGIN
/*    FOR SELECT A.ARTICULO_ID,A.UNIDADES,A.UNIDADES_COMPROM,A.UNIDADES_SURT_DEV,A.PRECIO_TOTAL_NETO,
    C.UNIDADES,C.PRECIO_TOTAL_NETO
    FROM DOCTOS_VE_DET A
    INNER JOIN DOCTOS_VE_LIGAS_DET B ON(A.DOCTO_VE_DET_ID = B.DOCTO_VE_DET_FTE_ID)
    INNER JOIN DOCTOS_VE_DET C ON(B.DOCTO_VE_DET_DEST_ID = C.DOCTO_VE_DET_ID)
    WHERE A.DOCTO_VE_ID =:V_DOCTO_VE_ID
    ORDER BY C.POSICION*/
    FOR SELECT A.ARTICULO_ID,A.UNIDADES,A.UNIDADES_COMPROM,A.UNIDADES_SURT_DEV,A.PRECIO_TOTAL_NETO,
    COALESCE(C.UNIDADES,0),COALESCE(C.PRECIO_TOTAL_NETO,0)
    FROM DOCTOS_VE_DET A
    LEFT JOIN DOCTOS_VE_LIGAS_DET B ON(A.DOCTO_VE_DET_ID = B.DOCTO_VE_DET_FTE_ID)
    LEFT JOIN DOCTOS_VE_DET C ON(B.DOCTO_VE_DET_DEST_ID = C.DOCTO_VE_DET_ID)
    WHERE A.DOCTO_VE_ID =:V_DOCTO_VE_ID
    ORDER BY C.POSICION
    INTO ARTICULO_ID,UNIDADES,UNIDADES_COMPROM,UNIDADES_SURT_DEV,PREC_TOT_NETO_DET_PED,UNIDADES_FACT,PREC_TOT_NETO_DET_FACT
    DO
    BEGIN
        IF (PREC_TOT_NETO_DET_PED IS NULL) THEN PREC_TOT_NETO_DET_PED = 0;
        IF (PREC_TOT_NETO_DET_FACT IS NULL) THEN PREC_TOT_NETO_DET_FACT = 0;

        SELECT MG_PEDIDO_SURTIDO_ID FROM MG_PEDIDOS_SURTIDOS
        WHERE FOLIO =:FOLIO_PEDIDO
        INTO MG_PEDIDO_SURTIDO_ID;

        SELECT FOLIO,ALMACEN_ID,CLIENTE_ID,VIA_EMBARQUE_ID FROM DOCTOS_VE
        WHERE DOCTO_VE_ID =:V_DOCTO_VE_ID
        INTO FOLIO,ALMACEN_ID,CLIENTE_ID,RUTA_ID;

        SELECT NOMBRE FROM ALMACENES
        WHERE ALMACEN_ID =:ALMACEN_ID
        INTO NOM_ALMACEN;

        SELECT ZONA_CLIENTE_ID,NOMBRE FROM CLIENTES
        WHERE CLIENTE_ID =:CLIENTE_ID
        INTO ZONA_CLIENTE_ID,NOM_CLIENTE;

        SELECT NOMBRE FROM ZONAS_CLIENTES
        WHERE ZONA_CLIENTE_ID =:ZONA_CLIENTE_ID
        INTO NOM_ZONA;
        IF (NOM_ZONA IS NULL) THEN NOM_ZONA = ' ';

        SELECT NOMBRE FROM VIAS_EMBARQUE
        WHERE VIA_EMBARQUE_ID =:RUTA_ID
        INTO NOM_RUTA;
        IF (NOM_RUTA IS NULL) THEN NOM_RUTA = ' ';

        CODIGO_ARTICULO = '';
        SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
        WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
        INTO CODIGO_ARTICULO;

        CLAVE_ARTICULO = '';
        FOR SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
        WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 18
        INTO CLAVE_ARTICULO
        DO BEGIN
        END

        SELECT NOMBRE FROM ARTICULOS
        WHERE ARTICULO_ID =:ARTICULO_ID
        INTO NOM_ARTICULO;

        UNIDADES_BACKORDER = 0;
        UNIDADES_BACKORDER = UNIDADES - UNIDADES_FACT;

        /*SELECT (1+SUM(FACTOR_IMPUESTO)) AS FACT_IMPTO
        FROM FACTORES_IMPTO_ART(:ARTICULO_ID,'N',0)
        INTO FACT_IMPTO;*/

        IF (FACT_IMPTO = 0) THEN
            FACT_IMPTO = 1;

        IMPORTE_PEDIDO = PREC_TOT_NETO_DET_PED * FACT_IMPTO;

        IMPORTE_FACTURADO = PREC_TOT_NETO_DET_FACT * FACT_IMPTO;

        IMPORTE_BACKORDER = IMPORTE_PEDIDO - IMPORTE_FACTURADO;

        INSERT INTO MG_HIST_BACKORDER(MG_HIST_BACKORDER_ID,MG_PEDIDO_SURTIDO_ID,DOCTO_VE_ID,FOLIO_PEDIDO,FECHA,ALMACEN,
        CLIENTE,ZONA,RUTA,ARTICULO_ID,CODIGO_ARTICULO,CLAVE_ARTICULO,NOMBRE,PZAS_PEDIDAS,
        PZAS_FACTURADAS,PZAS_BACKORDER,MONTO_PEDIDO,MONTO_FACTURADO,MONTO_FACT_BACKORDER,ESTADO)
        VALUES(-1,:MG_PEDIDO_SURTIDO_ID,:V_DOCTO_VE_ID,:FOLIO,:V_FECHA,:NOM_ALMACEN,
        :NOM_CLIENTE,:NOM_ZONA,:NOM_RUTA,:ARTICULO_ID,:CODIGO_ARTICULO,:CLAVE_ARTICULO,:NOM_ARTICULO,:UNIDADES,
        :UNIDADES_FACT,:UNIDADES_BACKORDER,:IMPORTE_PEDIDO,:IMPORTE_FACTURADO,:IMPORTE_BACKORDER,:V_ESTADO);
    END
END
END
^

ALTER PROCEDURE MG_OBTRET_PEDIDOS (
    V_MG_PEDIDO_SURTIDO_ID INTEGER,
    V_MG_USUARIO_ID INTEGER,
    V_REFERENCIA VARCHAR(50),
    V_PROCESO CHAR(1))
AS
declare variable mg_pedido_surtido_id integer;
declare variable referencia varchar(50);
declare variable folio_entrega char(9) character set none;
declare variable folio_pedido char(9) character set none;
declare variable secuencia_carga integer;
declare variable clave_cliente varchar(20) character set none;
declare variable nombre_cliente varchar(100) character set none;
declare variable zona varchar(50) character set none;
declare variable ruta varchar(50) character set none;
declare variable codigo varchar(20) character set none;
declare variable clave varchar(20) character set none;
declare variable codigo_barras varchar(20) character set none;
declare variable nombre_articulo varchar(100) character set none;
declare variable cantidad_por_verificar numeric(18,5);
declare variable cantidad_verificada numeric(18,5);
declare variable diferencia float;
declare variable importe numeric(15,2);
declare variable posicion integer;
declare variable usuario varchar(100) character set none;
declare variable pedido_retenido integer;
declare variable no_lista_surtido integer;
declare variable articulo_id integer;
BEGIN
  /* Procedure Text */
  IF (V_PROCESO = 'R') THEN /*RETENER PEDIDO*/
  BEGIN
    NO_LISTA_SURTIDO = 0;
    SELECT NO_LISTA_SURTIDO FROM MG_PEDIDOS_SURTIDOS
    WHERE MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID
    INTO NO_LISTA_SURTIDO;

    SELECT NOMBRE FROM MG_USUARIOS
    WHERE MG_USUARIO_ID =:V_MG_USUARIO_ID
    INTO USUARIO;

    FOR SELECT FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,
    CLAVE_CLIENTE,NOMBRE_CLIENTE,ZONA,RUTA,CODIGO,CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,
    CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,ARTICULO_ID
    FROM MG_ARTICULOS_VERIFICADOS
    WHERE MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID 
    ORDER BY CODIGO
    INTO FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,
    CLAVE_CLIENTE,NOMBRE_CLIENTE,ZONA,RUTA,CODIGO,CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,
    CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,ARTICULO_ID
      DO
      BEGIN
        MG_PEDIDO_SURTIDO_ID = 0;
        REFERENCIA = '';

        INSERT INTO MG_PEDIDOS_RETENIDOS(MG_PEDIDO_RETENIDO_ID,MG_PEDIDO_SURTIDO_ID,REFERENCIA,MG_USUARIO_ID,USUARIO,
        FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,CLAVE_CLIENTE,NOMBRE_CLIENTE,ZONA,RUTA,CODIGO,
        CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,NO_LISTA_SURTIDO,ARTICULO_ID)
        VALUES(-1,:V_MG_PEDIDO_SURTIDO_ID,:V_REFERENCIA,:V_MG_USUARIO_ID,:USUARIO,
        :FOLIO_ENTREGA,:FOLIO_PEDIDO,:SECUENCIA_CARGA,:CLAVE_CLIENTE,:NOMBRE_CLIENTE,:ZONA,:RUTA,:CODIGO,
        :CLAVE,:CODIGO_BARRAS,:NOMBRE_ARTICULO,:CANTIDAD_POR_VERIFICAR,:CANTIDAD_VERIFICADA,:DIFERENCIA,:IMPORTE,:POSICION,:NO_LISTA_SURTIDO,:ARTICULO_ID);
      END

    DELETE FROM MG_ARTICULOS_VERIFICADOS
    WHERE MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID;
  END/*PROCESO = 'R'*/

  IF (V_PROCESO = 'O') THEN /*OBTENER PEDIDO RETENIDO*/
  BEGIN
    SELECT MG_PEDIDO_SURTIDO_ID FROM MG_PEDIDOS_RETENIDOS
    WHERE MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID AND REFERENCIA =:V_REFERENCIA
    GROUP BY MG_PEDIDO_SURTIDO_ID
    INTO PEDIDO_RETENIDO;
    IF (PEDIDO_RETENIDO <> 0) THEN
    BEGIN
        DELETE FROM MG_ARTICULOS_VERIFICADOS
        WHERE MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID;
    
        FOR SELECT MG_PEDIDO_SURTIDO_ID,REFERENCIA,FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,
        CLAVE_CLIENTE,NOMBRE_CLIENTE,ZONA,RUTA,CODIGO,CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,
        CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,ARTICULO_ID
        FROM MG_PEDIDOS_RETENIDOS
        WHERE MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID AND REFERENCIA =:V_REFERENCIA
        ORDER BY CODIGO
        INTO MG_PEDIDO_SURTIDO_ID,REFERENCIA,FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,
        CLAVE_CLIENTE,NOMBRE_CLIENTE,ZONA,RUTA,CODIGO,CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,
        CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,ARTICULO_ID
          DO
          BEGIN
            /*ACTUALIZACION 115 SE VUELVEN A OBTENER CLAVES DE LOS ARTICULOS POR SEGURIDAD*/
            CODIGO = '';
            SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CODIGO;

            CLAVE = '';
            FOR SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 18
            INTO CLAVE
            DO BEGIN
            END

            CODIGO_BARRAS = '';
            FOR SELECT 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.NOMBRE = 'CODIGO DE BARRAS'
            INTO CODIGO_BARRAS
            DO BEGIN
            END

            INSERT INTO MG_ARTICULOS_VERIFICADOS(MG_ARTICULO_VERIFICADO_ID,
            FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,CLAVE_CLIENTE,NOMBRE_CLIENTE,ZONA,RUTA,CODIGO,
            CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,MG_PEDIDO_SURTIDO_ID,ARTICULO_ID)
            VALUES(-1,:FOLIO_ENTREGA,:FOLIO_PEDIDO,:SECUENCIA_CARGA,:CLAVE_CLIENTE,:NOMBRE_CLIENTE,:ZONA,:RUTA,:CODIGO,
            :CLAVE,:CODIGO_BARRAS,:NOMBRE_ARTICULO,:CANTIDAD_POR_VERIFICAR,:CANTIDAD_VERIFICADA,:DIFERENCIA,:IMPORTE,:POSICION,:V_MG_PEDIDO_SURTIDO_ID,:ARTICULO_ID);
          END

        DELETE FROM MG_PEDIDOS_RETENIDOS
        WHERE MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID AND REFERENCIA =:V_REFERENCIA;
    END/*PEDIDO_RETENIDO <> 0*/
  END/*PROCESO = 'O'*/

/*  SUSPEND;*/
END
^

ALTER PROCEDURE MG_PEDIDOS_A_ENRUTAR (
    V_TIPO_DOCTO_VE VARCHAR(1),
    V_FECHA_INI DATE,
    V_FECHA_FIN DATE)
RETURNS (
    MG_DOCTO_ENTREGA_ID INTEGER,
    FOLIO_ENTREGA CHAR(9),
    FECHA_ENTREGA DATE,
    SECUENCIA_CARGA INTEGER,
    MG_PEDIDO_SURTIDO_ID INTEGER,
    DOCTO_VE_ID INTEGER,
    FOLIO_PEDIDO CHAR(9),
    NOM_CLIENTE VARCHAR(100),
    CLAVE_CLIENTE VARCHAR(20),
    CALLE VARCHAR(200),
    POBLACION VARCHAR(200),
    TELEFONO VARCHAR(35),
    RUTA VARCHAR(50),
    ZONA VARCHAR(50),
    MG_PEDIDO_VERIFICADO_ID INTEGER,
    NO_TICKET INTEGER,
    FECHA_FACTURA DATE,
    FOLIO_FACTURA CHAR(9),
    IMPORTE_FACTURABLE NUMERIC(15,2),
    CONDICION_PAGO VARCHAR(50),
    FACTURA_DOCTO_VE_ID INTEGER)
AS
declare variable cliente_id integer;
declare variable zona_id integer;
declare variable ruta_id integer;
declare variable condicion_pago_id integer;
declare variable codigo_postal varchar(10) character set none;
declare variable ciudad varchar(50) character set none;
declare variable estado varchar(50) character set none;
declare variable dias_plazo smallint;
declare variable dir varchar(100) character set none;
declare variable folio_fact char(9) character set none;
declare variable folio_rem char(9) character set none;
BEGIN
  /* Procedure Text */

  IF (V_TIPO_DOCTO_VE = 'F') THEN
  BEGIN
    IMPORTE_FACTURABLE = 0;
    FOR SELECT A.MG_DOCTO_ENTREGA_ID,A.FOLIO AS NO_ENTREGA,A.FECHA AS FECHA_ENTREGA,
    B.MG_PEDIDO_SURTIDO_ID,B.DOCTO_VE_ID,B.FOLIO AS NO_PEDIDO,B.CLIENTE_ID,
    B.ZONA_ID,B.RUTA_ID,B.SECUENCIA_CARGA,
    C.MG_PEDIDO_VERIFICADO_ID,C.NO_TICKET,C.FOLIO_FACT,D.FECHA AS FECHA_FACT,(D.IMPORTE_NETO + D.TOTAL_IMPUESTOS) AS IMP_FACT
    FROM MG_DOCTOS_ENTREGAS A
    INNER JOIN MG_PEDIDOS_SURTIDOS B ON(A.MG_DOCTO_ENTREGA_ID = B.MG_DOCTO_ENTREGA_ID)
    INNER JOIN MG_PEDIDOS_VERIFICADOS C ON(B.MG_PEDIDO_SURTIDO_ID = C.MG_PEDIDO_SURTIDO_ID)
    INNER JOIN DOCTOS_VE D ON(C.FOLIO_FACT = D.FOLIO)
    WHERE D.TIPO_DOCTO = 'F' AND (D.FECHA BETWEEN :V_FECHA_INI AND :V_FECHA_FIN)
    AND C.FOLIO_FACT IS NOT NULL AND C.TIPO_DOCTO_VE_FINAL =:V_TIPO_DOCTO_VE
    ORDER BY A.FOLIO,B.SECUENCIA_CARGA
    INTO MG_DOCTO_ENTREGA_ID,FOLIO_ENTREGA,FECHA_ENTREGA,
    MG_PEDIDO_SURTIDO_ID,DOCTO_VE_ID,FOLIO_PEDIDO,CLIENTE_ID,
    ZONA_ID,RUTA_ID,SECUENCIA_CARGA,
    MG_PEDIDO_VERIFICADO_ID,NO_TICKET,FOLIO_FACTURA,FECHA_FACTURA,IMPORTE_FACTURABLE
        DO
        BEGIN
            RUTA = '';
            SELECT NOMBRE FROM VIAS_EMBARQUE
            WHERE VIA_EMBARQUE_ID =:RUTA_ID
            INTO RUTA;
    
            ZONA = '';
            SELECT NOMBRE FROM ZONAS_CLIENTES
            WHERE ZONA_CLIENTE_ID =:ZONA_ID
            INTO ZONA;

            CLAVE_CLIENTE = '';

            SELECT CLAVE_CLIENTE FROM CLAVES_CLIENTES A
            INNER JOIN ROLES_CLAVES_CLIENTES B ON(A.ROL_CLAVE_CLI_ID = B.ROL_CLAVE_CLI_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID AND B.ES_PPAL = 'S'
            INTO CLAVE_CLIENTE;
    
            NOM_CLIENTE = '';
            SELECT NOMBRE FROM CLIENTES
            WHERE CLIENTE_ID =:CLIENTE_ID
            INTO NOM_CLIENTE;
    
            CALLE = '';
            CODIGO_POSTAL = '';
            TELEFONO = '';
            CIUDAD = '';
            ESTADO = '';
            POBLACION = '';
            SELECT A.CALLE,A.CODIGO_POSTAL,A.TELEFONO1,B.NOMBRE AS CIUDAD,C.NOMBRE AS ESTADO FROM DIRS_CLIENTES A
            INNER JOIN CIUDADES B ON(A.CIUDAD_ID = B.CIUDAD_ID)
            INNER JOIN ESTADOS C ON(A.ESTADO_ID = C.ESTADO_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID AND A.ES_DIR_PPAL = 'S'
            INTO DIR,CODIGO_POSTAL,TELEFONO,CIUDAD,ESTADO;
                IF (CODIGO_POSTAL IS NOT NULL) THEN
                    CALLE = DIR || ', CP:' || CODIGO_POSTAL;
                ELSE
                    CALLE = DIR;
                POBLACION = CIUDAD || ', ' || ESTADO;
    
            CONDICION_PAGO = '';
/*            SELECT A.COND_PAGO_ID,SUM(DIAS_PLAZO) AS DIAS_PLAZO FROM CLIENTES A
            INNER JOIN PLAZOS_COND_PAG B ON(A.COND_PAGO_ID = B.COND_PAGO_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID
            GROUP BY A.COND_PAGO_ID*/
            SELECT A.COND_PAGO_ID,SUM(B.DIAS_PLAZO) AS DIAS_PLAZO FROM DOCTOS_VE A
            INNER JOIN PLAZOS_COND_PAG B ON(A.COND_PAGO_ID = B.COND_PAGO_ID)
            WHERE A.FOLIO =:FOLIO_FACTURA AND A.TIPO_DOCTO = 'F'
            GROUP BY A.COND_PAGO_ID
            INTO CONDICION_PAGO_ID,DIAS_PLAZO;
              IF (DIAS_PLAZO = 0) THEN
                CONDICION_PAGO = 'COD';
              ELSE
                CONDICION_PAGO = 'CREDITO';
    
            /*VERIFICAR QUE ESA FACT NO EXISTA COMO PEDIDO ENRUTADO*/
            FOLIO_FACT = NULL;
            SELECT FOLIO_FACT FROM MG_PEDIDOS_ENRUTADOS
            WHERE FOLIO_FACT =:FOLIO_FACTURA AND TIPO_DOCTO_VE_FINAL =:V_TIPO_DOCTO_VE
            INTO FOLIO_FACT;
            IF (FOLIO_FACT IS NULL) THEN
            BEGIN
                INSERT INTO MG_DOCUMENTACION_RUTA(MG_DOCUMENTACION_RUTA_ID,MG_DOCTO_ENTREGA_ID,MG_PEDIDO_SURTIDO_ID,MG_PEDIDO_VERIFICADO_ID,
                SECUENCIA_CARGA,RUTA_ID,RUTA,FOLIO_PEDIDO,FOLIO_ENTREGA,NO_TICKET,CLIENTE_ID,CLAVE_CLIENTE,NOM_CLIENTE,CALLE,
                POBLACION,TELEFONO,FECHA_FACTURA,FOLIO_FACTURA,MONTO_FACTURA,CONDICION_PAGO_ID,CONDICION_PAGO,SELECCIONADO)
                VALUES(-1,:MG_DOCTO_ENTREGA_ID,:MG_PEDIDO_SURTIDO_ID,:MG_PEDIDO_VERIFICADO_ID,
                :SECUENCIA_CARGA,:RUTA_ID,:RUTA,:FOLIO_PEDIDO,:FOLIO_ENTREGA,
                :NO_TICKET,:CLIENTE_ID,:CLAVE_CLIENTE,:NOM_CLIENTE,:CALLE,:POBLACION,:TELEFONO,:FECHA_FACTURA,:FOLIO_FACTURA,
                :IMPORTE_FACTURABLE,:CONDICION_PAGO_ID,:CONDICION_PAGO,'N');
             END

/*           SUSPEND;*/
        END/*SI TIENE FACTURA*/
  END


  IF (V_TIPO_DOCTO_VE = 'R') THEN
  BEGIN
    IMPORTE_FACTURABLE = 0;
    FOR SELECT A.MG_DOCTO_ENTREGA_ID,A.FOLIO AS NO_ENTREGA,A.FECHA AS FECHA_ENTREGA,
    B.MG_PEDIDO_SURTIDO_ID,B.DOCTO_VE_ID,B.FOLIO AS NO_PEDIDO,B.CLIENTE_ID,
    B.ZONA_ID,B.RUTA_ID,B.SECUENCIA_CARGA,
    C.MG_PEDIDO_VERIFICADO_ID,C.NO_TICKET,C.FOLIO_REM,D.FECHA AS FECHA_FACT,(D.IMPORTE_NETO + D.TOTAL_IMPUESTOS) AS IMP_FACT
    FROM MG_DOCTOS_ENTREGAS A
    INNER JOIN MG_PEDIDOS_SURTIDOS B ON(A.MG_DOCTO_ENTREGA_ID = B.MG_DOCTO_ENTREGA_ID)
    INNER JOIN MG_PEDIDOS_VERIFICADOS C ON(B.MG_PEDIDO_SURTIDO_ID = C.MG_PEDIDO_SURTIDO_ID)
    INNER JOIN DOCTOS_VE D ON(C.FOLIO_REM = D.FOLIO)
    WHERE D.TIPO_DOCTO = 'R' AND (D.FECHA BETWEEN :V_FECHA_INI AND :V_FECHA_FIN)
    AND C.FOLIO_REM IS NOT NULL AND C.TIPO_DOCTO_VE_FINAL =:V_TIPO_DOCTO_VE
    ORDER BY A.FOLIO,B.SECUENCIA_CARGA
    INTO MG_DOCTO_ENTREGA_ID,FOLIO_ENTREGA,FECHA_ENTREGA,
    MG_PEDIDO_SURTIDO_ID,DOCTO_VE_ID,FOLIO_PEDIDO,CLIENTE_ID,
    ZONA_ID,RUTA_ID,SECUENCIA_CARGA,
    MG_PEDIDO_VERIFICADO_ID,NO_TICKET,FOLIO_FACTURA,FECHA_FACTURA,IMPORTE_FACTURABLE
        DO
        BEGIN
            RUTA = '';
            SELECT NOMBRE FROM VIAS_EMBARQUE
            WHERE VIA_EMBARQUE_ID =:RUTA_ID
            INTO RUTA;
    
            ZONA = '';
            SELECT NOMBRE FROM ZONAS_CLIENTES
            WHERE ZONA_CLIENTE_ID =:ZONA_ID
            INTO ZONA;

            CLAVE_CLIENTE = '';

            SELECT CLAVE_CLIENTE FROM CLAVES_CLIENTES A
            INNER JOIN ROLES_CLAVES_CLIENTES B ON(A.ROL_CLAVE_CLI_ID = B.ROL_CLAVE_CLI_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID AND B.ES_PPAL = 'S'
            INTO CLAVE_CLIENTE;
    
            NOM_CLIENTE = '';
            SELECT NOMBRE FROM CLIENTES
            WHERE CLIENTE_ID =:CLIENTE_ID
            INTO NOM_CLIENTE;
    
            CALLE = '';
            CODIGO_POSTAL = '';
            TELEFONO = '';
            CIUDAD = '';
            ESTADO = '';
            POBLACION = '';
            SELECT A.CALLE,A.CODIGO_POSTAL,A.TELEFONO1,B.NOMBRE AS CIUDAD,C.NOMBRE AS ESTADO FROM DIRS_CLIENTES A
            INNER JOIN CIUDADES B ON(A.CIUDAD_ID = B.CIUDAD_ID)
            INNER JOIN ESTADOS C ON(A.ESTADO_ID = C.ESTADO_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID AND A.ES_DIR_PPAL = 'S'
            INTO DIR,CODIGO_POSTAL,TELEFONO,CIUDAD,ESTADO;
                IF (CODIGO_POSTAL IS NOT NULL) THEN
                    CALLE = DIR || ', CP:' || CODIGO_POSTAL;
                ELSE
                    CALLE = DIR;
                POBLACION = CIUDAD || ', ' || ESTADO;
    
            CONDICION_PAGO = '';
/*            SELECT A.COND_PAGO_ID,SUM(DIAS_PLAZO) AS DIAS_PLAZO FROM CLIENTES A
            INNER JOIN PLAZOS_COND_PAG B ON(A.COND_PAGO_ID = B.COND_PAGO_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID
            GROUP BY A.COND_PAGO_ID*/
            SELECT A.COND_PAGO_ID,SUM(B.DIAS_PLAZO) AS DIAS_PLAZO FROM DOCTOS_VE A
            INNER JOIN PLAZOS_COND_PAG B ON(A.COND_PAGO_ID = B.COND_PAGO_ID)
            WHERE A.FOLIO =:FOLIO_FACTURA AND A.TIPO_DOCTO = 'F'
            GROUP BY A.COND_PAGO_ID
            INTO CONDICION_PAGO_ID,DIAS_PLAZO;
              IF (DIAS_PLAZO = 0) THEN
                CONDICION_PAGO = 'COD';
              ELSE
                CONDICION_PAGO = 'CREDITO';
    
            /*VERIFICAR QUE ESA REMISION NO EXISTA COMO PEDIDO ENRUTADO*/
            FOLIO_REM = NULL;
            SELECT FOLIO_REM FROM MG_PEDIDOS_ENRUTADOS
            WHERE FOLIO_REM =:FOLIO_FACTURA AND TIPO_DOCTO_VE_FINAL =:V_TIPO_DOCTO_VE
            INTO FOLIO_REM;
            IF (FOLIO_REM IS NULL) THEN
            BEGIN
                INSERT INTO MG_DOCUMENTACION_RUTA(MG_DOCUMENTACION_RUTA_ID,MG_DOCTO_ENTREGA_ID,MG_PEDIDO_SURTIDO_ID,MG_PEDIDO_VERIFICADO_ID,
                SECUENCIA_CARGA,RUTA_ID,RUTA,FOLIO_PEDIDO,FOLIO_ENTREGA,NO_TICKET,CLIENTE_ID,CLAVE_CLIENTE,NOM_CLIENTE,CALLE,
                POBLACION,TELEFONO,FECHA_FACTURA,FOLIO_FACTURA,MONTO_FACTURA,CONDICION_PAGO_ID,CONDICION_PAGO,SELECCIONADO)
                VALUES(-1,:MG_DOCTO_ENTREGA_ID,:MG_PEDIDO_SURTIDO_ID,:MG_PEDIDO_VERIFICADO_ID,
                :SECUENCIA_CARGA,:RUTA_ID,:RUTA,:FOLIO_PEDIDO,:FOLIO_ENTREGA,
                :NO_TICKET,:CLIENTE_ID,:CLAVE_CLIENTE,:NOM_CLIENTE,:CALLE,:POBLACION,:TELEFONO,:FECHA_FACTURA,:FOLIO_FACTURA,
                :IMPORTE_FACTURABLE,:CONDICION_PAGO_ID,:CONDICION_PAGO,'N');
             END

        END/*SI TIENE FACTURA*/
  END
END
^

ALTER PROCEDURE MG_REASIGNA_FOLIOS
AS
declare variable mgdoctoid integer;
declare variable no_folio_s char(9) character set none;
declare variable no_folio_i integer;
BEGIN
  /* Procedure Text */
  NO_FOLIO_I = 0;
  FOR SELECT MG_DOCTO_ENTREGA_ID FROM MG_DOCTOS_ENTREGAS
  ORDER BY MG_DOCTO_ENTREGA_ID
  INTO MGDOCTOID
  DO
  BEGIN
    NO_FOLIO_I = NO_FOLIO_I + 1;
    NO_FOLIO_S = NO_FOLIO_I;
    UPDATE MG_DOCTOS_ENTREGAS SET FOLIO =:NO_FOLIO_S
    WHERE MG_DOCTO_ENTREGA_ID =:MGDOCTOID;
  END

  NO_FOLIO_I = 0;
  FOR SELECT MG_PEDIDO_SURTIDO_ID FROM MG_PEDIDOS_SURTIDOS
  ORDER BY MG_PEDIDO_SURTIDO_ID
  INTO MGDOCTOID
  DO
  BEGIN
    NO_FOLIO_I = NO_FOLIO_I + 1;
    NO_FOLIO_S = NO_FOLIO_I;
    UPDATE MG_PEDIDOS_SURTIDOS SET NO_LISTA_SURTIDO =:NO_FOLIO_S
    WHERE MG_PEDIDO_SURTIDO_ID =:MGDOCTOID;
  END

  NO_FOLIO_I = 0;
  FOR SELECT MG_PEDIDO_VERIFICADO_ID FROM MG_PEDIDOS_VERIFICADOS
  ORDER BY MG_PEDIDO_VERIFICADO_ID
  INTO MGDOCTOID
  DO
  BEGIN
    NO_FOLIO_I = NO_FOLIO_I + 1;
    NO_FOLIO_S = NO_FOLIO_I;
    UPDATE MG_PEDIDOS_VERIFICADOS SET NO_TICKET =:NO_FOLIO_S
    WHERE MG_PEDIDO_VERIFICADO_ID =:MGDOCTOID;
  END
  /*suspend;*/
END
^

ALTER PROCEDURE MG_REP_BACKORDER (
    V_ALMACEN VARCHAR(50),
    V_FOLIO VARCHAR(9),
    V_CLIENTE VARCHAR(100),
    V_ZONA VARCHAR(50),
    V_RUTA VARCHAR(50),
    V_MOST_ARTS_BO CHAR(1),
    V_FECHA_INI DATE,
    V_FECHA_FIN DATE,
    V_ESTADO CHAR(1))
RETURNS (
    ARTICULO_ID INTEGER,
    CODIGO VARCHAR(20),
    CLAVE VARCHAR(20),
    NOMBRE VARCHAR(100),
    PZAS_PEDIDAS NUMERIC(18,5),
    PZAS_FACTURADAS NUMERIC(18,5),
    PZAS_BACKORDER NUMERIC(18,5),
    NIV_SERV_PZAS NUMERIC(18,5),
    MONTO_PEDIDO NUMERIC(15,2),
    MONTO_FACTURADO NUMERIC(15,2),
    MONTO_FACT_BACKORDER NUMERIC(15,2),
    NIV_SERV_IMPORTE NUMERIC(15,2))
AS
BEGIN
  /* Procedure Text */
  if (V_ALMACEN = '0') then
    V_ALMACEN = '%';
  if (V_FOLIO = '0') then
    V_FOLIO = '%';
  if (V_CLIENTE = '0') then
    V_CLIENTE = '%';
  if (V_ZONA = '0') then
    V_ZONA = '%';
  if (V_RUTA = '0') then
    V_RUTA = '%';

IF (V_MOST_ARTS_BO = 'N') THEN
BEGIN
  FOR SELECT ARTICULO_ID,CODIGO_ARTICULO,CLAVE_ARTICULO,NOMBRE,SUM(PZAS_PEDIDAS) AS PZAS_PEDIDAS,SUM(PZAS_FACTURADAS) AS PZAS_FACTURADAS,
  SUM(PZAS_BACKORDER) AS PZAS_BACKORDER,SUM(MONTO_PEDIDO) AS MONTO_PEDIDO,SUM(MONTO_FACTURADO) AS MONTO_FACTURADO,SUM(MONTO_FACT_BACKORDER) AS MONTO_FACT_BACKORDER
  FROM MG_HIST_BACKORDER A
  WHERE ALMACEN LIKE :V_ALMACEN AND FOLIO_PEDIDO LIKE :V_FOLIO AND CLIENTE LIKE :V_CLIENTE AND ZONA LIKE :V_ZONA
  AND RUTA LIKE :V_RUTA AND (FECHA BETWEEN :V_FECHA_INI AND :V_FECHA_FIN) AND ESTADO =:V_ESTADO
  GROUP BY ARTICULO_ID,CODIGO_ARTICULO,CLAVE_ARTICULO,NOMBRE
  INTO ARTICULO_ID,CODIGO,CLAVE,NOMBRE,PZAS_PEDIDAS,PZAS_FACTURADAS,PZAS_BACKORDER,MONTO_PEDIDO,MONTO_FACTURADO,MONTO_FACT_BACKORDER
    DO
    BEGIN
        NIV_SERV_PZAS = (PZAS_FACTURADAS / PZAS_PEDIDAS) * 100.0;

        NIV_SERV_IMPORTE = 0;
        if ((MONTO_FACTURADO = 0) AND (MONTO_PEDIDO = 0)) then
            NIV_SERV_IMPORTE = 0;
        if ((MONTO_FACTURADO > 0) AND (MONTO_PEDIDO = 0)) then
            NIV_SERV_IMPORTE = 100;
        if ((MONTO_FACTURADO > 0) AND (MONTO_PEDIDO > 0)) then
            NIV_SERV_IMPORTE = (MONTO_FACTURADO / MONTO_PEDIDO) * 100.00;
        if ((MONTO_FACTURADO = 0) AND (MONTO_PEDIDO > 0)) then
            NIV_SERV_IMPORTE = 0;

        SUSPEND;
    END
END
ELSE
BEGIN
  FOR SELECT ARTICULO_ID,CODIGO_ARTICULO,CLAVE_ARTICULO,NOMBRE,SUM(PZAS_PEDIDAS) AS PZAS_PEDIDAS,SUM(PZAS_FACTURADAS) AS PZAS_FACTURADAS,
  SUM(PZAS_BACKORDER) AS PZAS_BACKORDER,SUM(MONTO_PEDIDO) AS MONTO_PEDIDO,SUM(MONTO_FACTURADO) AS MONTO_FACTURADO,SUM(MONTO_FACT_BACKORDER) AS MONTO_FACT_BACKORDER
  FROM MG_HIST_BACKORDER A
  WHERE ALMACEN LIKE :V_ALMACEN AND FOLIO_PEDIDO LIKE :V_FOLIO AND CLIENTE LIKE :V_CLIENTE AND ZONA LIKE :V_ZONA
  AND RUTA LIKE :V_RUTA AND (FECHA BETWEEN :V_FECHA_INI AND :V_FECHA_FIN) AND PZAS_BACKORDER > 0 AND ESTADO =:V_ESTADO
  GROUP BY ARTICULO_ID,CODIGO_ARTICULO,CLAVE_ARTICULO,NOMBRE
  INTO ARTICULO_ID,CODIGO,CLAVE,NOMBRE,PZAS_PEDIDAS,PZAS_FACTURADAS,PZAS_BACKORDER,MONTO_PEDIDO,MONTO_FACTURADO,MONTO_FACT_BACKORDER
    DO
    BEGIN
        NIV_SERV_PZAS = (PZAS_FACTURADAS / PZAS_PEDIDAS) * 100.0;

        NIV_SERV_IMPORTE = 0;
        if ((MONTO_FACTURADO = 0) AND (MONTO_PEDIDO = 0)) then
            NIV_SERV_IMPORTE = 0;
        if ((MONTO_FACTURADO > 0) AND (MONTO_PEDIDO = 0)) then
            NIV_SERV_IMPORTE = 100;
        if ((MONTO_FACTURADO > 0) AND (MONTO_PEDIDO > 0)) then
            NIV_SERV_IMPORTE = (MONTO_FACTURADO / MONTO_PEDIDO) * 100.00;
        if ((MONTO_FACTURADO = 0) AND (MONTO_PEDIDO > 0)) then
            NIV_SERV_IMPORTE = 0;

        SUSPEND;
    END
END

END
^

ALTER PROCEDURE MG_ROUND_ARRIBA (
    V_CANT DOUBLE PRECISION,
    V_MIN DOUBLE PRECISION)
RETURNS (
    CANT DOUBLE PRECISION)
AS
DECLARE VARIABLE SIGNO DOUBLE PRECISION;
DECLARE VARIABLE ENT NUMERIC(18,0);
DECLARE VARIABLE FRAC DOUBLE PRECISION;
DECLARE VARIABLE MIN1 NUMERIC(18,6);
BEGIN
  /*CM*/
  IF (V_CANT < 0) THEN
    SIGNO = -1;
  ELSE
    SIGNO = 1;
  CANT = V_CANT * SIGNO;
  CANT = CANT/V_MIN;
  ENT = CANT;
  FRAC = CANT - ENT;
  IF (FRAC > 0) THEN
    ENT = ENT + 1;
  MIN1 = V_MIN * SIGNO;
  CANT = ENT * MIN1;
END
^

ALTER PROCEDURE MGTRUPER_REP_DIAS_COBERTURA (
    FECHA DATE,
    ALMACEN_ID INTEGER,
    COD_INI VARCHAR(20),
    COD_FIN VARCHAR(20),
    PERIODO_HISTORICO INTEGER,
    MOVTOS_IN CHAR(1),
    CONCEPTO_IN_ID INTEGER)
RETURNS (
    ARTICULO_ID INTEGER,
    NOMBRE_LINEA VARCHAR(50),
    LINEA_ARTICULO_ID INTEGER,
    CLAVE_ARTICULO VARCHAR(20),
    NOMBRE VARCHAR(100),
    PUNTO_REORDEN NUMERIC(15,2),
    INVENTARIO_MAXIMO NUMERIC(15,2),
    INVENTARIO_MINIMO NUMERIC(15,2),
    VENTA_SEM1 NUMERIC(15,2),
    VENTA_SEM2 NUMERIC(15,2),
    VENTA_SEM3 NUMERIC(15,2),
    VENTA_SEM4 NUMERIC(15,2),
    VENTA_SEM5 NUMERIC(15,2),
    VENTA_SEM6 NUMERIC(15,2),
    VENTA_SEM7 NUMERIC(15,2),
    VENTA_SEM8 NUMERIC(15,2),
    VENTA_SEM9 NUMERIC(15,2),
    VENTA_SEM10 NUMERIC(15,2),
    VENTA_SEM11 NUMERIC(15,2),
    VENTA_SEM12 NUMERIC(15,2),
    VENTA_TOTAL NUMERIC(15,2),
    EXISTENCIA NUMERIC(15,2),
    POR_SURTIR NUMERIC(15,2),
    POR_REC NUMERIC(15,2))
AS
declare variable fecha_ini date;
declare variable fecha_fin date;
declare variable tot_unids_ve numeric(15,2);
declare variable tot_unids_in numeric(15,2);
BEGIN
    FECHA = FECHA - 1;

    /*CM*/
    FOR SELECT A.ARTICULO_ID, A.NOMBRE, LINEA_ARTICULO_ID, B.PUNTO_REORDEN,
    B.INVENTARIO_MAXIMO, B.INVENTARIO_MINIMO
    FROM ARTICULOS A
    LEFT JOIN NIVELES_ARTICULOS B
    ON (A.ARTICULO_ID = B.ARTICULO_ID)
    INNER JOIN CLAVES_ARTICULOS C ON (A.ARTICULO_ID = C.ARTICULO_ID)
    WHERE B.ALMACEN_ID = :ALMACEN_ID AND CLAVE_ARTICULO BETWEEN :COD_INI AND :COD_FIN
    AND ROL_CLAVE_ART_ID = 17
    ORDER BY NOMBRE
    INTO ARTICULO_ID, NOMBRE, LINEA_ARTICULO_ID, PUNTO_REORDEN, INVENTARIO_MAXIMO, INVENTARIO_MINIMO
        DO
        BEGIN
            VENTA_SEM1 = 0;
            VENTA_SEM2 = 0;
            VENTA_SEM3 = 0;
            VENTA_SEM4 = 0;
            VENTA_SEM5 = 0;
            VENTA_SEM6 = 0;
            VENTA_SEM7 = 0;
            VENTA_SEM8 = 0;
            VENTA_SEM9 = 0;
            VENTA_SEM10 = 0;
            VENTA_SEM11 = 0;
            VENTA_SEM12 = 0;

            FECHA_INI = FECHA - 6;
            FECHA_FIN = FECHA;
            TOT_UNIDS_VE = 0;
            SELECT SUM(VENTA_UNID) AS VENTA_UNID
            FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
            GROUP BY ARTICULO_ID
            INTO TOT_UNIDS_VE;
            if (TOT_UNIDS_VE IS NULL) then
                TOT_UNIDS_VE = 0;
            if (MOVTOS_IN = 'S') then
            BEGIN
                TOT_UNIDS_IN = 0;
                SELECT SUM(UNIDADES) AS SALIDAS_UNID
                FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_IN;
                if (TOT_UNIDS_IN IS NULL) then
                    TOT_UNIDS_IN = 0;
            END
            ELSE
                TOT_UNIDS_IN = 0;

            VENTA_SEM1 = TOT_UNIDS_VE + TOT_UNIDS_IN;


            FECHA_INI = FECHA - 13;
            FECHA_FIN = FECHA - 7;
            TOT_UNIDS_VE = 0;
            SELECT SUM(VENTA_UNID) AS VENTA_UNID
            FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
            GROUP BY ARTICULO_ID
            INTO TOT_UNIDS_VE;
            if (TOT_UNIDS_VE IS NULL) then
                TOT_UNIDS_VE = 0;
            if (MOVTOS_IN = 'S') then
            BEGIN
                TOT_UNIDS_IN = 0;
                SELECT SUM(UNIDADES) AS SALIDAS_UNID
                FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_IN;
                if (TOT_UNIDS_IN IS NULL) then
                    TOT_UNIDS_IN = 0;
            END
            ELSE
                TOT_UNIDS_IN = 0;

            VENTA_SEM2 = TOT_UNIDS_VE + TOT_UNIDS_IN;


            FECHA_INI = FECHA - 20;
            FECHA_FIN = FECHA - 14;
            TOT_UNIDS_VE = 0;
            SELECT SUM(VENTA_UNID) AS VENTA_UNID
            FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
            GROUP BY ARTICULO_ID
            INTO TOT_UNIDS_VE;
            if (TOT_UNIDS_VE IS NULL) then
                TOT_UNIDS_VE = 0;
            if (MOVTOS_IN = 'S') then
            BEGIN
                TOT_UNIDS_IN = 0;
                SELECT SUM(UNIDADES) AS SALIDAS_UNID
                FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_IN;
                if (TOT_UNIDS_IN IS NULL) then
                    TOT_UNIDS_IN = 0;
            END
            ELSE
                TOT_UNIDS_IN = 0;

            VENTA_SEM3 = TOT_UNIDS_VE + TOT_UNIDS_IN;


            FECHA_INI = FECHA - 27;
            FECHA_FIN = FECHA - 21;
            TOT_UNIDS_VE = 0;
            SELECT SUM(VENTA_UNID) AS VENTA_UNID
            FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
            GROUP BY ARTICULO_ID
            INTO TOT_UNIDS_VE;
            if (TOT_UNIDS_VE IS NULL) then
                TOT_UNIDS_VE = 0;
            if (MOVTOS_IN = 'S') then
            BEGIN
                TOT_UNIDS_IN = 0;
                SELECT SUM(UNIDADES) AS SALIDAS_UNID
                FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_IN;
                if (TOT_UNIDS_IN IS NULL) then
                    TOT_UNIDS_IN = 0;
            END
            ELSE
                TOT_UNIDS_IN = 0;

            VENTA_SEM4 = TOT_UNIDS_VE + TOT_UNIDS_IN;


            FECHA_INI = FECHA - 34;
            FECHA_FIN = FECHA - 28;
            TOT_UNIDS_VE = 0;
            SELECT SUM(VENTA_UNID) AS VENTA_UNID
            FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
            GROUP BY ARTICULO_ID
            INTO TOT_UNIDS_VE;
            if (TOT_UNIDS_VE IS NULL) then
                TOT_UNIDS_VE = 0;
            if (MOVTOS_IN = 'S') then
            BEGIN
                TOT_UNIDS_IN = 0;
                SELECT SUM(UNIDADES) AS SALIDAS_UNID
                FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_IN;
                if (TOT_UNIDS_IN IS NULL) then
                    TOT_UNIDS_IN = 0;
            END
            ELSE
                TOT_UNIDS_IN = 0;

            VENTA_SEM5 = TOT_UNIDS_VE + TOT_UNIDS_IN;


            IF (PERIODO_HISTORICO >= 6) THEN
            BEGIN
                FECHA_INI = FECHA - 41;
                FECHA_FIN = FECHA - 35;
                TOT_UNIDS_VE = 0;
                SELECT SUM(VENTA_UNID) AS VENTA_UNID
                FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_VE;
                if (TOT_UNIDS_VE IS NULL) then
                    TOT_UNIDS_VE = 0;
                if (MOVTOS_IN = 'S') then
                BEGIN
                    TOT_UNIDS_IN = 0;
                    SELECT SUM(UNIDADES) AS SALIDAS_UNID
                    FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                    GROUP BY ARTICULO_ID
                    INTO TOT_UNIDS_IN;
                    if (TOT_UNIDS_IN IS NULL) then
                        TOT_UNIDS_IN = 0;
                END
                ELSE
                    TOT_UNIDS_IN = 0;
    
                VENTA_SEM6 = TOT_UNIDS_VE + TOT_UNIDS_IN;
            END

            IF (PERIODO_HISTORICO >= 7) THEN
            BEGIN
                FECHA_INI = FECHA - 48;
                FECHA_FIN = FECHA - 42;
                TOT_UNIDS_VE = 0;
                SELECT SUM(VENTA_UNID) AS VENTA_UNID
                FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_VE;
                if (TOT_UNIDS_VE IS NULL) then
                    TOT_UNIDS_VE = 0;
                if (MOVTOS_IN = 'S') then
                BEGIN
                    TOT_UNIDS_IN = 0;
                    SELECT SUM(UNIDADES) AS SALIDAS_UNID
                    FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                    GROUP BY ARTICULO_ID
                    INTO TOT_UNIDS_IN;
                    if (TOT_UNIDS_IN IS NULL) then
                        TOT_UNIDS_IN = 0;
                END
                ELSE
                    TOT_UNIDS_IN = 0;
    
                VENTA_SEM7 = TOT_UNIDS_VE + TOT_UNIDS_IN;
            END

            IF (PERIODO_HISTORICO >= 8) THEN
            BEGIN
                FECHA_INI = FECHA - 55;
                FECHA_FIN = FECHA - 49;
                TOT_UNIDS_VE = 0;
                SELECT SUM(VENTA_UNID) AS VENTA_UNID
                FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_VE;
                if (TOT_UNIDS_VE IS NULL) then
                    TOT_UNIDS_VE = 0;
                if (MOVTOS_IN = 'S') then
                BEGIN
                    TOT_UNIDS_IN = 0;
                    SELECT SUM(UNIDADES) AS SALIDAS_UNID
                    FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                    GROUP BY ARTICULO_ID
                    INTO TOT_UNIDS_IN;
                    if (TOT_UNIDS_IN IS NULL) then
                        TOT_UNIDS_IN = 0;
                END
                ELSE
                    TOT_UNIDS_IN = 0;
    
                VENTA_SEM8 = TOT_UNIDS_VE + TOT_UNIDS_IN;
            END

            IF (PERIODO_HISTORICO >= 9) THEN
            BEGIN
                FECHA_INI = FECHA - 62;
                FECHA_FIN = FECHA - 56;
                TOT_UNIDS_VE = 0;
                SELECT SUM(VENTA_UNID) AS VENTA_UNID
                FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_VE;
                if (TOT_UNIDS_VE IS NULL) then
                    TOT_UNIDS_VE = 0;
                if (MOVTOS_IN = 'S') then
                BEGIN
                    TOT_UNIDS_IN = 0;
                    SELECT SUM(UNIDADES) AS SALIDAS_UNID
                    FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                    GROUP BY ARTICULO_ID
                    INTO TOT_UNIDS_IN;
                    if (TOT_UNIDS_IN IS NULL) then
                        TOT_UNIDS_IN = 0;
                END
                ELSE
                    TOT_UNIDS_IN = 0;
    
                VENTA_SEM9 = TOT_UNIDS_VE + TOT_UNIDS_IN;
            END

            IF (PERIODO_HISTORICO >= 10) THEN
            BEGIN
                FECHA_INI = FECHA - 69;
                FECHA_FIN = FECHA - 63;
                TOT_UNIDS_VE = 0;
                SELECT SUM(VENTA_UNID) AS VENTA_UNID
                FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_VE;
                if (TOT_UNIDS_VE IS NULL) then
                    TOT_UNIDS_VE = 0;
                if (MOVTOS_IN = 'S') then
                BEGIN
                    TOT_UNIDS_IN = 0;
                    SELECT SUM(UNIDADES) AS SALIDAS_UNID
                    FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                    GROUP BY ARTICULO_ID
                    INTO TOT_UNIDS_IN;
                    if (TOT_UNIDS_IN IS NULL) then
                        TOT_UNIDS_IN = 0;
                END
                ELSE
                    TOT_UNIDS_IN = 0;
    
                VENTA_SEM10 = TOT_UNIDS_VE + TOT_UNIDS_IN;
            END

            IF (PERIODO_HISTORICO >= 11) THEN
            BEGIN
                FECHA_INI = FECHA - 76;
                FECHA_FIN = FECHA - 70;
                TOT_UNIDS_VE = 0;
                SELECT SUM(VENTA_UNID) AS VENTA_UNID
                FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_VE;
                if (TOT_UNIDS_VE IS NULL) then
                    TOT_UNIDS_VE = 0;
                if (MOVTOS_IN = 'S') then
                BEGIN
                    TOT_UNIDS_IN = 0;
                    SELECT SUM(UNIDADES) AS SALIDAS_UNID
                    FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                    GROUP BY ARTICULO_ID
                    INTO TOT_UNIDS_IN;
                    if (TOT_UNIDS_IN IS NULL) then
                        TOT_UNIDS_IN = 0;
                END
                ELSE
                    TOT_UNIDS_IN = 0;
    
                VENTA_SEM11 = TOT_UNIDS_VE + TOT_UNIDS_IN;
            END

            IF (PERIODO_HISTORICO >= 12) THEN
            BEGIN
                FECHA_INI = FECHA - 83;
                FECHA_FIN = FECHA - 77;
                TOT_UNIDS_VE = 0;
                SELECT SUM(VENTA_UNID) AS VENTA_UNID
                FROM VENTA_ART_DESGL_MOVTOS(:ARTICULO_ID,:ALMACEN_ID,:FECHA_INI,:FECHA_FIN,'01/01/1000','01/01/1000','B','A','N')
                GROUP BY ARTICULO_ID
                INTO TOT_UNIDS_VE;
                if (TOT_UNIDS_VE IS NULL) then
                    TOT_UNIDS_VE = 0;
                if (MOVTOS_IN = 'S') then
                BEGIN
                    TOT_UNIDS_IN = 0;
                    SELECT SUM(UNIDADES) AS SALIDAS_UNID
                    FROM RELACION_ARTALM(:CONCEPTO_IN_ID,:ARTICULO_ID,:ALMACEN_ID,0,:FECHA_INI,:FECHA_FIN)
                    GROUP BY ARTICULO_ID
                    INTO TOT_UNIDS_IN;
                    if (TOT_UNIDS_IN IS NULL) then
                        TOT_UNIDS_IN = 0;
                END
                ELSE
                    TOT_UNIDS_IN = 0;
    
                VENTA_SEM12 = TOT_UNIDS_VE + TOT_UNIDS_IN;
            END


            SELECT SUM(UNID_POR_SURTIR)
            FROM PENDIENTES_SURT(0,:ARTICULO_ID,:ALMACEN_ID,:FECHA)
            INTO POR_SURTIR;
            IF (POR_SURTIR IS NULL) THEN POR_SURTIR = 0;
    
            SELECT SUM(UNID_POR_RECIBIR)
            FROM PENDIENTES_REC(0,:ARTICULO_ID,:ALMACEN_ID,:FECHA)
            INTO POR_REC;
            IF (POR_REC IS NULL) THEN POR_REC = 0;
        
            SELECT EXISTENCIA
            FROM EXIVAL_ART(:ARTICULO_ID,:ALMACEN_ID,:FECHA,'N')
            INTO EXISTENCIA;

            SELECT CLAVE_ARTICULO
            FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CLAVE_ARTICULO;

            SELECT NOMBRE
            FROM LINEAS_ARTICULOS
            WHERE LINEA_ARTICULO_ID =:LINEA_ARTICULO_ID
            INTO NOMBRE_LINEA;

            VENTA_TOTAL =  VENTA_SEM1+VENTA_SEM2+VENTA_SEM3+VENTA_SEM4+VENTA_SEM5+VENTA_SEM6+VENTA_SEM7+VENTA_SEM8+VENTA_SEM9+VENTA_SEM10+VENTA_SEM11+VENTA_SEM12;

            SUSPEND;
        END
END
^


ALTER PROCEDURE MG_GET_LISTA_SURTIDO (
    v_mg_pedido_surtido_id integer,
    v_proceso char(1))
returns (
    mg_pedido_surtido_id integer,
    folio_entrega char(9),
    folio_pedido char(9),
    no_lista_surtido integer,
    clave_cliente varchar(20),
    nombre_cliente varchar(100),
    almacen varchar(50),
    zona varchar(50),
    ruta varchar(50),
    secuencia_carga integer,
    codigo varchar(20),
    clave varchar(20),
    codigo_barras varchar(20),
    nombre_articulo varchar(100),
    localizacion char(15),
    cant_comprom_act numeric(18,5),
    importe numeric(15,2),
    posicion integer,
    unidad_venta varchar(5),
    articulo_id integer,
    almacen_id integer)
as
declare variable cliente_id integer;
declare variable zona_id integer;
declare variable ruta_id integer;
begin
  /* V_PROCESO
     S = PEDIDO SURTIDO ENVIA DATOS PARA PREVIEW E IMPRESION
     V = PEDIDO SURTIDO EN VERIFICACION GRABA DATOS TEMP EN TABLA
     V_ALMACEN_ID = SOLO SE OCUPARA CUANDO EL PROCESO SEA = S

     */
    MG_PEDIDO_SURTIDO_ID = V_MG_PEDIDO_SURTIDO_ID;

    FOR SELECT A.FOLIO,B.FOLIO,B.NO_LISTA_SURTIDO,B.SECUENCIA_CARGA,B.CLIENTE_ID,B.ZONA_ID,B.RUTA_ID,
    C.ARTICULO_ID,C.CANT_COMPROM_ACT,C.IMPORTE,C.POSICION
    FROM MG_DOCTOS_ENTREGAS A
    INNER JOIN MG_PEDIDOS_SURTIDOS B ON(A.MG_DOCTO_ENTREGA_ID = B.MG_DOCTO_ENTREGA_ID)
    INNER JOIN MG_PEDIDOS_SURTIDOS_DET C ON(B.MG_PEDIDO_SURTIDO_ID = C.MG_PEDIDO_SURTIDO_ID)
    WHERE B.MG_PEDIDO_SURTIDO_ID =:V_MG_PEDIDO_SURTIDO_ID
    ORDER BY C.POSICION
    INTO FOLIO_ENTREGA,FOLIO_PEDIDO,NO_LISTA_SURTIDO,SECUENCIA_CARGA,CLIENTE_ID,
    ZONA_ID,RUTA_ID,ARTICULO_ID,CANT_COMPROM_ACT,IMPORTE,POSICION
        DO
        BEGIN
            UNIDAD_VENTA = '';
            SELECT UNIDAD_VENTA
            FROM ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO UNIDAD_VENTA;

            ALMACEN_ID = 0;
            ALMACEN = '';
            SELECT A.ALMACEN_ID,B.NOMBRE FROM DOCTOS_VE A
            INNER JOIN ALMACENES B ON(A.ALMACEN_ID = B.ALMACEN_ID)
            WHERE A.FOLIO =:FOLIO_PEDIDO AND A.TIPO_DOCTO = 'P' AND APLICADO = 'S'
            INTO ALMACEN_ID,ALMACEN;

            NOMBRE_CLIENTE = '';
            SELECT NOMBRE FROM CLIENTES
            WHERE CLIENTE_ID =:CLIENTE_ID
            INTO NOMBRE_CLIENTE;

            CLAVE_CLIENTE = '';
            SELECT CLAVE_CLIENTE FROM CLAVES_CLIENTES A
            INNER JOIN ROLES_CLAVES_CLIENTES B ON(A.ROL_CLAVE_CLI_ID = B.ROL_CLAVE_CLI_ID)
            WHERE A.CLIENTE_ID =:CLIENTE_ID AND B.ES_PPAL = 'S'
            INTO CLAVE_CLIENTE;

            ZONA = '';
            SELECT NOMBRE FROM ZONAS_CLIENTES
            WHERE ZONA_CLIENTE_ID =:ZONA_ID
            INTO ZONA;

            RUTA = '';
            SELECT NOMBRE FROM VIAS_EMBARQUE
            WHERE VIA_EMBARQUE_ID =:RUTA_ID
            INTO RUTA;

            NOMBRE_ARTICULO = '';
            SELECT NOMBRE FROM ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID
            INTO NOMBRE_ARTICULO;

            CODIGO = '';
            SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 17
            INTO CODIGO;

            CLAVE = '';
            FOR SELECT CLAVE_ARTICULO FROM CLAVES_ARTICULOS
            WHERE ARTICULO_ID =:ARTICULO_ID AND ROL_CLAVE_ART_ID = 18
            INTO CLAVE
            DO BEGIN
            END

            CODIGO_BARRAS = '';
            FOR SELECT 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.NOMBRE = 'CODIGO DE BARRAS'
            INTO CODIGO_BARRAS
            DO BEGIN
            END

            IF (V_PROCESO = 'S') THEN
            BEGIN
              LOCALIZACION = '';
              SELECT LOCALIZACION FROM NIVELES_ARTICULOS
              WHERE ARTICULO_ID =:ARTICULO_ID AND ALMACEN_ID =:ALMACEN_ID
              INTO LOCALIZACION;

              SUSPEND;
            END


            IF (V_PROCESO = 'V') THEN
            BEGIN
              INSERT INTO MG_ARTICULOS_VERIFICADOS (MG_ARTICULO_VERIFICADO_ID,FOLIO_ENTREGA,FOLIO_PEDIDO,SECUENCIA_CARGA,CLAVE_CLIENTE,NOMBRE_CLIENTE,
              ZONA,RUTA,CODIGO,CLAVE,CODIGO_BARRAS,NOMBRE_ARTICULO,CANTIDAD_POR_VERIFICAR,CANTIDAD_VERIFICADA,DIFERENCIA,IMPORTE,POSICION,MG_PEDIDO_SURTIDO_ID,ARTICULO_ID)
              VALUES (-1,:FOLIO_ENTREGA,:FOLIO_PEDIDO,:SECUENCIA_CARGA,:CLAVE_CLIENTE,:NOMBRE_CLIENTE,
              :ZONA,:RUTA,:CODIGO,:CLAVE,:CODIGO_BARRAS,:NOMBRE_ARTICULO,:CANT_COMPROM_ACT,0,:CANT_COMPROM_ACT,:IMPORTE,:POSICION,:V_MG_PEDIDO_SURTIDO_ID,:ARTICULO_ID);
            END
        END
end
^



SET TERM ; ^






