/* ASIGNAR CODIGO DE LKSTA AL DIGITAR RPECIO MANUAL EN VENTAS */

insert into CONFIGURACION (CONF_MODULO, CONF_CATEGORIA, CONF_PROPIEDAD, CONF_VALOR, CONF_POSIBLES, CONF_AYUDA) values ('FACTURACION', 'FACTURAS', 'ASIGNAR CODIGO LISTA PRECIOS AL DIGITAR PRECIO MANUAL', 'NO', 'SI,NO', 'Asigna el codigo de la lista con precio de venta siguiente al digitado,si no hubiere uno mayor se tomara la lista con precio más alto');
commit work;

set term ^ ;

create or alter procedure LISTA_ASIGNAR (
    ARTICULO varchar(20),
    PRECIO numeric(18,2))
returns (LISTA integer)
as
begin
select first 1 LIPR_COD from precios_articulo P where P.arti_cod = :ARTICULO and PRAR_FIJO >= :PRECIO order by PRAR_FIJO into LISTA;
if (LISTA is null) then
    select first 1 LIPR_COD from precios_articulo P where P.arti_cod = :ARTICULO order by PRAR_FIJO desc into :LISTA;
suspend;
end^

set term ; ^

grant execute on procedure lista_asignar to public;

/* ASIGNAR PRECIO SOLO EN LAS LISTAS INDICADOS POR EL GRUPO AL CREAR ARTICULOS */

create table LISTA_GRUPOS (
    LIPR_COD T_ID not null,
    GRUP_COD T_GRUPO not null);

alter table LISTA_GRUPOS
add constraint PK_LISTA_GRUPOS
primary key (LIPR_COD,GRUP_COD);

grant select, delete, insert, update on LISTA_GRUPOS to public;

UPDATE CONFIGURACION
SET CONF_POSIBLES = 'SI,NO,GRUPO',
    CONF_AYUDA = 'SI: Por cada lista vigente al momento de crear un articulo se registrara un precio para el articulo. NO: Los precios seran ingresados manualmente modificando el articulo. GRUPO: Solo se asiognan precios en los listas asignadas al grupo de inventario'
WHERE (CONF_MODULO = 'FACTURACION') AND (CONF_CATEGORIA = 'ARTICULOS') AND (CONF_PROPIEDAD = 'CREAR PRECIOS AL CREAR ARTICULOS');
commit work;

SET TERM ^ ;

CREATE OR ALTER TRIGGER ARTICULO_AI FOR ARTICULO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable OK CHAR(2);
declare variable LISTA INTEGER;
declare variable UTIL NUMERIC(9,2);
declare variable MARGEN NUMERIC(9,2);
declare variable GRUP_TIVA CHAR(10);
declare variable AUTOM CHAR(1);
declare variable HOY DATE;
declare variable PREFEAN VARCHAR(7);
declare variable CODBAR VARCHAR(15);
BEGIN
INSERT INTO AUDITORIA(AUDI_USUARIO, TIDO_COD, AUDI_IDDOC, AUDI_OPER, AUDI_COD)
    VALUES (USER, 101, 1, 'I', NEW.arti_cod);
HOY = cast('NOW' AS DATE);
EXECUTE PROCEDURE LEE_CONFIGURACION('FACTURACION', 'ARTICULOS', 'CREAR PRECIOS AL CREAR ARTICULOS') RETURNING_VALUES (:OK);
IF (OK = 'SI') THEN
  BEGIN
  /* INSERTE PRECIOS */
  FOR SELECT LIPR_COD, LIPR_UTIL, LIPR_MARGEN, LIPR_AUTO FROM LISTA_PRECIOS where LIPR_FECINI <= :HOY AND LIPR_FECFIN >= :HOY
    INTO :LISTA, :UTIL, :MARGEN, :AUTOM
    do
    BEGIN
    INSERT INTO PRECIOS_ARTICULO (ARTI_COD, LIPR_COD, PRAR_AUTO, PRAR_UTIL, PRAR_MARGEN, PRAR_FIJO, PRAR_CANTMIN)
        VALUES (NEW.ARTI_COD, :LISTA, :AUTOM, :UTIL, :MARGEN, 0, 0.1);
    END
  END
