SET SQL DIALECT 3;

SET NAMES ISO8859_1;

CREATE DATABASE 'FACTUGES.FDB'
PAGE_SIZE 4096
DEFAULT CHARACTER SET ISO8859_1;



/******************************************************************************/
/***                         User Defined Functions                         ***/
/******************************************************************************/

DECLARE EXTERNAL FUNCTION F_RTFTOTEXT
    CSTRING(32767)
    RETURNS CSTRING(32767)
    ENTRY_POINT 'RtfToText' MODULE_NAME 'udf_RtfToText.dll';


DECLARE EXTERNAL FUNCTION MOD
    INTEGER,
    INTEGER
    RETURNS DOUBLE PRECISION BY VALUE
    ENTRY_POINT 'IB_UDF_mod' MODULE_NAME 'ib_udf';


DECLARE EXTERNAL FUNCTION STRLEN
    CSTRING(32767)
    RETURNS INTEGER BY VALUE
    ENTRY_POINT 'IB_UDF_strlen' MODULE_NAME 'ib_udf';


DECLARE EXTERNAL FUNCTION SUBSTR
    CSTRING(255),
    SMALLINT,
    SMALLINT
    RETURNS CSTRING(255) FREE_IT
    ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';




/******************************************************************************/
/***                                Domains                                 ***/
/******************************************************************************/

CREATE DOMAIN TIPO_BINARIO AS
BLOB SUB_TYPE 0 SEGMENT SIZE 80;

CREATE DOMAIN TIPO_BOOLEANO AS
SMALLINT;

CREATE DOMAIN TIPO_CANTIDAD AS
NUMERIC(11,2);

CREATE DOMAIN TIPO_CONCEPTO AS
VARCHAR(2000);

CREATE DOMAIN TIPO_FAMILIA AS
VARCHAR(255);

CREATE DOMAIN TIPO_ID AS
INTEGER;

CREATE DOMAIN TIPO_IMPORTE AS
NUMERIC(11,2);

CREATE DOMAIN TIPO_NOTAS AS
BLOB SUB_TYPE 1 SEGMENT SIZE 80;

CREATE DOMAIN TIPO_PERFIL AS
VARCHAR(15);

CREATE DOMAIN TIPO_PORCENTAJE AS
FLOAT;

CREATE DOMAIN TIPO_USUARIO AS
VARCHAR(30);



/******************************************************************************/
/***                               Generators                               ***/
/******************************************************************************/

CREATE GENERATOR GEN_AGENTES_COMISIONES_ID;
SET GENERATOR GEN_AGENTES_COMISIONES_ID TO 1000000000;

CREATE GENERATOR GEN_ALBARANES_CLI_DETALLES_ID;
SET GENERATOR GEN_ALBARANES_CLI_DETALLES_ID TO 1000000509;

CREATE GENERATOR GEN_ALBARANES_CLI_ID;
SET GENERATOR GEN_ALBARANES_CLI_ID TO 1000000132;

CREATE GENERATOR GEN_ALBARANES_PRO_DETALLES_ID;
SET GENERATOR GEN_ALBARANES_PRO_DETALLES_ID TO 1000000000;

CREATE GENERATOR GEN_ALBARANES_PRO_ID;
SET GENERATOR GEN_ALBARANES_PRO_ID TO 1000000000;

CREATE GENERATOR GEN_ALMACENES_ID;
SET GENERATOR GEN_ALMACENES_ID TO 1000000000;

CREATE GENERATOR GEN_ARTICULOS_ID;
SET GENERATOR GEN_ARTICULOS_ID TO 1000000679;

CREATE GENERATOR GEN_BALANCES_ID;
SET GENERATOR GEN_BALANCES_ID TO 1000000000;

CREATE GENERATOR GEN_CATEGORIAS_ID;
SET GENERATOR GEN_CATEGORIAS_ID TO 1000000000;

CREATE GENERATOR GEN_CHANGECODE;
SET GENERATOR GEN_CHANGECODE TO 219242;

CREATE GENERATOR GEN_CLIENTES_DTOS_PROV_ID;
SET GENERATOR GEN_CLIENTES_DTOS_PROV_ID TO 1000000000;

CREATE GENERATOR GEN_CLIENTES_GRUPOS_ID;
SET GENERATOR GEN_CLIENTES_GRUPOS_ID TO 1000000001;

CREATE GENERATOR GEN_CLIENTES_PROCEDENCIAS_ID;
SET GENERATOR GEN_CLIENTES_PROCEDENCIAS_ID TO 1000000058;

CREATE GENERATOR GEN_COMISIONES_LIQUID_ID;
SET GENERATOR GEN_COMISIONES_LIQUID_ID TO 1000000028;

CREATE GENERATOR GEN_COMISIONES_VENDEDORES_ID;
SET GENERATOR GEN_COMISIONES_VENDEDORES_ID TO 1000000031;

CREATE GENERATOR GEN_CONFIGURACION_ID;
SET GENERATOR GEN_CONFIGURACION_ID TO 1000000022;

CREATE GENERATOR GEN_CONTACTOS_DATOS_BANCO_ID;
SET GENERATOR GEN_CONTACTOS_DATOS_BANCO_ID TO 1000000003;

CREATE GENERATOR GEN_CONTACTOS_DIR_ID;
SET GENERATOR GEN_CONTACTOS_DIR_ID TO 1000000046;

CREATE GENERATOR GEN_CONTACTOS_ID;
SET GENERATOR GEN_CONTACTOS_ID TO 1000001239;

CREATE GENERATOR GEN_CONTACTOS_PERSONAL_ID;
SET GENERATOR GEN_CONTACTOS_PERSONAL_ID TO 1000000011;

CREATE GENERATOR GEN_CONTRATOS_CLI_DETALLE_ID;
SET GENERATOR GEN_CONTRATOS_CLI_DETALLE_ID TO 15356;

CREATE GENERATOR GEN_CONTRATOS_CLI_ID;
SET GENERATOR GEN_CONTRATOS_CLI_ID TO 711;

CREATE GENERATOR GEN_CONT_APUNTES_ID;
SET GENERATOR GEN_CONT_APUNTES_ID TO 1000024606;

CREATE GENERATOR GEN_CONT_ASIENTOS_ID;
SET GENERATOR GEN_CONT_ASIENTOS_ID TO 1000006625;

CREATE GENERATOR GEN_CONT_BALANCES_ID;
SET GENERATOR GEN_CONT_BALANCES_ID TO 1000000000;

CREATE GENERATOR GEN_CONT_CUENTAS_ESP_ID;
SET GENERATOR GEN_CONT_CUENTAS_ESP_ID TO 1000000000;

CREATE GENERATOR GEN_CONT_CUENTAS_ID;
SET GENERATOR GEN_CONT_CUENTAS_ID TO 1000010404;

CREATE GENERATOR GEN_CONT_EJERCICIOS_ID;
SET GENERATOR GEN_CONT_EJERCICIOS_ID TO 1000000016;

CREATE GENERATOR GEN_CONT_EPIGRAFES_ID;
SET GENERATOR GEN_CONT_EPIGRAFES_ID TO 1000001207;

CREATE GENERATOR GEN_CONT_SUBCUENTAS_ID;
SET GENERATOR GEN_CONT_SUBCUENTAS_ID TO 1000040709;

CREATE GENERATOR GEN_EJERCICIOS_ID;
SET GENERATOR GEN_EJERCICIOS_ID TO 1000000000;

CREATE GENERATOR GEN_EMPRESAS_CONTACTOS_ID;
SET GENERATOR GEN_EMPRESAS_CONTACTOS_ID TO 1000002510;

CREATE GENERATOR GEN_EMPRESAS_DATOS_BANCO_ID;
SET GENERATOR GEN_EMPRESAS_DATOS_BANCO_ID TO 1000000000;

CREATE GENERATOR GEN_EMPRESAS_ID;
SET GENERATOR GEN_EMPRESAS_ID TO 1000000000;

CREATE GENERATOR GEN_EMPRESAS_TIENDAS_ID;
SET GENERATOR GEN_EMPRESAS_TIENDAS_ID TO 1000000000;

CREATE GENERATOR GEN_EMPRESAS_USUARIOS_ID;
SET GENERATOR GEN_EMPRESAS_USUARIOS_ID TO 1000000000;

CREATE GENERATOR GEN_FACTURAS_CLIENTE_ID;
SET GENERATOR GEN_FACTURAS_CLIENTE_ID TO 1000000799;

CREATE GENERATOR GEN_FACTURAS_PROVEEDOR_ID;
SET GENERATOR GEN_FACTURAS_PROVEEDOR_ID TO 1000002405;

CREATE GENERATOR GEN_FACTURAS_PROV_CONTRATOS_ID;
SET GENERATOR GEN_FACTURAS_PROV_CONTRATOS_ID TO 182;

CREATE GENERATOR GEN_FACTURA_CLIENTE_DETALLES_ID;
SET GENERATOR GEN_FACTURA_CLIENTE_DETALLES_ID TO 1000005347;

CREATE GENERATOR GEN_FACTURA_PROV_DETALLES_ID;
SET GENERATOR GEN_FACTURA_PROV_DETALLES_ID TO 1000002464;

CREATE GENERATOR GEN_FAMILIAS_ID;
SET GENERATOR GEN_FAMILIAS_ID TO 1000000231;

CREATE GENERATOR GEN_FORMAS_PAGO_ID;
SET GENERATOR GEN_FORMAS_PAGO_ID TO 1000000000;

CREATE GENERATOR GEN_FORMAS_PAGO_PLAZOS_ID;
SET GENERATOR GEN_FORMAS_PAGO_PLAZOS_ID TO 1000000000;

CREATE GENERATOR GEN_INFORMES_ID;
SET GENERATOR GEN_INFORMES_ID TO 1000000000;

CREATE GENERATOR GEN_MOVIMIENTOS_ID;
SET GENERATOR GEN_MOVIMIENTOS_ID TO 1000000000;

CREATE GENERATOR GEN_PAGOS_CLIENTE_ID;
SET GENERATOR GEN_PAGOS_CLIENTE_ID TO 1000001575;

CREATE GENERATOR GEN_PAGOS_PROVEEDOR_ID;
SET GENERATOR GEN_PAGOS_PROVEEDOR_ID TO 1000000295;

CREATE GENERATOR GEN_PEDIDOS_CLI_DETALLES_ID;
SET GENERATOR GEN_PEDIDOS_CLI_DETALLES_ID TO 1000000000;

CREATE GENERATOR GEN_PEDIDOS_CLI_ID;
SET GENERATOR GEN_PEDIDOS_CLI_ID TO 1000000000;

CREATE GENERATOR GEN_PEDIDOS_PROV_DETALLES_ID;
SET GENERATOR GEN_PEDIDOS_PROV_DETALLES_ID TO 1000000000;

CREATE GENERATOR GEN_PEDIDOS_PROV_ID;
SET GENERATOR GEN_PEDIDOS_PROV_ID TO 1000000000;

CREATE GENERATOR GEN_PERMISOSEX_ID;
SET GENERATOR GEN_PERMISOSEX_ID TO 1000000000;

CREATE GENERATOR GEN_PERMISOS_ID;
SET GENERATOR GEN_PERMISOS_ID TO 1000000000;

CREATE GENERATOR GEN_PRESUPUESTOS_CLIENTE_CAPITU;
SET GENERATOR GEN_PRESUPUESTOS_CLIENTE_CAPITU TO 105;

CREATE GENERATOR GEN_PRESUPUESTOS_CLI_DETALLE_ID;
SET GENERATOR GEN_PRESUPUESTOS_CLI_DETALLE_ID TO 1000050882;

CREATE GENERATOR GEN_PRESUPUESTOS_CLI_ID;
SET GENERATOR GEN_PRESUPUESTOS_CLI_ID TO 1000002430;

CREATE GENERATOR GEN_PROVEEDORES_GRUPOS_ID;
SET GENERATOR GEN_PROVEEDORES_GRUPOS_ID TO 1000000000;

CREATE GENERATOR GEN_RECIBOS_CLIENTE_ID;
SET GENERATOR GEN_RECIBOS_CLIENTE_ID TO 1000001562;

CREATE GENERATOR GEN_RECIBOS_PROVEEDOR_ID;
SET GENERATOR GEN_RECIBOS_PROVEEDOR_ID TO 1000002910;

CREATE GENERATOR GEN_REMESAS_CLIENTE_ID;
SET GENERATOR GEN_REMESAS_CLIENTE_ID TO 1000000000;

CREATE GENERATOR GEN_REMESAS_PROVEEDOR_ID;
SET GENERATOR GEN_REMESAS_PROVEEDOR_ID TO 1000000000;

CREATE GENERATOR GEN_TIENDA_WEB_ID;
SET GENERATOR GEN_TIENDA_WEB_ID TO 1000000000;

CREATE GENERATOR GEN_TIPOS_IVA_ID;
SET GENERATOR GEN_TIPOS_IVA_ID TO 8;

CREATE GENERATOR GEN_UNIDADES_MEDIDA_ID;
SET GENERATOR GEN_UNIDADES_MEDIDA_ID TO 1000000000;

CREATE GENERATOR GEN_USUARIOS_ID;
SET GENERATOR GEN_USUARIOS_ID TO 1000000000;



SET TERM ^ ; 



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

