--select * from replicacion.rep_instrucciones where idu_db=92 (es para ver si un determinado idu_db esta siendo usado)
--show statement_timeout	(es para ver el estado del statement_timeout)
--set statement_timeout to 0	(es para definir en 0 el statement_timeout)

--ESTRUCTURA
ALTER TABLE remitos_detalles DROP CONSTRAINT chk_existencia_especificar_lote;
ALTER TABLE remitos_detalles DROP CONSTRAINT chk_existencia_especificar_lote_unitario;
ALTER TABLE remitos_detalles DROP CONSTRAINT chk_lote_articulo_correcto;
--ALTER TABLE valores DROP CONSTRAINT chk_numero_en_chequera;

--ALTER TABLE public.articulos DROP CONSTRAINT chk_art_tiene_codbarras_adic;
--ALTER TABLE public.articulos DROP CONSTRAINT chk_articulos_cod_barra_no_existe_en_codbarras_adic;
--ALTER TABLE public.articulos_codbarras_adic DROP CONSTRAINT chk_art_tiene_codbarras;
--ALTER TABLE public.articulos_codbarras_adic DROP CONSTRAINT chk_articulos_cod_barra_adic_no_existe_en_articulos;

ALTER TABLE public.cd_rd DROP CONSTRAINT chk_relacionar_mismo_art;
ALTER TABLE public.comp_cuotas DROP CONSTRAINT chk_pago_menor_total;
ALTER TABLE public.comp_pagos DROP CONSTRAINT chk_pago_menor_total;
ALTER TABLE public.ordenes_compra DROP CONSTRAINT chk_sujeto_relacionado_en_rem;
ALTER TABLE public.ordenes_compra_det DROP CONSTRAINT chk_art_relacionado_en_rem;
ALTER TABLE public.ordenes_compra_det DROP CONSTRAINT chk_cant_relacionada_coherente_ocd;
ALTER TABLE public.remitos DROP CONSTRAINT chk_sujeto_relacionado_en_oc;
ALTER TABLE public.remitos_detalles DROP CONSTRAINT chk_art_relacionado_en_oc;
ALTER TABLE public.remitos_detalles DROP CONSTRAINT chk_cant_no_puede_ser_cero;
ALTER TABLE public.remitos_detalles DROP CONSTRAINT chk_no_coincide_descr;
ALTER TABLE public.remitos_recepciones DROP CONSTRAINT area_o_salida;
ALTER TABLE public.remitos_recepciones DROP CONSTRAINT "chk_RECEPCION_CAMBIAR_FECHA";

--WMS
ALTER TABLE wms.pallets_remitos DROP CONSTRAINT fk_pallets;
ALTER TABLE wms.pallets_remitos DROP CONSTRAINT fk_remitos_detalles;
ALTER TABLE wms.pallets_remitos DROP CONSTRAINT chk_cant_pallet_menor_cant_remito;

--DATOS
ALTER TABLE remitos_detalles ADD CONSTRAINT chk_existencia_especificar_lote CHECK (NOT (id_lote IS NULL AND existencia_con_lote(id_articulo))) not valid;
ALTER TABLE remitos_detalles ADD CONSTRAINT chk_existencia_especificar_lote_unitario CHECK (NOT (COALESCE(cant, 0::double precision) <> 1::double precision AND existencia_con_lote_unitario(id_articulo))) not valid;;
ALTER TABLE remitos_detalles ADD CONSTRAINT chk_lote_articulo_correcto CHECK (id_lote IS NULL OR lote_articulo_correcto(id_lote, id_articulo)) not valid;

--ALTER TABLE public.articulos ADD CONSTRAINT chk_art_tiene_codbarras_adic CHECK (NOT (cod_barras IS NULL AND art_tiene_codbarras_adic(id_articulo))) not valid;
--ALTER TABLE public.articulos ADD CONSTRAINT chk_articulos_cod_barra_no_existe_en_codbarras_adic CHECK (art_codbarras_no_existe_en_articulos_codbarras_adic(cod_barras)) not valid;
--ALTER TABLE public.articulos_codbarras_adic ADD CONSTRAINT chk_art_tiene_codbarras CHECK (art_tiene_codbarras(id_articulo)) not valid;
--ALTER TABLE public.articulos_codbarras_adic ADD CONSTRAINT chk_articulos_cod_barra_adic_no_existe_en_articulos CHECK (art_codbarras_no_existe_en_articulos(cod_barras)) not valid;