IF (OK = 'GRUPO') THEN
  BEGIN
  /* INSERTE PRECIOS */
  FOR SELECT L.LIPR_COD, LIPR_UTIL, LIPR_MARGEN, LIPR_AUTO FROM LISTA_PRECIOS L, lista_grupos LG where LG.GRUP_COD = NEW.grup_cod AND L.lipr_cod = LG.lipr_cod
    INTO :LISTA, :UTIL, :MARGEN, :AUTOM
    do
    BEGIN
    INSERT INTO PRECIOS_ARTICULO (ARTI_COD, LIPR_COD, PRAR_AUTO, PRAR_UTIL, PRAR_MARGEN, PRAR_FIJO, PRAR_CANTMIN)
        VALUES (NEW.ARTI_COD, :LISTA, :AUTOM, :UTIL, :MARGEN, 0, 0.1);
    END
  END
/* INSERTE LA CONTABILIZACION DEL GRUPO O TARIFA DE IVA SEGUN PARAMETRO*/
EXECUTE PROCEDURE LEE_CONFIGURACION('INVENTARIO', 'ARTICULOS', 'OPCION PARA CAMBIAR AUTOMATICAMENTE LAS CTAS CONTABLES DEL ARTICULO') RETURNING_VALUES (:GRUP_TIVA);
if (GRUP_TIVA = 'GRUPOS') then
  BEGIN
  INSERT INTO CONTABIL_ARTICULO (ARTI_COD, COAR_CTAINV, COAR_CTAIVAC, COAR_CTAIVAV, COAR_CTAVNT, COAR_CTACOS, COAR_CTADEV, COAR_CTACOMP, COAR_CTARTFTE, COAR_CTARTFTEV, COAR_RTBASE, COAR_RTFTE, COAR_CTARTCREE, COAR_RTCREE, COAR_CTARTICA, COAR_RTICA, COAR_CTAIVADV, COAR_CTAIVADC, COAR_CTACONSV, COAR_CTACONSDV)
    SELECT NEW.ARTI_COD, GRUP_CTAINVENT, GRUP_CTAIVACMP, GRUP_CTAIVAVNT, GRUP_CTAVENTAS, GRUP_CTACOSTOS, GRUP_CTADEV, GRUP_CTACOMP, GRUP_CTARTFTEC, GRUP_CTARTFTEV, GRUP_RTFTEB, GRUP_RTFTEP, GRUP_CTARTCREE, GRUP_RTCREE, GRUP_CTARTICA, GRUP_RTICA, GRUP_CTAIVADV, GRUP_CTAIVADC, GRUP_CTAESTAM, GRUP_CTAESTAMDV
    FROM GRUPO G
    WHERE GRUP_COD = NEW.GRUP_COD;
  INSERT INTO contabil_articulo_niif (ARTI_COD, COAR_CTAINV, COAR_CTAIVAC, COAR_CTAIVAV, COAR_CTAVNT, COAR_CTACOS, COAR_CTADEV, COAR_CTACOMP, COAR_CTARTFTE, COAR_CTARTFTEV, COAR_CTARTCREE, COAR_CTARTICA, COAR_CTAIVADV, COAR_CTAIVADC, COAR_CTACONSV, COAR_CTACONSDV)
    SELECT NEW.ARTI_COD, G.grup_ctainvniif, G.grup_ctaivacniif, G.grup_ctaivavniif, G.grup_ctavtaniif, G.grup_ctacosniif, G.grup_ctadevniif, G.grup_ctacmpniif, G.grup_ctartfcniif, G.grup_ctartfvniif, g.grup_ctartcrniif, g.grup_ctaricaniif, g.grup_ctaivdvniif, g.grup_ctaivdcniif, GRUP_CTAESTAMNIIF, GRUP_CTAESTAMDVNIIF
    FROM GRUPO G
    WHERE GRUP_COD = NEW.GRUP_COD;
  END