CREATE OR ALTER PROCEDURE PROC_CIERRE_APERTURA (
    ID_EJERCICIO_CIERRE INTEGER,
    ID_EJERCICIO_APERTURA INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_DELETE_ASIENTO_FACTURA (
    IDFACTURA INTEGER,
    TIPO VARCHAR(1))
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_DELETE_ASIENTO_PAGO (
    IDPAGO INTEGER,
    TIPO VARCHAR(1))
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_FACTURA_CLI (
    IDFACTURA INTEGER,
    ID_SUBCUENTA_VENTA INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_FACTURA_PROV (
    IDFACTURA INTEGER,
    ID_SUBCUENTA_COMPRA INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_PAGO_CLI (
    IDPAGO INTEGER,
    IDSUBCUENTAPAGO INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_PAGO_PROV (
    IDPAGO INTEGER,
    IDSUBCUENTAPAGO INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_CUENTAS (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER,
    ID_EPIGRAFE_COPIA INTEGER,
    ID_EPIGRAFE INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_EPIGRAFES (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER,
    ID_EPIGRAFE_COPIA INTEGER,
    ID_EPIGRAFE INTEGER,
    ID_PADRE INTEGER,
    REF_EPIGRAFE VARCHAR(6),
    DESCRIPCION VARCHAR(255))
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_PGC (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER)
RETURNS (
    RESULTADO INTEGER)
AS
BEGIN
  SUSPEND;
END^


CREATE OR ALTER PROCEDURE PROC_NEW_SUBCUENTAS (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER,
    ID_CUENTA_COPIA INTEGER,
    ID_CUENTA INTEGER)
AS
BEGIN
  EXIT;
END^


CREATE OR ALTER PROCEDURE PROC_PRE_CON_CAPITULOS (
    AID INTEGER,
    TIPO VARCHAR(15))
RETURNS (
    ID INTEGER,
    ID_PRE_CON INTEGER,
    POSICION INTEGER,
    TIPO_DETALLE VARCHAR(25),
    CONCEPTO VARCHAR(2000),
    IMPORTE_TOTAL NUMERIC(11,4),
    VISIBLE SMALLINT,
    TIPO_ARTICULO VARCHAR(2),
    DESCUENTO FLOAT,
    IMPORTE_DESCUENTO NUMERIC(11,4))
AS
BEGIN
  SUSPEND;
END^


CREATE OR ALTER PROCEDURE PROC_PRE_CON_CAPITULOS_CONCEP (
    AID INTEGER,
    TIPO VARCHAR(15))
RETURNS (
    ID INTEGER,
    ID_PRE_CON INTEGER,
    POSICION INTEGER,
    TIPO_DETALLE VARCHAR(25),
    ID_CAPITULO INTEGER,
    TIPO_ARTICULO VARCHAR(2),
    ID_ARTICULO INTEGER,
    PROPIEDAD VARCHAR(50),
    CONCEPTO VARCHAR(2000),
    CANTIDAD NUMERIC(11,2),
    IMPORTE_UNIDAD NUMERIC(11,4),
    DESCUENTO NUMERIC(2,2),
    IMPORTE_PORTE NUMERIC(11,4),
    IMPORTE_TOTAL NUMERIC(11,4),
    VISIBLE2 SMALLINT,
    VISIBLE SMALLINT)
AS
BEGIN
  SUSPEND;
END^


CREATE OR ALTER PROCEDURE PROC_SET_EJERCICIOS_NOACTIVOS (
    ID_EMPRESA INTEGER)
AS
BEGIN
  EXIT;
END^



SET TERM ; ^



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



CREATE TABLE AGENTES_COMISIONES (
    ID            TIPO_ID NOT NULL,
    ID_AGENTE     TIPO_ID DEFAULT 0 NOT NULL,
    ID_PROVEEDOR  SMALLINT DEFAULT 0 NOT NULL,
    COMISION      TIPO_PORCENTAJE DEFAULT 0
);


CREATE TABLE ALBARANES_CLIENTE (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    ID_CLIENTE            TIPO_ID,
    FECHA_ALBARAN         DATE,
    ID_ALMACEN            TIPO_ID,
    ID_PEDIDO             TIPO_ID,
    ID_FACTURA            TIPO_ID,
    TIPO                  VARCHAR(1),
    REFERENCIA            VARCHAR(255),
    CALLE                 VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    PERSONA_CONTACTO      VARCHAR(255),
    TELEFONO              VARCHAR(25),
    IMPORTE_NETO          TIPO_IMPORTE,
    IMPORTE_PORTE         TIPO_IMPORTE,
    DESCUENTO             TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO     TIPO_IMPORTE,
    BASE_IMPONIBLE        TIPO_IMPORTE,
    IVA                   TIPO_PORCENTAJE,
    IMPORTE_IVA           TIPO_IMPORTE,
    IMPORTE_TOTAL         TIPO_IMPORTE,
    OBSERVACIONES         TIPO_NOTAS,
    INCIDENCIAS           TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS   SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA            TIMESTAMP,
    FECHA_MODIFICACION    TIMESTAMP,
    USUARIO               TIPO_USUARIO,
    ID_FORMA_PAGO         TIPO_ID,
    FECHA_ENVIO           DATE,
    FECHA_RECEPCION       DATE,
    FECHA_PREVISTA_ENVIO  DATE,
    REFERENCIA_CLIENTE    VARCHAR(255) COLLATE ES_ES,
    ID_TIENDA             TIPO_ID,
    ID_DIRECCION          TIPO_ID,
    ID_TIPO_IVA           TIPO_ID,
    MOVIL                 VARCHAR(25),
    ID_CONTRATO           TIPO_ID
);


CREATE TABLE ALBARANES_CLIENTE_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_ALBARAN          TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE ALBARANES_PROVEEDOR (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    ID_PROVEEDOR          TIPO_ID,
    FECHA_ALBARAN         DATE,
    ID_PEDIDO             TIPO_ID,
    ID_FACTURA            TIPO_ID,
    TIPO                  VARCHAR(1),
    REFERENCIA            VARCHAR(255),
    CALLE                 VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    PERSONA_CONTACTO      VARCHAR(255),
    TELEFONO              VARCHAR(25),
    BASE_IMPONIBLE        TIPO_IMPORTE,
    DESCUENTO             TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO     TIPO_IMPORTE,
    IVA                   TIPO_PORCENTAJE,
    IMPORTE_IVA           TIPO_IMPORTE,
    IMPORTE_TOTAL         TIPO_IMPORTE,
    OBSERVACIONES         TIPO_NOTAS,
    INCIDENCIAS           TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS   SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA            TIMESTAMP,
    FECHA_MODIFICACION    TIMESTAMP,
    USUARIO               TIPO_USUARIO,
    ID_ALMACEN            TIPO_ID,
    ID_FORMA_PAGO         TIPO_ID,
    IMPORTE_NETO          TIPO_IMPORTE,
    IMPORTE_PORTE         TIPO_IMPORTE,
    REFERENCIA_PROVEEDOR  VARCHAR(255),
    REF_FACTURA_PROV      VARCHAR(255),
    ID_TIENDA             TIPO_ID,
    ID_TIPO_IVA           TIPO_ID
);


CREATE TABLE ALBARANES_PROVEEDOR_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_ALBARAN          TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE ALMACENES (
    ID                  TIPO_ID NOT NULL,
    ID_EMPRESA          TIPO_ID NOT NULL,
    NOMBRE              VARCHAR(255),
    CALLE               VARCHAR(255),
    PROVINCIA           VARCHAR(255),
    POBLACION           VARCHAR(255),
    CODIGO_POSTAL       VARCHAR(10),
    TELEFONO            VARCHAR(25),
    MOVIL               VARCHAR(25),
    FAX                 VARCHAR(25),
    PERSONA_CONTACTO    VARCHAR(255),
    OBSERVACIONES       TIPO_NOTAS,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    USUARIO             TIPO_USUARIO
);


CREATE TABLE ARTICULOS (
    ID                  TIPO_ID NOT NULL,
    ID_EMPRESA          TIPO_ID,
    REFERENCIA          VARCHAR(255),
    DESCRIPCION         VARCHAR(255),
    FAMILIA             VARCHAR(255),
    IMAGEN              TIPO_BINARIO,
    COMISIONABLE        TIPO_BOOLEANO,
    ID_PROVEEDOR        TIPO_ID,
    REFERENCIA_PROV     VARCHAR(255),
    PRECIO_COSTE        TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    PRECIO_NETO         TIPO_IMPORTE,
    PRECIO_PORTE        TIPO_IMPORTE,
    PRECIO_PVP          TIPO_IMPORTE,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    USUARIO             TIPO_USUARIO,
    INVENTARIABLE       TIPO_BOOLEANO,
    ELIMINADO           TIPO_BOOLEANO
);


CREATE TABLE CATEGORIAS (
    ID         TIPO_ID NOT NULL,
    CATEGORIA  VARCHAR(255) NOT NULL
);


CREATE TABLE CHANGES (
    CHANGECODE  BIGINT NOT NULL,
    TABLENAME   VARCHAR(32) NOT NULL,
    TABLEKEY    BIGINT NOT NULL,
    OP          CHAR(1) NOT NULL,
    LOC_ID      INTEGER NOT NULL
);


CREATE TABLE CLIENTES_DATOS (
    ID_CLIENTE              TIPO_ID NOT NULL,
    ID_AGENTE               TIPO_ID,
    GRUPO_CLIENTE           VARCHAR(255),
    NOMBRE_COMERCIAL        VARCHAR(255),
    BLOQUEADO               TIPO_BOOLEANO DEFAULT 0 NOT NULL,
    REGIMEN_IVA             VARCHAR(255),
    MOTIVO_BLOQUEO          VARCHAR(255),
    RECARGO_EQUIVALENCIA    TIPO_BOOLEANO,
    ID_TIPO_IVA             TIPO_ID,
    ID_FORMA_PAGO           TIPO_ID,
    TIENDA_WEB              TIPO_BOOLEANO,
    DESCUENTO               TIPO_PORCENTAJE,
    CODIGO_ASIGNADO         VARCHAR(255),
    IGNORAR_CONTABILIDAD    TIPO_ID,
    PROCEDENCIA_CLIENTE     VARCHAR(255) COLLATE ES_ES,
    TIENE_SUBCUENTA         TIPO_ID,
    VENCIMIENTO_FACTURAS_1  INTEGER,
    VENCIMIENTO_FACTURAS_2  INTEGER,
    VENCIMIENTO_FACTURAS_3  INTEGER
);


CREATE TABLE CLIENTES_DTOS_PROVEEDORES (
    ID            TIPO_ID NOT NULL,
    ID_CLIENTE    TIPO_ID DEFAULT 0 NOT NULL,
    ID_PROVEEDOR  SMALLINT DEFAULT 0 NOT NULL,
    DESCUENTO     TIPO_PORCENTAJE DEFAULT 0
);


CREATE TABLE CLIENTES_GRUPOS (
    ID           TIPO_ID NOT NULL,
    DESCRIPCION  VARCHAR(255)
);


CREATE TABLE CLIENTES_PROCEDENCIAS (
    ID           TIPO_ID NOT NULL,
    DESCRIPCION  VARCHAR(255)
);


CREATE TABLE COMISIONES_LIQ_VENDEDORES (
    ID             TIPO_ID NOT NULL,
    ID_COMISION    TIPO_ID,
    ID_VENDEDOR    TIPO_ID,
    NOMBRE         VARCHAR(255),
    COMISION       TIPO_PORCENTAJE,
    IMPORTE_TOTAL  TIPO_IMPORTE
);


CREATE TABLE COMISIONES_LIQUIDADAS (
    ID                  TIPO_ID NOT NULL,
    ID_EMPRESA          TIPO_ID,
    REFERENCIA          VARCHAR(255),
    ID_AGENTE           TIPO_ID,
    DESCRIPCION         VARCHAR(255),
    FECHA               DATE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    USUARIO             TIPO_USUARIO
);


CREATE TABLE CONFIGURACION (
    ID          TIPO_ID NOT NULL,
    CODIGO      VARCHAR(50) NOT NULL,
    VALOR       TIPO_CONCEPTO,
    ID_EMPRESA  TIPO_ID,
    VALOR_BLOB  TIPO_NOTAS
);


CREATE TABLE CONT_APUNTES (
    ID            TIPO_ID NOT NULL,
    ID_ASIENTO    TIPO_ID,
    ID_SUBCUENTA  TIPO_ID,
    NUM_ORDEN     TIPO_ID,
    CONCEPTO      VARCHAR(255),
    DOCUMENTO     VARCHAR(255) COLLATE ES_ES,
    PUNTEADO      SMALLINT,
    DEBE          TIPO_IMPORTE,
    HABER         TIPO_IMPORTE
);


CREATE TABLE CONT_ASIENTOS (
    ID             TIPO_ID NOT NULL,
    FECHA_ASIENTO  DATE,
    ORDEN          INTEGER,
    ID_FACTURA     TIPO_ID,
    ID_PAGO        TIPO_ID,
    TIPO           VARCHAR(1)
);


CREATE TABLE CONT_BALANCES (
    ID            TIPO_ID NOT NULL,
    REF_BALANCE   VARCHAR(255),
    NATURALEZA    VARCHAR(255),
    NIVEL1        TIPO_PERFIL,
    DESCRIPCION1  VARCHAR(255),
    NIVEL2        TIPO_PERFIL,
    DESCRIPCION2  VARCHAR(255),
    NIVEL3        TIPO_PERFIL,
    DESCRIPCION3  VARCHAR(255)
);


CREATE TABLE CONT_CUENTAS (
    ID                  TIPO_ID NOT NULL,
    REF_CUENTA          VARCHAR(10),
    ID_EJERCICIO        TIPO_ID,
    ID_EPIGRAFE         TIPO_ID,
    DESCRIPCION         VARCHAR(255),
    ID_BALANCE          TIPO_ID,
    ID_CUENTA_ESPECIAL  TIPO_ID
);


CREATE TABLE CONT_CUENTAS_ESPECIALES (
    ID           TIPO_ID NOT NULL,
    REFERENCIA   VARCHAR(6),
    DESCRIPCION  VARCHAR(255)
);


CREATE TABLE CONT_EJERCICIOS (
    ID                   TIPO_ID NOT NULL,
    ID_EMPRESA           TIPO_ID,
    NOMBRE               VARCHAR(255),
    FECHA_INICIO         DATE,
    FECHA_FIN            DATE,
    ESTADO               VARCHAR(255),
    LONG_SUB_CUENTA      SMALLINT,
    ID_ASIENTO_APERTURA  TIPO_ID,
    ID_ASIENTO_PERYGAN   TIPO_ID,
    ID_ASIENTO_CIERRE    TIPO_ID,
    ACTIVO               SMALLINT
);


CREATE TABLE CONT_EPIGRAFES (
    ID            TIPO_ID NOT NULL,
    REF_EPIGRAFE  VARCHAR(6),
    ID_PADRE      TIPO_ID,
    DESCRIPCION   VARCHAR(255),
    ID_EJERCICIO  TIPO_ID
);


CREATE TABLE CONT_SUBCUENTAS (
    ID             TIPO_ID NOT NULL,
    REF_SUBCUENTA  VARCHAR(15),
    DESCRIPCION    VARCHAR(255),
    ID_CUENTA      TIPO_ID,
    ID_EJERCICIO   TIPO_ID,
    ID_CONTACTO    TIPO_ID
);


CREATE TABLE CONTACTOS (
    ID                  TIPO_ID NOT NULL,
    NIF_CIF             VARCHAR(15),
    NOMBRE              VARCHAR(255) NOT NULL,
    CALLE               VARCHAR(255),
    POBLACION           VARCHAR(255),
    PROVINCIA           VARCHAR(255),
    CODIGO_POSTAL       VARCHAR(10),
    TELEFONO_1          VARCHAR(25),
    TELEFONO_2          VARCHAR(25),
    MOVIL_1             VARCHAR(25),
    MOVIL_2             VARCHAR(25),
    FAX                 VARCHAR(25),
    EMAIL_1             VARCHAR(255),
    EMAIL_2             VARCHAR(255),
    PAGINA_WEB          VARCHAR(255),
    NOTAS               TIPO_NOTAS,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    USUARIO             TIPO_USUARIO,
    REFERENCIA          VARCHAR(255),
    PERSONA_CONTACTO    VARCHAR(255),
    ID_TIENDA           TIPO_ID
);


CREATE TABLE CONTACTOS_CATEGORIAS (
    ID_CONTACTO   TIPO_ID NOT NULL,
    ID_CATEGORIA  TIPO_ID NOT NULL
);


CREATE TABLE CONTACTOS_DATOS_BANCO (
    ID                  TIPO_ID NOT NULL,
    ID_CONTACTO         TIPO_ID NOT NULL,
    TITULAR             VARCHAR(255),
    ENTIDAD             VARCHAR(15),
    SUCURSAL            VARCHAR(15),
    DC                  VARCHAR(15),
    CUENTA              VARCHAR(15),
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE CONTACTOS_DATOS_PERSONAL (
    ID                  TIPO_ID NOT NULL,
    ID_CONTACTO         TIPO_ID NOT NULL,
    NOMBRE              VARCHAR(255),
    PUESTO              VARCHAR(255),
    TELEFONO            VARCHAR(25),
    MOVIL               VARCHAR(25),
    FAX                 VARCHAR(25),
    EMAIL               VARCHAR(255),
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE CONTACTOS_DIRECCIONES (
    ID                  TIPO_ID NOT NULL,
    ID_CONTACTO         TIPO_ID NOT NULL,
    CALLE               VARCHAR(255),
    POBLACION           VARCHAR(255),
    PROVINCIA           VARCHAR(255),
    CODIGO_POSTAL       VARCHAR(10),
    PERSONA_CONTACTO    VARCHAR(255),
    NOMBRE              VARCHAR(255),
    TELEFONO            VARCHAR(25),
    MOVIL               VARCHAR(25),
    FAX                 VARCHAR(25),
    EMAIL               VARCHAR(255),
    NOTAS               TIPO_NOTAS,
    PORTE               TIPO_IMPORTE,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    NIF_CIF             VARCHAR(15)
);


CREATE TABLE CONTRATOS_CLIENTE (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    ID_CLIENTE            TIPO_ID,
    NIF_CIF               VARCHAR(15),
    NOMBRE                VARCHAR(255),
    CALLE                 VARCHAR(255),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10),
    REFERENCIA            VARCHAR(255),
    FECHA_CONTRATO        DATE,
    SITUACION             VARCHAR(255),
    FORMA_PAGO            TIPO_NOTAS,
    PLAZO_ENTREGA         TIPO_NOTAS,
    OBSERVACIONES         TIPO_NOTAS,
    INCIDENCIAS           TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS   SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA            TIMESTAMP,
    FECHA_MODIFICACION    TIMESTAMP,
    USUARIO               TIPO_USUARIO,
    IMPORTE_NETO          TIPO_IMPORTE,
    IMPORTE_PORTE         TIPO_IMPORTE,
    DESCUENTO             TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO     TIPO_IMPORTE,
    BASE_IMPONIBLE        TIPO_IMPORTE,
    IVA                   TIPO_PORCENTAJE,
    IMPORTE_IVA           TIPO_IMPORTE,
    IMPORTE_TOTAL         TIPO_IMPORTE,
    ID_FORMA_PAGO         TIPO_ID,
    ID_TIENDA             TIPO_ID,
    ID_VENDEDOR           TIPO_ID,
    ID_TIPO_IVA           TIPO_ID,
    PERSONA_CONTACTO      VARCHAR(255) COLLATE ES_ES,
    RECARGO_EQUIVALENCIA  TIPO_BOOLEANO,
    RE                    TIPO_PORCENTAJE,
    IMPORTE_RE            TIPO_IMPORTE,
    TELEFONO              VARCHAR(25),
    MOVIL                 VARCHAR(25),
    ID_DIRECCION          TIPO_ID,
    TIPO_CONTRATO         VARCHAR(255),
    CONDICIONES           TIPO_NOTAS,
    REFERENCIA_CLIENTE    VARCHAR(255) COLLATE ES_ES    
);


CREATE TABLE CONTRATOS_CLIENTE_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_CONTRATO         TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    TIPO_ARTICULO       VARCHAR(2) COLLATE ES_ES,
    PROPIEDAD           TIPO_FAMILIA,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    VISIBLE2            TIPO_BOOLEANO
);


CREATE TABLE EMPRESAS (
    ID                    TIPO_ID NOT NULL,
    NIF_CIF               VARCHAR(15),
    NOMBRE                VARCHAR(255),
    RAZON_SOCIAL          VARCHAR(255),
    CALLE                 VARCHAR(255),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10),
    TELEFONO_1            VARCHAR(25),
    TELEFONO_2            VARCHAR(25),
    MOVIL_1               VARCHAR(25),
    MOVIL_2               VARCHAR(25),
    FAX                   VARCHAR(25),
    EMAIL_1               VARCHAR(255),
    EMAIL_2               VARCHAR(255),
    PAGINA_WEB            VARCHAR(255),
    NOTAS                 TIPO_NOTAS,
    FECHA_ALTA            TIMESTAMP,
    FECHA_MODIFICACION    TIMESTAMP,
    USUARIO               TIPO_USUARIO,
    LOGOTIPO              TIPO_BINARIO,
    REGISTRO_MERCANTIL    VARCHAR(255),
    ID_TIPO_IVA           SMALLINT,
    ID_FORMA_PAGO         SMALLINT,
    VALIDEZ_PRESUPUESTOS  SMALLINT
);


CREATE TABLE EMPRESAS_CONTACTOS (
    ID           TIPO_ID NOT NULL,
    ID_EMPRESA   TIPO_ID NOT NULL,
    ID_CONTACTO  TIPO_ID NOT NULL
);


CREATE TABLE EMPRESAS_DATOS_BANCO (
    ID          TIPO_ID NOT NULL,
    ID_EMPRESA  TIPO_ID NOT NULL,
    NOMBRE      VARCHAR(255),
    ENTIDAD     VARCHAR(15),
    SUCURSAL    VARCHAR(15),
    DC          VARCHAR(15),
    CUENTA      VARCHAR(15),
    SUFIJO_N19  VARCHAR(3),
    SUFIJO_N58  VARCHAR(3)
);


CREATE TABLE EMPRESAS_TIENDAS (
    ID          TIPO_ID NOT NULL,
    ID_EMPRESA  TIPO_ID NOT NULL,
    ID_TIENDA   TIPO_ID
);


CREATE TABLE EMPRESAS_USUARIOS (
    ID          TIPO_ID NOT NULL,
    ID_EMPRESA  TIPO_ID NOT NULL,
    ID_USUARIO  TIPO_ID NOT NULL
);


CREATE TABLE FACTURAS_CLIENTE (
    ID                     TIPO_ID NOT NULL,
    ID_EMPRESA             TIPO_ID,
    REFERENCIA             VARCHAR(255),
    FECHA_FACTURA          DATE,
    BASE_IMPONIBLE         TIPO_IMPORTE,
    DESCUENTO              TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO      TIPO_IMPORTE,
    IVA                    TIPO_PORCENTAJE,
    IMPORTE_IVA            TIPO_IMPORTE,
    RE                     TIPO_PORCENTAJE,
    IMPORTE_RE             TIPO_IMPORTE,
    IMPORTE_TOTAL          TIPO_IMPORTE,
    OBSERVACIONES          TIPO_NOTAS,
    ID_CLIENTE             TIPO_ID,
    NIF_CIF                VARCHAR(15),
    NOMBRE                 VARCHAR(255),
    CALLE                  VARCHAR(255),
    POBLACION              VARCHAR(255),
    PROVINCIA              VARCHAR(255),
    CODIGO_POSTAL          VARCHAR(10),
    FECHA_ALTA             TIMESTAMP,
    FECHA_MODIFICACION     TIMESTAMP,
    USUARIO                TIPO_USUARIO,
    ID_FORMA_PAGO          TIPO_ID,
    IMPORTE_NETO           TIPO_IMPORTE,
    IMPORTE_PORTE          TIPO_IMPORTE,
    ID_TIPO_IVA            TIPO_ID,
    RECARGO_EQUIVALENCIA   TIPO_BOOLEANO,
    ID_COMISION_LIQUIDADA  TIPO_ID,
    IGNORAR_CONTABILIDAD   SMALLINT,
    ID_TIENDA              TIPO_ID,
    FECHA_VENCIMIENTO      DATE,
    ID_DIRECCION           TIPO_ID,
    ID_CONTRATO            TIPO_ID,
    SIN_COMISION           SMALLINT,
    TIPO_FACTURA           VARCHAR(255) COLLATE ES_ES
);


CREATE TABLE FACTURAS_CLIENTE_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_FACTURA          TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE FACTURAS_PROVEEDOR (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    REFERENCIA            VARCHAR(255),
    REFERENCIA_PROVEEDOR  VARCHAR(255),
    FECHA_FACTURA         DATE,
    BASE_IMPONIBLE        TIPO_IMPORTE,
    DESCUENTO             TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO     TIPO_IMPORTE,
    IVA                   TIPO_PORCENTAJE,
    IMPORTE_IVA           TIPO_IMPORTE,
    RE                    TIPO_PORCENTAJE,
    IMPORTE_RE            TIPO_IMPORTE,
    IMPORTE_TOTAL         TIPO_IMPORTE,
    OBSERVACIONES         TIPO_NOTAS,
    ID_PROVEEDOR          TIPO_ID,
    NIF_CIF               VARCHAR(15),
    NOMBRE                VARCHAR(255),
    CALLE                 VARCHAR(255),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10),
    FECHA_ALTA            TIMESTAMP,
    FECHA_MODIFICACION    TIMESTAMP,
    USUARIO               TIPO_USUARIO,
    ID_FORMA_PAGO         TIPO_ID,
    IMPORTE_NETO          TIPO_IMPORTE,
    IMPORTE_PORTE         TIPO_IMPORTE,
    ID_TIPO_IVA           TIPO_ID,
    RECARGO_EQUIVALENCIA  TIPO_BOOLEANO,
    IGNORAR_CONTABILIDAD  SMALLINT,
    ID_TIENDA             TIPO_ID,
    FECHA_VENCIMIENTO     DATE
);


CREATE TABLE FACTURAS_PROVEEDOR_CONTRATOS (
    ID           TIPO_ID NOT NULL,
    ID_FACTURA   TIPO_ID NOT NULL,
    ID_CONTRATO  TIPO_ID NOT NULL,
    IMPORTE      TIPO_IMPORTE
);


CREATE TABLE FACTURAS_PROVEEDOR_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_FACTURA          TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE FAMILIAS (
    ID           TIPO_ID NOT NULL,
    DESCRIPCION  TIPO_FAMILIA
);


CREATE TABLE FORMAS_PAGO (
    ID           TIPO_ID NOT NULL,
    REFERENCIA   VARCHAR(255),
    DESCRIPCION  VARCHAR(255),
    TITULAR      VARCHAR(255),
    ENTIDAD      VARCHAR(15),
    SUCURSAL     VARCHAR(15),
    DC           VARCHAR(15),
    CUENTA       VARCHAR(15)
);


CREATE TABLE FORMAS_PAGO_PLAZOS (
    ID             TIPO_ID NOT NULL,
    ID_FORMA_PAGO  TIPO_ID NOT NULL,
    NUM_DIAS       SMALLINT,
    PORCENTAJE     TIPO_PORCENTAJE
);


CREATE TABLE INFORMES (
    ID           SMALLINT NOT NULL,
    ID_EMPRESA   TIPO_ID,
    CATEGORIA    VARCHAR(30),
    CONTROLLER   VARCHAR(255),
    ICONO        SMALLINT,
    NOMBRE       VARCHAR(50),
    DESCRIPCION  VARCHAR(255),
    ORDEN        SMALLINT,
    MODIFICABLE  CHAR(1),
    VISTA        BLOB SUB_TYPE 2 SEGMENT SIZE 4096
);


CREATE TABLE MOVIMIENTOS (
    ID                TIPO_ID NOT NULL,
    ID_ALMACEN        TIPO_ID,
    ID_ARTICULO       TIPO_ID,
    FECHA_MOVIMIENTO  DATE,
    TIPO              VARCHAR(1),
    CANTIDAD          TIPO_CANTIDAD,
    CAUSA             TIPO_CONCEPTO
);


CREATE TABLE PAGOS_CLIENTE (
    ID                    TIPO_ID NOT NULL,
    ID_RECIBO             TIPO_ID,
    TIPO                  VARCHAR(255),
    FECHA_PAGO            DATE,
    TITULAR               VARCHAR(255),
    ENTIDAD               VARCHAR(15),
    SUCURSAL              VARCHAR(15),
    DC                    VARCHAR(15),
    CUENTA                VARCHAR(15),
    FECHA_ALTA            DATE,
    FECHA_MODIFICACION    DATE,
    USUARIO               TIPO_USUARIO,
    IGNORAR_CONTABILIDAD  SMALLINT
);


CREATE TABLE PAGOS_PROVEEDOR (
    ID                    TIPO_ID NOT NULL,
    ID_RECIBO             TIPO_ID,
    TIPO                  VARCHAR(255),
    FECHA_PAGO            DATE,
    TITULAR               VARCHAR(255),
    ENTIDAD               VARCHAR(15),
    SUCURSAL              VARCHAR(15),
    DC                    VARCHAR(15),
    CUENTA                VARCHAR(15),
    FECHA_ALTA            DATE,
    FECHA_MODIFICACION    DATE,
    USUARIO               TIPO_USUARIO,
    IGNORAR_CONTABILIDAD  SMALLINT
);


CREATE TABLE PEDIDOS_CLIENTE (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    ID_CLIENTE            TIPO_ID,
    REFERENCIA            VARCHAR(255),
    FECHA_PEDIDO          DATE,
    CALLE                 VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    PERSONA_CONTACTO      VARCHAR(255),
    TELEFONO              VARCHAR(25),
    OBSERVACIONES         TIPO_NOTAS,
    INCIDENCIAS           TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS   SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA            TIMESTAMP,
    FECHA_MODIFICACION    TIMESTAMP,
    USUARIO               TIPO_USUARIO,
    IMPORTE_NETO          TIPO_IMPORTE,
    IMPORTE_PORTE         TIPO_IMPORTE,
    DESCUENTO             TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO     TIPO_IMPORTE,
    BASE_IMPONIBLE        TIPO_IMPORTE,
    IVA                   TIPO_PORCENTAJE,
    IMPORTE_IVA           TIPO_IMPORTE,
    IMPORTE_TOTAL         TIPO_IMPORTE,
    ID_FORMA_PAGO         TIPO_ID,
    REF_TIENDA_WEB        INTEGER,
    FECHA_PREVISTA_ENVIO  DATE,
    REFERENCIA_CLIENTE    VARCHAR(255) COLLATE ES_ES,
    ID_TIENDA             TIPO_ID
);


CREATE TABLE PEDIDOS_CLIENTE_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_PEDIDO           TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE PEDIDOS_PROVEEDOR (
    ID                   TIPO_ID NOT NULL,
    ID_EMPRESA           TIPO_ID,
    ID_PROVEEDOR         TIPO_ID,
    REFERENCIA           VARCHAR(255),
    FECHA_PEDIDO         DATE,
    FECHA_CONFIRMACION   DATE,
    FECHA_ENTREGA        DATE,
    ID_ALMACEN           TIPO_ID,
    OBSERVACIONES        TIPO_NOTAS,
    INCIDENCIAS          TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS  SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA           TIMESTAMP,
    FECHA_MODIFICACION   TIMESTAMP,
    USUARIO              TIPO_USUARIO,
    CALLE                VARCHAR(255),
    CODIGO_POSTAL        VARCHAR(10),
    POBLACION            VARCHAR(255),
    PROVINCIA            VARCHAR(255),
    PERSONA_CONTACTO     VARCHAR(255),
    TELEFONO             VARCHAR(25),
    ID_PEDIDO_CLIENTE    TIPO_ID,
    IMPORTE_NETO         TIPO_IMPORTE,
    IMPORTE_PORTE        TIPO_IMPORTE,
    DESCUENTO            TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO    TIPO_IMPORTE,
    BASE_IMPONIBLE       TIPO_IMPORTE,
    IVA                  TIPO_PORCENTAJE,
    IMPORTE_IVA          TIPO_IMPORTE,
    IMPORTE_TOTAL        TIPO_IMPORTE,
    ID_FORMA_PAGO        TIPO_ID,
    FECHA_ENVIO          DATE,
    ID_TIENDA            TIPO_ID,
    DESCRIPCION_GENERAL  VARCHAR(255) COLLATE ES_ES,
	ID_DIRECCION_CLIENTE TIPO_ID
);


CREATE TABLE PEDIDOS_PROVEEDOR_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_PEDIDO           TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);


CREATE TABLE PERMISOS (
    ID          TIPO_ID NOT NULL,
    ID_USUARIO  TIPO_ID,
    MODULO      VARCHAR(50),
    NOMBRECOMP  VARCHAR(50),
    CHECKSUM    VARCHAR(250)
);


CREATE TABLE PERMISOSEX (
    ID          TIPO_ID NOT NULL,
    ID_USUARIO  TIPO_ID,
    MODULO      VARCHAR(50),
    NOMBRECOMP  VARCHAR(50),
    NOMBREFORM  VARCHAR(50),
    CHECKSUM    VARCHAR(250)
);


CREATE TABLE POBLACIONES (
    ID            TIPO_ID NOT NULL,
    ID_PROVINCIA  TIPO_ID NOT NULL,
    DESCRIPCION   VARCHAR(255) NOT NULL
);


CREATE TABLE PRESUPUESTOS_CLIENTE (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    ID_CLIENTE            TIPO_ID,
    REFERENCIA            VARCHAR(255),
    FECHA_PRESUPUESTO     DATE,
    FECHA_VIGENCIA        DATE,
    FECHA_DECISION        DATE,
    SITUACION             VARCHAR(255),
    FORMA_PAGO            TIPO_NOTAS,
    PLAZO_ENTREGA         TIPO_NOTAS,
    OBSERVACIONES         TIPO_NOTAS,
    INCIDENCIAS           TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS   SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA            TIMESTAMP,
    FECHA_MODIFICACION    TIMESTAMP,
    USUARIO               TIPO_USUARIO,
    IMPORTE_NETO          TIPO_IMPORTE,
    IMPORTE_PORTE         TIPO_IMPORTE,
    DESCUENTO             TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO     TIPO_IMPORTE,
    BASE_IMPONIBLE        TIPO_IMPORTE,
    IVA                   TIPO_PORCENTAJE,
    IMPORTE_IVA           TIPO_IMPORTE,
    IMPORTE_TOTAL         TIPO_IMPORTE,
    ID_FORMA_PAGO         TIPO_ID,
    ID_TIENDA             TIPO_ID,
    ID_VENDEDOR           TIPO_ID,
    ID_DIRECCION          TIPO_ID,
    ID_TIPO_IVA           TIPO_ID,
    PERSONA_CONTACTO      VARCHAR(255) COLLATE ES_ES,
    RECARGO_EQUIVALENCIA  TIPO_BOOLEANO,
    RE                    TIPO_PORCENTAJE,
    IMPORTE_RE            TIPO_IMPORTE,
    ID_CONTRATO           TIPO_ID,
    NO_VALORADO           TIPO_BOOLEANO,
    TIPO_PRESUPUESTO      VARCHAR(255),
    CALIDADES 						TIPO_NOTAS,
    REFERENCIA_CLIENTE    VARCHAR(255) COLLATE ES_ES    
);


CREATE TABLE PRESUPUESTOS_CLIENTE_CAPITULOS (
    ID             TIPO_ID NOT NULL,
    POSICION       INTEGER,
    TIPO_DETALLE   VARCHAR(10),
    TIPO_ARTICULO  VARCHAR(2) COLLATE ES_ES,
    CONCEPTO       TIPO_FAMILIA
);


CREATE TABLE PRESUPUESTOS_CLIENTE_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_PRESUPUESTO      TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    ID_ARTICULO         TIPO_ID,
    TIPO_ARTICULO       VARCHAR(2) COLLATE ES_ES,
    PROPIEDAD           TIPO_FAMILIA,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            TIPO_CANTIDAD,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    DESCUENTO           TIPO_PORCENTAJE,
    IMPORTE_PORTE       TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    VISIBLE2            TIPO_BOOLEANO
);


CREATE TABLE PROVEEDORES_DATOS (
    ID_PROVEEDOR            TIPO_ID NOT NULL,
    DESCUENTO               TIPO_PORCENTAJE,
    REGIMEN_IVA             VARCHAR(255),
    ID_TIPO_IVA             TIPO_ID,
    ID_FORMA_PAGO           TIPO_ID,
    TIENDA_WEB              TIPO_BOOLEANO,
    GRUPO_PROVEEDOR         VARCHAR(255),
    DESCRIPCION_PROVEEDOR   VARCHAR(255),
    CODIGO_ASIGNADO         VARCHAR(255),
    CERTIFICACION           VARCHAR(255),
    HOMOLOGADO              SMALLINT,
    IGNORAR_CONTABILIDAD    TIPO_ID,
    TIENE_SUBCUENTA         TIPO_ID,
    NOMBRE_COMERCIAL        VARCHAR(255),
    ES_ACREEDOR             SMALLINT,
    VENCIMIENTO_FACTURAS_1  INTEGER,
    VENCIMIENTO_FACTURAS_2  INTEGER,
    VENCIMIENTO_FACTURAS_3  INTEGER
);


CREATE TABLE PROVEEDORES_GRUPOS (
    ID           TIPO_ID NOT NULL,
    DESCRIPCION  VARCHAR(255)
);


CREATE TABLE PROVINCIAS (
    ID           TIPO_ID NOT NULL,
    DESCRIPCION  VARCHAR(255) NOT NULL
);


CREATE TABLE RECIBOS_CLIENTE (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    ID_CLIENTE            TIPO_ID,
    ID_FACTURA            TIPO_ID,
    REFERENCIA            VARCHAR(255),
    FECHA_EMISION         DATE,
    FECHA_VENCIMIENTO     DATE,
    DESCRIPCION           VARCHAR(255),
    OBSERVACIONES         VARCHAR(255),
    IMPORTE               TIPO_IMPORTE,
    OTROS_GASTOS          TIPO_IMPORTE,
    FECHA_ALTA            DATE,
    FECHA_MODIFICACION    DATE,
    USUARIO               TIPO_USUARIO,
    ID_REMESA             TIPO_ID,
    ID_RECIBO_COMPENSADO  INTEGER,
    ID_TIENDA             TIPO_ID,
    NIF_CIF               VARCHAR(15),
    NOMBRE                VARCHAR(255),
    CALLE                 VARCHAR(255),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10)
);


CREATE TABLE RECIBOS_PROVEEDOR (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID,
    ID_PROVEEDOR          TIPO_ID,
    ID_FACTURA            TIPO_ID,
    REFERENCIA            VARCHAR(255),
    REFERENCIA_PROVEEDOR  VARCHAR(255),
    FECHA_EMISION         DATE,
    FECHA_VENCIMIENTO     DATE,
    DESCRIPCION           VARCHAR(255),
    OBSERVACIONES         VARCHAR(255),
    IMPORTE               TIPO_IMPORTE,
    OTROS_GASTOS          TIPO_IMPORTE,
    FECHA_ALTA            DATE,
    FECHA_MODIFICACION    DATE,
    USUARIO               TIPO_USUARIO,
    ID_REMESA             TIPO_ID,
    ID_RECIBO_COMPENSADO  INTEGER,
    ID_TIENDA             TIPO_ID,
    NIF_CIF               VARCHAR(15),
    NOMBRE                VARCHAR(255),
    CALLE                 VARCHAR(255),
    POBLACION             VARCHAR(255),
    PROVINCIA             VARCHAR(255),
    CODIGO_POSTAL         VARCHAR(10)
);


CREATE TABLE REFERENCIAS (
    ID           TIPO_ID NOT NULL,
    ID_EMPRESA   TIPO_ID,
    ID_TIENDA    TIPO_ID,
    CODIGO       VARCHAR(50) NOT NULL,
    VALOR        VARCHAR(255) NOT NULL,
    DESCRIPCION  VARCHAR(255) COLLATE ES_ES
);


CREATE TABLE REMESAS_CLIENTE (
    ID                  TIPO_ID NOT NULL,
    ID_EMPRESA          TIPO_ID,
    REFERENCIA          VARCHAR(255),
    FECHA_REMESA        DATE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    DESCRIPCION         VARCHAR(255),
    FECHA_ALTA          DATE,
    FECHA_MODIFICACION  DATE,
    USUARIO             TIPO_USUARIO,
    ID_DATOS_BANCO      TIPO_ID,
    TIPO                VARCHAR(40)
);


CREATE TABLE REMESAS_PROVEEDOR (
    ID                  TIPO_ID NOT NULL,
    ID_EMPRESA          TIPO_ID,
    REFERENCIA          VARCHAR(255),
    FECHA_REMESA        DATE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    DESCRIPCION         VARCHAR(255),
    FECHA_ALTA          DATE,
    FECHA_MODIFICACION  DATE,
    USUARIO             TIPO_USUARIO,
    ID_DATOS_BANCO      TIPO_ID,
    TIPO                VARCHAR(40)
);


CREATE TABLE REPL_TABLES (
    TABLENAME  VARCHAR(32) NOT NULL,
    LOC_ID     INTEGER NOT NULL
);


CREATE TABLE TIENDA_WEB (
    ID                    TIPO_ID NOT NULL,
    ID_EMPRESA            TIPO_ID NOT NULL,
    TIENDA_ACTIVA         TIPO_BOOLEANO DEFAULT 0 NOT NULL,
    ULTIMA_ACTUALIZACION  TIMESTAMP,
    BDSERVER              VARCHAR(255),
    BDPORT                VARCHAR(20),
    BDNAME                VARCHAR(255),
    BDUSER                VARCHAR(255),
    BDPASS                VARCHAR(255)
);


CREATE TABLE TIENDAS (
    ID                  TIPO_ID NOT NULL,
    CALLE               VARCHAR(255),
    POBLACION           VARCHAR(255),
    PROVINCIA           VARCHAR(255),
    CODIGO_POSTAL       VARCHAR(10),
    PERSONA_CONTACTO    VARCHAR(255),
    NOMBRE              VARCHAR(255),
    TELEFONO            VARCHAR(25),
    MOVIL               VARCHAR(25),
    FAX                 VARCHAR(25),
    EMAIL               VARCHAR(255),
    NOTAS               TIPO_NOTAS,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    CODIGO_CONTABLE     VARCHAR(2) COLLATE ES_ES
);


CREATE TABLE TIPOS_IVA (
    ID           TIPO_ID NOT NULL,
    REFERENCIA   VARCHAR(255),
    DESCRIPCION  VARCHAR(255),
    IVA          TIPO_PORCENTAJE,
    RE           TIPO_PORCENTAJE
);


CREATE TABLE UNIDADES_MEDIDA (
    ID           TIPO_ID NOT NULL,
    DESCRIPCION  VARCHAR(255)
);


CREATE TABLE USUARIOS (
    ID           TIPO_ID NOT NULL,
    USERNAME     VARCHAR(30),
    LOGIN        TIPO_USUARIO,
    PASS         VARCHAR(250),
    PASSEXPIRED  DATE,
    BLOQUEADO    TIPO_BOOLEANO,
    EMAIL        VARCHAR(150),
    USERDAYSSUN  INTEGER,
    PRIVILEGED   INTEGER,
    TIPO         CHAR(1),
    ID_PERFIL    TIPO_ID,
    CHECKSUM     VARCHAR(250)
);


CREATE TABLE USUARIOS_EVENTOS (
    APLICACION   VARCHAR(250),
    ID_USUARIO   TIPO_ID,
    FECHA        CHAR(10),
    HORA         CHAR(8),
    FORM         VARCHAR(250),
    TITULO_FORM  VARCHAR(100),
    EVENTO       VARCHAR(50),
    NOTAS        TIPO_NOTAS,
    TNAME        VARCHAR(20)
);


CREATE TABLE USUARIOS_LOGON (
    LOGONID     CHAR(38) NOT NULL,
    ID_USUARIO  TIPO_ID,
    APLICACION  VARCHAR(50),
    EQUIPO      VARCHAR(50),
    DATA        VARCHAR(14)
);


CREATE TABLE VENDEDORES_DATOS (
    ID_VENDEDOR  TIPO_ID NOT NULL,
    COMISION     TIPO_PORCENTAJE,
    ID_USUARIO   TIPO_ID
);




/******************************************************************************/
/***                                 Views                                  ***/
/******************************************************************************/


/* View: V_ALB_CLI_SITUACION */
CREATE VIEW V_ALB_CLI_SITUACION(
    ID,
    SITUACION)
AS
SELECT ALBARANES_CLIENTE.ID,
  case when (FECHA_RECEPCION is not null) then 'SERVIDO'
       when (FECHA_ENVIO is null) then 'PENDIENTE'
       when (FECHA_ENVIO <= current_date) then 'ENVIADO'
       when (FECHA_ENVIO > current_date) then 'PENDIENTE'
       else 'N/A'
  end as SITUACION
FROM ALBARANES_CLIENTE
;



/* View: V_ALB_CLI_DETALLES */
CREATE VIEW V_ALB_CLI_DETALLES(
    ID_ALBARAN,
    ID_PEDIDO,
    SITUACION,
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT  ALBARANES_CLIENTE_DETALLES.ID_ALBARAN,
        ALBARANES_CLIENTE.ID_PEDIDO,
        V_ALB_CLI_SITUACION.SITUACION,
        ALBARANES_CLIENTE.ID_ALMACEN,
        COALESCE(ALBARANES_CLIENTE_DETALLES.ID_ARTICULO, 0),
        SUM(COALESCE(ALBARANES_CLIENTE_DETALLES.CANTIDAD, 0))

FROM ALBARANES_CLIENTE_DETALLES
INNER JOIN ALBARANES_CLIENTE
ON (ALBARANES_CLIENTE_DETALLES.ID_ALBARAN = ALBARANES_CLIENTE.ID)
INNER JOIN V_ALB_CLI_SITUACION
ON (ALBARANES_CLIENTE_DETALLES.ID_ALBARAN = V_ALB_CLI_SITUACION.ID)

/*Mantenemos los articulos inventariables y aquellos que no existan en nuestro catálogo con el fin de no falsear la situación de los pedidos
LEFT JOIN ARTICULOS
ON (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO = ARTICULOS.ID)

WHERE (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO is not null)
AND   (ARTICULOS.INVENTARIABLE = 1)
*/

group BY  ALBARANES_CLIENTE_DETALLES.ID_ALBARAN,
          ALBARANES_CLIENTE.ID_PEDIDO,
          V_ALB_CLI_SITUACION.SITUACION,
          ALBARANES_CLIENTE.ID_ALMACEN,
          ALBARANES_CLIENTE_DETALLES.ID_ARTICULO
;



/* View: V_ALB_PROV_DETALLES */
CREATE VIEW V_ALB_PROV_DETALLES(
    ID_ALBARAN,
    ID_PEDIDO,
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT  ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN,
        ALBARANES_PROVEEDOR.ID_PEDIDO,
        ALBARANES_PROVEEDOR.ID_ALMACEN,
        COALESCE(ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO, 0),
        SUM (COALESCE(ALBARANES_PROVEEDOR_DETALLES.CANTIDAD, 0)) AS CANTIDAD

FROM ALBARANES_PROVEEDOR_DETALLES
INNER JOIN ALBARANES_PROVEEDOR
ON (ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN = ALBARANES_PROVEEDOR.ID)

/*Mantenemos los articulos inventariables y aquellos que no existan en nuestro catálogo con el fin de no falsear la situación de los pedidos
LEFT JOIN ARTICULOS
ON (ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO = ARTICULOS.ID)

WHERE (ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO is not null)
AND   (ARTICULOS.INVENTARIABLE = 1)
*/

GROUP BY ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN,
        ALBARANES_PROVEEDOR.ID_PEDIDO,
        ALBARANES_PROVEEDOR.ID_ALMACEN,
        ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO
;



/* View: V_ALBARANES_CLIENTE */
CREATE VIEW V_ALBARANES_CLIENTE(
    ID,
    ID_EMPRESA,
    ID_CLIENTE,
    NOMBRE,
    FECHA_ALBARAN,
    REFERENCIA,
    REFERENCIA_CLIENTE,
    TIPO,
    SITUACION,
    ID_ALMACEN,
    NOMBRE_ALMACEN,
    ID_PEDIDO,
    REF_PEDIDO,
    ID_CONTRATO,
    REF_CONTRATO,
    ID_FACTURA,
    REF_FACTURA,
    ID_DIRECCION,
    CALLE,
    CODIGO_POSTAL,
    POBLACION,
    PROVINCIA,
    PERSONA_CONTACTO,
    TELEFONO,
    MOVIL,
    IMPORTE_NETO,
    IMPORTE_PORTE,
    DESCUENTO,
    IMPORTE_DESCUENTO,
    BASE_IMPONIBLE,
    ID_TIPO_IVA,
    IVA,
    IMPORTE_IVA,
    IMPORTE_TOTAL,
    OBSERVACIONES,
    INCIDENCIAS,
    INCIDENCIAS_ACTIVAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_FORMA_PAGO,
    FECHA_PREVISTA_ENVIO,
    FECHA_ENVIO,
    FECHA_RECEPCION,
    ID_TIENDA,
    TIENDA,
    LISTA_NOMBRES)
AS
SELECT
  ALBARANES_CLIENTE.ID,
  ALBARANES_CLIENTE.ID_EMPRESA,
  ALBARANES_CLIENTE.ID_CLIENTE,
  CONTACTOS.NOMBRE,
  ALBARANES_CLIENTE.FECHA_ALBARAN,
  ALBARANES_CLIENTE.REFERENCIA,
  ALBARANES_CLIENTE.REFERENCIA_CLIENTE,
  ALBARANES_CLIENTE.TIPO,
  TRIM(V_ALB_CLI_SITUACION.SITUACION),
  ALBARANES_CLIENTE.ID_ALMACEN,
  ALMACENES.NOMBRE AS NOMBRE_ALMACEN,
  ALBARANES_CLIENTE.ID_PEDIDO,
  PEDIDOS_CLIENTE.REFERENCIA AS REF_PEDIDO,
  ALBARANES_CLIENTE.ID_CONTRATO,
  CONTRATOS_CLIENTE.REFERENCIA AS REF_CONTRATO,
  ALBARANES_CLIENTE.ID_FACTURA,
  FACTURAS_CLIENTE.REFERENCIA AS REF_FACTURA,
  ALBARANES_CLIENTE.ID_DIRECCION,
  ALBARANES_CLIENTE.CALLE,
  ALBARANES_CLIENTE.CODIGO_POSTAL,
  ALBARANES_CLIENTE.POBLACION,
  ALBARANES_CLIENTE.PROVINCIA,
  ALBARANES_CLIENTE.PERSONA_CONTACTO,
  ALBARANES_CLIENTE.TELEFONO,
  ALBARANES_CLIENTE.MOVIL,
  ALBARANES_CLIENTE.IMPORTE_NETO,
  ALBARANES_CLIENTE.IMPORTE_PORTE,
  ALBARANES_CLIENTE.DESCUENTO,
  ALBARANES_CLIENTE.IMPORTE_DESCUENTO,
  ALBARANES_CLIENTE.BASE_IMPONIBLE,
  ALBARANES_CLIENTE.ID_TIPO_IVA,
  ALBARANES_CLIENTE.IVA,
  ALBARANES_CLIENTE.IMPORTE_IVA,
  ALBARANES_CLIENTE.IMPORTE_TOTAL,
  ALBARANES_CLIENTE.OBSERVACIONES,
  ALBARANES_CLIENTE.INCIDENCIAS,
  ALBARANES_CLIENTE.INCIDENCIAS_ACTIVAS,
  ALBARANES_CLIENTE.FECHA_ALTA,
  ALBARANES_CLIENTE.FECHA_MODIFICACION,
  ALBARANES_CLIENTE.USUARIO,
  ALBARANES_CLIENTE.ID_FORMA_PAGO,
  ALBARANES_CLIENTE.FECHA_PREVISTA_ENVIO,
  ALBARANES_CLIENTE.FECHA_ENVIO,
  ALBARANES_CLIENTE.FECHA_RECEPCION,
  ALBARANES_CLIENTE.ID_TIENDA,
  COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA,
  TRIM(leading ', ' from V_CONTACTOS_NOMBRES.OTROS_NOMBRES) as LISTA_NOMBRES

FROM
  ALBARANES_CLIENTE
  INNER JOIN CONTACTOS ON (CONTACTOS.ID = ALBARANES_CLIENTE.ID_CLIENTE)
  INNER JOIN V_ALB_CLI_SITUACION ON (V_ALB_CLI_SITUACION.ID = ALBARANES_CLIENTE.ID)
  LEFT OUTER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = ALBARANES_CLIENTE.ID_PEDIDO)
  LEFT OUTER JOIN CONTRATOS_CLIENTE ON (CONTRATOS_CLIENTE.ID = ALBARANES_CLIENTE.ID_CONTRATO)
  LEFT OUTER JOIN FACTURAS_CLIENTE ON (FACTURAS_CLIENTE.ID = ALBARANES_CLIENTE.ID_FACTURA)  
  LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = ALBARANES_CLIENTE.ID_ALMACEN)
  LEFT OUTER JOIN TIENDAS ON (TIENDAS.ID = ALBARANES_CLIENTE.ID_TIENDA)
  LEFT OUTER JOIN V_CONTACTOS_NOMBRES ON (ALBARANES_CLIENTE.ID_CLIENTE = V_CONTACTOS_NOMBRES.ID)
;



/* View: V_ALBARANES_PROVEEDOR */
CREATE VIEW V_ALBARANES_PROVEEDOR(
    ID,
    ID_EMPRESA,
    ID_PROVEEDOR,
    NOMBRE,
    FECHA_ALBARAN,
    REFERENCIA,
    REFERENCIA_PROVEEDOR,
    TIPO,
    ID_ALMACEN,
    NOMBRE_ALMACEN,
    ID_PEDIDO,
    REF_PED_PROVEEDOR,
    ID_FACTURA,
    REF_FACTURA,
    REF_FACTURA_PROV,
    CALLE,
    CODIGO_POSTAL,
    POBLACION,
    PROVINCIA,
    PERSONA_CONTACTO,
    TELEFONO,
    IMPORTE_NETO,
    IMPORTE_PORTE,
    DESCUENTO,
    IMPORTE_DESCUENTO,
    BASE_IMPONIBLE,
    ID_TIPO_IVA,
    IVA,
    IMPORTE_IVA,
    IMPORTE_TOTAL,
    OBSERVACIONES,
    INCIDENCIAS,
    INCIDENCIAS_ACTIVAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_FORMA_PAGO,
    ID_TIENDA,
    TIENDA)
AS
SELECT
  ALBARANES_PROVEEDOR.ID,
  ALBARANES_PROVEEDOR.ID_EMPRESA,
  ALBARANES_PROVEEDOR.ID_PROVEEDOR,
  CONTACTOS.NOMBRE,
  ALBARANES_PROVEEDOR.FECHA_ALBARAN,
  ALBARANES_PROVEEDOR.REFERENCIA,
  ALBARANES_PROVEEDOR.REFERENCIA_PROVEEDOR,
  ALBARANES_PROVEEDOR.TIPO,
  ALBARANES_PROVEEDOR.ID_ALMACEN,
  ALMACENES.NOMBRE AS NOMBRE_ALMACEN,
  ALBARANES_PROVEEDOR.ID_PEDIDO,
  PEDIDOS_PROVEEDOR.REFERENCIA AS REF_PED_PROVEEDOR,
  ALBARANES_PROVEEDOR.ID_FACTURA,
  FACTURAS_PROVEEDOR.REFERENCIA AS REF_FACTURA,
  ALBARANES_PROVEEDOR.REF_FACTURA_PROV,
  ALBARANES_PROVEEDOR.CALLE,
  ALBARANES_PROVEEDOR.CODIGO_POSTAL,
  ALBARANES_PROVEEDOR.POBLACION,
  ALBARANES_PROVEEDOR.PROVINCIA,
  ALBARANES_PROVEEDOR.PERSONA_CONTACTO,
  ALBARANES_PROVEEDOR.TELEFONO,
  ALBARANES_PROVEEDOR.IMPORTE_NETO,
  ALBARANES_PROVEEDOR.IMPORTE_PORTE,
  ALBARANES_PROVEEDOR.DESCUENTO,
  ALBARANES_PROVEEDOR.IMPORTE_DESCUENTO,
  ALBARANES_PROVEEDOR.BASE_IMPONIBLE,
  ALBARANES_PROVEEDOR.ID_TIPO_IVA,
  ALBARANES_PROVEEDOR.IVA,
  ALBARANES_PROVEEDOR.IMPORTE_IVA,
  ALBARANES_PROVEEDOR.IMPORTE_TOTAL,
  ALBARANES_PROVEEDOR.OBSERVACIONES,
  ALBARANES_PROVEEDOR.INCIDENCIAS,
  ALBARANES_PROVEEDOR.INCIDENCIAS_ACTIVAS,
  ALBARANES_PROVEEDOR.FECHA_ALTA,
  ALBARANES_PROVEEDOR.FECHA_MODIFICACION,
  ALBARANES_PROVEEDOR.USUARIO,
  ALBARANES_PROVEEDOR.ID_FORMA_PAGO,
  ALBARANES_PROVEEDOR.ID_TIENDA,
  COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA

FROM
  ALBARANES_PROVEEDOR
  INNER JOIN CONTACTOS ON (CONTACTOS.ID = ALBARANES_PROVEEDOR.ID_PROVEEDOR)
  LEFT OUTER JOIN PEDIDOS_PROVEEDOR ON (PEDIDOS_PROVEEDOR.ID = ALBARANES_PROVEEDOR.ID_PEDIDO)
  LEFT OUTER JOIN FACTURAS_PROVEEDOR ON (FACTURAS_PROVEEDOR.ID = ALBARANES_PROVEEDOR.ID_FACTURA)
  LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = ALBARANES_PROVEEDOR.ID_ALMACEN)
  LEFT OUTER JOIN TIENDAS ON (TIENDAS.ID = ALBARANES_PROVEEDOR.ID_TIENDA)
;



/* View: V_ARTICULOS */
CREATE VIEW V_ARTICULOS(
    ID,
    ID_EMPRESA,
    REFERENCIA,
    DESCRIPCION,
    FAMILIA,
    IMAGEN,
    COMISIONABLE,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    REFERENCIA_PROV,
    PRECIO_COSTE,
    PRECIO_PORTE,
    DESCUENTO,
    PRECIO_NETO,
    PRECIO_PVP,
    INVENTARIABLE,
    ID_PROVEEDOR,
    NOMBRE_PROVEEDOR,
    ELIMINADO)
AS
SELECT ARTICULOS.ID, ARTICULOS.ID_EMPRESA, ARTICULOS.REFERENCIA, ARTICULOS.DESCRIPCION,
       ARTICULOS.FAMILIA, ARTICULOS.IMAGEN, ARTICULOS.COMISIONABLE, ARTICULOS.FECHA_ALTA,
       ARTICULOS.FECHA_MODIFICACION, ARTICULOS.USUARIO,
       ARTICULOS.REFERENCIA_PROV,
       ARTICULOS.PRECIO_COSTE,
       ARTICULOS.PRECIO_PORTE,
       ARTICULOS.DESCUENTO,
       ARTICULOS.PRECIO_NETO,
       ARTICULOS.PRECIO_PVP,
       ARTICULOS.INVENTARIABLE,
       ARTICULOS.ID_PROVEEDOR,
       CONTACTOS.NOMBRE AS NOMBRE_PROVEEDOR,
       ARTICULOS.ELIMINADO
FROM ARTICULOS
LEFT OUTER JOIN CONTACTOS ON (CONTACTOS.ID = ARTICULOS.ID_PROVEEDOR)
WHERE (ARTICULOS.ELIMINADO = 0)
;



/* View: V_CONTACTOS */
CREATE VIEW V_CONTACTOS(
    ID,
    ID_CATEGORIA,
    NIF_CIF,
    NOMBRE,
    PERSONA_CONTACTO,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    TELEFONO_1,
    TELEFONO_2,
    MOVIL_1,
    MOVIL_2,
    FAX,
    EMAIL_1,
    EMAIL_2,
    PAGINA_WEB,
    NOTAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_EMPRESA,
    REFERENCIA,
    ID_TIENDA,
    TIENDA)
AS
SELECT CONTACTOS.ID,
       CONTACTOS_CATEGORIAS.ID_CATEGORIA,
       CONTACTOS.NIF_CIF,
       CONTACTOS.NOMBRE,
       CONTACTOS.PERSONA_CONTACTO,
       CONTACTOS.CALLE,
       CONTACTOS.POBLACION,
       CONTACTOS.PROVINCIA,
       CONTACTOS.CODIGO_POSTAL,
       CONTACTOS.TELEFONO_1,
       CONTACTOS.TELEFONO_2,
       CONTACTOS.MOVIL_1,
       CONTACTOS.MOVIL_2,
       CONTACTOS.FAX,
       CONTACTOS.EMAIL_1,
       CONTACTOS.EMAIL_2,
       CONTACTOS.PAGINA_WEB,
       CONTACTOS.NOTAS,
       CONTACTOS.FECHA_ALTA,
       CONTACTOS.FECHA_MODIFICACION,
       CONTACTOS.USUARIO,
       EMPRESAS_CONTACTOS.ID_EMPRESA,
       CONTACTOS.REFERENCIA,
       CONTACTOS.ID_TIENDA,
       COALESCE(TIENDAS.NOMBRE, 'Todas') as TIENDA
         FROM CONTACTOS
     INNER JOIN CONTACTOS_CATEGORIAS ON (CONTACTOS_CATEGORIAS.ID_CONTACTO =
     CONTACTOS.ID)
     INNER JOIN EMPRESAS_CONTACTOS ON (EMPRESAS_CONTACTOS.ID_CONTACTO =
     CONTACTOS.ID)
     LEFT JOIN TIENDAS ON (TIENDAS.ID = CONTACTOS.ID_TIENDA)
;

/* View: V_CONTACTOS_DIRECCIONES */
create view V_CONTACTOS_DIRECCIONES (
    ID_CONTACTO,
    ID_DIRECCION,
    NOMBRE,
    NIF_CIF,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    TELEFONO,
    MOVIL,
    FAX,
    EMAIL,
    PERSONA_CONTACTO
)
as
select 
    CONTACTOS.ID AS ID_CONTACTO, 
    0 AS ID, 
    CONTACTOS.NOMBRE, 
    CONTACTOS.NIF_CIF, 
    CONTACTOS.CALLE, 
    CONTACTOS.POBLACION, 
    CONTACTOS.PROVINCIA, 
    CONTACTOS.CODIGO_POSTAL,
    CONTACTOS.TELEFONO_1, 
    CONTACTOS.MOVIL_1, 
    CONTACTOS.FAX, 
    CONTACTOS.EMAIL_1, 
    CONTACTOS.PERSONA_CONTACTO