ALTER TABLE public.cd_rd ADD CONSTRAINT chk_relacionar_mismo_art CHECK (art_en_remito(id_rem, id_rem_det) = art_en_comp(id_comp, id_comp_det)) not valid;
ALTER TABLE public.comp_cuotas ADD CONSTRAINT chk_pago_menor_total CHECK (pago_menor_total(pago, total_cuota * comp_mon_cotiz_base(id_comp))) not valid;
ALTER TABLE public.comp_pagos ADD CONSTRAINT chk_pago_menor_total CHECK (pago_menor_total(pago, monto * comp_mon_cotiz_base(id_comp))) not valid;
ALTER TABLE public.ordenes_compra ADD CONSTRAINT chk_sujeto_relacionado_en_rem CHECK (COALESCE(prov_oc_en_rd(id_oc), 0) = 0 OR COALESCE(prov_oc_en_rd(id_oc), 0) = id_sujeto) not valid;
ALTER TABLE public.ordenes_compra_det ADD CONSTRAINT chk_art_relacionado_en_rem CHECK (COALESCE(art_oc_en_rd(id_oc, id_det), 0) = 0 OR COALESCE(art_oc_en_rd(id_oc, id_det), 0) = id_articulo) not valid;
ALTER TABLE public.remitos ADD CONSTRAINT chk_sujeto_relacionado_en_oc CHECK (COALESCE(prov_rd_en_oc(id_remito), 0) = 0 OR COALESCE(prov_rd_en_oc(id_remito), 0) = id_sujeto) not valid;
ALTER TABLE public.remitos_detalles ADD CONSTRAINT chk_art_relacionado_en_oc CHECK (COALESCE(art_rd_en_oc(id_remito, id_det), 0) = 0 OR COALESCE(art_rd_en_oc(id_remito, id_det), 0) = id_articulo) not valid;
ALTER TABLE public.remitos_detalles ADD CONSTRAINT chk_cant_no_puede_ser_cero CHECK (COALESCE(cant, 0::double precision) <> 0::double precision) not valid;
COMMENT ON CONSTRAINT chk_cant_no_puede_ser_cero ON public.remitos_detalles IS 'Unicamente para esta instalacion en particular. Es que actualmente no hay nada que impida que haya una cant. cero en una linea de remito. De hecho se reserva esta posibilidad por si alguna vez se gestionan recetas por ejemplo y en una linea de remitos_detalles debe registrarse un art. padre con cant. cero';
ALTER TABLE public.remitos_detalles ADD CONSTRAINT chk_no_coincide_descr CHECK (id_lote IS NULL OR coincidedescr(id_lote, lote)) not valid;
ALTER TABLE public.remitos_recepciones ADD CONSTRAINT area_o_salida CHECK ((id_area_destino IS NULL OR id_salida IS NULL) AND NOT (id_area_destino IS NULL AND id_salida IS NULL)) not valid;
ALTER TABLE public.remitos_recepciones ADD CONSTRAINT "chk_RECEPCION_CAMBIAR_FECHA" CHECK (rem_rec_cant(id_remito, id_recepcion, fecha) = 0) not valid;
--ALTER TABLE valores ADD CONSTRAINT chk_numero_en_chequera CHECK (valor_cheque_en_chequera(id_cuenta, nro, id_tipo_pago)) not valid;


--select * from ordenes_compra_det where not (cant_ocd_rd_por_oc(id_oc, id_det) <= cant_ocd(id_oc, id_det));
--delete from ordenes_compra_det where not (cant_ocd_rd_por_oc(id_oc, id_det) <= cant_ocd(id_oc, id_det));
ALTER TABLE public.ordenes_compra_det ADD CONSTRAINT chk_cant_relacionada_coherente_ocd CHECK (cant_ocd_rd_por_oc(id_oc, id_det) <= cant_ocd(id_oc, id_det)) not valid;

--WMS
ALTER TABLE wms.pallets_remitos ADD CONSTRAINT fk_pallets FOREIGN KEY (id_pallet) REFERENCES wms.pallets (id_pallet) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE not valid;
ALTER TABLE wms.pallets_remitos ADD CONSTRAINT fk_remitos_detalles FOREIGN KEY (id_remito, id_remito_det) REFERENCES public.remitos_detalles (id_remito, id_det) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION not valid;
ALTER TABLE wms.pallets_remitos ADD CONSTRAINT chk_cant_pallet_menor_cant_remito CHECK (wms.cant_pallet_menor_cant_remito(id_remito, id_remito_det) OR id_pallet <= 15291) not valid; -- ticket:3174. El criterio de id_pallet > 15291 es para evitar, en instalacion de agostini, el check de pallets anteriores ya que no respetan esta restriccion: en la version general de la base de datos no debe estar este criterio de pallet

vacuum analyze;
vacuum full verbose;

ALTER DATABASE fvgbelgrano SET statement_timeout=480000; 
ALTER DATABASE fvgbelgrano SET enable_seqscan='off'; 


select * from areas where id_area=59;
select * from areas where id_area=107;

DROP INDEX ix_comp_sufijo;
CREATE INDEX ix_comp_sufijo
  ON comp
  USING btree
  (id_comp)
  WHERE (id_comp % 100) = 30;

DROP INDEX ix_recibo_sufijo;
CREATE INDEX ix_recibo_sufijo
  ON recibos
  USING btree
  (id_recibo)
  WHERE (id_recibo % 100) = 30;