if (GRUP_TIVA = 'TARIFA IVA') then
  BEGIN
  INSERT INTO CONTABIL_ARTICULO (ARTI_COD, COAR_CTAINV, COAR_CTAIVAC, COAR_CTAIVAV, COAR_CTAVNT, COAR_CTACOS, COAR_CTADEV, COAR_CTACOMP, COAR_CTAIVADV, COAR_CTAIVADC, COAR_CTACONSV, COAR_CTACONSDV)
    SELECT NEW.ARTI_COD, TAIV_CTAINV, TAIV_CTAIVACMP, TAIV_CTAIVAVNT, TAIV_CTAVTA, TAIV_CTACOSTO, TAIV_CTADEV, TAIV_CTACOMP, TAIV_CTAIVADV, TAIV_CTAIVADC, TAIV_CTAESTAM, TAIV_CTAESTAMDV
    FROM TARIFA_IVA T
    WHERE TAIV_COD = NEW.taiv_cod;
  INSERT INTO contabil_articulo_niif (ARTI_COD, COAR_CTAINV, COAR_CTAIVAC, COAR_CTAIVAV, COAR_CTAVNT, COAR_CTACOS, COAR_CTADEV, COAR_CTACOMP, COAR_CTAIVADV, COAR_CTAIVADC, COAR_CTACONSV, COAR_CTACONSDV)
    SELECT NEW.ARTI_COD, T.taiv_ctainvniif, T.taiv_ctaivacniif, T.taiv_ctaivavniif, T.taiv_ctavtaniif, T.taiv_ctacosniif, T.taiv_ctadevniif, T.taiv_ctacmpniif, T.taiv_ctaivdvniif, T.taiv_ctaivdcniif, TAIV_CTAESTAMNIIF, TAIV_CTAESTAMDVNIIF
    FROM TARIFA_IVA T
    WHERE TAIV_COD = NEW.taiv_cod;
  END
execute procedure lee_configuracion('INVENTARIO', 'ARTICULOS', 'PREFIJO EAN13 PARA CREAR CODIGOS DE BARRAS') returning_values (PREFEAN);
if (PREFEAN <> '') then
    BEGIN
    EXECUTE procedure CODIGO_BARRAS (NEW.arti_cod) returning_values (CODBAR);
    insert into BARRAS_ARTICULO (ARTI_COD, COBA_COD, COBA_DES, COBA_UNIDAD, COBA_ACTIVO)
        values (NEW.arti_cod, :codbar, substring(NEW.arti_des from 1 for 60), NEW.arti_unidad, 'S');
    END
END^

SET TERM ; ^

/* AUTORIZAR PRECIOS MENORES QUE EL MINIMO */
insert into CONFIGURACION (CONF_MODULO, CONF_CATEGORIA, CONF_PROPIEDAD, CONF_VALOR, CONF_POSIBLES, CONF_AYUDA) values ('FACTURACION', 'ARTICULOS', 'CODIGO DE USUARIO QUE AUTORIZA VENTAS CON PRECIO MENOR QUE EL MINIMO', '', '', 'Indique el codigo de usuario que recibira las notificaciones y autorizara las ventas cuando el precio unitario sea inferior al minimo.');
COMMIT WORK;

ALTER TABLE FACTURAS_DETALLE
ADD FADE_AUTOPRMIN T_ID;

ALTER TABLE PEDIDOS_DETALLE
ADD PEDE_AUTOPRMIN T_ID;

UPDATE CONFIGURACION
SET CONF_POSIBLES = 'SI,NO,USUARIO,AUTORIZA',
    CONF_AYUDA = 'NO: Impide que se registre un precio de venta menor que el costo (más impuestos si aplican),USUARIO:verifica el acceso del usuario definido por mantenimiento,AUTORIZA: Se pide una autotización para continuar al usuario configurado '
WHERE (CONF_MODULO = 'FACTURACION') AND (CONF_CATEGORIA = 'ARTICULOS') AND (CONF_PROPIEDAD = 'PERMITIR PRECIOS DE VENTA MENORES QUE EL COSTO');
commit work;