from CONTACTOS
union
select 
    CONTACTOS_DIRECCIONES.ID_CONTACTO,
    CONTACTOS_DIRECCIONES.ID,
    CONTACTOS_DIRECCIONES.NOMBRE,
    CONTACTOS_DIRECCIONES.NIF_CIF,
    CONTACTOS_DIRECCIONES.CALLE,
    CONTACTOS_DIRECCIONES.POBLACION,
    CONTACTOS_DIRECCIONES.PROVINCIA,
    CONTACTOS_DIRECCIONES.CODIGO_POSTAL,
    CONTACTOS_DIRECCIONES.TELEFONO,
    CONTACTOS_DIRECCIONES.MOVIL,
    CONTACTOS_DIRECCIONES.FAX,
    CONTACTOS_DIRECCIONES.EMAIL,
    CONTACTOS_DIRECCIONES.PERSONA_CONTACTO
from CONTACTOS_DIRECCIONES;

/* View: V_CONTACTOS_NOMBRES_DIRECCIONES */
create view V_CONTACTOS_NOMBRES_DIRECCIONES(
ID,
LISTA_NOMBRES)
AS 
select contactos_direcciones.id_contacto, LIST(contactos_direcciones.nombre, ', ') AS lista_nombres_direcciones
from contactos_direcciones
group by id_contacto;


/* View: V_CLIENTES */
CREATE VIEW V_CLIENTES(
    ID,
    ID_CATEGORIA,
    NIF_CIF,
    NOMBRE,
    PERSONA_CONTACTO,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    TELEFONO_1,
    TELEFONO_2,
    MOVIL_1,
    MOVIL_2,
    FAX,
    EMAIL_1,
    EMAIL_2,
    PAGINA_WEB,
    NOTAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_EMPRESA,
    REFERENCIA,
    ID_TIENDA,
    TIENDA,
    GRUPO_CLIENTE,
    NOMBRE_COMERCIAL,
    BLOQUEADO,
    REGIMEN_IVA,
    MOTIVO_BLOQUEO,
    RECARGO_EQUIVALENCIA,
    ID_TIPO_IVA,
    ID_FORMA_PAGO,
    TIENDA_WEB,
    CODIGO_ASIGNADO,
    IGNORAR_CONTABILIDAD,
    TIENE_SUBCUENTA,
    PROCEDENCIA_CLIENTE,
    VENCIMIENTO_FACTURAS_1,
    VENCIMIENTO_FACTURAS_2,
    VENCIMIENTO_FACTURAS_3,
    LISTA_NOMBRES)
AS
SELECT
  V_CONTACTOS.ID,
  V_CONTACTOS.ID_CATEGORIA,
  V_CONTACTOS.NIF_CIF,
  V_CONTACTOS.NOMBRE,
  V_CONTACTOS.PERSONA_CONTACTO,
  V_CONTACTOS.CALLE,
  V_CONTACTOS.POBLACION,
  V_CONTACTOS.PROVINCIA,
  V_CONTACTOS.CODIGO_POSTAL,
  V_CONTACTOS.TELEFONO_1,
  V_CONTACTOS.TELEFONO_2,
  V_CONTACTOS.MOVIL_1,
  V_CONTACTOS.MOVIL_2,
  V_CONTACTOS.FAX,
  V_CONTACTOS.EMAIL_1,
  V_CONTACTOS.EMAIL_2,
  V_CONTACTOS.PAGINA_WEB,
  V_CONTACTOS.NOTAS,
  V_CONTACTOS.FECHA_ALTA,
  V_CONTACTOS.FECHA_MODIFICACION,
  V_CONTACTOS.USUARIO,
  V_CONTACTOS.ID_EMPRESA,
  V_CONTACTOS.REFERENCIA,
  V_CONTACTOS.ID_TIENDA,
  V_CONTACTOS.TIENDA,
  CLIENTES_DATOS.GRUPO_CLIENTE,
  CLIENTES_DATOS.NOMBRE_COMERCIAL,
  CLIENTES_DATOS.BLOQUEADO,
  CLIENTES_DATOS.REGIMEN_IVA,
  CLIENTES_DATOS.MOTIVO_BLOQUEO,
  CLIENTES_DATOS.RECARGO_EQUIVALENCIA,
  CLIENTES_DATOS.ID_TIPO_IVA,
  CLIENTES_DATOS.ID_FORMA_PAGO,
  CLIENTES_DATOS.TIENDA_WEB,
  CLIENTES_DATOS.CODIGO_ASIGNADO,
  CLIENTES_DATOS.IGNORAR_CONTABILIDAD,
  CLIENTES_DATOS.TIENE_SUBCUENTA,
  CLIENTES_DATOS.PROCEDENCIA_CLIENTE,
  CLIENTES_DATOS.VENCIMIENTO_FACTURAS_1,
  CLIENTES_DATOS.VENCIMIENTO_FACTURAS_2,
  CLIENTES_DATOS.VENCIMIENTO_FACTURAS_3,
  V_CONTACTOS_NOMBRES_DIRECCIONES.LISTA_NOMBRES

FROM  V_CONTACTOS
  LEFT OUTER JOIN CLIENTES_DATOS ON (V_CONTACTOS.ID = CLIENTES_DATOS.ID_CLIENTE)
  LEFT OUTER JOIN V_CONTACTOS_NOMBRES_DIRECCIONES ON (V_CONTACTOS.ID = V_CONTACTOS_NOMBRES_DIRECCIONES.ID)
WHERE
  V_CONTACTOS.ID_CATEGORIA = 1
;



/* View: V_COMISIONES */
CREATE VIEW V_COMISIONES(
    ID,
    ID_EMPRESA,
    REFERENCIA,
    ID_AGENTE,
    DESCRIPCION,
    FECHA,
    IMPORTE_TOTAL,
    USUARIO,
    NOMBRE)
AS
SELECT 
    COMISIONES_LIQUIDADAS.ID, COMISIONES_LIQUIDADAS.ID_EMPRESA,
    COMISIONES_LIQUIDADAS.REFERENCIA, COMISIONES_LIQUIDADAS.ID_AGENTE,
    COMISIONES_LIQUIDADAS.DESCRIPCION, COMISIONES_LIQUIDADAS.FECHA,
    COMISIONES_LIQUIDADAS.IMPORTE_TOTAL, COMISIONES_LIQUIDADAS.USUARIO,
    CONTACTOS.NOMBRE
FROM COMISIONES_LIQUIDADAS
LEFT JOIN CONTACTOS ON (CONTACTOS.ID = COMISIONES_LIQUIDADAS.ID_AGENTE)
;



/* View: V_CONT_CUENTAS */
CREATE VIEW V_CONT_CUENTAS(
    ID,
    REF_CUENTA,
    ID_EJERCICIO,
    ESTADO,
    DESCRIPCION,
    ID_EPIGRAFE,
    EPIGRAFE,
    ID_BALANCE,
    BALANCE,
    ID_CUENTA_ESPECIAL,
    CUENTA_ESPECIAL)
AS
select CONT_CUENTAS.ID, CONT_CUENTAS.REF_CUENTA, CONT_CUENTAS.ID_EJERCICIO, CONT_EJERCICIOS.ESTADO,
CONT_CUENTAS.DESCRIPCION, CONT_CUENTAS.ID_EPIGRAFE, CONT_EPIGRAFES.DESCRIPCION as EPIGRAFE,
CONT_CUENTAS.ID_BALANCE, CONT_BALANCES.REF_BALANCE as BALANCE,
CONT_CUENTAS.ID_CUENTA_ESPECIAL, CONT_CUENTAS_ESPECIALES.DESCRIPCION as CUENTA_ESPECIAL
from CONT_CUENTAS
left join CONT_EPIGRAFES on (CONT_EPIGRAFES.ID = CONT_CUENTAS.ID_EPIGRAFE)
left join CONT_BALANCES on (CONT_BALANCES.ID = CONT_CUENTAS.ID_BALANCE)
left join CONT_CUENTAS_ESPECIALES on (CONT_CUENTAS_ESPECIALES.ID = CONT_CUENTAS.ID_CUENTA_ESPECIAL)
left join CONT_EJERCICIOS on (CONT_EJERCICIOS.ID = CONT_CUENTAS.ID_EJERCICIO)
;



/* View: V_CONT_DIARIO */
CREATE VIEW V_CONT_DIARIO(
    ID_APUNTE,
    ID_ASIENTO,
    ID_FACTURA,
    ID_PAGO,
    TIPO,
    ORDEN_ASIENTO,
    FECHA_ASIENTO,
    ID_SUBCUENTA,
    REF_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO,
    CONCEPTO,
    DOCUMENTO,
    DEBE,
    HABER,
    PUNTEADO)
AS
SELECT
    CONT_APUNTES.ID,
    CONT_APUNTES.ID_ASIENTO,
    CONT_ASIENTOS.ID_FACTURA,
    CONT_ASIENTOS.ID_PAGO,
    CONT_ASIENTOS.TIPO,
    CONT_ASIENTOS.ORDEN,
    CONT_ASIENTOS.FECHA_ASIENTO,
    CONT_APUNTES.ID_SUBCUENTA,
    CONT_SUBCUENTAS.REF_SUBCUENTA as REF_SUBCUENTA,
    CONT_SUBCUENTAS.DESCRIPCION as SUBCUENTA,
    CONT_SUBCUENTAS.ID_EJERCICIO,
    CONT_EJERCICIOS.ESTADO,
    CONT_APUNTES.CONCEPTO,
    CONT_APUNTES.DOCUMENTO,
    CONT_APUNTES.DEBE,
    CONT_APUNTES.HABER,
    CONT_APUNTES.PUNTEADO

FROM CONT_APUNTES
LEFT JOIN CONT_ASIENTOS ON (CONT_ASIENTOS.ID = CONT_APUNTES.ID_ASIENTO)
LEFT JOIN CONT_SUBCUENTAS ON (CONT_SUBCUENTAS.ID = CONT_APUNTES.ID_SUBCUENTA)
left join CONT_EJERCICIOS on (CONT_EJERCICIOS.ID = CONT_SUBCUENTAS.ID_EJERCICIO)
order by CONT_ASIENTOS.FECHA_ASIENTO desc, CONT_ASIENTOS.ORDEN desc
;



/* View: V_CONT_EPIGRAFES */
CREATE VIEW V_CONT_EPIGRAFES(
    ID,
    REF_EPIGRAFE,
    DESCRIPCION,
    ID_EJERCICIO,
    ESTADO,
    ID_PADRE,
    EPIGRAFE_PADRE)
AS
select CONT_EPI1.ID, CONT_EPI1.REF_EPIGRAFE, CONT_EPI1.DESCRIPCION, CONT_EPI1.ID_EJERCICIO, CONT_EJERCICIOS.ESTADO,
CONT_EPI1.ID_PADRE, CONT_EPI2.DESCRIPCION as EPIGRAFE_PADRE
from CONT_EPIGRAFES CONT_EPI1
left join CONT_EPIGRAFES CONT_EPI2 on (CONT_EPI2.ID = CONT_EPI1.ID_PADRE)
left join CONT_EJERCICIOS on (CONT_EJERCICIOS.ID = CONT_EPI1.ID_EJERCICIO)
;



/* View: V_CONT_FAC_CLI_VENTAS */
CREATE VIEW V_CONT_FAC_CLI_VENTAS(
    ID_FACTURA,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO)
AS
select
  CONT_ASIENTOS.ID_FACTURA,
  CONT_SUBCUENTAS.ID as ID_SUBCUENTA,
  CONT_SUBCUENTAS.DESCRIPCION as SUBCUENTA,
  CONT_SUBCUENTAS.ID_EJERCICIO,
  CONT_EJERCICIOS.ESTADO,
  CONT_APUNTES.PUNTEADO

from CONT_ASIENTOS
  LEFT JOIN CONT_APUNTES ON (CONT_APUNTES.ID_ASIENTO = CONT_ASIENTOS.ID)
  LEFT JOIN CONT_SUBCUENTAS ON (CONT_SUBCUENTAS.ID = CONT_APUNTES.ID_SUBCUENTA)
  LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
  LEFT JOIN CONT_EJERCICIOS ON (CONT_EJERCICIOS.ID = CONT_SUBCUENTAS.ID_EJERCICIO)
  left join CONT_EPIGRAFES CONT_EPI1 on (CONT_EPI1.ID = CONT_CUENTAS.ID_EPIGRAFE)
  left join CONT_EPIGRAFES CONT_EPI2 on (CONT_EPI2.ID = CONT_EPI1.ID_PADRE)
/* Solo sacaremos aquellas tuplas de apuntes cuya subcuenta contable pertenezca ventas*/
  where (CONT_ASIENTOS.ID_FACTURA is not null) and (CONT_ASIENTOS.TIPO = 'c')
  and (COALESCE(CONT_EPI2.REF_EPIGRAFE, CONT_EPI1.REF_EPIGRAFE) = 7)
;



/* View: V_CONT_FAC_PRO_COMPRAS */
CREATE VIEW V_CONT_FAC_PRO_COMPRAS(
    ID_FACTURA,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO)
AS
select
  CONT_ASIENTOS.ID_FACTURA,
  CONT_SUBCUENTAS.ID as ID_SUBCUENTA,
  CONT_SUBCUENTAS.DESCRIPCION as SUBCUENTA,
  CONT_SUBCUENTAS.ID_EJERCICIO,
  CONT_EJERCICIOS.ESTADO,
  CONT_APUNTES.PUNTEADO

from CONT_ASIENTOS
  LEFT JOIN CONT_APUNTES ON (CONT_APUNTES.ID_ASIENTO = CONT_ASIENTOS.ID)
  LEFT JOIN CONT_SUBCUENTAS ON (CONT_SUBCUENTAS.ID = CONT_APUNTES.ID_SUBCUENTA)
  LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
  LEFT JOIN CONT_EJERCICIOS ON (CONT_EJERCICIOS.ID = CONT_SUBCUENTAS.ID_EJERCICIO)
  left join CONT_EPIGRAFES CONT_EPI1 on (CONT_EPI1.ID = CONT_CUENTAS.ID_EPIGRAFE)
  left join CONT_EPIGRAFES CONT_EPI2 on (CONT_EPI2.ID = CONT_EPI1.ID_PADRE)
/* Solo sacaremos aquellas tuplas de apuntes cuya subcuenta contable pertenezca compras*/
  where (CONT_ASIENTOS.ID_FACTURA is not null) and (CONT_ASIENTOS.TIPO = 'p')
  and (COALESCE(CONT_EPI2.REF_EPIGRAFE, CONT_EPI1.REF_EPIGRAFE) = 6)
;



/* View: V_CONT_PAGOS_CLI_VENTAS */
CREATE VIEW V_CONT_PAGOS_CLI_VENTAS(
    ID_PAGO,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO)
AS
select
  CONT_ASIENTOS.ID_PAGO,
  CONT_SUBCUENTAS.ID as ID_SUBCUENTA,
  CONT_SUBCUENTAS.DESCRIPCION as SUBCUENTA,
  CONT_SUBCUENTAS.ID_EJERCICIO,
  CONT_EJERCICIOS.ESTADO,
  CONT_APUNTES.PUNTEADO

from CONT_ASIENTOS
  LEFT JOIN CONT_APUNTES ON (CONT_APUNTES.ID_ASIENTO = CONT_ASIENTOS.ID)
  LEFT JOIN CONT_SUBCUENTAS ON (CONT_SUBCUENTAS.ID = CONT_APUNTES.ID_SUBCUENTA)
  LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
  LEFT JOIN CONT_EJERCICIOS ON (CONT_EJERCICIOS.ID = CONT_SUBCUENTAS.ID_EJERCICIO)
  left join CONT_EPIGRAFES CONT_EPI1 on (CONT_EPI1.ID = CONT_CUENTAS.ID_EPIGRAFE)
  left join CONT_EPIGRAFES CONT_EPI2 on (CONT_EPI2.ID = CONT_EPI1.ID_PADRE)
/* Solo sacaremos aquellas tuplas de apuntes cuya subcuenta contable pertenezca ventas*/
  where (CONT_ASIENTOS.ID_PAGO is not null) and (CONT_ASIENTOS.TIPO = 'c')
  and (COALESCE(CONT_EPI2.REF_EPIGRAFE, CONT_EPI1.REF_EPIGRAFE) = 5)
;



/* View: V_CONT_PAGOS_PRO_COMPRAS */
CREATE VIEW V_CONT_PAGOS_PRO_COMPRAS(
    ID_PAGO,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO)
AS
select
  CONT_ASIENTOS.ID_PAGO,
  CONT_SUBCUENTAS.ID as ID_SUBCUENTA,
  CONT_SUBCUENTAS.DESCRIPCION as SUBCUENTA,
  CONT_SUBCUENTAS.ID_EJERCICIO,
  CONT_EJERCICIOS.ESTADO,
  CONT_APUNTES.PUNTEADO

from CONT_ASIENTOS
  LEFT JOIN CONT_APUNTES ON (CONT_APUNTES.ID_ASIENTO = CONT_ASIENTOS.ID)
  LEFT JOIN CONT_SUBCUENTAS ON (CONT_SUBCUENTAS.ID = CONT_APUNTES.ID_SUBCUENTA)
  LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
  LEFT JOIN CONT_EJERCICIOS ON (CONT_EJERCICIOS.ID = CONT_SUBCUENTAS.ID_EJERCICIO)
  left join CONT_EPIGRAFES CONT_EPI1 on (CONT_EPI1.ID = CONT_CUENTAS.ID_EPIGRAFE)
  left join CONT_EPIGRAFES CONT_EPI2 on (CONT_EPI2.ID = CONT_EPI1.ID_PADRE)
/* Solo sacaremos aquellas tuplas de apuntes cuya subcuenta contable pertenezca compras*/
  where (CONT_ASIENTOS.ID_PAGO is not null) and (CONT_ASIENTOS.TIPO = 'p')
  and (COALESCE(CONT_EPI2.REF_EPIGRAFE, CONT_EPI1.REF_EPIGRAFE) = 5)
;



/* View: V_CONT_SUBCUENTAS_SALDO */
CREATE VIEW V_CONT_SUBCUENTAS_SALDO(
    ID_SUBCUENTA,
    DEBE,
    HABER,
    SALDO)
AS
select cont_subcuentas.ID, COALESCE(SUM(cont_apuntes.DEBE), 0) as DEBE,
COALESCE(SUM(cont_apuntes.HABER), 0) as HABER,
COALESCE(SUM(cont_apuntes.DEBE), 0) - COALESCE(SUM(cont_apuntes.HABER), 0) as SALDO
from cont_subcuentas
left join cont_apuntes on (cont_apuntes.id_subcuenta = cont_subcuentas.ID)
group by cont_subcuentas.ID
;



/* View: V_CONT_SUBCUENTAS */
CREATE VIEW V_CONT_SUBCUENTAS(
    ID,
    REF_SUBCUENTA,
    DESCRIPCION,
    ID_EJERCICIO,
    ESTADO,
    REF_EPIGRAFE_PADRE,
    ID_CONTACTO,
    ID_CUENTA,
    REF_CUENTA,
    CUENTA,
    DEBE,
    HABER,
    SALDO)
AS
select CONT_SUBCUENTAS.ID, CONT_SUBCUENTAS.REF_SUBCUENTA, CONT_SUBCUENTAS.DESCRIPCION,
CONT_SUBCUENTAS.ID_EJERCICIO, CONT_EJERCICIOS.ESTADO, COALESCE(CONT_EPI2.REF_EPIGRAFE, CONT_EPI1.REF_EPIGRAFE),
CONT_SUBCUENTAS.ID_CONTACTO, CONT_SUBCUENTAS.ID_CUENTA,
CONT_CUENTAS.REF_CUENTA, CONT_CUENTAS.DESCRIPCION as CUENTA, V_CONT_SUBCUENTAS_SALDO.DEBE, V_CONT_SUBCUENTAS_SALDO.HABER, V_CONT_SUBCUENTAS_SALDO.SALDO
from V_CONT_SUBCUENTAS_SALDO
left join CONT_SUBCUENTAS on (CONT_SUBCUENTAS.ID = V_CONT_SUBCUENTAS_SALDO.ID_SUBCUENTA)
left join CONT_CUENTAS on (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
left join CONT_EPIGRAFES CONT_EPI1 on (CONT_EPI1.ID = CONT_CUENTAS.ID_EPIGRAFE)
left join CONT_EPIGRAFES CONT_EPI2 on (CONT_EPI2.ID = CONT_EPI1.ID_PADRE)
left join CONT_EJERCICIOS on (CONT_EJERCICIOS.ID = CONT_SUBCUENTAS.ID_EJERCICIO)
order by CONT_CUENTAS.REF_CUENTA
;



/* View: V_CONTRATOS_FACTURAS_PROVEEDOR */
CREATE VIEW V_CONTRATOS_FACTURAS_PROVEEDOR(
    ID_CONTRATO,
    IMPORTE)
AS
select ID_CONTRATO, SUM(IMPORTE) as IMPORTE_GASTOS_PROVEEDORES
from facturas_proveedor_contratos
group by 1
;



/* View: V_CONTRATOS_BENEFICIOS */
CREATE VIEW V_CONTRATOS_BENEFICIOS(
    ID,
    REFERENCIA,
    FECHA_CONTRATO,
    NOMBRE,
    NIF_CIF,
    IMPORTE_NETO,
    IMPORTE_DESCUENTO,
    BASE_IMPONIBLE,
    IMPORTE_FACTURAS_PROVEEDOR,
    IMPORTE_BENEFICIO,
    PORCENTAJE_BENEFICIO)
AS
select
contratos_cliente.ID,
contratos_cliente.referencia, contratos_cliente.fecha_contrato,
contratos_cliente.nombre, contratos_cliente.nif_cif,
contratos_cliente.importe_neto, contratos_cliente.importe_descuento,
contratos_cliente.base_imponible, v_contratos_facturas_proveedor.importe as importe_facturas_proveedor,
(contratos_cliente.base_imponible - coalesce(v_contratos_facturas_proveedor.importe, 0)) as importe_beneficio,
case when (contratos_cliente.base_imponible - coalesce(v_contratos_facturas_proveedor.importe, 0)) = 0 then 0
     else (((contratos_cliente.base_imponible - coalesce(v_contratos_facturas_proveedor.importe, 0))*100)/contratos_cliente.importe_neto)
end as porcentaje_beneficio

from contratos_cliente
left join v_contratos_facturas_proveedor
on (v_contratos_facturas_proveedor.ID_CONTRATO = contratos_cliente.ID)
;



/* View: V_CONTRATOS_CLIENTE */
CREATE VIEW V_CONTRATOS_CLIENTE(
    ID,
    ID_EMPRESA,
    ID_CLIENTE,
    NOMBRE_CLIENTE,
    REF_CLIENTE,
    NOMBRE_COMERCIAL_CLIENTE,
    NIF_CIF,
    NOMBRE,
    ID_DIRECCION,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    TELEFONO,
    MOVIL,
    REFERENCIA,
    FECHA_CONTRATO,
    SITUACION,
    FORMA_PAGO,
    PLAZO_ENTREGA,
    OBSERVACIONES,
    INCIDENCIAS,
    INCIDENCIAS_ACTIVAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    RECARGO_EQUIVALENCIA,
    RE,
    IMPORTE_RE,
    ID_TIPO_IVA,
    IVA,
    IMPORTE_IVA,
    IMPORTE_NETO,
    IMPORTE_PORTE,
    ID_TIENDA,
    TIENDA,
    BASE_IMPONIBLE,
    DESCUENTO,
    IMPORTE_DESCUENTO,
    IMPORTE_TOTAL,
    ID_FORMA_PAGO,
    ID_VENDEDOR,
    VENDEDOR,
    PERSONA_CONTACTO,
    TIPO_CONTRATO,
    CONDICIONES,
    CALIDADES,
    REFERENCIA_CLIENTE,
    LISTA_NOMBRES)
AS
SELECT CONTRATOS_CLIENTE.ID,
/*  CONTRATOS_CLIENTE.ID_EMPRESA,*/
  EMPRESAS_CONTACTOS.ID_EMPRESA,
  CONTRATOS_CLIENTE.ID_CLIENTE,
  CONTACTOS.NOMBRE,
  CONTACTOS.REFERENCIA,
  CLIENTES_DATOS.NOMBRE_COMERCIAL,
  CONTRATOS_CLIENTE.NIF_CIF,
  CONTRATOS_CLIENTE.NOMBRE,
  CONTRATOS_CLIENTE.ID_DIRECCION,
  CONTRATOS_CLIENTE.CALLE,
  CONTRATOS_CLIENTE.POBLACION,
  CONTRATOS_CLIENTE.PROVINCIA,
  CONTRATOS_CLIENTE.CODIGO_POSTAL,
  CONTRATOS_CLIENTE.TELEFONO,
  CONTRATOS_CLIENTE.MOVIL,
  CONTRATOS_CLIENTE.REFERENCIA,
  CONTRATOS_CLIENTE.FECHA_CONTRATO,
  CONTRATOS_CLIENTE.SITUACION,
  CONTRATOS_CLIENTE.FORMA_PAGO,
  CONTRATOS_CLIENTE.PLAZO_ENTREGA,
  CONTRATOS_CLIENTE.OBSERVACIONES,
  CONTRATOS_CLIENTE.INCIDENCIAS,
  CONTRATOS_CLIENTE.INCIDENCIAS_ACTIVAS,
  CONTRATOS_CLIENTE.FECHA_ALTA,
  CONTRATOS_CLIENTE.FECHA_MODIFICACION,
  CONTRATOS_CLIENTE.USUARIO,
  CONTRATOS_CLIENTE.RECARGO_EQUIVALENCIA,
  CONTRATOS_CLIENTE.RE,
  CONTRATOS_CLIENTE.IMPORTE_RE,
  CONTRATOS_CLIENTE.ID_TIPO_IVA,
  CONTRATOS_CLIENTE.IVA,
  CONTRATOS_CLIENTE.IMPORTE_IVA,
  CONTRATOS_CLIENTE.IMPORTE_NETO,
  CONTRATOS_CLIENTE.IMPORTE_PORTE,
  CONTRATOS_CLIENTE.ID_TIENDA,
  COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA,  
  CONTRATOS_CLIENTE.BASE_IMPONIBLE,
  CONTRATOS_CLIENTE.DESCUENTO,
  CONTRATOS_CLIENTE.IMPORTE_DESCUENTO,
  CONTRATOS_CLIENTE.IMPORTE_TOTAL,
  CONTRATOS_CLIENTE.ID_FORMA_PAGO,
  CONTRATOS_CLIENTE.ID_VENDEDOR,
  CONTACTOS2.NOMBRE AS VENDEDOR,  
  CONTRATOS_CLIENTE.PERSONA_CONTACTO,
  CONTRATOS_CLIENTE.TIPO_CONTRATO,
  CONTRATOS_CLIENTE.CONDICIONES,
  CONTRATOS_CLIENTE.CALIDADES,
  CONTRATOS_CLIENTE.REFERENCIA_CLIENTE,
  TRIM(leading ', ' from V_CONTACTOS_NOMBRES.OTROS_NOMBRES) as LISTA_NOMBRES
  
  FROM CONTRATOS_CLIENTE
  LEFT OUTER JOIN CONTACTOS ON (CONTACTOS.ID = CONTRATOS_CLIENTE.ID_CLIENTE)
  LEFT JOIN EMPRESAS_CONTACTOS ON (EMPRESAS_CONTACTOS.ID_CONTACTO = CONTACTOS.ID)
  LEFT OUTER JOIN CONTACTOS CONTACTOS2 ON (CONTRATOS_CLIENTE.ID_VENDEDOR = CONTACTOS2.ID)
  INNER JOIN CLIENTES_DATOS ON (CLIENTES_DATOS.ID_CLIENTE = CONTRATOS_CLIENTE.ID_CLIENTE)
  LEFT JOIN TIENDAS ON (TIENDAS.ID = CONTRATOS_CLIENTE.ID_TIENDA)
  LEFT OUTER JOIN V_CONTACTOS_NOMBRES ON (CONTRATOS_CLIENTE.ID_CLIENTE = V_CONTACTOS_NOMBRES.ID)

WHERE CONTRATOS_CLIENTE.fecha_contrato >= '01.01.2014'
;


/* View: V_EMPRESAS_TIENDAS */
CREATE VIEW V_EMPRESAS_TIENDAS(
    ID,
    ID_EMPRESA,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    PERSONA_CONTACTO,
    NOMBRE,
    TELEFONO,
    MOVIL,
    FAX,
    EMAIL,
    NOTAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    CODIGO_CONTABLE)
AS
select empresas_tiendas.id_tienda,
empresas_tiendas.id_empresa,
tiendas.calle,
tiendas.poblacion,
tiendas.provincia, 
tiendas.codigo_postal, 
tiendas.persona_contacto, 
tiendas.nombre, 
tiendas.telefono, 
tiendas.movil,
tiendas.fax, 
tiendas.email, 
tiendas.notas, 
tiendas.fecha_alta, 
tiendas.fecha_modificacion, 
tiendas.codigo_contable
from empresas_tiendas
left join tiendas on (tiendas.id = empresas_tiendas.id_tienda)
;



/* View: V_REC_FAC_CLI */
CREATE VIEW V_REC_FAC_CLI(
    ID_FACTURA,
    NUM_RECIBOS)
AS
SELECT FACTURAS_CLIENTE.ID, COUNT(RECIBOS_CLIENTE.ID)
FROM FACTURAS_CLIENTE
LEFT JOIN RECIBOS_CLIENTE
ON (RECIBOS_CLIENTE.ID_FACTURA = FACTURAS_CLIENTE.ID)
GROUP BY FACTURAS_CLIENTE.ID
;



/* View: V_REC_CLI_SITUACION */
CREATE VIEW V_REC_CLI_SITUACION(
    ID_RECIBO,
    SITUACION)
AS
SELECT RECIBOS_CLIENTE.ID,
CASE WHEN (COUNT(PAGOS_CLIENTE.ID_RECIBO)=0) THEN 'PENDIENTE'
     WHEN (MOD(COUNT(PAGOS_CLIENTE.ID_RECIBO), 2)=0) THEN 'DEVUELTO'
     ELSE 'COBRADO'
END
FROM RECIBOS_CLIENTE
LEFT JOIN PAGOS_CLIENTE
ON (PAGOS_CLIENTE.ID_RECIBO = RECIBOS_CLIENTE.ID)
GROUP BY RECIBOS_CLIENTE.ID
;



/* View: V_REC_FAC_CLI_COBRADOS */
CREATE VIEW V_REC_FAC_CLI_COBRADOS(
    ID_FACTURA,
    NUM_REC_COBRADOS)
AS
SELECT RECIBOS_CLIENTE.ID_FACTURA, COUNT(V_REC_CLI_SITUACION.ID_RECIBO)
FROM V_REC_CLI_SITUACION LEFT JOIN RECIBOS_CLIENTE ON
     (RECIBOS_CLIENTE.ID = V_REC_CLI_SITUACION.ID_RECIBO)
WHERE (TRIM(V_REC_CLI_SITUACION.SITUACION) = 'COBRADO')
AND (RECIBOS_CLIENTE.ID_FACTURA IS NOT NULL)
GROUP BY RECIBOS_CLIENTE.ID_FACTURA
;



/* View: V_FAC_CLI_SITUACION */
CREATE VIEW V_FAC_CLI_SITUACION(
    ID_FACTURA,
    SITUACION)
AS
SELECT ID_FACTURA,
CASE
    WHEN ((SUM(NUM_RECIBOS) = 0)
         OR (SUM(NUM_REC_COBRADOS) = 0)) THEN 'PENDIENTE'
    WHEN (SUM(NUM_RECIBOS) = SUM(NUM_REC_COBRADOS)) THEN 'PAGADA'
    ELSE 'PARCIALMENTE PAGADA'
END AS SITUACION
FROM
(
 SELECT ID_FACTURA, NUM_RECIBOS, 0 AS NUM_REC_COBRADOS
 FROM V_REC_FAC_CLI
 UNION ALL
 SELECT ID_FACTURA, 0 AS NUM_RECIBOS, NUM_REC_COBRADOS
 FROM V_REC_FAC_CLI_COBRADOS
)
GROUP BY ID_FACTURA
;



/* View: V_REC_FAC_PRO */
CREATE VIEW V_REC_FAC_PRO(
    ID_FACTURA,
    NUM_RECIBOS)
AS
SELECT FACTURAS_PROVEEDOR.ID, COUNT(RECIBOS_PROVEEDOR.ID)
FROM FACTURAS_PROVEEDOR
LEFT JOIN RECIBOS_PROVEEDOR
ON (RECIBOS_PROVEEDOR.ID_FACTURA = FACTURAS_PROVEEDOR.ID)
GROUP BY FACTURAS_PROVEEDOR.ID
;



/* View: V_REC_PRO_SITUACION */
CREATE VIEW V_REC_PRO_SITUACION(
    ID_RECIBO,
    SITUACION)
AS
SELECT RECIBOS_PROVEEDOR.ID,
CASE WHEN (COUNT(PAGOS_PROVEEDOR.ID_RECIBO)=0) THEN 'PENDIENTE'
     WHEN (MOD(COUNT(PAGOS_PROVEEDOR.ID_RECIBO), 2)=0) THEN 'DEVUELTO'
     ELSE 'PAGADO'
END
FROM RECIBOS_PROVEEDOR
LEFT JOIN PAGOS_PROVEEDOR
ON (PAGOS_PROVEEDOR.ID_RECIBO = RECIBOS_PROVEEDOR.ID)
GROUP BY RECIBOS_PROVEEDOR.ID
;



/* View: V_REC_FAC_PRO_PAGADOS */
CREATE VIEW V_REC_FAC_PRO_PAGADOS(
    ID_FACTURA,
    NUM_REC_PAGADOS)
AS
SELECT RECIBOS_PROVEEDOR.ID_FACTURA, COUNT(V_REC_PRO_SITUACION.ID_RECIBO)
FROM V_REC_PRO_SITUACION LEFT JOIN RECIBOS_PROVEEDOR ON
     (RECIBOS_PROVEEDOR.ID = V_REC_PRO_SITUACION.ID_RECIBO)
WHERE (TRIM(V_REC_PRO_SITUACION.SITUACION) = 'PAGADO')
AND (RECIBOS_PROVEEDOR.ID_FACTURA IS NOT NULL)
GROUP BY RECIBOS_PROVEEDOR.ID_FACTURA
;



/* View: V_FAC_PRO_SITUACION */
CREATE VIEW V_FAC_PRO_SITUACION(
    ID_FACTURA,
    SITUACION)
AS
SELECT ID_FACTURA,
CASE
    WHEN ((SUM(NUM_RECIBOS) = 0)
         OR (SUM(NUM_REC_PAGADOS) = 0)) THEN 'PENDIENTE'
    WHEN (SUM(NUM_RECIBOS) = SUM(NUM_REC_PAGADOS)) THEN 'PAGADA'
    ELSE 'PARCIALMENTE PAGADA'
END AS SITUACION
FROM
(
 SELECT ID_FACTURA, NUM_RECIBOS, 0 AS NUM_REC_PAGADOS
 FROM V_REC_FAC_PRO
 UNION ALL
 SELECT ID_FACTURA, 0 AS NUM_RECIBOS, NUM_REC_PAGADOS
 FROM V_REC_FAC_PRO_PAGADOS
)
GROUP BY ID_FACTURA
;



/* View: V_FACTURAS_CLIENTE */
CREATE VIEW V_FACTURAS_CLIENTE(
    ID,
    ID_EMPRESA,
    REFERENCIA,
    TIPO,
    ID_COMISION_LIQUIDADA,
    FECHA_FACTURA,
    FECHA_VENCIMIENTO,
    SITUACION,
    BASE_IMPONIBLE,
    DESCUENTO,
    IMPORTE_DESCUENTO,
    IVA,
    IMPORTE_IVA,
    RE,
    IMPORTE_RE,
    IMPORTE_TOTAL,
    OBSERVACIONES,
    ID_CLIENTE,
    NOMBRE_CLIENTE,
    REFERENCIA_CLIENTE,
    NOMBRE_COMERCIAL_CLIENTE,
    NIF_CIF,
    NOMBRE,
    ID_DIRECCION,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_FORMA_PAGO,
    RECARGO_EQUIVALENCIA,
    ID_TIPO_IVA,
    IMPORTE_NETO,
    IMPORTE_PORTE,
    ID_AGENTE,
    REFERENCIA_COMISION,
    IGNORAR_CONTABILIDAD,
    ID_TIENDA,
    TIENDA,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO,
    ID_CONTRATO,
    REF_CONTRATO,
    VENDEDOR,
    SIN_COMISION,
    TIPO_FACTURA,
    LISTA_NOMBRES)
AS
SELECT FACTURAS_CLIENTE.ID,
  FACTURAS_CLIENTE.ID_EMPRESA,
  FACTURAS_CLIENTE.REFERENCIA,
  CASE WHEN (FACTURAS_CLIENTE.IMPORTE_TOTAL < 0) THEN 'A' ELSE 'F' END AS TIPO,
  FACTURAS_CLIENTE.ID_COMISION_LIQUIDADA,
  FACTURAS_CLIENTE.FECHA_FACTURA,
  FACTURAS_CLIENTE.FECHA_VENCIMIENTO,  
  TRIM(V_FAC_CLI_SITUACION.SITUACION),
  FACTURAS_CLIENTE.BASE_IMPONIBLE,
  FACTURAS_CLIENTE.DESCUENTO,
  FACTURAS_CLIENTE.IMPORTE_DESCUENTO,
  FACTURAS_CLIENTE.IVA,
  FACTURAS_CLIENTE.IMPORTE_IVA,
  FACTURAS_CLIENTE.RE,
  FACTURAS_CLIENTE.IMPORTE_RE,
  FACTURAS_CLIENTE.IMPORTE_TOTAL,
  FACTURAS_CLIENTE.OBSERVACIONES,
  FACTURAS_CLIENTE.ID_CLIENTE,
  CONTACTOS.NOMBRE,
  CONTACTOS.REFERENCIA,
  CLIENTES_DATOS.NOMBRE_COMERCIAL,
  FACTURAS_CLIENTE.NIF_CIF,
  FACTURAS_CLIENTE.NOMBRE,
  FACTURAS_CLIENTE.ID_DIRECCION,
  FACTURAS_CLIENTE.CALLE,
  FACTURAS_CLIENTE.POBLACION,
  FACTURAS_CLIENTE.PROVINCIA,
  FACTURAS_CLIENTE.CODIGO_POSTAL,
  FACTURAS_CLIENTE.FECHA_ALTA,
  FACTURAS_CLIENTE.FECHA_MODIFICACION,
  FACTURAS_CLIENTE.USUARIO,
  FACTURAS_CLIENTE.ID_FORMA_PAGO,
  FACTURAS_CLIENTE.RECARGO_EQUIVALENCIA,
  FACTURAS_CLIENTE.ID_TIPO_IVA,
  FACTURAS_CLIENTE.IMPORTE_NETO,
  FACTURAS_CLIENTE.IMPORTE_PORTE,
  CLIENTES_DATOS.ID_AGENTE,
  COMISIONES_LIQUIDADAS.REFERENCIA,
  FACTURAS_CLIENTE.IGNORAR_CONTABILIDAD,
  FACTURAS_CLIENTE.ID_TIENDA,
  COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA,
  V_CONT_FAC_CLI_VENTAS.ID_SUBCUENTA,
  V_CONT_FAC_CLI_VENTAS.SUBCUENTA,
  V_CONT_FAC_CLI_VENTAS.ID_EJERCICIO,
  V_CONT_FAC_CLI_VENTAS.ESTADO_EJERCICIO,
  V_CONT_FAC_CLI_VENTAS.ASIENTO_PUNTEADO,
  FACTURAS_CLIENTE.ID_CONTRATO,
  CONTRATOS_CLIENTE.REFERENCIA,
  VENDEDORES.NOMBRE as VENDEDOR,
  FACTURAS_CLIENTE.SIN_COMISION,
  FACTURAS_CLIENTE.TIPO_FACTURA,
  V_CONTACTOS_NOMBRES.OTROS_NOMBRES as LISTA_NOMBRES

  FROM V_FAC_CLI_SITUACION
  LEFT JOIN FACTURAS_CLIENTE
  ON (FACTURAS_CLIENTE.ID = V_FAC_CLI_SITUACION.ID_FACTURA)
  LEFT JOIN COMISIONES_LIQUIDADAS
  ON (COMISIONES_LIQUIDADAS.ID = FACTURAS_CLIENTE.ID_COMISION_LIQUIDADA)
  INNER JOIN CONTACTOS ON (CONTACTOS.ID = FACTURAS_CLIENTE.ID_CLIENTE)
  INNER JOIN CLIENTES_DATOS ON (CLIENTES_DATOS.ID_CLIENTE = FACTURAS_CLIENTE.ID_CLIENTE)
  LEFT JOIN TIENDAS ON (TIENDAS.ID = FACTURAS_CLIENTE.ID_TIENDA)
  LEFT JOIN V_CONT_FAC_CLI_VENTAS ON (V_CONT_FAC_CLI_VENTAS.ID_FACTURA = FACTURAS_CLIENTE.ID)
  LEFT JOIN CONTRATOS_CLIENTE ON (CONTRATOS_CLIENTE.ID = FACTURAS_CLIENTE.ID_CONTRATO)
  LEFT JOIN CONTACTOS as VENDEDORES ON (CONTRATOS_CLIENTE.ID_VENDEDOR = VENDEDORES.ID)
  LEFT OUTER JOIN V_CONTACTOS_NOMBRES ON (FACTURAS_CLIENTE.ID_CLIENTE = V_CONTACTOS_NOMBRES.ID)
;



/* View: V_FACTURAS_PROVEEDOR */
CREATE VIEW V_FACTURAS_PROVEEDOR(
    ID,
    ID_EMPRESA,
    REFERENCIA,
    TIPO,
    REFERENCIA_PROVEEDOR,
    FECHA_FACTURA,
    FECHA_VENCIMIENTO,
    SITUACION,
    BASE_IMPONIBLE,
    DESCUENTO,
    IMPORTE_DESCUENTO,
    IVA,
    IMPORTE_IVA,
    RE,
    IMPORTE_RE,
    IMPORTE_TOTAL,
    OBSERVACIONES,
    ID_PROVEEDOR,
    NOMBRE_PROVEEDOR,
    NOMBRE_COMERCIAL_PROVEEDOR,
    NIF_CIF,
    NOMBRE,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_FORMA_PAGO,
    RECARGO_EQUIVALENCIA,
    ID_TIPO_IVA,
    IMPORTE_NETO,
    IMPORTE_PORTE,
    IGNORAR_CONTABILIDAD,
    ID_TIENDA,
    TIENDA,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO)
AS
SELECT FACTURAS_PROVEEDOR.ID,
  FACTURAS_PROVEEDOR.ID_EMPRESA,
  FACTURAS_PROVEEDOR.REFERENCIA,
  CASE WHEN (FACTURAS_PROVEEDOR.IMPORTE_TOTAL < 0) THEN 'A' ELSE 'F' END AS TIPO,
  FACTURAS_PROVEEDOR.REFERENCIA_PROVEEDOR,
  FACTURAS_PROVEEDOR.FECHA_FACTURA,
  FACTURAS_PROVEEDOR.FECHA_VENCIMIENTO,  
  TRIM(V_FAC_PRO_SITUACION.SITUACION),
  FACTURAS_PROVEEDOR.BASE_IMPONIBLE,
  FACTURAS_PROVEEDOR.DESCUENTO,
  FACTURAS_PROVEEDOR.IMPORTE_DESCUENTO,
  FACTURAS_PROVEEDOR.IVA,
  FACTURAS_PROVEEDOR.IMPORTE_IVA,
  FACTURAS_PROVEEDOR.RE,
  FACTURAS_PROVEEDOR.IMPORTE_RE,
  FACTURAS_PROVEEDOR.IMPORTE_TOTAL,
  FACTURAS_PROVEEDOR.OBSERVACIONES,
  FACTURAS_PROVEEDOR.ID_PROVEEDOR,
  CONTACTOS.NOMBRE,
  PROVEEDORES_DATOS.NOMBRE_COMERCIAL,
  FACTURAS_PROVEEDOR.NIF_CIF,
  FACTURAS_PROVEEDOR.NOMBRE,
  FACTURAS_PROVEEDOR.CALLE,
  FACTURAS_PROVEEDOR.POBLACION,
  FACTURAS_PROVEEDOR.PROVINCIA,
  FACTURAS_PROVEEDOR.CODIGO_POSTAL,
  FACTURAS_PROVEEDOR.FECHA_ALTA,
  FACTURAS_PROVEEDOR.FECHA_MODIFICACION,
  FACTURAS_PROVEEDOR.USUARIO,
  FACTURAS_PROVEEDOR.ID_FORMA_PAGO,
  FACTURAS_PROVEEDOR.RECARGO_EQUIVALENCIA,
  FACTURAS_PROVEEDOR.ID_TIPO_IVA,
  FACTURAS_PROVEEDOR.IMPORTE_NETO,
  FACTURAS_PROVEEDOR.IMPORTE_PORTE,
  FACTURAS_PROVEEDOR.IGNORAR_CONTABILIDAD,
  FACTURAS_PROVEEDOR.ID_TIENDA,
  COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA,
  V_CONT_FAC_PRO_COMPRAS.ID_SUBCUENTA,
  V_CONT_FAC_PRO_COMPRAS.SUBCUENTA,
  V_CONT_FAC_PRO_COMPRAS.ID_EJERCICIO,
  V_CONT_FAC_PRO_COMPRAS.ESTADO_EJERCICIO,
  V_CONT_FAC_PRO_COMPRAS.ASIENTO_PUNTEADO

  FROM V_FAC_PRO_SITUACION
  LEFT JOIN FACTURAS_PROVEEDOR
  ON (FACTURAS_PROVEEDOR.ID = V_FAC_PRO_SITUACION.ID_FACTURA)
  LEFT JOIN CONTACTOS
  ON (CONTACTOS.ID = FACTURAS_PROVEEDOR.ID_PROVEEDOR)
  LEFT JOIN PROVEEDORES_DATOS
  ON (PROVEEDORES_DATOS.ID_PROVEEDOR = FACTURAS_PROVEEDOR.ID_PROVEEDOR)
  LEFT JOIN TIENDAS
  ON (TIENDAS.ID = FACTURAS_PROVEEDOR.ID_TIENDA)
  LEFT JOIN V_CONT_FAC_PRO_COMPRAS ON (V_CONT_FAC_PRO_COMPRAS.ID_FACTURA = FACTURAS_PROVEEDOR.ID)
;



/* View: V_HIS_MOV_ALB_CLI */
CREATE VIEW V_HIS_MOV_ALB_CLI(
    FECHA,
    ID_ALMACEN,
    ID_ARTICULO,
    TIPO_MOVIMIENTO,
    CANTIDAD,
    CAUSA)
AS
SELECT
        ALBARANES_CLIENTE.FECHA_ALBARAN,
        V_ALB_CLI_DETALLES.ID_ALMACEN,
        V_ALB_CLI_DETALLES.ID_ARTICULO,
        CASE WHEN V_ALB_CLI_DETALLES.CANTIDAD < 0 THEN 'Entrada'
        ELSE 'Salida' END,
        (-1)*V_ALB_CLI_DETALLES.CANTIDAD,
        CASE WHEN ALBARANES_CLIENTE.IMPORTE_TOTAL < 0 THEN 'Orden de devolución de cliente ' || ALBARANES_CLIENTE.REFERENCIA
        ELSE 'Albarán de cliente ' || ALBARANES_CLIENTE.REFERENCIA END

FROM V_ALB_CLI_DETALLES
LEFT JOIN ALBARANES_CLIENTE
ON (V_ALB_CLI_DETALLES.ID_ALBARAN = ALBARANES_CLIENTE.ID)

WHERE (V_ALB_CLI_DETALLES.ID_ALMACEN IS NOT NULL)
AND (V_ALB_CLI_DETALLES.SITUACION in ('ENVIADO', 'SERVIDO'))
;



/* View: V_HIS_MOV_ALB_PROV */
CREATE VIEW V_HIS_MOV_ALB_PROV(
    FECHA,
    ID_ALMACEN,
    ID_ARTICULO,
    TIPO_MOVIMIENTO,
    CANTIDAD,
    CAUSA)
AS
SELECT
        ALBARANES_PROVEEDOR.FECHA_ALBARAN,
        V_ALB_PROV_DETALLES.ID_ALMACEN,
        V_ALB_PROV_DETALLES.ID_ARTICULO,
        CASE WHEN V_ALB_PROV_DETALLES.CANTIDAD < 0 THEN 'Salida'
        ELSE 'Entrada' END,
        V_ALB_PROV_DETALLES.CANTIDAD,
        CASE WHEN ALBARANES_PROVEEDOR.IMPORTE_TOTAL < 0 THEN 'Orden de devolución ' || ALBARANES_PROVEEDOR.REFERENCIA
        ELSE 'Albarán de proveedor ' || ALBARANES_PROVEEDOR.REFERENCIA END


FROM V_ALB_PROV_DETALLES
LEFT JOIN ALBARANES_PROVEEDOR
ON (V_ALB_PROV_DETALLES.ID_ALBARAN = ALBARANES_PROVEEDOR.ID)
WHERE (V_ALB_PROV_DETALLES.ID_ALMACEN IS NOT NULL)
;



/* View: V_HIS_MOV_REGULARIZACIONES */
CREATE VIEW V_HIS_MOV_REGULARIZACIONES(
    FECHA,
    ID_ALMACEN,
    ID_ARTICULO,
    TIPO_MOVIMIENTO,
    CANTIDAD,
    CAUSA)
AS
SELECT FECHA_MOVIMIENTO, ID_ALMACEN, ID_ARTICULO,
CASE WHEN TIPO = 'E' THEN 'Entrada'
ELSE 'Salida' END,
CASE WHEN TIPO = 'S' THEN (-1)* CANTIDAD
        ELSE CANTIDAD END,
'Regularización por - ' || CAUSA
FROM MOVIMIENTOS
;



/* View: V_HIS_MOV_AUX */
CREATE VIEW V_HIS_MOV_AUX(
    FECHA,
    ID_ALMACEN,
    ID_ARTICULO,
    TIPO_MOVIMIENTO,
    CANTIDAD,
    CAUSA)
AS
SELECT
  FECHA,
  ID_ALMACEN,
  ID_ARTICULO,
  TIPO_MOVIMIENTO,
  CANTIDAD,
  CAUSA
FROM V_HIS_MOV_ALB_PROV
UNION ALL
SELECT
  FECHA,
  ID_ALMACEN,
  ID_ARTICULO,
  TIPO_MOVIMIENTO,
  CANTIDAD,
  CAUSA
FROM V_HIS_MOV_ALB_CLI
UNION ALL
SELECT
  FECHA,
  ID_ALMACEN,
  ID_ARTICULO,
  TIPO_MOVIMIENTO,
  CANTIDAD,
  CAUSA
FROM V_HIS_MOV_REGULARIZACIONES
;



/* View: V_HISTORICO_MOVIMIENTOS */
CREATE VIEW V_HISTORICO_MOVIMIENTOS(
    FECHA,
    ID_ALMACEN,
    ID_EMPRESA,
    NOMBRE_ALMACEN,
    ID_ARTICULO,
    FAMILIA,
    REFERENCIA,
    REFERENCIA_PROV,
    DESCRIPCION,
    TIPO_MOVIMIENTO,
    CANTIDAD,
    CAUSA)
AS
SELECT
  V_HIS_MOV_AUX.FECHA,
  V_HIS_MOV_AUX.ID_ALMACEN,
  ALMACENES.ID_EMPRESA,
  ALMACENES.NOMBRE,
  V_HIS_MOV_AUX.ID_ARTICULO,
  ARTICULOS.FAMILIA,
  ARTICULOS.REFERENCIA,
  ARTICULOS.REFERENCIA_PROV,
  ARTICULOS.DESCRIPCION,
  V_HIS_MOV_AUX.TIPO_MOVIMIENTO,
  V_HIS_MOV_AUX.CANTIDAD,
  V_HIS_MOV_AUX.CAUSA

FROM V_HIS_MOV_AUX
LEFT JOIN ALMACENES ON (ALMACENES.ID = V_HIS_MOV_AUX.ID_ALMACEN)
LEFT JOIN ARTICULOS ON (ARTICULOS.ID = V_HIS_MOV_AUX.ID_ARTICULO)

WHERE (V_HIS_MOV_AUX.ID_ARTICULO <> 0)
AND   (ARTICULOS.INVENTARIABLE = 1)
;



/* View: V_INV_DETALLE_RESERVAS */
CREATE VIEW V_INV_DETALLE_RESERVAS(
    ID_ALB,
    ID_EMPRESA,
    REFERENCIA_ALB,
    SITUACION_ALB,
    FECHA_PREVISTA_ENVIO_ALB,
    ID_ALMACEN_ALB,
    ALMACEN_ALB,
    ID_CLIENTE_ALB,
    CLIENTE_ALB,
    ID_ART,
    FAMILIA_ART,
    REFERENCIA_ART,
    REFERENCIA_PROV_ART,
    DESCRIPCION_ART,
    CANTIDAD_ART)
AS
SELECT
        ALBARANES_CLIENTE_DETALLES.ID_ALBARAN,
        ALBARANES_CLIENTE.ID_EMPRESA,
        ALBARANES_CLIENTE.REFERENCIA,
        V_ALB_CLI_SITUACION.SITUACION,
        ALBARANES_CLIENTE.FECHA_PREVISTA_ENVIO,
        ALBARANES_CLIENTE.ID_ALMACEN,
        ALMACENES.NOMBRE AS ALMACEN,
        ALBARANES_CLIENTE.ID_CLIENTE,
        CONTACTOS.NOMBRE AS CLIENTE,
        ARTICULOS.ID,
        ARTICULOS.FAMILIA,
        ARTICULOS.REFERENCIA,
        ARTICULOS.REFERENCIA_PROV,
        ARTICULOS.DESCRIPCION,
        SUM(COALESCE(ALBARANES_CLIENTE_DETALLES.CANTIDAD, 0))

FROM ALBARANES_CLIENTE_DETALLES
LEFT JOIN ALBARANES_CLIENTE
ON (ALBARANES_CLIENTE_DETALLES.ID_ALBARAN = ALBARANES_CLIENTE.ID)
LEFT JOIN CONTACTOS
ON (ALBARANES_CLIENTE.ID_CLIENTE = CONTACTOS.ID)
LEFT JOIN ALMACENES
ON (ALBARANES_CLIENTE.ID_ALMACEN = ALMACENES.ID)
LEFT JOIN ARTICULOS
ON (ALBARANES_CLIENTE_DETALLES.ID_ARTICULO = ARTICULOS.ID)
LEFT JOIN V_ALB_CLI_SITUACION
ON (ALBARANES_CLIENTE_DETALLES.ID_ALBARAN = V_ALB_CLI_SITUACION.ID)

/*Quitamos aquellos detalles que no tengan cabecera existente
  aquellos que no se correspondan con un almacén es decir albaranes libres
  que el albaran este pendiente (los articulos estan reservados en el almacen)
  aquellos que no se correspondan con artículos existentes en el catalogo
  y que no sean inventariables*/
WHERE (ALBARANES_CLIENTE.ID IS NOT NULL)
AND   (ALBARANES_CLIENTE.ID_ALMACEN IS NOT NULL)
AND   (V_ALB_CLI_SITUACION.SITUACION = 'PENDIENTE')
AND   (ARTICULOS.ID is not null)
AND   (ARTICULOS.ELIMINADO = 0)
AND   (ARTICULOS.INVENTARIABLE = 1)

GROUP BY
        ALBARANES_CLIENTE_DETALLES.ID_ALBARAN,
    ALBARANES_CLIENTE.ID_EMPRESA,        
        ALBARANES_CLIENTE.REFERENCIA,
        V_ALB_CLI_SITUACION.SITUACION,
        ALBARANES_CLIENTE.FECHA_PREVISTA_ENVIO,
        ALBARANES_CLIENTE.ID_ALMACEN,
        ALMACENES.NOMBRE,
        ALBARANES_CLIENTE.ID_CLIENTE,
        CONTACTOS.NOMBRE,
        ARTICULOS.ID,
        ARTICULOS.FAMILIA,
        ARTICULOS.REFERENCIA,
        ARTICULOS.REFERENCIA_PROV,
        ARTICULOS.DESCRIPCION
;



/* View: V_INV_ENTRADAS_ALB */
CREATE VIEW V_INV_ENTRADAS_ALB(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM V_ALB_PROV_DETALLES
WHERE (ID_ALMACEN IS NOT NULL)
GROUP BY ID_ALMACEN, ID_ARTICULO
;



/* View: V_INV_ENTRADAS_MOV */
CREATE VIEW V_INV_ENTRADAS_MOV(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM MOVIMIENTOS
WHERE TIPO = 'E'
GROUP BY ID_ALMACEN, ID_ARTICULO
;



/* View: V_INV_ENTRADAS_AUX */
CREATE VIEW V_INV_ENTRADAS_AUX(
    TIPO,
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT  'ALB',
    ID_ALMACEN,
        ID_ARTICULO,
        CANTIDAD
FROM V_INV_ENTRADAS_ALB
UNION ALL
SELECT  'MOV',
    ID_ALMACEN,
        ID_ARTICULO,
        CANTIDAD
FROM V_INV_ENTRADAS_MOV
;



/* View: V_INV_ENTRADAS */
CREATE VIEW V_INV_ENTRADAS(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT
ID_ALMACEN,
ID_ARTICULO,
SUM(CANTIDAD) as CANTIDAD
FROM V_INV_ENTRADAS_AUX

GROUP BY ID_ALMACEN,
         ID_ARTICULO
;



/* View: V_PED_PROV_ARTICULOS_RECIBIDOS */
CREATE VIEW V_PED_PROV_ARTICULOS_RECIBIDOS(
    ID_PEDIDO,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT ID_PEDIDO, ID_ARTICULO, SUM(CANTIDAD) AS CANTIDAD
FROM V_ALB_PROV_DETALLES
WHERE (ID_PEDIDO is not null)
GROUP BY ID_PEDIDO, ID_ARTICULO
;



/* View: V_PED_PROV_DETALLES */
CREATE VIEW V_PED_PROV_DETALLES(
    ID_PEDIDO,
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT  PEDIDOS_PROVEEDOR_DETALLES.ID_PEDIDO,
        PEDIDOS_PROVEEDOR.ID_ALMACEN,
        COALESCE(PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO, 0),
        SUM(COALESCE(PEDIDOS_PROVEEDOR_DETALLES.CANTIDAD, 0))

FROM PEDIDOS_PROVEEDOR_DETALLES
LEFT JOIN PEDIDOS_PROVEEDOR
ON (PEDIDOS_PROVEEDOR_DETALLES.ID_PEDIDO = PEDIDOS_PROVEEDOR.ID)

/*Mantenemos los articulos inventariables y aquellos que no existan en nuestro catálogo con el fin de no falsear la situación de los pedidos
LEFT JOIN ARTICULOS
ON (PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO = ARTICULOS.ID)

WHERE (PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO is not null)
AND   (ARTICULOS.INVENTARIABLE = 1)
*/

GROUP BY PEDIDOS_PROVEEDOR_DETALLES.ID_PEDIDO,
         PEDIDOS_PROVEEDOR.ID_ALMACEN,
         PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO
;



/* View: V_PED_PROV_ARTICULOS_AUX */
CREATE VIEW V_PED_PROV_ARTICULOS_AUX(
    ID_PEDIDO,
    ID_ARTICULO,
    CANTIDAD_PEDIDA,
    CANTIDAD_RECIBIDA)
AS
SELECT
      V_PED_PROV_DETALLES.ID_PEDIDO,
      V_PED_PROV_DETALLES.ID_ARTICULO,
      V_PED_PROV_DETALLES.CANTIDAD AS CANTIDAD_PEDIDA,
      0 as CANTIDAD_RECIBIDA
FROM V_PED_PROV_DETALLES
UNION ALL
SELECT
      V_PED_PROV_ARTICULOS_RECIBIDOS.ID_PEDIDO,
      V_PED_PROV_ARTICULOS_RECIBIDOS.ID_ARTICULO,
      NULL as CANTIDAD_PEDIDA,
      V_PED_PROV_ARTICULOS_RECIBIDOS.CANTIDAD AS CANTIDAD_RECIBIDA
FROM V_PED_PROV_ARTICULOS_RECIBIDOS
;



/* View: V_PED_PROV_ARTICULOS */
CREATE VIEW V_PED_PROV_ARTICULOS(
    ID_PEDIDO,
    ID_ARTICULO,
    CANTIDAD_PEDIDA,
    CANTIDAD_RECIBIDA,
    CANTIDAD_PENDIENTE)
AS
SELECT ID_PEDIDO,
       /*PEDIDOS_PROVEEDOR.ID_ALMACEN,*/
       ID_ARTICULO,
       SUM(CANTIDAD_PEDIDA) as CANTIDAD_PEDIDA,
       SUM(CANTIDAD_RECIBIDA) as CANTIDAD_RECIBIDA,
       SUM(CANTIDAD_PEDIDA) - SUM(CANTIDAD_RECIBIDA) as CANTIDAD_PENDIENTE
FROM V_PED_PROV_ARTICULOS_AUX
/*
LEFT JOIN PEDIDOS_PROVEEDOR
ON (PEDIDOS_PROVEEDOR.ID = V_PED_PROV_ARTICULOS_AUX.ID_PEDIDO)
*/
GROUP BY ID_PEDIDO,
         /*PEDIDOS_PROVEEDOR.ID_ALMACEN,*/
         ID_ARTICULO
HAVING SUM(CANTIDAD_PEDIDA) IS NOT NULL
;



/* View: V_INV_ENTRADAS_PENDIENTES */
CREATE VIEW V_INV_ENTRADAS_PENDIENTES(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT PEDIDOS_PROVEEDOR.ID_ALMACEN, V_PED_PROV_ARTICULOS.ID_ARTICULO, SUM(V_PED_PROV_ARTICULOS.CANTIDAD_PENDIENTE)
FROM V_PED_PROV_ARTICULOS
LEFT JOIN PEDIDOS_PROVEEDOR
ON (PEDIDOS_PROVEEDOR.ID = V_PED_PROV_ARTICULOS.ID_PEDIDO)
WHERE (PEDIDOS_PROVEEDOR.ID_ALMACEN IS NOT NULL)
GROUP BY PEDIDOS_PROVEEDOR.ID_ALMACEN, V_PED_PROV_ARTICULOS.ID_ARTICULO
;



/* View: V_INV_RESERVAS */
CREATE VIEW V_INV_RESERVAS(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM V_ALB_CLI_DETALLES
WHERE (ID_ALMACEN IS NOT NULL)
AND (SITUACION = 'PENDIENTE')
GROUP BY ID_ALMACEN, ID_ARTICULO
;



/* View: V_INV_SALIDAS_ALB */
CREATE VIEW V_INV_SALIDAS_ALB(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM V_ALB_CLI_DETALLES
WHERE (ID_ALMACEN IS NOT NULL)
AND (SITUACION in ('ENVIADO', 'SERVIDO'))
GROUP BY ID_ALMACEN, ID_ARTICULO
;



/* View: V_INV_SALIDAS_MOV */
CREATE VIEW V_INV_SALIDAS_MOV(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT ID_ALMACEN, ID_ARTICULO, SUM(CANTIDAD)
FROM MOVIMIENTOS
WHERE TIPO = 'S'
GROUP BY ID_ALMACEN, ID_ARTICULO
;



/* View: V_INV_SALIDAS_AUX */
CREATE VIEW V_INV_SALIDAS_AUX(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT  ID_ALMACEN,
        ID_ARTICULO,
        CANTIDAD
FROM V_INV_SALIDAS_ALB
UNION ALL
SELECT  ID_ALMACEN,
        ID_ARTICULO,
        CANTIDAD
FROM V_INV_SALIDAS_MOV
;



/* View: V_INV_SALIDAS */
CREATE VIEW V_INV_SALIDAS(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT
ID_ALMACEN,
ID_ARTICULO,
SUM(CANTIDAD) as CANTIDAD
FROM V_INV_SALIDAS_AUX

GROUP BY ID_ALMACEN,
         ID_ARTICULO
;



/* View: V_INV_STOCK_AUX */
CREATE VIEW V_INV_STOCK_AUX(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD_ENTRADA,
    CANTIDAD_SALIDA)
AS
SELECT  ID_ALMACEN,
        ID_ARTICULO,
        CANTIDAD as CANTIDAD_ENTRADA,
        0 as CANTIDAD_SALIDA
FROM V_INV_ENTRADAS
UNION ALL
SELECT  ID_ALMACEN,
        ID_ARTICULO,
        0 as CANTIDAD_ENTRADA,
        CANTIDAD as CANTIDAD_SALIDA
FROM V_INV_SALIDAS
;



/* View: V_INV_STOCK */
CREATE VIEW V_INV_STOCK(
    ID_ALMACEN,
    ID_ARTICULO,
    CANTIDAD)
AS
SELECT
ID_ALMACEN,
ID_ARTICULO,
(SUM(CANTIDAD_ENTRADA) - SUM(CANTIDAD_SALIDA)) as CANTIDAD
FROM V_INV_STOCK_AUX
GROUP BY ID_ALMACEN,
         ID_ARTICULO
;



/* View: V_INVENTARIO_AUX */
CREATE VIEW V_INVENTARIO_AUX(
    ID_ALMACEN,
    ID_ARTICULO,
    STOCK,
    PENDIENTE_RECEPCION,
    RESERVA)
AS
SELECT ID_ALMACEN, ID_ARTICULO, CANTIDAD as STOCK, 0 as PENDIENTES, 0 as RESERVADAS
FROM V_INV_STOCK
UNION ALL
SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, CANTIDAD as PENDIENTES, 0 AS RESERVADAS
FROM V_INV_ENTRADAS_PENDIENTES
UNION ALL
SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, 0 as PENDIENTES, CANTIDAD AS RESERVADAS
FROM V_INV_RESERVAS
;



/* View: V_INVENTARIO */
CREATE VIEW V_INVENTARIO(
    ID_ALMACEN,
    ID_EMPRESA,
    NOMBRE,
    ID_ARTICULO,
    REFERENCIA,
    FAMILIA,
    DESCRIPCION,
    REFERENCIA_PROV,
    PRECIO_NETO,
    STOCK,
    UNIDADES_ALMACEN,
    COSTE_UNIDADES,
    RESERVA,
    PENDIENTE_RECEPCION)
AS
SELECT ID_ALMACEN,
       ALMACENES.ID_EMPRESA,
       ALMACENES.NOMBRE,
       ID_ARTICULO,
       ARTICULOS.REFERENCIA,
       ARTICULOS.FAMILIA,
       ARTICULOS.DESCRIPCION,
       ARTICULOS.REFERENCIA_PROV,
       COALESCE(ARTICULOS.PRECIO_NETO,0) as PRECIO_NETO,
       (SUM(STOCK) - SUM(RESERVA)) as STOCK,
       SUM(STOCK) as UNIDADES_ALMACEN,

       /*Si las unidades son negativas no se tiene en cuenta el coste*/
       CASE WHEN (SUM(STOCK) < 0) THEN 0
            ELSE (COALESCE(ARTICULOS.PRECIO_NETO,0) * SUM(STOCK))
       END as COSTE_UNIDADES,

       SUM(RESERVA) as RESERVA,
       SUM(PENDIENTE_RECEPCION) as PENDIENTE_RECEPCION

FROM V_INVENTARIO_AUX
LEFT JOIN ARTICULOS
ON (ARTICULOS.ID = V_INVENTARIO_AUX.ID_ARTICULO)
LEFT JOIN ALMACENES
ON (ALMACENES.ID = V_INVENTARIO_AUX.ID_ALMACEN)

WHERE (ID_ARTICULO <> 0)
AND   (ARTICULOS.ELIMINADO = 0)
AND   (ARTICULOS.INVENTARIABLE = 1)

GROUP BY ID_ALMACEN,
         ALMACENES.ID_EMPRESA,
         ALMACENES.NOMBRE,
         ID_ARTICULO,
         ARTICULOS.REFERENCIA,
         ARTICULOS.FAMILIA,
         ARTICULOS.DESCRIPCION,
         ARTICULOS.REFERENCIA_PROV,
         ARTICULOS.PRECIO_NETO
;



/* View: V_PAGOS_CLIENTE */
CREATE VIEW V_PAGOS_CLIENTE(
    ID,
    ID_RECIBO,
    TIPO,
    FECHA_PAGO,
    TITULAR,
    ENTIDAD,
    SUCURSAL,
    DC,
    CUENTA,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    IGNORAR_CONTABILIDAD,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO)
AS
SELECT PAGOS_CLIENTE.ID,
  PAGOS_CLIENTE.ID_RECIBO,
  PAGOS_CLIENTE.TIPO,
  PAGOS_CLIENTE.FECHA_PAGO,
  PAGOS_CLIENTE.TITULAR,
  PAGOS_CLIENTE.ENTIDAD,
  PAGOS_CLIENTE.SUCURSAL,
  PAGOS_CLIENTE.DC,
  PAGOS_CLIENTE.CUENTA,
  PAGOS_CLIENTE.FECHA_ALTA,
  PAGOS_CLIENTE.FECHA_MODIFICACION,
  PAGOS_CLIENTE.USUARIO,
  PAGOS_CLIENTE.IGNORAR_CONTABILIDAD,
  V_CONT_PAGOS_CLI_VENTAS.ID_SUBCUENTA,
  V_CONT_PAGOS_CLI_VENTAS.SUBCUENTA,
  V_CONT_PAGOS_CLI_VENTAS.ID_EJERCICIO,
  V_CONT_PAGOS_CLI_VENTAS.ESTADO_EJERCICIO,
  V_CONT_PAGOS_CLI_VENTAS.ASIENTO_PUNTEADO

  FROM PAGOS_CLIENTE
  LEFT JOIN V_CONT_PAGOS_CLI_VENTAS ON (V_CONT_PAGOS_CLI_VENTAS.ID_PAGO = PAGOS_CLIENTE.ID)
;



/* View: V_PAGOS_PROVEEDOR */
CREATE VIEW V_PAGOS_PROVEEDOR(
    ID,
    ID_RECIBO,
    TIPO,
    FECHA_PAGO,
    TITULAR,
    ENTIDAD,
    SUCURSAL,
    DC,
    CUENTA,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    IGNORAR_CONTABILIDAD,
    ID_SUBCUENTA,
    SUBCUENTA,
    ID_EJERCICIO,
    ESTADO_EJERCICIO,
    ASIENTO_PUNTEADO)
AS
SELECT PAGOS_PROVEEDOR.ID,
  PAGOS_PROVEEDOR.ID_RECIBO,
  PAGOS_PROVEEDOR.TIPO,
  PAGOS_PROVEEDOR.FECHA_PAGO,
  PAGOS_PROVEEDOR.TITULAR,
  PAGOS_PROVEEDOR.ENTIDAD,
  PAGOS_PROVEEDOR.SUCURSAL,  
  PAGOS_PROVEEDOR.DC,
  PAGOS_PROVEEDOR.CUENTA,
  PAGOS_PROVEEDOR.FECHA_ALTA,
  PAGOS_PROVEEDOR.FECHA_MODIFICACION,
  PAGOS_PROVEEDOR.USUARIO,
  PAGOS_PROVEEDOR.IGNORAR_CONTABILIDAD,
  V_CONT_PAGOS_PRO_COMPRAS.ID_SUBCUENTA,
  V_CONT_PAGOS_PRO_COMPRAS.SUBCUENTA,
  V_CONT_PAGOS_PRO_COMPRAS.ID_EJERCICIO,
  V_CONT_PAGOS_PRO_COMPRAS.ESTADO_EJERCICIO,
  V_CONT_PAGOS_PRO_COMPRAS.ASIENTO_PUNTEADO

  FROM PAGOS_PROVEEDOR
  LEFT JOIN V_CONT_PAGOS_PRO_COMPRAS ON (V_CONT_PAGOS_PRO_COMPRAS.ID_PAGO = PAGOS_PROVEEDOR.ID)
;



/* View: V_PED_PROV_SITUACION */
CREATE VIEW V_PED_PROV_SITUACION(
    ID_PEDIDO,
    SITUACION)
AS
SELECT ID_PEDIDO,
CASE WHEN (SUM(CANTIDAD_PENDIENTE) > 0) AND (SUM(CANTIDAD_RECIBIDA) = 0) THEN 'PENDIENTE'
     WHEN (SUM(CANTIDAD_PENDIENTE) <= 0) THEN 'RECIBIDO'
     WHEN (SUM(CANTIDAD_PENDIENTE) > 0) AND (SUM(CANTIDAD_RECIBIDA) > 0) THEN 'PARCIAL'
     ELSE 'N/A'
END AS SITUACION
FROM V_PED_PROV_ARTICULOS
GROUP BY V_PED_PROV_ARTICULOS.ID_PEDIDO
;



/* View: V_PEDIDOS_PROVEEDOR */
CREATE VIEW V_PEDIDOS_PROVEEDOR(
    ID,
    ID_EMPRESA,
    ID_PROVEEDOR,
    NOMBRE,
    REFERENCIA,
    SITUACION,
    FECHA_ENVIO,
    FECHA_PEDIDO,
    FECHA_CONFIRMACION,
    FECHA_ENTREGA,
    ID_ALMACEN,
    NOMBRE_ALMACEN,
    OBSERVACIONES,
    IMPORTE_TOTAL,
    INCIDENCIAS,
    INCIDENCIAS_ACTIVAS,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    PERSONA_CONTACTO,
    TELEFONO,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_PEDIDO_CLIENTE,
    REF_PED_CLIENTE,
    IMPORTE_NETO,
    IMPORTE_PORTE,
    DESCUENTO,
    IMPORTE_DESCUENTO,
    BASE_IMPONIBLE,
    IVA,
    IMPORTE_IVA,
    ID_FORMA_PAGO,
    ID_TIENDA,
    TIENDA,
    DESCRIPCION_GENERAL,
	ID_DIRECCION_CLIENTE)
AS
SELECT
  PEDIDOS_PROVEEDOR.ID,
  PEDIDOS_PROVEEDOR.ID_EMPRESA,
  PEDIDOS_PROVEEDOR.ID_PROVEEDOR,
  CONTACTOS.NOMBRE,
  PEDIDOS_PROVEEDOR.REFERENCIA,
  TRIM(case when (PEDIDOS_PROVEEDOR.FECHA_ENTREGA is null) then 'PENDIENTE'
       when (PEDIDOS_PROVEEDOR.FECHA_ENTREGA is not null) then 'RECIBIDO'
       else 'N/A'
  end) as SITUACION,
  PEDIDOS_PROVEEDOR.FECHA_ENVIO,
  PEDIDOS_PROVEEDOR.FECHA_PEDIDO,
  PEDIDOS_PROVEEDOR.FECHA_CONFIRMACION,
  PEDIDOS_PROVEEDOR.FECHA_ENTREGA,
  PEDIDOS_PROVEEDOR.ID_ALMACEN,
  ALMACENES.NOMBRE AS NOMBRE_ALMACEN,
  PEDIDOS_PROVEEDOR.OBSERVACIONES,
  PEDIDOS_PROVEEDOR.IMPORTE_TOTAL,
  PEDIDOS_PROVEEDOR.INCIDENCIAS,
  PEDIDOS_PROVEEDOR.INCIDENCIAS_ACTIVAS,
  PEDIDOS_PROVEEDOR.CALLE,
  PEDIDOS_PROVEEDOR.POBLACION,
  PEDIDOS_PROVEEDOR.PROVINCIA,
  PEDIDOS_PROVEEDOR.CODIGO_POSTAL,
  PEDIDOS_PROVEEDOR.PERSONA_CONTACTO,
  PEDIDOS_PROVEEDOR.TELEFONO,
  PEDIDOS_PROVEEDOR.FECHA_ALTA,
  PEDIDOS_PROVEEDOR.FECHA_MODIFICACION,
  PEDIDOS_PROVEEDOR.USUARIO,
  PEDIDOS_PROVEEDOR.ID_PEDIDO_CLIENTE,
  PEDIDOS_CLIENTE.REFERENCIA AS REF_PED_CLIENTE,
  PEDIDOS_PROVEEDOR.IMPORTE_NETO,
  PEDIDOS_PROVEEDOR.IMPORTE_PORTE,
  PEDIDOS_PROVEEDOR.DESCUENTO,
  PEDIDOS_PROVEEDOR.IMPORTE_DESCUENTO,
  PEDIDOS_PROVEEDOR.BASE_IMPONIBLE,
  PEDIDOS_PROVEEDOR.IVA,
  PEDIDOS_PROVEEDOR.IMPORTE_IVA,
  PEDIDOS_PROVEEDOR.ID_FORMA_PAGO,
  PEDIDOS_PROVEEDOR.ID_TIENDA,
  COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA,
  PEDIDOS_PROVEEDOR.DESCRIPCION_GENERAL,
  PEDIDOS_PROVEEDOR.ID_DIRECCION_CLIENTE
FROM
  PEDIDOS_PROVEEDOR
  INNER JOIN CONTACTOS ON (CONTACTOS.ID = PEDIDOS_PROVEEDOR.ID_PROVEEDOR)
  INNER JOIN V_PED_PROV_SITUACION ON (V_PED_PROV_SITUACION.ID_PEDIDO = PEDIDOS_PROVEEDOR.ID)
  LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = PEDIDOS_PROVEEDOR.ID_ALMACEN)
  LEFT OUTER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = PEDIDOS_PROVEEDOR.ID_PEDIDO_CLIENTE)  
  LEFT OUTER JOIN TIENDAS ON (TIENDAS.ID = PEDIDOS_PROVEEDOR.ID_TIENDA)
;



/* View: V_PERFILES */
CREATE VIEW V_PERFILES(
    ID,
    USERNAME,
    LOGIN,
    TIPO)
AS
SELECT 
    ID, USERNAME, LOGIN, TIPO
  FROM
    USUARIOS
  WHERE TIPO = 'P'
  ORDER BY USERNAME
;



CREATE VIEW V_PRESUPUESTOS_CLIENTE(
    ID,
    ID_EMPRESA,
    FECHA_PRESUPUESTO,
    FECHA_VIGENCIA,
    FECHA_DECISION,
    REFERENCIA,
    SITUACION,
    ID_CLIENTE,
    ID_DIRECCION,
    NIF_CIF,
    NOMBRE,
    PERSONA_CONTACTO,
    FORMA_PAGO,
    PLAZO_ENTREGA,
    OBSERVACIONES,
    INCIDENCIAS,
    INCIDENCIAS_ACTIVAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    IMPORTE_NETO,
    IMPORTE_PORTE,
    DESCUENTO,
    IMPORTE_DESCUENTO,
    BASE_IMPONIBLE,
    ID_TIPO_IVA,
    IVA,
    IMPORTE_IVA,
    RE,
    IMPORTE_RE,
    RECARGO_EQUIVALENCIA,
    IMPORTE_TOTAL,
    ID_FORMA_PAGO,
    ID_TIENDA,
    TIENDA,
    ID_VENDEDOR,
    VENDEDOR,
    ID_CONTRATO,
    REF_CONTRATO,
    NO_VALORADO,
    TIPO_PRESUPUESTO,
    CALIDADES,
    REFERENCIA_CLIENTE,
    LISTA_NOMBRES)
AS
SELECT
  PRESUPUESTOS_CLIENTE.ID,
/*  PRESUPUESTOS_CLIENTE.ID_EMPRESA,*/
  EMPRESAS_CONTACTOS.ID_EMPRESA,
  PRESUPUESTOS_CLIENTE.FECHA_PRESUPUESTO,
  PRESUPUESTOS_CLIENTE.FECHA_VIGENCIA,
  PRESUPUESTOS_CLIENTE.FECHA_DECISION,
  PRESUPUESTOS_CLIENTE.REFERENCIA,
  PRESUPUESTOS_CLIENTE.SITUACION,  
  PRESUPUESTOS_CLIENTE.ID_CLIENTE,
  PRESUPUESTOS_CLIENTE.ID_DIRECCION,  
  CONTACTOS.NIF_CIF,
  CONTACTOS.NOMBRE,
  PRESUPUESTOS_CLIENTE.PERSONA_CONTACTO,
  PRESUPUESTOS_CLIENTE.FORMA_PAGO,
  PRESUPUESTOS_CLIENTE.PLAZO_ENTREGA,
  PRESUPUESTOS_CLIENTE.OBSERVACIONES,
  PRESUPUESTOS_CLIENTE.INCIDENCIAS,
  PRESUPUESTOS_CLIENTE.INCIDENCIAS_ACTIVAS,
  PRESUPUESTOS_CLIENTE.FECHA_ALTA,
  PRESUPUESTOS_CLIENTE.FECHA_MODIFICACION,
  PRESUPUESTOS_CLIENTE.USUARIO,
  PRESUPUESTOS_CLIENTE.IMPORTE_NETO,
  PRESUPUESTOS_CLIENTE.IMPORTE_PORTE,
  PRESUPUESTOS_CLIENTE.DESCUENTO,
  PRESUPUESTOS_CLIENTE.IMPORTE_DESCUENTO,
  PRESUPUESTOS_CLIENTE.BASE_IMPONIBLE,
  PRESUPUESTOS_CLIENTE.ID_TIPO_IVA,
  PRESUPUESTOS_CLIENTE.IVA,
  PRESUPUESTOS_CLIENTE.IMPORTE_IVA,
  PRESUPUESTOS_CLIENTE.RE,
  PRESUPUESTOS_CLIENTE.IMPORTE_RE,
  PRESUPUESTOS_CLIENTE.RECARGO_EQUIVALENCIA,
  PRESUPUESTOS_CLIENTE.IMPORTE_TOTAL,
  PRESUPUESTOS_CLIENTE.ID_FORMA_PAGO,
  PRESUPUESTOS_CLIENTE.id_tienda, 
  COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA,
  PRESUPUESTOS_CLIENTE.ID_VENDEDOR,
  CONTACTOS2.NOMBRE AS VENDEDOR,
  PRESUPUESTOS_CLIENTE.ID_CONTRATO,
  CONTRATOS_CLIENTE.REFERENCIA,
  PRESUPUESTOS_CLIENTE.NO_VALORADO,
  PRESUPUESTOS_CLIENTE.TIPO_PRESUPUESTO,
  PRESUPUESTOS_CLIENTE.CALIDADES,
  PRESUPUESTOS_CLIENTE.REFERENCIA_CLIENTE,
  TRIM(leading ', ' from V_CONTACTOS_NOMBRES.OTROS_NOMBRES) as LISTA_NOMBRES

FROM
  PRESUPUESTOS_CLIENTE
  LEFT OUTER JOIN CONTACTOS ON (PRESUPUESTOS_CLIENTE.ID_CLIENTE = CONTACTOS.ID)
  LEFT JOIN EMPRESAS_CONTACTOS ON (EMPRESAS_CONTACTOS.ID_CONTACTO = CONTACTOS.ID)
  LEFT OUTER JOIN CONTACTOS CONTACTOS2 ON (PRESUPUESTOS_CLIENTE.ID_VENDEDOR = CONTACTOS2.ID)
  LEFT OUTER JOIN TIENDAS ON (TIENDAS.ID = PRESUPUESTOS_CLIENTE.ID_TIENDA)
  LEFT OUTER JOIN CONTRATOS_CLIENTE ON (CONTRATOS_CLIENTE.ID = PRESUPUESTOS_CLIENTE.ID_CONTRATO)
  LEFT OUTER JOIN V_CONTACTOS_NOMBRES ON (PRESUPUESTOS_CLIENTE.ID_CLIENTE = V_CONTACTOS_NOMBRES.ID)
WHERE PRESUPUESTOS_CLIENTE.fecha_presupuesto >= '01.01.2014'
;



/* View: V_PROVEEDORES */
CREATE VIEW V_PROVEEDORES(
    ID,
    ID_CATEGORIA,
    NIF_CIF,
    NOMBRE,
    PERSONA_CONTACTO,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    TELEFONO_1,
    TELEFONO_2,
    MOVIL_1,
    MOVIL_2,
    FAX,
    EMAIL_1,
    EMAIL_2,
    PAGINA_WEB,
    NOTAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_EMPRESA,
    REFERENCIA,
    ID_TIENDA,
    TIENDA,
    DESCUENTO,
    DESCRIPCION_PROVEEDOR,
    CODIGO_ASIGNADO,
    GRUPO_PROVEEDOR,
    REGIMEN_IVA,
    ID_TIPO_IVA,
    ID_FORMA_PAGO,
    TIENDA_WEB,
    HOMOLOGADO,
    CERTIFICACION,
    IGNORAR_CONTABILIDAD,
    TIENE_SUBCUENTA,
    NOMBRE_COMERCIAL,
    ES_ACREEDOR,
    VENCIMIENTO_FACTURAS_1,
    VENCIMIENTO_FACTURAS_2,
    VENCIMIENTO_FACTURAS_3)
AS
SELECT
  V_CONTACTOS.ID,
  V_CONTACTOS.ID_CATEGORIA,
  V_CONTACTOS.NIF_CIF,
  V_CONTACTOS.NOMBRE,
  V_CONTACTOS.PERSONA_CONTACTO,
  V_CONTACTOS.CALLE,
  V_CONTACTOS.POBLACION,
  V_CONTACTOS.PROVINCIA,
  V_CONTACTOS.CODIGO_POSTAL,
  V_CONTACTOS.TELEFONO_1,
  V_CONTACTOS.TELEFONO_2,
  V_CONTACTOS.MOVIL_1,
  V_CONTACTOS.MOVIL_2,
  V_CONTACTOS.FAX,
  V_CONTACTOS.EMAIL_1,
  V_CONTACTOS.EMAIL_2,
  V_CONTACTOS.PAGINA_WEB,
  V_CONTACTOS.NOTAS,
  V_CONTACTOS.FECHA_ALTA,
  V_CONTACTOS.FECHA_MODIFICACION,
  V_CONTACTOS.USUARIO,
  V_CONTACTOS.ID_EMPRESA,
  V_CONTACTOS.REFERENCIA,
  V_CONTACTOS.ID_TIENDA,
  V_CONTACTOS.TIENDA,
  PROVEEDORES_DATOS.DESCUENTO,
  PROVEEDORES_DATOS.DESCRIPCION_PROVEEDOR,
  PROVEEDORES_DATOS.CODIGO_ASIGNADO,
  PROVEEDORES_DATOS.GRUPO_PROVEEDOR,
  PROVEEDORES_DATOS.REGIMEN_IVA,
  PROVEEDORES_DATOS.ID_TIPO_IVA,
  PROVEEDORES_DATOS.ID_FORMA_PAGO,
  PROVEEDORES_DATOS.TIENDA_WEB,
  PROVEEDORES_DATOS.HOMOLOGADO,
  PROVEEDORES_DATOS.CERTIFICACION,
  PROVEEDORES_DATOS.IGNORAR_CONTABILIDAD,
  PROVEEDORES_DATOS.TIENE_SUBCUENTA,
  PROVEEDORES_DATOS.NOMBRE_COMERCIAL,
  PROVEEDORES_DATOS.ES_ACREEDOR,
  PROVEEDORES_DATOS.VENCIMIENTO_FACTURAS_1,    
  PROVEEDORES_DATOS.VENCIMIENTO_FACTURAS_2,    
  PROVEEDORES_DATOS.VENCIMIENTO_FACTURAS_3    
FROM
  PROVEEDORES_DATOS
  INNER JOIN V_CONTACTOS ON (PROVEEDORES_DATOS.ID_PROVEEDOR = V_CONTACTOS.ID)
WHERE
  V_CONTACTOS.ID_CATEGORIA = 2
;



/* View: V_REC_CLI_COMPENSADOS */
CREATE VIEW V_REC_CLI_COMPENSADOS(
    ID_RECIBO,
    IMPORTE_TOTAL_COMPENSADO)
AS
select ID_RECIBO_COMPENSADO, SUM((IMPORTE + OTROS_GASTOS)) as IMPORTE_TOTAL
from RECIBOS_CLIENTE
where ID_RECIBO_COMPENSADO is not null
group by ID_RECIBO_COMPENSADO
;



/* View: V_REC_PRO_COMPENSADOS */
CREATE VIEW V_REC_PRO_COMPENSADOS(
    ID_RECIBO,
    IMPORTE_TOTAL_COMPENSADO)
AS
select ID_RECIBO_COMPENSADO, SUM((IMPORTE + OTROS_GASTOS)) as IMPORTE_TOTAL
from RECIBOS_PROVEEDOR
where ID_RECIBO_COMPENSADO is not null
group by ID_RECIBO_COMPENSADO
;



/* View: V_RECIBOS_CLIENTE */
CREATE VIEW V_RECIBOS_CLIENTE(
    ID,
    ID_RECIBO_COMPENSADO,
    REFERENCIA_REC_COMPENSADO,
    REFERENCIA,
    SITUACION,
    ID_FACTURA,
    FECHA_FACTURA,
    FORMA_PAGO_FACTURA,
    IMPORTE_FACTURA,
    ID_REMESA,
    REFERENCIA_REMESA,
    FECHA_EMISION,
    FECHA_VENCIMIENTO,
    DESCRIPCION,
    OBSERVACIONES,
    IMPORTE,
    OTROS_GASTOS,
    IMPORTE_TOTAL,
    ID_EMPRESA,
    ID_CLIENTE,
    NOMBRE_CLIENTE,
    ENTIDAD_CLIENTE,
    SUCURSAL_CLIENTE,
    DC_CLIENTE,
    CUENTA_CLIENTE,
    NIF_CIF,
    NOMBRE,
    CALLE,
    POBLACION,
    CODIGO_POSTAL,
    PROVINCIA,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_TIENDA,
    TIENDA,
    LISTA_NOMBRES)
AS
SELECT RECIBOS_CLIENTE.ID,
       RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO,
       RECIBO_COMPENSADO1.REFERENCIA,
       RECIBOS_CLIENTE.REFERENCIA,
       CASE
       WHEN RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO IS NULL
       THEN TRIM(V_REC_CLI_SITUACION.SITUACION)
       ELSE TRIM(RECIBO_COMPENSADO2.SITUACION)
       END,
       RECIBOS_CLIENTE.ID_FACTURA,
       FACTURAS_CLIENTE.FECHA_FACTURA, 
       FORMAS_PAGO.DESCRIPCION,
       FACTURAS_CLIENTE.IMPORTE_TOTAL,
       RECIBOS_CLIENTE.ID_REMESA, REMESAS_CLIENTE.REFERENCIA as REFERENCIA_REMESA,
       RECIBOS_CLIENTE.FECHA_EMISION, RECIBOS_CLIENTE.FECHA_VENCIMIENTO, RECIBOS_CLIENTE.DESCRIPCION,
       RECIBOS_CLIENTE.OBSERVACIONES, RECIBOS_CLIENTE.IMPORTE, RECIBOS_CLIENTE.OTROS_GASTOS,
       COALESCE(RECIBOS_CLIENTE.IMPORTE, 0) + COALESCE(RECIBOS_CLIENTE.OTROS_GASTOS, 0) + COALESCE(V_REC_CLI_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO, 0),
       RECIBOS_CLIENTE.ID_EMPRESA,
       RECIBOS_CLIENTE.ID_CLIENTE,
       CONTACTOS.NOMBRE,
       CONTACTOS_DATOS_BANCO.ENTIDAD,
       CONTACTOS_DATOS_BANCO.SUCURSAL,
       CONTACTOS_DATOS_BANCO.DC,
       CONTACTOS_DATOS_BANCO.CUENTA,
       RECIBOS_CLIENTE.NIF_CIF,
       RECIBOS_CLIENTE.NOMBRE,
       RECIBOS_CLIENTE.CALLE,
       RECIBOS_CLIENTE.POBLACION,
       RECIBOS_CLIENTE.CODIGO_POSTAL,
       RECIBOS_CLIENTE.PROVINCIA,
       RECIBOS_CLIENTE.FECHA_ALTA,
       RECIBOS_CLIENTE.FECHA_MODIFICACION,
       RECIBOS_CLIENTE.USUARIO,
       RECIBOS_CLIENTE.ID_TIENDA,
       COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA,
       V_CONTACTOS_NOMBRES.OTROS_NOMBRES as LISTA_NOMBRES

FROM RECIBOS_CLIENTE
LEFT JOIN V_REC_CLI_SITUACION
ON (V_REC_CLI_SITUACION.ID_RECIBO = RECIBOS_CLIENTE.ID)
LEFT JOIN FACTURAS_CLIENTE
ON (FACTURAS_CLIENTE.ID = RECIBOS_CLIENTE.ID_FACTURA)
LEFT JOIN FORMAS_PAGO
ON (FORMAS_PAGO.ID = FACTURAS_CLIENTE.ID_FORMA_PAGO)
LEFT JOIN CONTACTOS
ON (CONTACTOS.ID = RECIBOS_CLIENTE.ID_CLIENTE)
LEFT JOIN CONTACTOS_DATOS_BANCO
ON (CONTACTOS_DATOS_BANCO.ID_CONTACTO = CONTACTOS.ID)
LEFT JOIN REMESAS_CLIENTE
ON (REMESAS_CLIENTE.ID = RECIBOS_CLIENTE.ID_REMESA)
LEFT JOIN V_REC_CLI_COMPENSADOS
ON (V_REC_CLI_COMPENSADOS.ID_RECIBO = RECIBOS_CLIENTE.ID)
LEFT JOIN RECIBOS_CLIENTE RECIBO_COMPENSADO1
ON (RECIBO_COMPENSADO1.ID = RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO)
LEFT JOIN V_REC_CLI_SITUACION RECIBO_COMPENSADO2
ON (RECIBO_COMPENSADO2.ID_RECIBO = RECIBOS_CLIENTE.ID_RECIBO_COMPENSADO)
LEFT JOIN TIENDAS
ON (TIENDAS.ID = RECIBOS_CLIENTE.ID_TIENDA)
LEFT OUTER JOIN V_CONTACTOS_NOMBRES ON (RECIBOS_CLIENTE.ID_CLIENTE = V_CONTACTOS_NOMBRES.ID)
;



/* View: V_RECIBOS_PROVEEDOR */
CREATE VIEW V_RECIBOS_PROVEEDOR(
    ID,
    ID_RECIBO_COMPENSADO,
    REFERENCIA_REC_COMPENSADO,
    REFERENCIA,
    REFERENCIA_PROVEEDOR,
    SITUACION,
    ID_FACTURA,
    REFERENCIA_FACTURA_PROV,
    FECHA_FACTURA,
    FORMA_PAGO_FACTURA,
    IMPORTE_FACTURA,
    ID_REMESA,
    REFERENCIA_REMESA,
    FECHA_EMISION,
    FECHA_VENCIMIENTO,
    DESCRIPCION,
    OBSERVACIONES,
    IMPORTE,
    OTROS_GASTOS,
    IMPORTE_TOTAL,
    ID_EMPRESA,
    ID_PROVEEDOR,
    NOMBRE_PROVEEDOR,
    ENTIDAD_PROVEEDOR,
    SUCURSAL_PROVEEDOR,
    DC_PROVEEDOR,
    CUENTA_PROVEEDOR,
    NIF_CIF,
    NOMBRE,
    CALLE,
    POBLACION,
    CODIGO_POSTAL,
    PROVINCIA,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_TIENDA,
    TIENDA)
AS
SELECT RECIBOS_PROVEEDOR.ID, 
       RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO,
       RECIBO_COMPENSADO1.REFERENCIA,
       RECIBOS_PROVEEDOR.REFERENCIA, 
       RECIBOS_PROVEEDOR.REFERENCIA_PROVEEDOR,
       CASE
       WHEN RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO IS NULL
       THEN TRIM(V_REC_PRO_SITUACION.SITUACION)
       ELSE TRIM(RECIBO_COMPENSADO2.SITUACION)
       END,
       RECIBOS_PROVEEDOR.ID_FACTURA,
       FACTURAS_PROVEEDOR.REFERENCIA_PROVEEDOR,
       FACTURAS_PROVEEDOR.FECHA_FACTURA,
       FORMAS_PAGO.DESCRIPCION, 
       FACTURAS_PROVEEDOR.IMPORTE_TOTAL,
       RECIBOS_PROVEEDOR.ID_REMESA, REMESAS_PROVEEDOR.REFERENCIA as REFERENCIA_REMESA,
       RECIBOS_PROVEEDOR.FECHA_EMISION, RECIBOS_PROVEEDOR.FECHA_VENCIMIENTO, RECIBOS_PROVEEDOR.DESCRIPCION,
       RECIBOS_PROVEEDOR.OBSERVACIONES, RECIBOS_PROVEEDOR.IMPORTE, RECIBOS_PROVEEDOR.OTROS_GASTOS,
       COALESCE(RECIBOS_PROVEEDOR.IMPORTE, 0) + COALESCE(RECIBOS_PROVEEDOR.OTROS_GASTOS, 0) + COALESCE(V_REC_PRO_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO, 0),       
       RECIBOS_PROVEEDOR.ID_EMPRESA,
       RECIBOS_PROVEEDOR.ID_PROVEEDOR,
       CONTACTOS.NOMBRE,
       CONTACTOS_DATOS_BANCO.ENTIDAD,
       CONTACTOS_DATOS_BANCO.SUCURSAL,
       CONTACTOS_DATOS_BANCO.DC, 
       CONTACTOS_DATOS_BANCO.CUENTA,

       RECIBOS_PROVEEDOR.NIF_CIF,
       RECIBOS_PROVEEDOR.NOMBRE,
       RECIBOS_PROVEEDOR.CALLE,
       RECIBOS_PROVEEDOR.POBLACION,
       RECIBOS_PROVEEDOR.CODIGO_POSTAL,
       RECIBOS_PROVEEDOR.PROVINCIA,
       RECIBOS_PROVEEDOR.FECHA_ALTA,
       RECIBOS_PROVEEDOR.FECHA_MODIFICACION,
       RECIBOS_PROVEEDOR.USUARIO,
       RECIBOS_PROVEEDOR.ID_TIENDA,
       COALESCE(TIENDAS.NOMBRE, 'Todas') AS TIENDA

FROM RECIBOS_PROVEEDOR
LEFT JOIN V_REC_PRO_SITUACION
ON (V_REC_PRO_SITUACION.ID_RECIBO = RECIBOS_PROVEEDOR.ID)
LEFT JOIN FACTURAS_PROVEEDOR
ON (FACTURAS_PROVEEDOR.ID = RECIBOS_PROVEEDOR.ID_FACTURA)
LEFT JOIN FORMAS_PAGO
ON (FORMAS_PAGO.ID = FACTURAS_PROVEEDOR.ID_FORMA_PAGO)
LEFT JOIN CONTACTOS
ON (CONTACTOS.ID = RECIBOS_PROVEEDOR.ID_PROVEEDOR)
LEFT JOIN CONTACTOS_DATOS_BANCO
ON (CONTACTOS_DATOS_BANCO.ID_CONTACTO = CONTACTOS.ID)
LEFT JOIN REMESAS_PROVEEDOR
ON (REMESAS_PROVEEDOR.ID = RECIBOS_PROVEEDOR.ID_REMESA)
LEFT JOIN V_REC_PRO_COMPENSADOS
ON (V_REC_PRO_COMPENSADOS.ID_RECIBO = RECIBOS_PROVEEDOR.ID)
LEFT JOIN RECIBOS_PROVEEDOR RECIBO_COMPENSADO1
ON (RECIBO_COMPENSADO1.ID = RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO)
LEFT JOIN V_REC_PRO_SITUACION RECIBO_COMPENSADO2
ON (RECIBO_COMPENSADO2.ID_RECIBO = RECIBOS_PROVEEDOR.ID_RECIBO_COMPENSADO)
LEFT JOIN TIENDAS
ON (TIENDAS.ID = RECIBOS_PROVEEDOR.ID_TIENDA)
;



/* View: V_REMESAS_CLIENTE */
CREATE VIEW V_REMESAS_CLIENTE(
    ID,
    ID_EMPRESA,
    REFERENCIA,
    TIPO,
    FECHA_REMESA,
    DESCRIPCION,
    ID_DATOS_BANCO,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    NOMBRE,
    ENTIDAD,
    SUCURSAL,
    DC,
    CUENTA,
    SUFIJO_N19,
    SUFIJO_N58,
    IMPORTE_TOTAL)
AS
SELECT
  REMESAS_CLIENTE.ID,
  REMESAS_CLIENTE.ID_EMPRESA,
  REMESAS_CLIENTE.REFERENCIA,
  REMESAS_CLIENTE.TIPO,
  REMESAS_CLIENTE.FECHA_REMESA,
  REMESAS_CLIENTE.DESCRIPCION,
  REMESAS_CLIENTE.ID_DATOS_BANCO,
  REMESAS_CLIENTE.FECHA_ALTA,
  REMESAS_CLIENTE.FECHA_MODIFICACION,
  REMESAS_CLIENTE.USUARIO,
  EMPRESAS_DATOS_BANCO.NOMBRE,
  EMPRESAS_DATOS_BANCO.ENTIDAD,
  EMPRESAS_DATOS_BANCO.SUCURSAL,
  EMPRESAS_DATOS_BANCO.DC,
  EMPRESAS_DATOS_BANCO.CUENTA,
  EMPRESAS_DATOS_BANCO.SUFIJO_N19,
  EMPRESAS_DATOS_BANCO.SUFIJO_N58,
  SUM(COALESCE(RECIBOS_CLIENTE.IMPORTE,0) + COALESCE(RECIBOS_CLIENTE.OTROS_GASTOS,0) + COALESCE(V_REC_CLI_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO,0)) as IMPORTE_TOTAL

FROM
  REMESAS_CLIENTE
  LEFT OUTER JOIN EMPRESAS_DATOS_BANCO ON (EMPRESAS_DATOS_BANCO.ID = REMESAS_CLIENTE.ID_DATOS_BANCO)
  LEFT OUTER JOIN RECIBOS_CLIENTE ON (RECIBOS_CLIENTE.ID_REMESA = REMESAS_CLIENTE.ID)
  LEFT OUTER JOIN V_REC_CLI_COMPENSADOS ON (V_REC_CLI_COMPENSADOS.ID_RECIBO = RECIBOS_CLIENTE.ID)
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
;



/* View: V_REMESAS_PROVEEDOR */
CREATE VIEW V_REMESAS_PROVEEDOR(
    ID,
    ID_EMPRESA,
    REFERENCIA,
    TIPO,
    FECHA_REMESA,
    DESCRIPCION,
    ID_DATOS_BANCO,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    NOMBRE,
    ENTIDAD,
    SUCURSAL,
    DC,
    CUENTA,
    SUFIJO_N19,
    SUFIJO_N58,
    IMPORTE_TOTAL)
AS
SELECT
  REMESAS_PROVEEDOR.ID,
  REMESAS_PROVEEDOR.ID_EMPRESA,
  REMESAS_PROVEEDOR.REFERENCIA,
  REMESAS_PROVEEDOR.TIPO,
  REMESAS_PROVEEDOR.FECHA_REMESA,
  REMESAS_PROVEEDOR.DESCRIPCION,
  REMESAS_PROVEEDOR.ID_DATOS_BANCO,
  REMESAS_PROVEEDOR.FECHA_ALTA,
  REMESAS_PROVEEDOR.FECHA_MODIFICACION,
  REMESAS_PROVEEDOR.USUARIO,
  EMPRESAS_DATOS_BANCO.NOMBRE,
  EMPRESAS_DATOS_BANCO.ENTIDAD,
  EMPRESAS_DATOS_BANCO.SUCURSAL,
  EMPRESAS_DATOS_BANCO.DC,
  EMPRESAS_DATOS_BANCO.CUENTA,
  EMPRESAS_DATOS_BANCO.SUFIJO_N19,
  EMPRESAS_DATOS_BANCO.SUFIJO_N58,
  SUM(COALESCE(RECIBOS_PROVEEDOR.IMPORTE,0) + COALESCE(RECIBOS_PROVEEDOR.OTROS_GASTOS,0) + COALESCE(V_REC_PRO_COMPENSADOS.IMPORTE_TOTAL_COMPENSADO,0)) as IMPORTE_TOTAL  

FROM
  REMESAS_PROVEEDOR
  LEFT OUTER JOIN EMPRESAS_DATOS_BANCO ON (EMPRESAS_DATOS_BANCO.ID = REMESAS_PROVEEDOR.ID_DATOS_BANCO)
  LEFT OUTER JOIN RECIBOS_PROVEEDOR ON (RECIBOS_PROVEEDOR.ID_REMESA = REMESAS_PROVEEDOR.ID)
  LEFT OUTER JOIN V_REC_PRO_COMPENSADOS ON (V_REC_PRO_COMPENSADOS.ID_RECIBO = RECIBOS_PROVEEDOR.ID)  
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
;



/* View: V_USUARIOS */
CREATE VIEW V_USUARIOS(
    ID,
    USERNAME,
    LOGIN,
    PASS,
    PASSEXPIRED,
    BLOQUEADO,
    EMAIL,
    USERDAYSSUN,
    PRIVILEGED,
    TIPO,
    ID_PERFIL,
    CHECKSUM)
AS
SELECT 
    USUARIOS.ID, USUARIOS.USERNAME, USUARIOS.LOGIN, USUARIOS.PASS, USUARIOS.PASSEXPIRED,
    USUARIOS.BLOQUEADO, USUARIOS.EMAIL, USUARIOS.USERDAYSSUN, USUARIOS.PRIVILEGED,
    USUARIOS.TIPO, USUARIOS.ID_PERFIL, USUARIOS.CHECKSUM
FROM
  USUARIOS
  WHERE TIPO = 'U'
  ORDER BY USERNAME
;



/* View: V_VENDEDORES */
CREATE VIEW V_VENDEDORES(
    ID,
    ID_CATEGORIA,
    NIF_CIF,
    NOMBRE,
    PERSONA_CONTACTO,
    CALLE,
    POBLACION,
    PROVINCIA,
    CODIGO_POSTAL,
    TELEFONO_1,
    TELEFONO_2,
    MOVIL_1,
    MOVIL_2,
    FAX,
    EMAIL_1,
    EMAIL_2,
    PAGINA_WEB,
    NOTAS,
    FECHA_ALTA,
    FECHA_MODIFICACION,
    USUARIO,
    ID_EMPRESA,
    REFERENCIA,
    ID_TIENDA,
    TIENDA,
    COMISION,
    ID_USUARIO)
AS
SELECT V_CONTACTOS.ID,
  V_CONTACTOS.ID_CATEGORIA,
  V_CONTACTOS.NIF_CIF,
  V_CONTACTOS.NOMBRE,
  V_CONTACTOS.PERSONA_CONTACTO,
  V_CONTACTOS.CALLE,
  V_CONTACTOS.POBLACION,
  V_CONTACTOS.PROVINCIA,
  V_CONTACTOS.CODIGO_POSTAL,
  V_CONTACTOS.TELEFONO_1,
  V_CONTACTOS.TELEFONO_2,
  V_CONTACTOS.MOVIL_1,
  V_CONTACTOS.MOVIL_2,
  V_CONTACTOS.FAX,
  V_CONTACTOS.EMAIL_1,
  V_CONTACTOS.EMAIL_2,
  V_CONTACTOS.PAGINA_WEB,
  V_CONTACTOS.NOTAS,
  V_CONTACTOS.FECHA_ALTA,
  V_CONTACTOS.FECHA_MODIFICACION,
  V_CONTACTOS.USUARIO,
  V_CONTACTOS.ID_EMPRESA, 
  V_CONTACTOS.REFERENCIA,
  V_CONTACTOS.ID_TIENDA,
  V_CONTACTOS.TIENDA,
  VENDEDORES_DATOS.COMISION,
  VENDEDORES_DATOS.ID_USUARIO
  
FROM V_CONTACTOS
INNER JOIN VENDEDORES_DATOS ON (VENDEDORES_DATOS.ID_VENDEDOR = V_CONTACTOS.ID)

WHERE V_CONTACTOS.ID_CATEGORIA = 3
;

CREATE VIEW V_LISTADO_DATOS_CONTACTO(
    ID,
    ID_CONTACTO,
    NOMBRE,
    TELEFONO_TRABAJO,
    TELEFONO_PARTICULAR,
    MOVIL,
    MAIL_TRABAJO,
    MAIL_PARTICULAR)
AS
select
    ID,
    ID_CONTACTO,
    NOMBRE,
    telefono_trabajo,
    telefono_particular,
    movil,
    mail_tabajo,
    mail_particular
from
(
select
    ID,
    ID as ID_CONTACTO,
    NOMBRE,
    TELEFONO_1 as telefono_trabajo,
    Telefono_2 as telefono_particular,
    MOVIL_1 as movil,
    EMAIL_1 as mail_tabajo,
    EMAIL_2 as mail_particular
from CONTACTOS

union

select
    ID,
    ID_CONTACTO,
    NOMBRE,
    null as telefono_tabajo,
    TELEFONO as telefono_particular,
    MOVIL,
    null as movil_trabajo,
    EMAIL as movil_particular
from CONTACTOS_DATOS_PERSONAL
)
order by id_contacto
;


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

ALTER TABLE AGENTES_COMISIONES ADD CONSTRAINT PK_AGENTES_COMISIONES PRIMARY KEY (ID);
ALTER TABLE ALBARANES_CLIENTE ADD CONSTRAINT PK_ALBARANES_CLIENTE PRIMARY KEY (ID);
ALTER TABLE ALBARANES_CLIENTE_DETALLES ADD CONSTRAINT PK_ALBARANES_CLIENTE_DETALLES PRIMARY KEY (ID);
ALTER TABLE ALBARANES_PROVEEDOR ADD CONSTRAINT PK_ALBARAN_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE ALBARANES_PROVEEDOR_DETALLES ADD CONSTRAINT PK_ALBARANES_PROVEEDOR_DETALLES PRIMARY KEY (ID);
ALTER TABLE ALMACENES ADD CONSTRAINT PK_ALMACENES PRIMARY KEY (ID);
ALTER TABLE ARTICULOS ADD CONSTRAINT PK_ARTICULOS PRIMARY KEY (ID);
ALTER TABLE CATEGORIAS ADD CONSTRAINT PK_CATEGORIAS PRIMARY KEY (ID);
ALTER TABLE CHANGES ADD CONSTRAINT PK_CHANGES PRIMARY KEY (CHANGECODE);
ALTER TABLE CLIENTES_DATOS ADD CONSTRAINT PK_CLIENTES_DATOS PRIMARY KEY (ID_CLIENTE);
ALTER TABLE CLIENTES_DTOS_PROVEEDORES ADD CONSTRAINT PK_CLIENTES_DTOS_PROV PRIMARY KEY (ID);
ALTER TABLE CLIENTES_GRUPOS ADD CONSTRAINT PK_CLIENTES_GRUPOS PRIMARY KEY (ID);
ALTER TABLE CLIENTES_PROCEDENCIAS ADD CONSTRAINT PK_CLIENTES_PROCEDENCIAS PRIMARY KEY (ID);
ALTER TABLE COMISIONES_LIQUIDADAS ADD CONSTRAINT PK_COMISIONES_LIQUIDADAS PRIMARY KEY (ID);
ALTER TABLE COMISIONES_LIQ_VENDEDORES ADD CONSTRAINT PK_COMISIONES_LIQ_VENDEDORES PRIMARY KEY (ID);
ALTER TABLE CONFIGURACION ADD CONSTRAINT PK_CONFIGURACION PRIMARY KEY (ID);
ALTER TABLE CONTACTOS ADD CONSTRAINT PK_CONTACTOS PRIMARY KEY (ID);
ALTER TABLE CONTACTOS_CATEGORIAS ADD CONSTRAINT PK_CONTACTOS_CATEGORIAS PRIMARY KEY (ID_CONTACTO, ID_CATEGORIA);
ALTER TABLE CONTACTOS_DATOS_BANCO ADD CONSTRAINT PK_CONTACTOS_DATOS_BANCO PRIMARY KEY (ID);
ALTER TABLE CONTACTOS_DATOS_PERSONAL ADD CONSTRAINT PK_CONTACTOS_DATOS_PER PRIMARY KEY (ID);
ALTER TABLE CONTACTOS_DIRECCIONES ADD CONSTRAINT PK_CONTACTOS_DIR PRIMARY KEY (ID);
ALTER TABLE CONTRATOS_CLIENTE ADD CONSTRAINT PK_CONTRATOS_CLIENTE PRIMARY KEY (ID);
ALTER TABLE CONTRATOS_CLIENTE_DETALLES ADD CONSTRAINT PK_CONTRATOS_CLIENTE_DETALLE PRIMARY KEY (ID);
ALTER TABLE CONT_APUNTES ADD CONSTRAINT PK_CONT_APUNTES PRIMARY KEY (ID);
ALTER TABLE CONT_ASIENTOS ADD CONSTRAINT PK_CONT_ASIENTOS PRIMARY KEY (ID);
ALTER TABLE CONT_BALANCES ADD CONSTRAINT PK_CONT_BALANCES PRIMARY KEY (ID);
ALTER TABLE CONT_CUENTAS ADD CONSTRAINT PK_CONT_CUENTAS PRIMARY KEY (ID);
ALTER TABLE CONT_CUENTAS_ESPECIALES ADD CONSTRAINT PK_CONT_CUENTAS_ESPECIALES PRIMARY KEY (ID);
ALTER TABLE CONT_EJERCICIOS ADD CONSTRAINT PK_CONT_EJERCICIOS PRIMARY KEY (ID);
ALTER TABLE CONT_EPIGRAFES ADD CONSTRAINT PK_CONT_EPIGRAFES PRIMARY KEY (ID);
ALTER TABLE CONT_SUBCUENTAS ADD CONSTRAINT PK_CONT_SUBCUENTAS PRIMARY KEY (ID);
ALTER TABLE EMPRESAS ADD CONSTRAINT PK_EMPRESAS PRIMARY KEY (ID);
ALTER TABLE EMPRESAS_CONTACTOS ADD CONSTRAINT PK_EMPRESAS_CONTACTOS PRIMARY KEY (ID);
ALTER TABLE EMPRESAS_DATOS_BANCO ADD CONSTRAINT PK_EMPRESAS_DATOS_BANCO PRIMARY KEY (ID);
ALTER TABLE EMPRESAS_TIENDAS ADD CONSTRAINT PK_EMPRESAS_TIENDAS PRIMARY KEY (ID);
ALTER TABLE EMPRESAS_USUARIOS ADD CONSTRAINT PK_EMPRESAS_USUARIOS PRIMARY KEY (ID);
ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT PK_FACTURAS_CLIENTE PRIMARY KEY (ID);
ALTER TABLE FACTURAS_CLIENTE_DETALLES ADD CONSTRAINT PK_FACTURAS_CLIENTE_DETALLES PRIMARY KEY (ID);
ALTER TABLE FACTURAS_PROVEEDOR ADD CONSTRAINT PK_FACTURAS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE FACTURAS_PROVEEDOR_CONTRATOS ADD CONSTRAINT PK_FACTURAS_PROVEEDOR_CONTRATOS PRIMARY KEY (ID);
ALTER TABLE FACTURAS_PROVEEDOR_DETALLES ADD CONSTRAINT PK_FACTURAS_PROVEEDOR_DETALLES PRIMARY KEY (ID);
ALTER TABLE FAMILIAS ADD CONSTRAINT PK_FAMILIAS PRIMARY KEY (ID);
ALTER TABLE FORMAS_PAGO ADD PRIMARY KEY (ID);
ALTER TABLE FORMAS_PAGO_PLAZOS ADD PRIMARY KEY (ID);
ALTER TABLE INFORMES ADD CONSTRAINT PK_INFORMES PRIMARY KEY (ID);
ALTER TABLE MOVIMIENTOS ADD CONSTRAINT PK_MOVIMIENTOS PRIMARY KEY (ID);
ALTER TABLE PAGOS_CLIENTE ADD CONSTRAINT PK_PAGOS_CLIENTE PRIMARY KEY (ID);
ALTER TABLE PAGOS_PROVEEDOR ADD CONSTRAINT PK_PAGOS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE PEDIDOS_CLIENTE ADD CONSTRAINT PK_PEDIDOS_CLIENTE PRIMARY KEY (ID);
ALTER TABLE PEDIDOS_CLIENTE_DETALLES ADD CONSTRAINT PK_PEDIDOS_CLIENTE_DETALLES PRIMARY KEY (ID);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT PK_PEDIDOS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES ADD CONSTRAINT PK_PEDIDOS_PROVEEDOR_DETALLES PRIMARY KEY (ID);
ALTER TABLE PERMISOS ADD CONSTRAINT PK_PERMISOS PRIMARY KEY (ID);
ALTER TABLE PERMISOSEX ADD CONSTRAINT PK_PERMISOSEX PRIMARY KEY (ID);
ALTER TABLE POBLACIONES ADD CONSTRAINT PK_POBLACIONES PRIMARY KEY (ID);
ALTER TABLE PRESUPUESTOS_CLIENTE ADD CONSTRAINT PK_PRESUPUESTOS_CLIENTE PRIMARY KEY (ID);
ALTER TABLE PRESUPUESTOS_CLIENTE_CAPITULOS ADD CONSTRAINT PK_PRESUPUESTOS_CLIENTE_CAPITUL PRIMARY KEY (ID);
ALTER TABLE PRESUPUESTOS_CLIENTE_DETALLES ADD CONSTRAINT PK_PRESUPUESTOS_CLIENTE_DETALLE PRIMARY KEY (ID);
ALTER TABLE PROVEEDORES_DATOS ADD CONSTRAINT PK_PROVEEDORES_DATOS PRIMARY KEY (ID_PROVEEDOR);
ALTER TABLE PROVEEDORES_GRUPOS ADD CONSTRAINT PK_PROVEEDORES_GRUPOS PRIMARY KEY (ID);
ALTER TABLE PROVINCIAS ADD CONSTRAINT PK_PROVINCIAS PRIMARY KEY (ID);
ALTER TABLE RECIBOS_CLIENTE ADD CONSTRAINT PK_RECIBOS_CLIENTE PRIMARY KEY (ID);
ALTER TABLE RECIBOS_PROVEEDOR ADD CONSTRAINT PK_RECIBOS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE REMESAS_CLIENTE ADD CONSTRAINT PK_REMESAS_CLIENTE PRIMARY KEY (ID);
ALTER TABLE REMESAS_PROVEEDOR ADD CONSTRAINT PK_REMESAS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE TIENDAS ADD CONSTRAINT PK_TIENDAS PRIMARY KEY (ID);
ALTER TABLE TIENDA_WEB ADD CONSTRAINT PK_TIENDA_WEB PRIMARY KEY (ID);
ALTER TABLE TIPOS_IVA ADD PRIMARY KEY (ID);
ALTER TABLE UNIDADES_MEDIDA ADD PRIMARY KEY (ID);
ALTER TABLE USUARIOS ADD CONSTRAINT PK_USUARIOS PRIMARY KEY (ID);
ALTER TABLE USUARIOS_LOGON ADD CONSTRAINT PK_USUARIOS_LOGON PRIMARY KEY (LOGONID);
ALTER TABLE VENDEDORES_DATOS ADD CONSTRAINT PK_VENDEDORES_DATOS PRIMARY KEY (ID_VENDEDOR);


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

ALTER TABLE ALBARANES_CLIENTE ADD CONSTRAINT FK_ALBARANES_CLIENTE_1 FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_CLIENTE (ID) ON DELETE SET NULL ON UPDATE SET NULL;
ALTER TABLE ALBARANES_CLIENTE ADD CONSTRAINT FK_ALBARANES_CLIENTE_2 FOREIGN KEY (ID_CONTRATO) REFERENCES CONTRATOS_CLIENTE (ID) ON DELETE SET NULL ON UPDATE SET NULL;
ALTER TABLE ALBARANES_CLIENTE ADD CONSTRAINT FK_ALBARAN_CLIENTE_2 FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ALBARANES_PROVEEDOR ADD CONSTRAINT FK_ALBARAN_PROVEEDOR_2 FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ALMACENES ADD CONSTRAINT FK_ALMACENES_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ARTICULOS ADD CONSTRAINT FK_ARTICULOS_EMPRESA FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE CONT_CUENTAS ADD CONSTRAINT FK_CONT_CUENTAS_1 FOREIGN KEY (ID_EJERCICIO) REFERENCES CONT_EJERCICIOS (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE CONT_EPIGRAFES ADD CONSTRAINT FK_CONT_EPIGRAFES_1 FOREIGN KEY (ID_EJERCICIO) REFERENCES CONT_EJERCICIOS (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE CONT_SUBCUENTAS ADD CONSTRAINT FK_CONT_SUBCUENTAS_1 FOREIGN KEY (ID_EJERCICIO) REFERENCES CONT_EJERCICIOS (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE EMPRESAS_DATOS_BANCO ADD CONSTRAINT FK_EMPRESAS_DATOS_BANCO FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE EMPRESAS_TIENDAS ADD CONSTRAINT FK_EMPRESAS_TIENDAS_1 FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT FK_FACTURAS_CLIENTE_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE FACTURAS_PROVEEDOR ADD CONSTRAINT FK_FACTURAS_PROVEEDOR_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE FACTURAS_PROVEEDOR_CONTRATOS ADD CONSTRAINT FK_FACTURAS_PROVEEDOR_CONTRATO2 FOREIGN KEY (ID_CONTRATO) REFERENCES CONTRATOS_CLIENTE (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE FACTURAS_PROVEEDOR_CONTRATOS ADD CONSTRAINT FK_FACTURAS_PROVEEDOR_CONTRATOS FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_PROVEEDOR (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE FACTURAS_PROVEEDOR_DETALLES ADD CONSTRAINT FK_FACTURAS_PRO_DET_ID_FACTURA FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_PROVEEDOR (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE MOVIMIENTOS ADD CONSTRAINT FK_MOVIMIENTOS FOREIGN KEY (ID_ARTICULO) REFERENCES ARTICULOS (ID);
ALTER TABLE MOVIMIENTOS ADD CONSTRAINT FK_MOVIMIENTOS2 FOREIGN KEY (ID_ALMACEN) REFERENCES ALMACENES (ID);
ALTER TABLE PAGOS_CLIENTE ADD CONSTRAINT FK_PAGOS_CLIENTE_1 FOREIGN KEY (ID_RECIBO) REFERENCES RECIBOS_CLIENTE (ID);
ALTER TABLE PAGOS_PROVEEDOR ADD CONSTRAINT FK_PAGOS_PROVEEDOR_1 FOREIGN KEY (ID_RECIBO) REFERENCES RECIBOS_PROVEEDOR (ID);
ALTER TABLE PEDIDOS_CLIENTE ADD CONSTRAINT FK_PEDIDOS_CLIENTE FOREIGN KEY (ID_CLIENTE) REFERENCES CONTACTOS (ID);
ALTER TABLE PEDIDOS_CLIENTE ADD CONSTRAINT FK_PEDIDOS_CLIENTE_ID_EMPRESA FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR2 FOREIGN KEY (ID_PROVEEDOR) REFERENCES CONTACTOS (ID);
ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES ADD CONSTRAINT FK_PEDIDOS_PROV_DET_ID_PEDIDO FOREIGN KEY (ID_PEDIDO) REFERENCES PEDIDOS_PROVEEDOR (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE PRESUPUESTOS_CLIENTE ADD CONSTRAINT FK_PRESUPUESTOS_CLIENTE_1 FOREIGN KEY (ID_CONTRATO) REFERENCES CONTRATOS_CLIENTE (ID) ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE REMESAS_CLIENTE ADD CONSTRAINT FK_REMESAS_CLIENTE FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID);
ALTER TABLE REMESAS_PROVEEDOR ADD CONSTRAINT FK_REMESAS_PROVEEDOR FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID);
ALTER TABLE TIENDA_WEB ADD CONSTRAINT FK_EMPRESAS_TIENDA_WEB FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE CASCADE ON UPDATE CASCADE;


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

CREATE INDEX IDX_AGENTES_COMISIONES1 ON AGENTES_COMISIONES (ID_AGENTE);
CREATE INDEX IDX_AGENTES_COMISIONES2 ON AGENTES_COMISIONES (ID_PROVEEDOR);
CREATE INDEX IDX_ALBARANES_CLIENTE1 ON ALBARANES_CLIENTE (ID_FORMA_PAGO);
CREATE INDEX IDX_ALBARANES_CLIENTE2 ON ALBARANES_CLIENTE (TIPO);
CREATE INDEX IDX_ALBARANES_CLIENTE_DETALLES1 ON ALBARANES_CLIENTE_DETALLES (ID_ARTICULO);
CREATE INDEX IDX_ALBARANES_CLIENTE_DETALLES2 ON ALBARANES_CLIENTE_DETALLES (ID_ALBARAN);
CREATE INDEX IDX_ALBARANES_PROVEEDOR_1 ON ALBARANES_PROVEEDOR (ID_ALMACEN);
CREATE INDEX IDX_ALBARANES_PROVEEDOR_2 ON ALBARANES_PROVEEDOR (ID_FORMA_PAGO);
CREATE INDEX IDX_ALBARANES_PROVEEDOR_3 ON ALBARANES_PROVEEDOR (ID_PEDIDO);
CREATE INDEX IDX_ALBARANES_PROVEEDOR_4 ON ALBARANES_PROVEEDOR (ID_FACTURA);
CREATE INDEX IDX_ALBARANES_PROVEEDOR_5 ON ALBARANES_PROVEEDOR (TIPO);
CREATE INDEX IDX_ALBARANES_PROV_DETALLES ON ALBARANES_PROVEEDOR_DETALLES (ID_ALBARAN);
CREATE INDEX IDX_ALBARANES_PROV_DETALLES1 ON ALBARANES_PROVEEDOR_DETALLES (ID_ARTICULO);
CREATE INDEX IDX_ARTICULOS ON ARTICULOS (ID_PROVEEDOR);
CREATE INDEX IDX_ELIMINADOS ON ARTICULOS (ELIMINADO);
CREATE INDEX CHANGES_LOC_ID ON CHANGES (LOC_ID);
CREATE INDEX CHANGES_TABLENAME ON CHANGES (TABLENAME);
CREATE INDEX IDX_CLIENTES_DATOS ON CLIENTES_DATOS (ID_TIPO_IVA);
CREATE INDEX IDX_CLIENTES_DATOS1 ON CLIENTES_DATOS (ID_FORMA_PAGO);
CREATE INDEX IDX_CLIENTES_DATOS_ID_AGENTE ON CLIENTES_DATOS (ID_AGENTE);
CREATE INDEX IDX_CLIENTES_DTOS_PROV_ID_CLI ON CLIENTES_DTOS_PROVEEDORES (ID_CLIENTE);
CREATE INDEX IDX_CLIENTES_DTOS_PROV_ID_PROV ON CLIENTES_DTOS_PROVEEDORES (ID_PROVEEDOR);
CREATE INDEX IDX_COMISIONES_LIQUIDADAS ON COMISIONES_LIQUIDADAS (ID_EMPRESA);
CREATE INDEX IDX_CONFIGURACION ON CONFIGURACION (ID_EMPRESA);
CREATE INDEX IDX_CONTACTOS_CATEGORIAS ON CONTACTOS_CATEGORIAS (ID_CONTACTO);
CREATE INDEX IDX_CONTACTOS_CATEGORIAS1 ON CONTACTOS_CATEGORIAS (ID_CATEGORIA);
CREATE INDEX IDX_CONTACTOS_DATOS_BANCO ON CONTACTOS_DATOS_BANCO (ID_CONTACTO);
CREATE INDEX IDX_CONTACTOS_PER_ID_CONTACTO ON CONTACTOS_DATOS_PERSONAL (ID_CONTACTO);
CREATE INDEX IDX_CONTACTOS_DIR_ID_CONTACTO ON CONTACTOS_DIRECCIONES (ID_CONTACTO);
CREATE INDEX CONT_APUNTES_IDX1 ON CONT_APUNTES (ID_ASIENTO);
CREATE INDEX CONT_APUNTES_IDX2 ON CONT_APUNTES (ID_SUBCUENTA);
CREATE INDEX CONT_ASIENTOS_IDX1 ON CONT_ASIENTOS (ID_FACTURA);
CREATE INDEX CONT_ASIENTOS_IDX2 ON CONT_ASIENTOS (ID_PAGO);
CREATE INDEX CONT_CUENTAS_IDX1 ON CONT_CUENTAS (ID_BALANCE);
CREATE INDEX CONT_CUENTAS_IDX2 ON CONT_CUENTAS (ID_EPIGRAFE);
CREATE INDEX CONT_SUBCUENTAS_IDX1 ON CONT_SUBCUENTAS (ID_CONTACTO);
CREATE INDEX IDX_EMPRESAS_CONTACTOS ON EMPRESAS_CONTACTOS (ID_EMPRESA, ID_CONTACTO);
CREATE INDEX IDX_EMPRESAS_USUARIOS ON EMPRESAS_USUARIOS (ID_EMPRESA, ID_USUARIO);
CREATE INDEX FACTURAS_CLIENTE_IDX1 ON FACTURAS_CLIENTE (REFERENCIA);
CREATE INDEX IDX_FACTURAS_CLIENTE ON FACTURAS_CLIENTE (ID_FORMA_PAGO);
CREATE INDEX IDX_FACTURAS_CLIENTE1 ON FACTURAS_CLIENTE (ID_TIPO_IVA);
CREATE INDEX IDX_FACTURAS_CLIENTE2 ON FACTURAS_CLIENTE (ID_COMISION_LIQUIDADA);
CREATE INDEX IDX_FACTURAS_CLIENTE3 ON FACTURAS_CLIENTE (ID_CLIENTE);
CREATE INDEX IDX_FACTURAS_CLIENTE_DETALLES1 ON FACTURAS_CLIENTE_DETALLES (ID_FACTURA);
CREATE INDEX IDX_FACTURAS_CLIENTE_DETALLES2 ON FACTURAS_CLIENTE_DETALLES (ID_ARTICULO);
CREATE INDEX IDX_FACTURAS_PROVEEDOR ON FACTURAS_PROVEEDOR (ID_PROVEEDOR);
CREATE INDEX IDX_FACTURAS_PROVEEDOR1 ON FACTURAS_PROVEEDOR (ID_FORMA_PAGO);
CREATE INDEX IDX_FACTURAS_PROVEEDOR2 ON FACTURAS_PROVEEDOR (ID_TIPO_IVA);
CREATE INDEX IDX_FACTURAS_PROVEEDOR_DETALLES ON FACTURAS_PROVEEDOR_DETALLES (ID_ARTICULO);
CREATE INDEX IDX_FORMAS_PAGO_PLAZOS ON FORMAS_PAGO_PLAZOS (ID_FORMA_PAGO);
CREATE INDEX IDX_INFORMES ON INFORMES (ID_EMPRESA);
CREATE INDEX IDX_MOVIMIENTOS ON MOVIMIENTOS (TIPO);
CREATE INDEX IDX_PEDIDOS_CLIENTE ON PEDIDOS_CLIENTE (ID_FORMA_PAGO);
CREATE INDEX IDX_PEDIDOS_CLIENTE_DETALLES ON PEDIDOS_CLIENTE_DETALLES (ID_PEDIDO);
CREATE INDEX IDX_PEDIDOS_CLIENTE_DETALLES1 ON PEDIDOS_CLIENTE_DETALLES (ID_ARTICULO);
CREATE INDEX IDX_PEDIDOS_PROVEEDOR ON PEDIDOS_PROVEEDOR (ID_PEDIDO_CLIENTE);
CREATE INDEX IDX_PEDIDOS_PROVEEDOR1 ON PEDIDOS_PROVEEDOR (ID_ALMACEN);
CREATE INDEX IDX_PEDIDOS_PROVEEDOR2 ON PEDIDOS_PROVEEDOR (ID_FORMA_PAGO);
CREATE INDEX IDX_PEDIDOS_PROVEEDOR_DETALLES ON PEDIDOS_PROVEEDOR_DETALLES (ID_ARTICULO);
CREATE INDEX IDX_PERMISOS ON PERMISOS (ID_USUARIO);
CREATE INDEX IDX_PERMISOSEX ON PERMISOSEX (ID_USUARIO);
CREATE INDEX IDX_PROVEEDORES_DATOS ON PROVEEDORES_DATOS (ID_TIPO_IVA);
CREATE INDEX IDX_PROVEEDORES_DATOS1 ON PROVEEDORES_DATOS (ID_FORMA_PAGO);
CREATE INDEX IDX_RECIBOS_CLIENTE ON RECIBOS_CLIENTE (ID_RECIBO_COMPENSADO);
CREATE INDEX IDX_RECIBOS_PROVEEDOR ON RECIBOS_PROVEEDOR (ID_RECIBO_COMPENSADO);
CREATE INDEX IDX_REFERENCIAS ON REFERENCIAS (ID_EMPRESA);
CREATE INDEX IDX_REFERENCIAS2 ON REFERENCIAS (ID_TIENDA);
CREATE INDEX IDX_REMESAS_CLIENTE ON REMESAS_CLIENTE (ID_DATOS_BANCO);
CREATE INDEX IDX_REMESAS_PROVEEDOR ON REMESAS_PROVEEDOR (ID_DATOS_BANCO);


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


SET TERM ^ ;



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



/* Trigger: AGENTES_COMISIONES_DELETE_REPL */
CREATE OR ALTER TRIGGER AGENTES_COMISIONES_DELETE_REPL FOR AGENTES_COMISIONES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'AGENTES_COMISIONES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='AGENTES_COMISIONES';
  END
END
^


/* Trigger: AGENTES_COMISIONES_INSERT_REPL */
CREATE OR ALTER TRIGGER AGENTES_COMISIONES_INSERT_REPL FOR AGENTES_COMISIONES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'AGENTES_COMISIONES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='AGENTES_COMISIONES';
  END
END
^


/* Trigger: AGENTES_COMISIONES_UPDATE_REPL */
CREATE OR ALTER TRIGGER AGENTES_COMISIONES_UPDATE_REPL FOR AGENTES_COMISIONES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'AGENTES_COMISIONES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='AGENTES_COMISIONES';
  END
END
^


/* Trigger: ALBARANES_CLIENTE_DELETE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_CLIENTE_DELETE_REPL FOR ALBARANES_CLIENTE
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'ALBARANES_CLIENTE','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_CLIENTE';
  END
END
^


/* Trigger: ALBARANES_CLIENTE_INSERT_REPL */
CREATE OR ALTER TRIGGER ALBARANES_CLIENTE_INSERT_REPL FOR ALBARANES_CLIENTE
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_CLIENTE','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_CLIENTE';
  END
END
^


/* Trigger: ALBARANES_CLIENTE_UPDATE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_CLIENTE_UPDATE_REPL FOR ALBARANES_CLIENTE
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_CLIENTE','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_CLIENTE';
  END
END
^


/* Trigger: ALBARANES_CLI_DET_DELETE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_CLI_DET_DELETE_REPL FOR ALBARANES_CLIENTE_DETALLES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'ALBARANES_CLIENTE_DETALLES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_CLIENTE_DETALLES';
  END
END
^


/* Trigger: ALBARANES_CLI_DET_INSERT_REPL */
CREATE OR ALTER TRIGGER ALBARANES_CLI_DET_INSERT_REPL FOR ALBARANES_CLIENTE_DETALLES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_CLIENTE_DETALLES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_CLIENTE_DETALLES';
  END
END
^


/* Trigger: ALBARANES_CLI_DET_UPDATE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_CLI_DET_UPDATE_REPL FOR ALBARANES_CLIENTE_DETALLES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_CLIENTE_DETALLES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_CLIENTE_DETALLES';
  END
END
^


/* Trigger: ALBARANES_PROVEEDOR_DELETE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_PROVEEDOR_DELETE_REPL FOR ALBARANES_PROVEEDOR
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'ALBARANES_PROVEEDOR','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_PROVEEDOR';
  END
END
^


/* Trigger: ALBARANES_PROVEEDOR_INSERT_REPL */
CREATE OR ALTER TRIGGER ALBARANES_PROVEEDOR_INSERT_REPL FOR ALBARANES_PROVEEDOR
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_PROVEEDOR','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_PROVEEDOR';
  END
END
^


/* Trigger: ALBARANES_PROVEEDOR_UPDATE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_PROVEEDOR_UPDATE_REPL FOR ALBARANES_PROVEEDOR
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_PROVEEDOR','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_PROVEEDOR';
  END
END
^


/* Trigger: ALBARANES_PROV_DET_DELETE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_PROV_DET_DELETE_REPL FOR ALBARANES_PROVEEDOR_DETALLES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'ALBARANES_PROVEEDOR_DETALLES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: ALBARANES_PROV_DET_INSERT_REPL */
CREATE OR ALTER TRIGGER ALBARANES_PROV_DET_INSERT_REPL FOR ALBARANES_PROVEEDOR_DETALLES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_PROVEEDOR_DETALLES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: ALBARANES_PROV_DET_UPDATE_REPL */
CREATE OR ALTER TRIGGER ALBARANES_PROV_DET_UPDATE_REPL FOR ALBARANES_PROVEEDOR_DETALLES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALBARANES_PROVEEDOR_DETALLES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALBARANES_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: ALMACENES_DELETE_REPL */
CREATE OR ALTER TRIGGER ALMACENES_DELETE_REPL FOR ALMACENES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'ALMACENES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALMACENES';
  END
END
^


/* Trigger: ALMACENES_INSERT_REPL */
CREATE OR ALTER TRIGGER ALMACENES_INSERT_REPL FOR ALMACENES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALMACENES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALMACENES';
  END
END
^


/* Trigger: ALMACENES_UPDATE_REPL */
CREATE OR ALTER TRIGGER ALMACENES_UPDATE_REPL FOR ALMACENES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ALMACENES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ALMACENES';
  END
END
^


/* Trigger: ARTICULOS_DELETE_REPL */
CREATE OR ALTER TRIGGER ARTICULOS_DELETE_REPL FOR ARTICULOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'ARTICULOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ARTICULOS';
  END
END
^


/* Trigger: ARTICULOS_INSERT_REPL */
CREATE OR ALTER TRIGGER ARTICULOS_INSERT_REPL FOR ARTICULOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ARTICULOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ARTICULOS';
  END
END
^


/* Trigger: ARTICULOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER ARTICULOS_UPDATE_REPL FOR ARTICULOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'ARTICULOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='ARTICULOS';
  END
END
^


/* Trigger: CATEGORIAS_DELETE_REPL */
CREATE OR ALTER TRIGGER CATEGORIAS_DELETE_REPL FOR CATEGORIAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CATEGORIAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CATEGORIAS';
  END
END
^


/* Trigger: CATEGORIAS_INSERT_REPL */
CREATE OR ALTER TRIGGER CATEGORIAS_INSERT_REPL FOR CATEGORIAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CATEGORIAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CATEGORIAS';
  END
END
^


/* Trigger: CATEGORIAS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CATEGORIAS_UPDATE_REPL FOR CATEGORIAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CATEGORIAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CATEGORIAS';
  END
END
^


/* Trigger: CLIENTES_DATOS_DELETE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_DATOS_DELETE_REPL FOR CLIENTES_DATOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID_CLIENTE,'CLIENTES_DATOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_DATOS';
  END
END
^


/* Trigger: CLIENTES_DATOS_INSERT_REPL */
CREATE OR ALTER TRIGGER CLIENTES_DATOS_INSERT_REPL FOR CLIENTES_DATOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID_CLIENTE,'CLIENTES_DATOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_DATOS';
  END
END
^


/* Trigger: CLIENTES_DATOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_DATOS_UPDATE_REPL FOR CLIENTES_DATOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID_CLIENTE,'CLIENTES_DATOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_DATOS';
  END
END
^


/* Trigger: CLIENTES_DTOS_PROV_DELETE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_DTOS_PROV_DELETE_REPL FOR CLIENTES_DTOS_PROVEEDORES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CLIENTES_DTOS_PROVEEDORES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_DTOS_PROVEEDORES';
  END
END
^


/* Trigger: CLIENTES_DTOS_PROV_INSERT_REPL */
CREATE OR ALTER TRIGGER CLIENTES_DTOS_PROV_INSERT_REPL FOR CLIENTES_DTOS_PROVEEDORES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CLIENTES_DTOS_PROVEEDORES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_DTOS_PROVEEDORES';
  END
END
^


/* Trigger: CLIENTES_DTOS_PROV_UPDATE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_DTOS_PROV_UPDATE_REPL FOR CLIENTES_DTOS_PROVEEDORES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CLIENTES_DTOS_PROVEEDORES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_DTOS_PROVEEDORES';
  END
END
^


/* Trigger: CLIENTES_GRUPOS_DELETE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_GRUPOS_DELETE_REPL FOR CLIENTES_GRUPOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CLIENTES_GRUPOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_GRUPOS';
  END
END
^


/* Trigger: CLIENTES_GRUPOS_INSERT_REPL */
CREATE OR ALTER TRIGGER CLIENTES_GRUPOS_INSERT_REPL FOR CLIENTES_GRUPOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CLIENTES_GRUPOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_GRUPOS';
  END
END
^


/* Trigger: CLIENTES_GRUPOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_GRUPOS_UPDATE_REPL FOR CLIENTES_GRUPOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CLIENTES_GRUPOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_GRUPOS';
  END
END
^


/* Trigger: CLIENTES_PROCED_DELETE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_PROCED_DELETE_REPL FOR CLIENTES_PROCEDENCIAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CLIENTES_PROCEDENCIAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_PROCEDENCIAS';
  END
END
^


/* Trigger: CLIENTES_PROCED_INSERT_REPL */
CREATE OR ALTER TRIGGER CLIENTES_PROCED_INSERT_REPL FOR CLIENTES_PROCEDENCIAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CLIENTES_PROCEDENCIAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_PROCEDENCIAS';
  END
END
^


/* Trigger: CLIENTES_PROCED_UPDATE_REPL */
CREATE OR ALTER TRIGGER CLIENTES_PROCED_UPDATE_REPL FOR CLIENTES_PROCEDENCIAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CLIENTES_PROCEDENCIAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CLIENTES_PROCEDENCIAS';
  END
END
^


/* Trigger: COMISIONES_LIQUID_DELETE_REPL */
CREATE OR ALTER TRIGGER COMISIONES_LIQUID_DELETE_REPL FOR COMISIONES_LIQUIDADAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'COMISIONES_LIQUIDADAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='COMISIONES_LIQUIDADAS';
  END
END
^


/* Trigger: COMISIONES_LIQUID_INSERT_REPL */
CREATE OR ALTER TRIGGER COMISIONES_LIQUID_INSERT_REPL FOR COMISIONES_LIQUIDADAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'COMISIONES_LIQUIDADAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='COMISIONES_LIQUIDADAS';
  END
END
^


/* Trigger: COMISIONES_LIQUID_UPDATE_REPL */
CREATE OR ALTER TRIGGER COMISIONES_LIQUID_UPDATE_REPL FOR COMISIONES_LIQUIDADAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'COMISIONES_LIQUIDADAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='COMISIONES_LIQUIDADAS';
  END
END
^


/* Trigger: CONFIGURACION_DELETE_REPL */
CREATE OR ALTER TRIGGER CONFIGURACION_DELETE_REPL FOR CONFIGURACION
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONFIGURACION','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONFIGURACION';
  END
END
^


/* Trigger: CONFIGURACION_INSERT_REPL */
CREATE OR ALTER TRIGGER CONFIGURACION_INSERT_REPL FOR CONFIGURACION
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONFIGURACION','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONFIGURACION';
  END
END
^


/* Trigger: CONFIGURACION_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONFIGURACION_UPDATE_REPL FOR CONFIGURACION
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONFIGURACION','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONFIGURACION';
  END
END
^


/* Trigger: CONTACTOS_CAT_DELETE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_CAT_DELETE_REPL FOR CONTACTOS_CATEGORIAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID_CONTACTO,'CONTACTOS_CATEGORIAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_CATEGORIAS';
  END
END
^


/* Trigger: CONTACTOS_CAT_INSERT_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_CAT_INSERT_REPL FOR CONTACTOS_CATEGORIAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID_CONTACTO,'CONTACTOS_CATEGORIAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_CATEGORIAS';
  END
END
^


/* Trigger: CONTACTOS_CAT_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_CAT_UPDATE_REPL FOR CONTACTOS_CATEGORIAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID_CONTACTO,'CONTACTOS_CATEGORIAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_CATEGORIAS';
  END
END
^


/* Trigger: CONTACTOS_DATOS_PER_DEL_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DATOS_PER_DEL_REPL FOR CONTACTOS_DATOS_PERSONAL
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONTACTOS_DATOS_PERSONAL','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DATOS_PERSONAL';
  END
END
^


/* Trigger: CONTACTOS_DATOS_PER_INS_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DATOS_PER_INS_REPL FOR CONTACTOS_DATOS_PERSONAL
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS_DATOS_PERSONAL','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DATOS_PERSONAL';
  END
END
^


/* Trigger: CONTACTOS_DATOS_PER_UPD_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DATOS_PER_UPD_REPL FOR CONTACTOS_DATOS_PERSONAL
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS_DATOS_PERSONAL','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DATOS_PERSONAL';
  END
END
^


/* Trigger: CONTACTOS_DAT_BAN_DELETE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DAT_BAN_DELETE_REPL FOR CONTACTOS_DATOS_BANCO
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONTACTOS_DATOS_BANCO','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DATOS_BANCO';
  END
END
^


/* Trigger: CONTACTOS_DAT_BAN_INSERT_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DAT_BAN_INSERT_REPL FOR CONTACTOS_DATOS_BANCO
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS_DATOS_BANCO','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DATOS_BANCO';
  END
END
^


/* Trigger: CONTACTOS_DAT_BAN_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DAT_BAN_UPDATE_REPL FOR CONTACTOS_DATOS_BANCO
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS_DATOS_BANCO','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DATOS_BANCO';
  END
END
^


/* Trigger: CONTACTOS_DELETE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DELETE_REPL FOR CONTACTOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONTACTOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS';
  END
END
^


/* Trigger: CONTACTOS_DIR_DELETE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DIR_DELETE_REPL FOR CONTACTOS_DIRECCIONES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONTACTOS_DIRECCIONES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DIRECCIONES';
  END
END
^


/* Trigger: CONTACTOS_DIR_INSERT_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DIR_INSERT_REPL FOR CONTACTOS_DIRECCIONES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS_DIRECCIONES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DIRECCIONES';
  END
END
^


/* Trigger: CONTACTOS_DIR_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_DIR_UPDATE_REPL FOR CONTACTOS_DIRECCIONES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS_DIRECCIONES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS_DIRECCIONES';
  END
END
^


/* Trigger: CONTACTOS_INSERT_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_INSERT_REPL FOR CONTACTOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS';
  END
END
^


/* Trigger: CONTACTOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONTACTOS_UPDATE_REPL FOR CONTACTOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONTACTOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONTACTOS';
  END
END
^


/* Trigger: CONT_APUNTES_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_APUNTES_DELETE_REPL FOR CONT_APUNTES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_APUNTES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_APUNTES';
  END
END
^


/* Trigger: CONT_APUNTES_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_APUNTES_INSERT_REPL FOR CONT_APUNTES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_APUNTES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_APUNTES';
  END
END
^


/* Trigger: CONT_APUNTES_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_APUNTES_UPDATE_REPL FOR CONT_APUNTES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_APUNTES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_APUNTES';
  END
END
^


/* Trigger: CONT_ASIENTOS_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_ASIENTOS_DELETE_REPL FOR CONT_ASIENTOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_ASIENTOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_ASIENTOS';
  END
END
^


/* Trigger: CONT_ASIENTOS_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_ASIENTOS_INSERT_REPL FOR CONT_ASIENTOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_ASIENTOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_ASIENTOS';
  END
END
^


/* Trigger: CONT_ASIENTOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_ASIENTOS_UPDATE_REPL FOR CONT_ASIENTOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_ASIENTOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_ASIENTOS';
  END
END
^


/* Trigger: CONT_BALANCES_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_BALANCES_DELETE_REPL FOR CONT_BALANCES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_BALANCES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_BALANCES';
  END
END
^


/* Trigger: CONT_BALANCES_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_BALANCES_INSERT_REPL FOR CONT_BALANCES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_BALANCES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_BALANCES';
  END
END
^


/* Trigger: CONT_BALANCES_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_BALANCES_UPDATE_REPL FOR CONT_BALANCES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_BALANCES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_BALANCES';
  END
END
^


/* Trigger: CONT_CUENTAS_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_CUENTAS_DELETE_REPL FOR CONT_CUENTAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_CUENTAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_CUENTAS';
  END
END
^


/* Trigger: CONT_CUENTAS_ESP_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_CUENTAS_ESP_DELETE_REPL FOR CONT_CUENTAS_ESPECIALES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_CUENTAS_ESPECIALES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_CUENTAS_ESPECIALES';
  END
END
^


/* Trigger: CONT_CUENTAS_ESP_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_CUENTAS_ESP_INSERT_REPL FOR CONT_CUENTAS_ESPECIALES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_CUENTAS_ESPECIALES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_CUENTAS_ESPECIALES';
  END
END
^


/* Trigger: CONT_CUENTAS_ESP_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_CUENTAS_ESP_UPDATE_REPL FOR CONT_CUENTAS_ESPECIALES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_CUENTAS_ESPECIALES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_CUENTAS_ESPECIALES';
  END
END
^


/* Trigger: CONT_CUENTAS_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_CUENTAS_INSERT_REPL FOR CONT_CUENTAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_CUENTAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_CUENTAS';
  END
END
^


/* Trigger: CONT_CUENTAS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_CUENTAS_UPDATE_REPL FOR CONT_CUENTAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_CUENTAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_CUENTAS';
  END
END
^


/* Trigger: CONT_EJERCICIOS_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_EJERCICIOS_DELETE_REPL FOR CONT_EJERCICIOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_EJERCICIOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_EJERCICIOS';
  END
END
^


/* Trigger: CONT_EJERCICIOS_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_EJERCICIOS_INSERT_REPL FOR CONT_EJERCICIOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_EJERCICIOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_EJERCICIOS';
  END
END
^


/* Trigger: CONT_EJERCICIOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_EJERCICIOS_UPDATE_REPL FOR CONT_EJERCICIOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_EJERCICIOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_EJERCICIOS';
  END
END
^


/* Trigger: CONT_EPIGRAFES_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_EPIGRAFES_DELETE_REPL FOR CONT_EPIGRAFES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_EPIGRAFES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_EPIGRAFES';
  END
END
^


/* Trigger: CONT_EPIGRAFES_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_EPIGRAFES_INSERT_REPL FOR CONT_EPIGRAFES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_EPIGRAFES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_EPIGRAFES';
  END
END
^


/* Trigger: CONT_EPIGRAFES_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_EPIGRAFES_UPDATE_REPL FOR CONT_EPIGRAFES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_EPIGRAFES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_EPIGRAFES';
  END
END
^


/* Trigger: CONT_SUBCUENTAS_DELETE_REPL */
CREATE OR ALTER TRIGGER CONT_SUBCUENTAS_DELETE_REPL FOR CONT_SUBCUENTAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'CONT_SUBCUENTAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_SUBCUENTAS';
  END
END
^


/* Trigger: CONT_SUBCUENTAS_INSERT_REPL */
CREATE OR ALTER TRIGGER CONT_SUBCUENTAS_INSERT_REPL FOR CONT_SUBCUENTAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_SUBCUENTAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_SUBCUENTAS';
  END
END
^


/* Trigger: CONT_SUBCUENTAS_UPDATE_REPL */
CREATE OR ALTER TRIGGER CONT_SUBCUENTAS_UPDATE_REPL FOR CONT_SUBCUENTAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'CONT_SUBCUENTAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='CONT_SUBCUENTAS';
  END
END
^


/* Trigger: EMPRESAS_CONTACTOS_DELETE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_CONTACTOS_DELETE_REPL FOR EMPRESAS_CONTACTOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'EMPRESAS_CONTACTOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_CONTACTOS';
  END
END
^


/* Trigger: EMPRESAS_CONTACTOS_INSERT_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_CONTACTOS_INSERT_REPL FOR EMPRESAS_CONTACTOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_CONTACTOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_CONTACTOS';
  END
END
^


/* Trigger: EMPRESAS_CONTACTOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_CONTACTOS_UPDATE_REPL FOR EMPRESAS_CONTACTOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_CONTACTOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_CONTACTOS';
  END
END
^


/* Trigger: EMPRESAS_DAT_BAN_DELETE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_DAT_BAN_DELETE_REPL FOR EMPRESAS_DATOS_BANCO
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'EMPRESAS_DATOS_BANCO','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_DATOS_BANCO';
  END
END
^


/* Trigger: EMPRESAS_DAT_BAN_INSERT_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_DAT_BAN_INSERT_REPL FOR EMPRESAS_DATOS_BANCO
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_DATOS_BANCO','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_DATOS_BANCO';
  END
END
^


/* Trigger: EMPRESAS_DAT_BAN_UPDATE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_DAT_BAN_UPDATE_REPL FOR EMPRESAS_DATOS_BANCO
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_DATOS_BANCO','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_DATOS_BANCO';
  END
END
^


/* Trigger: EMPRESAS_DELETE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_DELETE_REPL FOR EMPRESAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'EMPRESAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS';
  END
END
^


/* Trigger: EMPRESAS_INSERT_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_INSERT_REPL FOR EMPRESAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS';
  END
END
^


/* Trigger: EMPRESAS_TIENDAS_DELETE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_TIENDAS_DELETE_REPL FOR EMPRESAS_TIENDAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'EMPRESAS_TIENDAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_TIENDAS';
  END
END
^


/* Trigger: EMPRESAS_TIENDAS_INSERT_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_TIENDAS_INSERT_REPL FOR EMPRESAS_TIENDAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_TIENDAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_TIENDAS';
  END
END
^


/* Trigger: EMPRESAS_TIENDAS_UPDATE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_TIENDAS_UPDATE_REPL FOR EMPRESAS_TIENDAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_TIENDAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_TIENDAS';
  END
END
^


/* Trigger: EMPRESAS_UPDATE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_UPDATE_REPL FOR EMPRESAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS';
  END
END
^


/* Trigger: EMPRESAS_USUARIOS_DELETE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_USUARIOS_DELETE_REPL FOR EMPRESAS_USUARIOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'EMPRESAS_USUARIOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_USUARIOS';
  END
END
^


/* Trigger: EMPRESAS_USUARIOS_INSERT_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_USUARIOS_INSERT_REPL FOR EMPRESAS_USUARIOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_USUARIOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_USUARIOS';
  END
END
^


/* Trigger: EMPRESAS_USUARIOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER EMPRESAS_USUARIOS_UPDATE_REPL FOR EMPRESAS_USUARIOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'EMPRESAS_USUARIOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='EMPRESAS_USUARIOS';
  END
END
^


/* Trigger: FACTURAS_CLIENTE_DELETE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_CLIENTE_DELETE_REPL FOR FACTURAS_CLIENTE
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'FACTURAS_CLIENTE','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_CLIENTE';
  END
END
^


/* Trigger: FACTURAS_CLIENTE_INSERT_REPL */
CREATE OR ALTER TRIGGER FACTURAS_CLIENTE_INSERT_REPL FOR FACTURAS_CLIENTE
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_CLIENTE','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_CLIENTE';
  END
END
^


/* Trigger: FACTURAS_CLIENTE_UPDATE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_CLIENTE_UPDATE_REPL FOR FACTURAS_CLIENTE
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_CLIENTE','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_CLIENTE';
  END
END
^


/* Trigger: FACTURAS_CLI_DET_DELETE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_CLI_DET_DELETE_REPL FOR FACTURAS_CLIENTE_DETALLES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'FACTURAS_CLIENTE_DETALLES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_CLIENTE_DETALLES';
  END
END
^


/* Trigger: FACTURAS_CLI_DET_INSERT_REPL */
CREATE OR ALTER TRIGGER FACTURAS_CLI_DET_INSERT_REPL FOR FACTURAS_CLIENTE_DETALLES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_CLIENTE_DETALLES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_CLIENTE_DETALLES';
  END
END
^


/* Trigger: FACTURAS_CLI_DET_UPDATE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_CLI_DET_UPDATE_REPL FOR FACTURAS_CLIENTE_DETALLES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_CLIENTE_DETALLES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_CLIENTE_DETALLES';
  END
END
^


/* Trigger: FACTURAS_PROVEEDOR_DELETE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_PROVEEDOR_DELETE_REPL FOR FACTURAS_PROVEEDOR
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'FACTURAS_PROVEEDOR','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_PROVEEDOR';
  END
END
^


/* Trigger: FACTURAS_PROVEEDOR_INSERT_REPL */
CREATE OR ALTER TRIGGER FACTURAS_PROVEEDOR_INSERT_REPL FOR FACTURAS_PROVEEDOR
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_PROVEEDOR','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_PROVEEDOR';
  END
END
^


/* Trigger: FACTURAS_PROVEEDOR_UPDATE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_PROVEEDOR_UPDATE_REPL FOR FACTURAS_PROVEEDOR
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_PROVEEDOR','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_PROVEEDOR';
  END
END
^


/* Trigger: FACTURAS_PROV_DET_DELETE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_PROV_DET_DELETE_REPL FOR FACTURAS_PROVEEDOR_DETALLES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'FACTURAS_PROVEEDOR_DETALLES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: FACTURAS_PROV_DET_INSERT_REPL */
CREATE OR ALTER TRIGGER FACTURAS_PROV_DET_INSERT_REPL FOR FACTURAS_PROVEEDOR_DETALLES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_PROVEEDOR_DETALLES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: FACTURAS_PROV_DET_UPDATE_REPL */
CREATE OR ALTER TRIGGER FACTURAS_PROV_DET_UPDATE_REPL FOR FACTURAS_PROVEEDOR_DETALLES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FACTURAS_PROVEEDOR_DETALLES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FACTURAS_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: FAMILIAS_DELETE_REPL */
CREATE OR ALTER TRIGGER FAMILIAS_DELETE_REPL FOR FAMILIAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'FAMILIAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FAMILIAS';
  END
END
^


/* Trigger: FAMILIAS_INSERT_REPL */
CREATE OR ALTER TRIGGER FAMILIAS_INSERT_REPL FOR FAMILIAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FAMILIAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FAMILIAS';
  END
END
^


/* Trigger: FAMILIAS_UPDATE_REPL */
CREATE OR ALTER TRIGGER FAMILIAS_UPDATE_REPL FOR FAMILIAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FAMILIAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FAMILIAS';
  END
END
^


/* Trigger: FORMAS_PAGO_DELETE_REPL */
CREATE OR ALTER TRIGGER FORMAS_PAGO_DELETE_REPL FOR FORMAS_PAGO
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'FORMAS_PAGO','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FORMAS_PAGO';
  END
END
^


/* Trigger: FORMAS_PAGO_INSERT_REPL */
CREATE OR ALTER TRIGGER FORMAS_PAGO_INSERT_REPL FOR FORMAS_PAGO
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FORMAS_PAGO','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FORMAS_PAGO';
  END
END
^


/* Trigger: FORMAS_PAGO_PLAZOS_DELETE_REPL */
CREATE OR ALTER TRIGGER FORMAS_PAGO_PLAZOS_DELETE_REPL FOR FORMAS_PAGO_PLAZOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'FORMAS_PAGO_PLAZOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FORMAS_PAGO_PLAZOS';
  END
END
^


/* Trigger: FORMAS_PAGO_PLAZOS_INSERT_REPL */
CREATE OR ALTER TRIGGER FORMAS_PAGO_PLAZOS_INSERT_REPL FOR FORMAS_PAGO_PLAZOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FORMAS_PAGO_PLAZOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FORMAS_PAGO_PLAZOS';
  END
END
^


/* Trigger: FORMAS_PAGO_PLAZOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER FORMAS_PAGO_PLAZOS_UPDATE_REPL FOR FORMAS_PAGO_PLAZOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FORMAS_PAGO_PLAZOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FORMAS_PAGO_PLAZOS';
  END
END
^


/* Trigger: FORMAS_PAGO_UPDATE_REPL */
CREATE OR ALTER TRIGGER FORMAS_PAGO_UPDATE_REPL FOR FORMAS_PAGO
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'FORMAS_PAGO','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='FORMAS_PAGO';
  END
END
^


/* Trigger: INFORMES_DELETE_REPL */
CREATE OR ALTER TRIGGER INFORMES_DELETE_REPL FOR INFORMES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'INFORMES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='INFORMES';
  END
END
^


/* Trigger: INFORMES_INSERT_REPL */
CREATE OR ALTER TRIGGER INFORMES_INSERT_REPL FOR INFORMES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'INFORMES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='INFORMES';
  END
END
^


/* Trigger: INFORMES_UPDATE_REPL */
CREATE OR ALTER TRIGGER INFORMES_UPDATE_REPL FOR INFORMES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'INFORMES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='INFORMES';
  END
END
^


/* Trigger: INSERT_CHANGES */
CREATE OR ALTER TRIGGER INSERT_CHANGES FOR CHANGES
INACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  NEW.CHANGECODE = GEN_ID( GEN_CHANGECODE, 1 );
END
^


/* Trigger: MOVIMIENTOS_DELETE_REPL */
CREATE OR ALTER TRIGGER MOVIMIENTOS_DELETE_REPL FOR MOVIMIENTOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'MOVIMIENTOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='MOVIMIENTOS';
  END
END
^


/* Trigger: MOVIMIENTOS_INSERT_REPL */
CREATE OR ALTER TRIGGER MOVIMIENTOS_INSERT_REPL FOR MOVIMIENTOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'MOVIMIENTOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='MOVIMIENTOS';
  END
END
^


/* Trigger: MOVIMIENTOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER MOVIMIENTOS_UPDATE_REPL FOR MOVIMIENTOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'MOVIMIENTOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='MOVIMIENTOS';
  END
END
^


/* Trigger: PAGOS_CLIENTE_DELETE_REPL */
CREATE OR ALTER TRIGGER PAGOS_CLIENTE_DELETE_REPL FOR PAGOS_CLIENTE
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'PAGOS_CLIENTE','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PAGOS_CLIENTE';
  END
END
^


/* Trigger: PAGOS_CLIENTE_INSERT_REPL */
CREATE OR ALTER TRIGGER PAGOS_CLIENTE_INSERT_REPL FOR PAGOS_CLIENTE
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PAGOS_CLIENTE','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PAGOS_CLIENTE';
  END
END
^


/* Trigger: PAGOS_CLIENTE_UPDATE_REPL */
CREATE OR ALTER TRIGGER PAGOS_CLIENTE_UPDATE_REPL FOR PAGOS_CLIENTE
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PAGOS_CLIENTE','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PAGOS_CLIENTE';
  END
END
^


/* Trigger: PAGOS_PROVEEDOR_DELETE_REPL */
CREATE OR ALTER TRIGGER PAGOS_PROVEEDOR_DELETE_REPL FOR PAGOS_PROVEEDOR
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'PAGOS_PROVEEDOR','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PAGOS_PROVEEDOR';
  END
END
^


/* Trigger: PAGOS_PROVEEDOR_INSERT_REPL */
CREATE OR ALTER TRIGGER PAGOS_PROVEEDOR_INSERT_REPL FOR PAGOS_PROVEEDOR
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PAGOS_PROVEEDOR','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PAGOS_PROVEEDOR';
  END
END
^


/* Trigger: PAGOS_PROVEEDOR_UPDATE_REPL */
CREATE OR ALTER TRIGGER PAGOS_PROVEEDOR_UPDATE_REPL FOR PAGOS_PROVEEDOR
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PAGOS_PROVEEDOR','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PAGOS_PROVEEDOR';
  END
END
^


/* Trigger: PEDIDOS_CLIENTE_DELETE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_CLIENTE_DELETE_REPL FOR PEDIDOS_CLIENTE
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'PEDIDOS_CLIENTE','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_CLIENTE';
  END
END
^


/* Trigger: PEDIDOS_CLIENTE_INSERT_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_CLIENTE_INSERT_REPL FOR PEDIDOS_CLIENTE
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_CLIENTE','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_CLIENTE';
  END
END
^


/* Trigger: PEDIDOS_CLIENTE_UPDATE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_CLIENTE_UPDATE_REPL FOR PEDIDOS_CLIENTE
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_CLIENTE','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_CLIENTE';
  END
END
^


/* Trigger: PEDIDOS_CLI_DET_DELETE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_CLI_DET_DELETE_REPL FOR PEDIDOS_CLIENTE_DETALLES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'PEDIDOS_CLIENTE_DETALLES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_CLIENTE_DETALLES';
  END
END
^


/* Trigger: PEDIDOS_CLI_DET_INSERT_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_CLI_DET_INSERT_REPL FOR PEDIDOS_CLIENTE_DETALLES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_CLIENTE_DETALLES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_CLIENTE_DETALLES';
  END
END
^


/* Trigger: PEDIDOS_CLI_DET_UPDATE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_CLI_DET_UPDATE_REPL FOR PEDIDOS_CLIENTE_DETALLES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_CLIENTE_DETALLES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_CLIENTE_DETALLES';
  END
END
^


/* Trigger: PEDIDOS_PROVEEDOR_DELETE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_PROVEEDOR_DELETE_REPL FOR PEDIDOS_PROVEEDOR
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'PEDIDOS_PROVEEDOR','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_PROVEEDOR';
  END
END
^


/* Trigger: PEDIDOS_PROVEEDOR_INSERT_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_PROVEEDOR_INSERT_REPL FOR PEDIDOS_PROVEEDOR
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_PROVEEDOR','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_PROVEEDOR';
  END
END
^


/* Trigger: PEDIDOS_PROVEEDOR_UPDATE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_PROVEEDOR_UPDATE_REPL FOR PEDIDOS_PROVEEDOR
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_PROVEEDOR','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_PROVEEDOR';
  END
END
^


/* Trigger: PEDIDOS_PROV_DET_DELETE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_PROV_DET_DELETE_REPL FOR PEDIDOS_PROVEEDOR_DETALLES
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'PEDIDOS_PROVEEDOR_DETALLES','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: PEDIDOS_PROV_DET_INSERT_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_PROV_DET_INSERT_REPL FOR PEDIDOS_PROVEEDOR_DETALLES
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_PROVEEDOR_DETALLES','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: PEDIDOS_PROV_DET_UPDATE_REPL */
CREATE OR ALTER TRIGGER PEDIDOS_PROV_DET_UPDATE_REPL FOR PEDIDOS_PROVEEDOR_DETALLES
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PEDIDOS_PROVEEDOR_DETALLES','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PEDIDOS_PROVEEDOR_DETALLES';
  END
END
^


/* Trigger: PROVEEDORES_DATOS_DELETE_REPL */
CREATE OR ALTER TRIGGER PROVEEDORES_DATOS_DELETE_REPL FOR PROVEEDORES_DATOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID_PROVEEDOR,'PROVEEDORES_DATOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PROVEEDORES_DATOS';
  END
END
^


/* Trigger: PROVEEDORES_DATOS_INSERT_REPL */
CREATE OR ALTER TRIGGER PROVEEDORES_DATOS_INSERT_REPL FOR PROVEEDORES_DATOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID_PROVEEDOR,'PROVEEDORES_DATOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PROVEEDORES_DATOS';
  END
END
^


/* Trigger: PROVEEDORES_DATOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER PROVEEDORES_DATOS_UPDATE_REPL FOR PROVEEDORES_DATOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID_PROVEEDOR,'PROVEEDORES_DATOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PROVEEDORES_DATOS';
  END
END
^


/* Trigger: PROVEEDORES_GRUPOS_DELETE_REPL */
CREATE OR ALTER TRIGGER PROVEEDORES_GRUPOS_DELETE_REPL FOR PROVEEDORES_GRUPOS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'PROVEEDORES_GRUPOS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PROVEEDORES_GRUPOS';
  END
END
^


/* Trigger: PROVEEDORES_GRUPOS_INSERT_REPL */
CREATE OR ALTER TRIGGER PROVEEDORES_GRUPOS_INSERT_REPL FOR PROVEEDORES_GRUPOS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PROVEEDORES_GRUPOS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PROVEEDORES_GRUPOS';
  END
END
^


/* Trigger: PROVEEDORES_GRUPOS_UPDATE_REPL */
CREATE OR ALTER TRIGGER PROVEEDORES_GRUPOS_UPDATE_REPL FOR PROVEEDORES_GRUPOS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'PROVEEDORES_GRUPOS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='PROVEEDORES_GRUPOS';
  END
END
^


/* Trigger: RECIBOS_CLIENTE_DELETE_REPL */
CREATE OR ALTER TRIGGER RECIBOS_CLIENTE_DELETE_REPL FOR RECIBOS_CLIENTE
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'RECIBOS_CLIENTE','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='RECIBOS_CLIENTE';
  END
END
^


/* Trigger: RECIBOS_CLIENTE_INSERT_REPL */
CREATE OR ALTER TRIGGER RECIBOS_CLIENTE_INSERT_REPL FOR RECIBOS_CLIENTE
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'RECIBOS_CLIENTE','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='RECIBOS_CLIENTE';
  END
END
^


/* Trigger: RECIBOS_CLIENTE_UPDATE_REPL */
CREATE OR ALTER TRIGGER RECIBOS_CLIENTE_UPDATE_REPL FOR RECIBOS_CLIENTE
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'RECIBOS_CLIENTE','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='RECIBOS_CLIENTE';
  END
END
^


/* Trigger: RECIBOS_PROVEEDOR_DELETE_REPL */
CREATE OR ALTER TRIGGER RECIBOS_PROVEEDOR_DELETE_REPL FOR RECIBOS_PROVEEDOR
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'RECIBOS_PROVEEDOR','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='RECIBOS_PROVEEDOR';
  END
END
^


/* Trigger: RECIBOS_PROVEEDOR_INSERT_REPL */
CREATE OR ALTER TRIGGER RECIBOS_PROVEEDOR_INSERT_REPL FOR RECIBOS_PROVEEDOR
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'RECIBOS_PROVEEDOR','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='RECIBOS_PROVEEDOR';
  END
END
^


/* Trigger: RECIBOS_PROVEEDOR_UPDATE_REPL */
CREATE OR ALTER TRIGGER RECIBOS_PROVEEDOR_UPDATE_REPL FOR RECIBOS_PROVEEDOR
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'RECIBOS_PROVEEDOR','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='RECIBOS_PROVEEDOR';
  END
END
^


/* Trigger: REFERENCIAS_DELETE_REPL */
CREATE OR ALTER TRIGGER REFERENCIAS_DELETE_REPL FOR REFERENCIAS
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'REFERENCIAS','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REFERENCIAS';
  END
END
^


/* Trigger: REFERENCIAS_INSERT_REPL */
CREATE OR ALTER TRIGGER REFERENCIAS_INSERT_REPL FOR REFERENCIAS
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'REFERENCIAS','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REFERENCIAS';
  END
END
^


/* Trigger: REFERENCIAS_UPDATE_REPL */
CREATE OR ALTER TRIGGER REFERENCIAS_UPDATE_REPL FOR REFERENCIAS
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'REFERENCIAS','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REFERENCIAS';
  END
END
^


/* Trigger: REMESAS_CLIENTE_DELETE_REPL */
CREATE OR ALTER TRIGGER REMESAS_CLIENTE_DELETE_REPL FOR REMESAS_CLIENTE
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'REMESAS_CLIENTE','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REMESAS_CLIENTE';
  END
END
^


/* Trigger: REMESAS_CLIENTE_INSERT_REPL */
CREATE OR ALTER TRIGGER REMESAS_CLIENTE_INSERT_REPL FOR REMESAS_CLIENTE
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'REMESAS_CLIENTE','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REMESAS_CLIENTE';
  END
END
^


/* Trigger: REMESAS_CLIENTE_UPDATE_REPL */
CREATE OR ALTER TRIGGER REMESAS_CLIENTE_UPDATE_REPL FOR REMESAS_CLIENTE
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'REMESAS_CLIENTE','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REMESAS_CLIENTE';
  END
END
^


/* Trigger: REMESAS_PROVEEDOR_DELETE_REPL */
CREATE OR ALTER TRIGGER REMESAS_PROVEEDOR_DELETE_REPL FOR REMESAS_PROVEEDOR
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'REMESAS_PROVEEDOR','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REMESAS_PROVEEDOR';
  END
END
^


/* Trigger: REMESAS_PROVEEDOR_INSERT_REPL */
CREATE OR ALTER TRIGGER REMESAS_PROVEEDOR_INSERT_REPL FOR REMESAS_PROVEEDOR
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'REMESAS_PROVEEDOR','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REMESAS_PROVEEDOR';
  END
END
^


/* Trigger: REMESAS_PROVEEDOR_UPDATE_REPL */
CREATE OR ALTER TRIGGER REMESAS_PROVEEDOR_UPDATE_REPL FOR REMESAS_PROVEEDOR
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'REMESAS_PROVEEDOR','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='REMESAS_PROVEEDOR';
  END
END
^


/* Trigger: TIENDA_WEB_DELETE_REPL */
CREATE OR ALTER TRIGGER TIENDA_WEB_DELETE_REPL FOR TIENDA_WEB
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'TIENDA_WEB','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='TIENDA_WEB';
  END
END
^


/* Trigger: TIENDA_WEB_INSERT_REPL */
CREATE OR ALTER TRIGGER TIENDA_WEB_INSERT_REPL FOR TIENDA_WEB
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'TIENDA_WEB','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='TIENDA_WEB';
  END
END
^


/* Trigger: TIENDA_WEB_UPDATE_REPL */
CREATE OR ALTER TRIGGER TIENDA_WEB_UPDATE_REPL FOR TIENDA_WEB
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'TIENDA_WEB','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='TIENDA_WEB';
  END
END
^


/* Trigger: TIPOS_IVA_DELETE_REPL */
CREATE OR ALTER TRIGGER TIPOS_IVA_DELETE_REPL FOR TIPOS_IVA
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'TIPOS_IVA','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='TIPOS_IVA';
  END
END
^


/* Trigger: TIPOS_IVA_INSERT_REPL */
CREATE OR ALTER TRIGGER TIPOS_IVA_INSERT_REPL FOR TIPOS_IVA
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'TIPOS_IVA','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='TIPOS_IVA';
  END
END
^


/* Trigger: TIPOS_IVA_UPDATE_REPL */
CREATE OR ALTER TRIGGER TIPOS_IVA_UPDATE_REPL FOR TIPOS_IVA
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'TIPOS_IVA','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='TIPOS_IVA';
  END
END
^


/* Trigger: UNIDADES_MEDIDA_DELETE_REPL */
CREATE OR ALTER TRIGGER UNIDADES_MEDIDA_DELETE_REPL FOR UNIDADES_MEDIDA
INACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT OLD.ID,'UNIDADES_MEDIDA','D',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='UNIDADES_MEDIDA';
  END
END
^


/* Trigger: UNIDADES_MEDIDA_INSERT_REPL */
CREATE OR ALTER TRIGGER UNIDADES_MEDIDA_INSERT_REPL FOR UNIDADES_MEDIDA
INACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'UNIDADES_MEDIDA','I',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='UNIDADES_MEDIDA';
  END
END
^


/* Trigger: UNIDADES_MEDIDA_UPDATE_REPL */
CREATE OR ALTER TRIGGER UNIDADES_MEDIDA_UPDATE_REPL FOR UNIDADES_MEDIDA
INACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF( USER <> 'REPL' ) THEN
  BEGIN
    INSERT INTO CHANGES(TABLEKEY,TABLENAME,OP,LOC_ID)
      SELECT NEW.ID,'UNIDADES_MEDIDA','U',LOC_ID
      FROM REPL_TABLES WHERE TABLENAME='UNIDADES_MEDIDA';
  END
END
^


SET TERM ; ^



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


SET TERM ^ ;

CREATE OR ALTER PROCEDURE PROC_CIERRE_APERTURA (
    ID_EJERCICIO_CIERRE INTEGER,
    ID_EJERCICIO_APERTURA INTEGER)
AS
declare variable id_subcuenta_apertura integer;
declare variable id_subcuenta_cierre integer;
declare variable ref_subcuenta varchar(255);
declare variable subcuenta varchar(255);
declare variable num_orden integer;
declare variable diferencia numeric(11,2);
declare variable estado_ejercicio_cierre varchar(255);
declare variable estado_ejercicio_apertura varchar(255);
declare variable nombre_ejercicio_cierre varchar(255);
declare variable nombre_ejercicio_apertura varchar(255);
declare variable id_asiento_cierre integer;
declare variable id_asiento_apertura integer;
declare variable id_apunte_apertura integer;
declare variable id_apunte_cierre integer;
begin
  /*Seleccionamos el ejercicio de cierre*/
  select ESTADO, NOMBRE, GEN_ID(gen_cont_asientos_id, 1)
  from cont_ejercicios
  where id = :id_ejercicio_cierre
  into :estado_ejercicio_cierre, :nombre_ejercicio_cierre, :id_asiento_cierre;

  /*Seleccionamos el ejercicio de apertura*/
  select ESTADO, NOMBRE, GEN_ID(gen_cont_asientos_id, 1)
  from cont_ejercicios
  where id = :id_ejercicio_apertura
  into :estado_ejercicio_apertura, :nombre_ejercicio_apertura, :id_asiento_apertura;

  /*Si los ejercicios no estan abiertos no hacemos nada*/
  if ((estado_ejercicio_cierre = 'ABIERTO') and (estado_ejercicio_apertura = 'ABIERTO')) then
  begin
    select COALESCE(max(V_CONT_DIARIO.ORDEN_ASIENTO),0) + 1
    from V_CONT_DIARIO
    into :num_orden;

    /* Añadimos asiento de cierre*/
    insert into CONT_ASIENTOS (ID, FECHA_ASIENTO, ORDEN, TIPO)
    values (:id_asiento_cierre, current_date, :num_orden, 'x');

    num_orden = num_orden + 1;
    /* Añadimos asiento de apertura*/
    insert into CONT_ASIENTOS (ID, FECHA_ASIENTO, ORDEN, TIPO)
    values (:id_asiento_apertura, current_date, :num_orden, 'a');

    num_orden = 1;

    /* Para cada cuenta descuadrada se inserta un apunte de cierre asociado al asiento creado anteriormente*/
    for select ID_SUBCUENTA, REF_SUBCUENTA, SUBCUENTA, SUM(COALESCE(DEBE,0))-SUM(COALESCE(HABER,0)) as DIFERENCIA,
    GEN_ID(gen_cont_apuntes_id, 1), GEN_ID(gen_cont_apuntes_id, 1)
        from v_cont_diario where (ID_EJERCICIO = :ID_EJERCICIO_CIERRE)
        group by 1, 2, 3
        having (SUM(COALESCE(DEBE,0))-SUM(COALESCE(HABER,0))) <> 0
        into :id_subcuenta_cierre, :ref_subcuenta, :subcuenta, :diferencia, :id_apunte_cierre, :id_apunte_apertura do
    begin
      /*Buscamos la subcuenta equibalente en el ejericio de apertura*/
      select ID from cont_subcuentas
      where REF_SUBCUENTA = :ref_subcuenta
      and DESCRIPCION = :subcuenta
      and ID_EJERCICIO = :id_ejercicio_apertura
      into :id_subcuenta_apertura;

      if (diferencia > 0) then
      begin
        /*APUNTE DE CIERRE*/
        insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, HABER)
        values (:id_apunte_cierre, :id_asiento_cierre, :id_subcuenta_cierre, :num_orden, -1, 'Asiento de cierre ' || :nombre_ejercicio_cierre, :diferencia);

        /*APUNTE DE APERTURA*/
        insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DEBE)
        values (:id_apunte_apertura, :id_asiento_apertura, :id_subcuenta_apertura, :num_orden, -1, 'Asiento de apertura ' || :nombre_ejercicio_apertura, :diferencia);
      end
      else
      begin
        /*APUNTE DE CIERRE*/
        insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DEBE)
        values (:id_apunte_cierre, :id_asiento_cierre, :id_subcuenta_cierre, :num_orden, -1, 'Asiento de cierre ' || :nombre_ejercicio_cierre, (:diferencia)*-1);

        /*APUNTE DE APERTURA*/
        insert into CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, HABER)
        values (:id_apunte_apertura, :id_asiento_apertura, :id_subcuenta_apertura, :num_orden, -1, 'Asiento de apertura ' || :nombre_ejercicio_apertura, (:diferencia)*-1);
      end
      num_orden = num_orden + 1;
     end
     
     /*Finalmente cambiamos de estado los ejercicio cerrado*/
     update cont_ejercicios
     set ESTADO = 'CERRADO'
     where id = :id_ejercicio_cierre;
  end

  suspend;
end^


CREATE OR ALTER PROCEDURE PROC_DELETE_ASIENTO_FACTURA (
    IDFACTURA INTEGER,
    TIPO VARCHAR(1))
AS
declare variable idasiento integer;
begin
  SELECT ID FROM CONT_ASIENTOS
  WHERE ID_FACTURA = :IDFACTURA
  AND TIPO = :TIPO
  INTO :IDASIENTO;

  DELETE FROM CONT_APUNTES
  WHERE ID_ASIENTO = :IDASIENTO;

  DELETE FROM CONT_ASIENTOS
  WHERE ID = :IDASIENTO;

  suspend;
end^


CREATE OR ALTER PROCEDURE PROC_DELETE_ASIENTO_PAGO (
    IDPAGO INTEGER,
    TIPO VARCHAR(1))
AS
declare variable idasiento integer;
begin
  SELECT ID FROM CONT_ASIENTOS
  WHERE ID_PAGO = :IDPAGO
  AND TIPO = :TIPO INTO :IDASIENTO;

  DELETE FROM CONT_APUNTES
  WHERE ID_ASIENTO = :IDASIENTO;

  DELETE FROM CONT_ASIENTOS
  WHERE ID = :IDASIENTO;

  suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_FACTURA_CLI (
    IDFACTURA INTEGER,
    ID_SUBCUENTA_VENTA INTEGER)
AS
declare variable ignorarcontabilidad integer;
declare variable referenciafactura varchar(255);
declare variable razon varchar(255);
declare variable fechafactura date;
declare variable baseimponible numeric(11,2);
declare variable idsubcuenta integer;
declare variable idasiento integer;
declare variable idejercicio integer;
declare variable orden integer;
declare variable importetotal numeric(11,2);
declare variable importeiva numeric(11,2);
declare variable importere numeric(11,2);
declare variable idempresa integer;
declare variable idcontacto integer;
begin
  /*BUSCAMOS LA FACTURA DE LA QUE COMPROBAR SI HACER ASIENTO*/
  SELECT FACTURAS_CLIENTE.ID_EMPRESA, FACTURAS_CLIENTE.IGNORAR_CONTABILIDAD, FACTURAS_CLIENTE.REFERENCIA,
  FACTURAS_CLIENTE.ID_CLIENTE, FACTURAS_CLIENTE.NOMBRE, FACTURAS_CLIENTE.FECHA_FACTURA,
  FACTURAS_CLIENTE.BASE_IMPONIBLE, FACTURAS_CLIENTE.IMPORTE_IVA, FACTURAS_CLIENTE.IMPORTE_RE, FACTURAS_CLIENTE.IMPORTE_TOTAL
  FROM FACTURAS_CLIENTE
  WHERE FACTURAS_CLIENTE.ID = :IDFACTURA INTO :IDEMPRESA, :IGNORARCONTABILIDAD, :REFERENCIAFACTURA,
  :IDCONTACTO, :RAZON, :FECHAFACTURA, :BASEIMPONIBLE, :IMPORTEIVA, :IMPORTERE, :IMPORTETOTAL;

  /*BUSCAMOS EL EJERCICIO ACTIVO PARA LA EMPRESA DE LA FACTURA*/
  SELECT ID
  FROM CONT_EJERCICIOS
  WHERE ID_EMPRESA = :IDEMPRESA
  AND ACTIVO = 1
  INTO :IDEJERCICIO;

  /*BUSCAMOS LA SUBCUENTA DEL EJERCICIO ACTIVO DE LA EMPRESA DE LA FACTURA PARA EL CLIENTE DE LA FACTURA*/
  SELECT ID
  FROM CONT_SUBCUENTAS
  WHERE ID_CONTACTO = :IDCONTACTO
  AND ID_EJERCICIO = :IDEJERCICIO
  INTO :IDSUBCUENTA;

  SELECT ID FROM CONT_ASIENTOS
  WHERE ID_FACTURA = :IDFACTURA
  AND TIPO = 'c' INTO :IDASIENTO;

  /*SIEMPRE ELIMIAREMOS LOS APUNTES EXISTENTES DEL ASIENTO PARA VOLVERLOS A GENERAR*/
  DELETE FROM CONT_APUNTES
  WHERE ID_ASIENTO = :IDASIENTO;

  /*EN EL CASO DE QUE SE DESEE IGNORAR LA FACTURA EN CONTABILIDAD BORRAMOS EL ASIENTO Y SE ACABO*/
  if (IGNORARCONTABILIDAD <> 0) then
  BEGIN
     DELETE FROM CONT_ASIENTOS
     WHERE ID = :IDASIENTO;
  END
  /*EN EL DE CONTABILIZAR LA FACTURA COMPROBAMOS SI EXISTE ASIENTO ASOCIADO A LA FACTURA*/
  ELSE
  BEGIN
     /*MODIFICAMOS LOS DATOS DEL ASIENTO*/
     IF (IDASIENTO <> 0) THEN
     BEGIN
       UPDATE CONT_ASIENTOS
       SET FECHA_ASIENTO = :FECHAFACTURA
       WHERE ID = :IDASIENTO;
     END
     /*INSERTAMOS LOS DATOS DEL NUEVO ASIENTO*/
     ELSE
     BEGIN
      SELECT GEN_ID(GEN_CONT_ASIENTOS_ID, 1), COALESCE(max(V_CONT_DIARIO.ORDEN_ASIENTO),0) + 1
      FROM V_CONT_DIARIO
      WHERE V_CONT_DIARIO.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDASIENTO, :ORDEN;

      INSERT INTO CONT_ASIENTOS (ID, FECHA_ASIENTO, ORDEN, ID_FACTURA, TIPO)
      VALUES (:IDASIENTO, :FECHAFACTURA, :ORDEN, :IDFACTURA, 'c');
    END

    IF (IMPORTETOTAL < 0) THEN
    BEGIN
      /*INSERTAMOS LOS APUNTES DEL ABONO*/
      INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
      VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 1, -1, 'Abono de cliente: ' || :RAZON,
      :REFERENCIAFACTURA, NULL, -1*(:IMPORTETOTAL));
    END
    ELSE
    BEGIN
      /*INSERTAMOS LOS APUNTES DE LA FACTURA*/
      INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
      VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 1, -1, 'Factura de cliente: ' || :RAZON,
      :REFERENCIAFACTURA, :IMPORTETOTAL, NULL);
    END

    IF (IMPORTEIVA <> 0) THEN
    BEGIN
      SELECT CONT_SUBCUENTAS.ID FROM CONT_SUBCUENTAS
      LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
      WHERE CONT_CUENTAS.REF_CUENTA = 477
      AND CONT_SUBCUENTAS.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDSUBCUENTA;

      IF (IMPORTETOTAL < 0) THEN
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 2, -1, 'Abono de cliente: ' || :RAZON,
        :REFERENCIAFACTURA || ' (IVA)', -1*(:IMPORTEIVA), NULL);
      END
      ELSE
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 2, -1, 'Factura de cliente: ' || :RAZON,
        :REFERENCIAFACTURA || ' (IVA)', NULL, :IMPORTEIVA);
      END
    END

    IF (IMPORTERE <> 0) THEN
    BEGIN
      SELECT CONT_SUBCUENTAS.ID FROM CONT_SUBCUENTAS
      LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
      WHERE CONT_CUENTAS.REF_CUENTA = 475
      AND CONT_SUBCUENTAS.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDSUBCUENTA;

      IF (IMPORTETOTAL < 0) THEN
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 3, -1, 'Abono de cliente: ' || :RAZON,
        :REFERENCIAFACTURA || ' (RE)', -1*(:IMPORTERE), NULL);
      END
      ELSE
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 3, -1, 'Factura de cliente: ' || :RAZON,
        :REFERENCIAFACTURA || ' (RE)', NULL, :IMPORTERE);
      END
    END

    IF (BASEIMPONIBLE <> 0) THEN
    BEGIN
      IF (IMPORTETOTAL < 0) THEN
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :ID_SUBCUENTA_VENTA, 4, -1, 'Abono de cliente: ' || :RAZON,
        :REFERENCIAFACTURA || ' (Base imponible)', -1*(:BASEIMPONIBLE), NULL);
      END
      ELSE
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :ID_SUBCUENTA_VENTA, 4, -1, 'Factura de cliente: ' || :RAZON,
        :REFERENCIAFACTURA || ' (Base imponible)', NULL, :BASEIMPONIBLE);
      END
    END
   END
 suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_FACTURA_PROV (
    IDFACTURA INTEGER,
    ID_SUBCUENTA_COMPRA INTEGER)
AS
declare variable ignorarcontabilidad integer;
declare variable referenciafactura varchar(255);
declare variable razon varchar(255);
declare variable fechafactura date;
declare variable baseimponible numeric(11,2);
declare variable idsubcuenta integer;
declare variable idasiento integer;
declare variable idejercicio integer;
declare variable orden integer;
declare variable importetotal numeric(11,2);
declare variable importeiva numeric(11,2);
declare variable importere numeric(11,2);
declare variable idempresa integer;
declare variable idcontacto integer;
begin
  /*BUSCAMOS LA FACTURA DE LA QUE COMPROBAR SI HACER ASIENTO*/
  SELECT FACTURAS_PROVEEDOR.ID_EMPRESA, FACTURAS_PROVEEDOR.IGNORAR_CONTABILIDAD,
  FACTURAS_PROVEEDOR.REFERENCIA, FACTURAS_PROVEEDOR.ID_PROVEEDOR, FACTURAS_PROVEEDOR.NOMBRE, FACTURAS_PROVEEDOR.FECHA_FACTURA,
  FACTURAS_PROVEEDOR.BASE_IMPONIBLE, FACTURAS_PROVEEDOR.IMPORTE_IVA, FACTURAS_PROVEEDOR.IMPORTE_RE, FACTURAS_PROVEEDOR.IMPORTE_TOTAL
  FROM FACTURAS_PROVEEDOR
  WHERE FACTURAS_PROVEEDOR.ID = :IDFACTURA INTO :IDEMPRESA, :IGNORARCONTABILIDAD, :REFERENCIAFACTURA,
  :IDCONTACTO, :RAZON, :FECHAFACTURA, :BASEIMPONIBLE, :IMPORTEIVA, :IMPORTERE, :IMPORTETOTAL;

  /*BUSCAMOS EL EJERCICIO ACTIVO PARA LA EMPRESA DE LA FACTURA*/
  SELECT ID
  FROM CONT_EJERCICIOS
  WHERE ID_EMPRESA = :IDEMPRESA
  AND ACTIVO = 1
  INTO :IDEJERCICIO;

  /*BUSCAMOS LA SUBCUENTA DEL EJERCICIO ACTIVO DE LA EMPRESA DE LA FACTURA PARA EL CLIENTE DE LA FACTURA*/
  SELECT ID
  FROM CONT_SUBCUENTAS
  WHERE ID_CONTACTO = :IDCONTACTO
  AND ID_EJERCICIO = :IDEJERCICIO
  INTO :IDSUBCUENTA;

  SELECT ID FROM CONT_ASIENTOS
  WHERE ID_FACTURA = :IDFACTURA
  AND TIPO = 'p' INTO :IDASIENTO;

  /*SIEMPRE ELIMIAREMOS LOS APUNTES EXISTENTES DEL ASIENTO PARA VOLVERLOS A GENERAR*/
  DELETE FROM CONT_APUNTES
  WHERE ID_ASIENTO = :IDASIENTO;

  /*EN EL CASO DE QUE SE DESEE IGNORAR LA FACTURA EN CONTABILIDAD BORRAMOS EL ASIENTO Y SE ACABO*/
  if (IGNORARCONTABILIDAD <> 0) then
  BEGIN
     DELETE FROM CONT_ASIENTOS
     WHERE ID = :IDASIENTO;
  END
  /*EN EL DE CONTABILIZAR LA FACTURA COMPROBAMOS SI EXISTE ASIENTO ASOCIADO A LA FACTURA*/
  ELSE
  BEGIN
     /*MODIFICAMOS LOS DATOS DEL ASIENTO*/
     IF (IDASIENTO <> 0) THEN
     BEGIN
       UPDATE CONT_ASIENTOS
       SET FECHA_ASIENTO = :FECHAFACTURA
       WHERE ID = :IDASIENTO;
     END
     /*INSERTAMOS LOS DATOS DEL NUEVO ASIENTO*/
     ELSE
     BEGIN
      SELECT GEN_ID(GEN_CONT_ASIENTOS_ID, 1), COALESCE(max(V_CONT_DIARIO.ORDEN_ASIENTO),0) + 1
      FROM V_CONT_DIARIO
      WHERE V_CONT_DIARIO.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDASIENTO, :ORDEN;

      INSERT INTO CONT_ASIENTOS (ID, FECHA_ASIENTO, ORDEN, ID_FACTURA, TIPO)
      VALUES (:IDASIENTO, :FECHAFACTURA, :ORDEN, :IDFACTURA, 'p');
    END

    IF (IMPORTETOTAL < 0) THEN
    BEGIN
      /*INSERTAMOS LOS APUNTES DEL ABONO*/
      INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
      VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 1, -1, 'Abono de proveedor: ' || :RAZON,
      :REFERENCIAFACTURA, -1*(:IMPORTETOTAL), NULL);
    END
    ELSE
    BEGIN
      /*INSERTAMOS LOS APUNTES DE LA FACTURA*/
      INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
      VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 1, -1, 'Factura de proveedor: ' || :RAZON,
      :REFERENCIAFACTURA, NULL, :IMPORTETOTAL);
    END

    IF (IMPORTEIVA <> 0) THEN
    BEGIN
      SELECT CONT_SUBCUENTAS.ID FROM CONT_SUBCUENTAS
      LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
      WHERE CONT_CUENTAS.REF_CUENTA = 472
      AND CONT_SUBCUENTAS.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDSUBCUENTA;

      IF (IMPORTETOTAL < 0) THEN
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 2, -1, 'Abono de proveedor: ' || :RAZON,
        :REFERENCIAFACTURA || ' (IVA)', NULL, -1*(:IMPORTEIVA));
      END
      ELSE
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 2, -1, 'Factura de proveedor: ' || :RAZON,
        :REFERENCIAFACTURA || ' (IVA)', :IMPORTEIVA, NULL);
      END
    END

    IF (IMPORTERE <> 0) THEN
    BEGIN
      SELECT CONT_SUBCUENTAS.ID FROM CONT_SUBCUENTAS
      LEFT JOIN CONT_CUENTAS ON (CONT_CUENTAS.ID = CONT_SUBCUENTAS.ID_CUENTA)
      WHERE CONT_CUENTAS.REF_CUENTA = 470
      AND CONT_SUBCUENTAS.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDSUBCUENTA;

      IF (IMPORTETOTAL < 0) THEN
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 3, -1, 'Abono de proveedor: ' || :RAZON,
        :REFERENCIAFACTURA || ' (RE)', NULL, -1*(:IMPORTERE));
      END
      ELSE
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 3, -1, 'Factura de proveedor: ' || :RAZON,
        :REFERENCIAFACTURA || ' (RE)', :IMPORTERE, NULL);
      END
    END

    IF (BASEIMPONIBLE <> 0) THEN
    BEGIN
      IF (IMPORTETOTAL < 0) THEN
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :ID_SUBCUENTA_COMPRA, 4, -1, 'Abono de proveedor: ' || :RAZON,
        :REFERENCIAFACTURA || ' (Base imponible)', NULL, -1*(:BASEIMPONIBLE));
      END
      ELSE
      BEGIN
        INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
        VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :ID_SUBCUENTA_COMPRA, 4, -1, 'Factura de proveedor: ' || :RAZON,
        :REFERENCIAFACTURA || ' (Base imponible)', :BASEIMPONIBLE, NULL);
      END
    END
   END
 suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_PAGO_CLI (
    IDPAGO INTEGER,
    IDSUBCUENTAPAGO INTEGER)
AS
declare variable ignorarcontabilidad integer;
declare variable referenciarecibo varchar(255);
declare variable fechapago date;
declare variable tipopago varchar(255);
declare variable importe numeric(11,2);
declare variable idsubcuenta integer;
declare variable idasiento integer;
declare variable idejercicio integer;
declare variable orden integer;
declare variable debe numeric(11,2);
declare variable haber numeric(11,2);
declare variable idempresa integer;
declare variable idcontacto integer;
declare variable concepto varchar(2000);
begin
  /*BUSCAMOS EL PAGO PARA COMPROBAR SI HACER ASIENTO*/
  SELECT PAGOS_CLIENTE.IGNORAR_CONTABILIDAD, RECIBOS_CLIENTE.ID_EMPRESA, RECIBOS_CLIENTE.ID_CLIENTE,
  RECIBOS_CLIENTE.REFERENCIA || ': ' || RECIBOS_CLIENTE.NOMBRE,
  PAGOS_CLIENTE.FECHA_PAGO, PAGOS_CLIENTE.TIPO,
  PAGOS_CLIENTE.TIPO || ': ' || COALESCE(RECIBOS_CLIENTE.DESCRIPCION, 'No hay descripción'),
  RECIBOS_CLIENTE.IMPORTE
  FROM PAGOS_CLIENTE
  LEFT JOIN RECIBOS_CLIENTE ON (RECIBOS_CLIENTE.ID = PAGOS_CLIENTE.ID_RECIBO)
  WHERE PAGOS_CLIENTE.ID = :IDPAGO
  INTO :IGNORARCONTABILIDAD, :IDEMPRESA, :IDCONTACTO, :REFERENCIARECIBO, :FECHAPAGO, :TIPOPAGO, :CONCEPTO, :IMPORTE;

  /*BUSCAMOS EL EJERCICIO ACTIVO PARA LA EMPRESA DE LA FACTURA*/
  SELECT ID
  FROM CONT_EJERCICIOS
  WHERE ID_EMPRESA = :IDEMPRESA
  AND ACTIVO = 1
  INTO :IDEJERCICIO;

  /*BUSCAMOS LA SUBCUENTA DEL EJERCICIO ACTIVO DE LA EMPRESA DE LA FACTURA PARA EL CLIENTE DE LA FACTURA*/
  SELECT ID
  FROM CONT_SUBCUENTAS
  WHERE ID_CONTACTO = :IDCONTACTO
  AND ID_EJERCICIO = :IDEJERCICIO
  INTO :IDSUBCUENTA;


  SELECT ID FROM CONT_ASIENTOS
  WHERE ID_PAGO = :IDPAGO
  AND TIPO = 'c' INTO :IDASIENTO;

  /*SIEMPRE ELIMIAREMOS LOS APUNTES EXISTENTES DEL ASIENTO PARA VOLVERLOS A GENERAR*/
  DELETE FROM CONT_APUNTES
  WHERE ID_ASIENTO = :IDASIENTO;

  /*EN EL CASO DE QUE SE DESEE IGNORAR EL PAGO EN CONTABILIDAD BORRAMOS EL ASIENTO Y SE ACABO*/
  if (IGNORARCONTABILIDAD <> 0) then
  BEGIN
     DELETE FROM CONT_ASIENTOS
     WHERE ID = :IDASIENTO;
  END
  /*EN EL DE CONTABILIZAR EL PAGO COMPROBAMOS SI EXISTE ASIENTO ASOCIADO AL PAGO*/
  ELSE
  BEGIN
     /*MODIFICAMOS LOS DATOS DEL ASIENTO*/
     IF (IDASIENTO <> 0) THEN
     BEGIN
       UPDATE CONT_ASIENTOS
       SET FECHA_ASIENTO = :FECHAPAGO
       WHERE ID = :IDASIENTO;
     END
     /*INSERTAMOS LOS DATOS DEL NUEVO ASIENTO*/
     ELSE
     BEGIN
      SELECT GEN_ID(GEN_CONT_ASIENTOS_ID, 1), COALESCE(max(V_CONT_DIARIO.ORDEN_ASIENTO),0) + 1
      FROM V_CONT_DIARIO
      WHERE V_CONT_DIARIO.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDASIENTO, :ORDEN;

      INSERT INTO CONT_ASIENTOS (ID, FECHA_ASIENTO, ORDEN, ID_PAGO, TIPO)
      VALUES (:IDASIENTO, :FECHAPAGO, :ORDEN, :IDPAGO, 'c');
    END

    /*INSERTAMOS LOS APUNTES*/
    if (TIPOPAGO = 'Pago') then
    begin
      DEBE = NULL;
      HABER = :IMPORTE;
    end
    else
    begin
      DEBE = :IMPORTE;
      HABER = NULL;
    end

    INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
    VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 1, -1, :CONCEPTO,
    :REFERENCIARECIBO, :DEBE, :HABER);

    INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
    VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTAPAGO, 2, -1, :CONCEPTO,
    :REFERENCIARECIBO, :HABER, :DEBE);

   END
 suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_ASIENTO_PAGO_PROV (
    IDPAGO INTEGER,
    IDSUBCUENTAPAGO INTEGER)
AS
declare variable ignorarcontabilidad integer;
declare variable referenciarecibo varchar(255);
declare variable fechapago date;
declare variable tipopago varchar(255);
declare variable importe numeric(11,2);
declare variable idsubcuenta integer;
declare variable idasiento integer;
declare variable idejercicio integer;
declare variable orden integer;
declare variable debe numeric(11,2);
declare variable haber numeric(11,2);
declare variable idempresa integer;
declare variable idcontacto integer;
declare variable concepto varchar(2000);
begin
  /*BUSCAMOS EL PAGO PARA COMPROBAR SI HACER ASIENTO*/
  SELECT PAGOS_PROVEEDOR.IGNORAR_CONTABILIDAD, RECIBOS_PROVEEDOR.ID_EMPRESA, RECIBOS_PROVEEDOR.ID_PROVEEDOR,
  RECIBOS_PROVEEDOR.REFERENCIA || ': ' || RECIBOS_PROVEEDOR.NOMBRE,
  PAGOS_PROVEEDOR.FECHA_PAGO, PAGOS_PROVEEDOR.TIPO,
  PAGOS_PROVEEDOR.TIPO || ': ' || COALESCE(RECIBOS_PROVEEDOR.DESCRIPCION, 'No hay descripción'),
  RECIBOS_PROVEEDOR.IMPORTE
  FROM PAGOS_PROVEEDOR
  LEFT JOIN RECIBOS_PROVEEDOR ON (RECIBOS_PROVEEDOR.ID = PAGOS_PROVEEDOR.ID_RECIBO)
  WHERE PAGOS_PROVEEDOR.ID = :IDPAGO
  INTO :IGNORARCONTABILIDAD, :IDEMPRESA, :IDCONTACTO, :REFERENCIARECIBO, :FECHAPAGO, :TIPOPAGO, :CONCEPTO, :IMPORTE;

  /*BUSCAMOS EL EJERCICIO ACTIVO PARA LA EMPRESA DE LA FACTURA*/
  SELECT ID
  FROM CONT_EJERCICIOS
  WHERE ID_EMPRESA = :IDEMPRESA
  AND ACTIVO = 1
  INTO :IDEJERCICIO;

  /*BUSCAMOS LA SUBCUENTA DEL EJERCICIO ACTIVO DE LA EMPRESA DE LA FACTURA PARA EL CLIENTE DE LA FACTURA*/
  SELECT ID
  FROM CONT_SUBCUENTAS
  WHERE ID_CONTACTO = :IDCONTACTO
  AND ID_EJERCICIO = :IDEJERCICIO
  INTO :IDSUBCUENTA;

  SELECT ID FROM CONT_ASIENTOS
  WHERE ID_PAGO = :IDPAGO
  AND TIPO = 'p' INTO :IDASIENTO;

  /*SIEMPRE ELIMIAREMOS LOS APUNTES EXISTENTES DEL ASIENTO PARA VOLVERLOS A GENERAR*/
  DELETE FROM CONT_APUNTES
  WHERE ID_ASIENTO = :IDASIENTO;

  /*EN EL CASO DE QUE SE DESEE IGNORAR EL PAGO EN CONTABILIDAD BORRAMOS EL ASIENTO Y SE ACABO*/
  if (IGNORARCONTABILIDAD <> 0) then
  BEGIN
     DELETE FROM CONT_ASIENTOS
     WHERE ID = :IDASIENTO;
  END
  /*EN EL DE CONTABILIZAR EL PAGO COMPROBAMOS SI EXISTE ASIENTO ASOCIADO AL PAGO*/
  ELSE
  BEGIN
     /*MODIFICAMOS LOS DATOS DEL ASIENTO*/
     IF (IDASIENTO <> 0) THEN
     BEGIN
       UPDATE CONT_ASIENTOS
       SET FECHA_ASIENTO = :FECHAPAGO
       WHERE ID = :IDASIENTO;
     END
     /*INSERTAMOS LOS DATOS DEL NUEVO ASIENTO*/
     ELSE
     BEGIN
      SELECT GEN_ID(GEN_CONT_ASIENTOS_ID, 1), COALESCE(max(V_CONT_DIARIO.ORDEN_ASIENTO),0) + 1
      FROM V_CONT_DIARIO
      WHERE V_CONT_DIARIO.ID_EJERCICIO = :IDEJERCICIO
      INTO :IDASIENTO, :ORDEN;

      INSERT INTO CONT_ASIENTOS (ID, FECHA_ASIENTO, ORDEN, ID_PAGO, TIPO)
      VALUES (:IDASIENTO, :FECHAPAGO, :ORDEN, :IDPAGO, 'p');
    END

/*INSERTAMOS LOS APUNTES*/
    if (TIPOPAGO = 'Pago') then
    begin
      DEBE = :IMPORTE;
      HABER = NULL;
    end
    else
    begin
      DEBE = NULL;
      HABER = :IMPORTE;
    end

    INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
    VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTA, 1, -1, :CONCEPTO,
    :REFERENCIARECIBO, :DEBE, :HABER);

    INSERT INTO CONT_APUNTES (ID, ID_ASIENTO, ID_SUBCUENTA, NUM_ORDEN, PUNTEADO, CONCEPTO, DOCUMENTO, DEBE, HABER)
    VALUES (GEN_ID(GEN_CONT_APUNTES_ID, 1), :IDASIENTO, :IDSUBCUENTAPAGO, 2, -1, :CONCEPTO,
    :REFERENCIARECIBO, :HABER, :DEBE);

   END
 suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_CUENTAS (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER,
    ID_EPIGRAFE_COPIA INTEGER,
    ID_EPIGRAFE INTEGER)
AS
declare variable id_cuenta_especial integer;
declare variable id_balance integer;
declare variable id_cuenta integer;
declare variable id_cuenta_copia integer;
declare variable descripcion varchar(255);
declare variable ref_cuenta varchar(10);
begin
  if (id_ejercicio_copia = 0) then
  begin
     for select GEN_ID(gen_cont_cuentas_id, 1), ID, REF_CUENTA, DESCRIPCION, ID_BALANCE, ID_CUENTA_ESPECIAL
     from CONT_CUENTAS where (ID_EJERCICIO IS NULL) and (ID_EPIGRAFE = :id_epigrafe_copia)
     order by ID
     into :id_cuenta, :id_cuenta_copia, :ref_cuenta, :descripcion, :id_balance, :id_cuenta_especial do
     begin
       insert into CONT_CUENTAS (ID, REF_CUENTA, DESCRIPCION, ID_BALANCE, ID_CUENTA_ESPECIAL, ID_EJERCICIO, ID_EPIGRAFE)
       values (:id_cuenta, :ref_cuenta, :descripcion, :id_balance, :id_cuenta_especial, :id_ejercicio, :id_epigrafe);

       /*INSERTAR SUBCUENTAS*/
       execute procedure proc_new_subcuentas :id_ejercicio_copia, :id_ejercicio, :id_cuenta_copia, :id_cuenta;
     end
  end
  else
  begin
     for select GEN_ID(gen_cont_cuentas_id, 1), ID, REF_CUENTA, DESCRIPCION, ID_BALANCE, ID_CUENTA_ESPECIAL
     from CONT_CUENTAS where (ID_EJERCICIO = :id_ejercicio_copia) and (ID_EPIGRAFE = :id_epigrafe_copia)
     order by ID
     into :id_cuenta, :id_cuenta_copia, :ref_cuenta, :descripcion, :id_balance, :id_cuenta_especial do
     begin
       insert into CONT_CUENTAS (ID, REF_CUENTA, DESCRIPCION, ID_BALANCE, ID_CUENTA_ESPECIAL, ID_EJERCICIO, ID_EPIGRAFE)
       values (:id_cuenta, :ref_cuenta, :descripcion, :id_balance, :id_cuenta_especial, :id_ejercicio, :id_epigrafe);

       /*INSERTAR SUBCUENTAS*/
       execute procedure proc_new_subcuentas :id_ejercicio_copia, :id_ejercicio, :id_cuenta_copia, :id_cuenta;
     end
  end
  suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_EPIGRAFES (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER,
    ID_EPIGRAFE_COPIA INTEGER,
    ID_EPIGRAFE INTEGER,
    ID_PADRE INTEGER,
    REF_EPIGRAFE VARCHAR(6),
    DESCRIPCION VARCHAR(255))
AS
begin
  insert into CONT_EPIGRAFES (ID, REF_EPIGRAFE, DESCRIPCION, ID_EJERCICIO)
  values (:id_epigrafe, :ref_epigrafe, :descripcion, :id_ejercicio);

  /*MIRAMOS EL NUEVO ID CORREPONDIENTE AL PADRE*/
  if (id_padre <> 0) then
  begin
    select REF_EPIGRAFE from cont_epigrafes
    where (ID = :id_padre)
    into :ref_epigrafe;

    select ID
    from cont_epigrafes
    where (REF_EPIGRAFE = :ref_epigrafe and ID_EJERCICIO = :ID_ejercicio)
    into :id_padre;
  end

  /*ASIGNAMOS EL ID DEL PADRE*/
  update cont_epigrafes
  set ID_PADRE = :id_padre
  where (ID = :id_epigrafe);

  /*INSERTAR CUENTAS*/
  execute procedure proc_new_cuentas :id_ejercicio_copia, :id_ejercicio, :id_epigrafe_copia, :id_epigrafe;

  suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_PGC (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER)
RETURNS (
    RESULTADO INTEGER)
AS
declare variable id_epigrafe_copia integer;
declare variable ref_epigrafe varchar(6);
declare variable swhere integer;
declare variable descripcion varchar(255);
declare variable id_padre integer;
declare variable id_epigrafe integer;
declare variable id_ejercicio_acopiar integer;
begin
  select ID
  from CONT_EJERCICIOS
  WHERE ID = :id_ejercicio_copia
  into :id_ejercicio_acopiar;

  /* SI EL EJERCICIO DE COPIA NO EXISTE COPIAMOS EL PGC BASICO*/
  if (id_ejercicio_acopiar is null) then
  begin
     for select GEN_ID(gen_cont_epigrafes_id, 1), ID, REF_EPIGRAFE, DESCRIPCION, ID_PADRE
     from CONT_EPIGRAFES where (ID_EJERCICIO IS NULL)
     order by ID, ID_PADRE
     into :id_epigrafe, :id_epigrafe_copia, :ref_epigrafe, :descripcion, :id_padre do
     begin
       /*INSERTAR EPIGRAFES*/
       execute procedure proc_new_epigrafes :id_ejercicio_copia, :id_ejercicio, :id_epigrafe_copia, :id_epigrafe, :id_padre, :ref_epigrafe, :descripcion;
     end
  end
  /* SI EL EJERCICIO DE COPIA EXISTE COPIAMOS EL PGC DEL EJERCICIO*/
  else
  begin
     for select GEN_ID(gen_cont_epigrafes_id, 1), ID, REF_EPIGRAFE, DESCRIPCION, ID_PADRE
     from CONT_EPIGRAFES where (ID_EJERCICIO = :id_ejercicio_copia)
     order by ID, ID_PADRE
     into :id_epigrafe, :id_epigrafe_copia, :ref_epigrafe, :descripcion, :id_padre do
     begin
       /*INSERTAR EPIGRAFES*/
       execute procedure proc_new_epigrafes :id_ejercicio_copia, :id_ejercicio, :id_epigrafe_copia, :id_epigrafe, :id_padre, :ref_epigrafe, :descripcion;
     end
  end
  suspend;
end^


CREATE OR ALTER PROCEDURE PROC_NEW_SUBCUENTAS (
    ID_EJERCICIO_COPIA INTEGER,
    ID_EJERCICIO INTEGER,
    ID_CUENTA_COPIA INTEGER,
    ID_CUENTA INTEGER)
AS
declare variable descripcion varchar(255);
declare variable ref_subcuenta varchar(15);
declare variable id_subcuenta integer;
declare variable id_contacto integer;
begin
  if (id_ejercicio_copia = 0) then
  begin
     for select GEN_ID(gen_cont_subcuentas_id, 1), REF_SUBCUENTA, DESCRIPCION
     from CONT_SUBCUENTAS
     where (ID_EJERCICIO IS NULL) and (ID_CUENTA = :id_cuenta_copia)
     order by ID
     into :id_subcuenta, :ref_subcuenta, :descripcion do
     begin
       insert into CONT_SUBCUENTAS (ID, REF_SUBCUENTA, DESCRIPCION, ID_EJERCICIO, ID_CUENTA)
       values (:id_subcuenta, :ref_subcuenta, :descripcion, :id_ejercicio, :id_cuenta);
     end
  end
  else
  begin
     for select GEN_ID(gen_cont_subcuentas_id, 1), REF_SUBCUENTA, DESCRIPCION, ID_CONTACTO
     from CONT_SUBCUENTAS
     where (ID_EJERCICIO = :id_ejercicio_copia) and (ID_CUENTA = :id_cuenta_copia)
     order by ID
     into :id_subcuenta, :ref_subcuenta, :descripcion, :id_contacto do
     begin
       insert into CONT_SUBCUENTAS (ID, REF_SUBCUENTA, DESCRIPCION, ID_EJERCICIO, ID_CUENTA, ID_CONTACTO)
       values (:id_subcuenta, :ref_subcuenta, :descripcion, :id_ejercicio, :id_cuenta, :id_contacto);
     end
  end
  suspend;
end^


CREATE OR ALTER PROCEDURE PROC_PRE_CON_CAPITULOS (
    AID INTEGER,
    TIPO VARCHAR(15))
RETURNS (
    ID INTEGER,
    ID_PRE_CON INTEGER,
    POSICION INTEGER,
    TIPO_DETALLE VARCHAR(25),
    CONCEPTO VARCHAR(2000),
    IMPORTE_TOTAL NUMERIC(11,4),
    VISIBLE SMALLINT,
    TIPO_ARTICULO VARCHAR(2),
    DESCUENTO FLOAT,
    IMPORTE_DESCUENTO NUMERIC(11,4))
AS
declare variable num_filas integer;
declare variable contador integer;
declare variable id_aux integer;
declare variable id_aux_temp integer;
declare variable total_acumulado numeric(11,2);
declare variable posicion_aux integer;
declare variable posicion_aux_temp integer;
declare variable ultimo_tipo_detalle varchar(25);
declare variable tipo_detalle_aux varchar(25);
declare variable tipo_detalle_aux_temp varchar(25);
declare variable concepto_aux varchar(2000);
declare variable concepto_aux_temp varchar(2000);
declare variable tipo_articulo_aux varchar(2);
declare variable tipo_articulo_aux_temp varchar(2);
declare variable importe_descuento_aux numeric(11,2);
declare variable descuento_aux float;
declare variable importe_aux numeric(11,2);
begin
    total_acumulado = 0.0;
    importe_descuento_aux = 0.0;
    descuento_aux = 0.0;
    contador = 0;
    num_filas = 0;

    ID_AUX = -1;
    posicion_aux = -1;
    concepto_aux = 'General';
    tipo_detalle_aux = 'Titulo';
    tipo_articulo_aux = 'NA';

    if (TIPO = 'Presupuesto') then
    begin
      /* żExiste el presupuesto? */
      for select count(*)
          from presupuestos_cliente_detalles
          where id_presupuesto = :AID
          into :num_filas
      do
      begin
        if (num_filas = 0) then
           suspend;
      end
    end
    else if (TIPO = 'Contrato') then
    begin
      /* żExiste el contrato? */
      for select count(*)
          from contratos_cliente_detalles
          where id_contrato = :AID
          into :num_filas
      do
      begin
        if (num_filas = 0) then
           suspend;
      end
    end


    if (TIPO = 'Presupuesto') then
    begin
      for select id, id_presupuesto, posicion, tipo_detalle, tipo_articulo, F_RTFTOTEXT(concepto) as concepto,
          coalesce(descuento,0), coalesce(importe_total,0), coalesce(visible, 1)
      from presupuestos_cliente_detalles
      where id_presupuesto = :AID
      order by id_presupuesto, posicion
      into :ID, :ID_PRE_CON, :POSICION, :TIPO_DETALLE, :TIPO_ARTICULO, :CONCEPTO,
           :DESCUENTO, :IMPORTE_TOTAL, :VISIBLE
      do
      begin
        contador = contador + 1;

        /*CONCEPTO*/
        if ((visible <> 0) and (tipo_detalle = 'Concepto')) then
        begin
          /*Escribimos capitulo anterior*/
          if  ((Importe_total > 0)
          and ((ultimo_tipo_detalle = 'Descuento') or (ultimo_tipo_detalle = 'Subtotal'))) then
          begin
            Importe_aux = Importe_total;
            id = id_aux;
            posicion = posicion_aux;
            tipo_detalle = tipo_detalle_aux;
            tipo_articulo = tipo_articulo_aux;
            concepto = concepto_aux;
            importe_total = total_acumulado;
            importe_descuento = importe_descuento_aux;
            descuento = descuento_aux;
            visible = 1;
            suspend;
            total_acumulado = 0.0;
            importe_descuento_aux = 0.0;
            descuento_aux = 0.0;
            /*Inicializamos*/
            ID_AUX = -1;
            posicion_aux = -1;
            concepto_aux = 'General';
            tipo_detalle_aux = 'Titulo';
            tipo_articulo_aux = 'NA';
            importe_total = Importe_aux;
          end

          total_acumulado = total_acumulado + importe_total;
          ultimo_tipo_detalle = tipo_detalle;
        end

        /*TITULO*/
        else if ((tipo_detalle = 'Titulo') or (tipo_detalle = 'Titulo_opc')) then
        begin
          ultimo_tipo_detalle = tipo_detalle;
          id_aux_temp = id;
          posicion_aux_temp = posicion;
          tipo_detalle_aux_temp = tipo_detalle;
          tipo_articulo_aux_temp = tipo_articulo;
          concepto_aux_temp = concepto;

          /*Escribimos capitulo anterior*/
          if (id_aux > 0) then
          begin
            id = id_aux;
            posicion = posicion_aux;
            tipo_detalle = tipo_detalle_aux;
            tipo_articulo = tipo_articulo_aux;
            concepto = concepto_aux;
            importe_total = total_acumulado;
            importe_descuento = importe_descuento_aux;
            descuento = descuento_aux;
            visible = 1;
            suspend;
            total_acumulado = 0.0;
            importe_descuento_aux = 0.0;
            descuento_aux = 0.0;
          end

          id_aux = id_aux_temp;
          posicion_aux = posicion_aux_temp;
          tipo_detalle_aux = tipo_detalle_aux_temp;
          tipo_articulo_aux = tipo_articulo_aux_temp;
          concepto_aux = concepto_aux_temp;
        end

        /*SUBTOTAL*/
        else if (tipo_detalle = 'Subtotal') then
        begin
          ultimo_tipo_detalle = tipo_detalle;
        end
        else if (tipo_detalle = 'Descuento') then
        begin
          ultimo_tipo_detalle = tipo_detalle;
          importe_descuento_aux = importe_total;
          descuento_aux = descuento;
        end

        if (contador = num_filas) then
        begin
          id = id_aux;
          posicion = posicion_aux;
          tipo_detalle = tipo_detalle_aux;
          tipo_articulo = tipo_articulo_aux;
          concepto = concepto_aux;
          importe_total = total_acumulado;
          importe_descuento = importe_descuento_aux;
          descuento = descuento_aux;
          visible = 1;
          suspend;
          break;
        end
      end
    end
    else if (TIPO = 'Contrato') then
    begin
      for select id, id_contrato, posicion, tipo_detalle, tipo_articulo, F_RTFTOTEXT(concepto) as concepto,
          coalesce(descuento,0), coalesce(importe_total,0), coalesce(visible, 1)
      from contratos_cliente_detalles
      where id_contrato = :AID
      order by id_contrato, posicion
      into :ID, :ID_PRE_CON, :POSICION, :TIPO_DETALLE, :TIPO_ARTICULO, :CONCEPTO,
           :DESCUENTO, :IMPORTE_TOTAL, :VISIBLE
      do
      begin
        contador = contador + 1;

        /*CONCEPTO*/
        if ((visible <> 0) and (tipo_detalle = 'Concepto')) then
        begin
          /*Escribimos capitulo anterior*/
          if  ((Importe_total > 0)
          and ((ultimo_tipo_detalle = 'Descuento') or (ultimo_tipo_detalle = 'Subtotal'))) then
          begin
            Importe_aux = Importe_total;
            id = id_aux;
            posicion = posicion_aux;
            tipo_detalle = tipo_detalle_aux;
            tipo_articulo = tipo_articulo_aux;
            concepto = concepto_aux;
            importe_total = total_acumulado;
            importe_descuento = importe_descuento_aux;
            descuento = descuento_aux;
            visible = 1;
            suspend;
            total_acumulado = 0.0;
            importe_descuento_aux = 0.0;
            descuento_aux = 0.0;
            /*Inicializamos*/
            ID_AUX = -1;
            posicion_aux = -1;
            concepto_aux = 'General';
            tipo_detalle_aux = 'Titulo';
            tipo_articulo_aux = 'NA';
            importe_total = Importe_aux;
          end

          total_acumulado = total_acumulado + importe_total;
          ultimo_tipo_detalle = tipo_detalle;
        end

        /*TITULO*/
        else if ((tipo_detalle = 'Titulo') or (tipo_detalle = 'Titulo_opc')) then
        begin
          ultimo_tipo_detalle = tipo_detalle;
          id_aux_temp = id;
          posicion_aux_temp = posicion;
          tipo_detalle_aux_temp = tipo_detalle;
          tipo_articulo_aux_temp = tipo_articulo;
          concepto_aux_temp = concepto;

          /*Escribimos capitulo anterior*/
          if (id_aux > 0) then
          begin
            id = id_aux;
            posicion = posicion_aux;
            tipo_detalle = tipo_detalle_aux;
            tipo_articulo = tipo_articulo_aux;
            concepto = concepto_aux;
            importe_total = total_acumulado;
            importe_descuento = importe_descuento_aux;
            descuento = descuento_aux;
            visible = 1;
            suspend;
            total_acumulado = 0.0;
            importe_descuento_aux = 0.0;
            descuento_aux = 0.0;
          end

          id_aux = id_aux_temp;
          posicion_aux = posicion_aux_temp;
          tipo_detalle_aux = tipo_detalle_aux_temp;
          tipo_articulo_aux = tipo_articulo_aux_temp;
          concepto_aux = concepto_aux_temp;
        end

        /*SUBTOTAL*/
        else if (tipo_detalle = 'Subtotal') then
        begin
          ultimo_tipo_detalle = tipo_detalle;
        end
        else if (tipo_detalle = 'Descuento') then
        begin
          ultimo_tipo_detalle = tipo_detalle;
          importe_descuento_aux = importe_total;
          descuento_aux = descuento;
        end

        if (contador = num_filas) then
        begin
          id = id_aux;
          posicion = posicion_aux;
          tipo_detalle = tipo_detalle_aux;
          tipo_articulo = tipo_articulo_aux;
          concepto = concepto_aux;
          importe_total = total_acumulado;
          importe_descuento = importe_descuento_aux;
          descuento = descuento_aux;
          visible = 1;
          suspend;
          break;
        end
      end
    end
end^


CREATE OR ALTER PROCEDURE PROC_PRE_CON_CAPITULOS_CONCEP (
    AID INTEGER,
    TIPO VARCHAR(15))
RETURNS (
    ID INTEGER,
    ID_PRE_CON INTEGER,
    POSICION INTEGER,
    TIPO_DETALLE VARCHAR(25),
    ID_CAPITULO INTEGER,
    TIPO_ARTICULO VARCHAR(2),
    ID_ARTICULO INTEGER,
    PROPIEDAD VARCHAR(50),
    CONCEPTO VARCHAR(2000),
    CANTIDAD NUMERIC(11,2),
    IMPORTE_UNIDAD NUMERIC(11,4),
    DESCUENTO NUMERIC(2,2),
    IMPORTE_PORTE NUMERIC(11,4),
    IMPORTE_TOTAL NUMERIC(11,4),
    VISIBLE2 SMALLINT,
    VISIBLE SMALLINT)
AS
declare variable CAPITULO_ACTUAL integer;
begin
capitulo_actual = -1;
ID_CAPITULO = -1;

if (TIPO = 'Presupuesto') then
begin
  for select pre.id, pre.id_presupuesto, pre.posicion, pre.tipo_detalle,
      coalesce(pre.tipo_articulo,'NA'), pre.id_articulo, pre.propiedad,
/*           F_RTFTOTEXT(F_RTFTOTEXT(pre.CONCEPTO)) as CONCEPTO,*/
      pre.CONCEPTO,
      pre.cantidad,
/*      
      case
      when (pre.descuento <> 0) then (pre.importe_total / pre.cantidad)
      else 
      pre.importe_unidad
      end as
*/      
      importe_unidad,
      pre.descuento, pre.importe_porte,
      pre.importe_total, coalesce(pre.visible, 1), coalesce(pre.visible2, 1)
      from presupuestos_cliente_detalles pre
      where pre.id_presupuesto = :AID
      order by pre.id_presupuesto, pre.posicion
      into :ID, :ID_PRE_CON, :POSICION, :TIPO_DETALLE,
           :TIPO_ARTICULO, :ID_ARTICULO, :PROPIEDAD, :CONCEPTO, :CANTIDAD,
           :IMPORTE_UNIDAD, :DESCUENTO, :IMPORTE_PORTE,
           :IMPORTE_TOTAL, :VISIBLE, :VISIBLE2
  do
  begin
    if ((:tipo_detalle = 'Titulo') or (:tipo_detalle = 'Titulo_opc'))  then
    begin
      capitulo_actual = :ID;
      ID_CAPITULO = capitulo_actual;
    end
    else if ((:tipo_detalle = 'Subtotal')
    or  (:tipo_detalle = 'Descuento'))  then
    begin
      capitulo_actual = -1;
      ID_CAPITULO = capitulo_actual;
    end
    else if (:tipo_detalle = 'Concepto')  then
    begin
      suspend;
    end
  end
end
else if (TIPO = 'Contrato') then
begin
  for select pre.id, pre.id_contrato, pre.posicion, pre.tipo_detalle,
      coalesce(pre.tipo_articulo,'NA'), pre.id_articulo, pre.propiedad,
/*           F_RTFTOTEXT(F_RTFTOTEXT(pre.CONCEPTO)) as CONCEPTO,*/
      pre.CONCEPTO,
      pre.cantidad,
/*      
      case
      when (pre.descuento <> 0) then (pre.importe_total / pre.cantidad)
      else pre.importe_unidad
      end as 
*/      
      importe_unidad,
      pre.descuento, pre.importe_porte,
      pre.importe_total, coalesce(pre.visible, 1), coalesce(pre.visible2, 1)
      from contratos_cliente_detalles pre
      where pre.id_contrato = :AID
      order by pre.id_contrato, pre.posicion
      into :ID, :ID_PRE_CON, :POSICION, :TIPO_DETALLE,
           :TIPO_ARTICULO, :ID_ARTICULO, :PROPIEDAD, :CONCEPTO, :CANTIDAD,
           :IMPORTE_UNIDAD, :DESCUENTO, :IMPORTE_PORTE,
           :IMPORTE_TOTAL, :VISIBLE, :VISIBLE2
  do
  begin
    if ((:tipo_detalle = 'Titulo') or (:tipo_detalle = 'Titulo_opc') )  then
    begin
      capitulo_actual = :ID;
      ID_CAPITULO = capitulo_actual;
    end
    else if ((:tipo_detalle = 'Subtotal')
    or  (:tipo_detalle = 'Descuento'))  then
    begin
      capitulo_actual = -1;
      ID_CAPITULO = capitulo_actual;
    end
    else if (:tipo_detalle = 'Concepto')  then
    begin
      suspend;
    end
  end
end
end^


CREATE OR ALTER PROCEDURE PROC_SET_EJERCICIOS_NOACTIVOS (
    ID_EMPRESA INTEGER)
AS
begin
  update CONT_EJERCICIOS
  set ACTIVO = 0
  where ID_EMPRESA = :id_empresa;

  suspend;
end^



SET TERM ; ^


/******************************************************************************/
/***                              Descriptions                              ***/
/******************************************************************************/
