Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION obtener_stock_desde_barcode ( IN codigo_barras bigint,
- OUT disponible double precision)
- RETURNS double precision AS $$
- DECLARE
- list record;
- sub_list record;
- query text;
- menor_l double precision;
- unidades_l int4;
- contador_l int4;
- tipo_l int4;
- derivada_l int4;
- compuesta_l int4;
- corriente_l int4;
- cant_mud_l double precision;
- stock_l double precision;
- BEGIN
- -- Se obtiene el id del tipo de mercadería
- SELECT id INTO compuesta_l FROM tipo_mercaderia WHERE UPPER(nombre) LIKE 'COMPUESTA';
- SELECT id INTO corriente_l FROM tipo_mercaderia WHERE UPPER(nombre) LIKE 'CORRIENTE';
- -- Se obtiene el tipo de mercadería del producto consultado
- SELECT tipo INTO tipo_l FROM producto WHERE barcode = codigo_barras;
- disponible := 0; -- Es el stock disponible
- -- SI LA MERCADERÍA ES COMPUESTA
- IF (tipo_l = compuesta_l) THEN
- -- Se obtiene los componentes del producto
- query := $S$ SELECT * FROM componente_mc WHERE barcode_madre = $S$ || codigo_barras;
- contador_l := 0;
- menor_l := 0;
- -- Se obtiene el stock de sus componentes para ver cuantos alcanzan
- FOR list IN EXECUTE query LOOP
- -- Si el componente es una mercadería corriente
- IF (list.tipo_comp_der = corriente_l) THEN
- stock_l := (SELECT stock FROM producto WHERE barcode = list.barcode_comp_der);
- unidades_l := stock_l / list.cant_mud;
- -- Si el componente es una mercadería compuesta
- ELSIF (list.tipo_comp_der = compuesta_l) THEN
- stock_l := (SELECT disponible FROM obtener_stock_desde_barcode (list.barcode_comp_der));
- unidades_l := stock_l / list.cant_mud;
- END IF;
- -- Elige la cantidad menor como su stock
- IF (contador_l = 0 OR menor_l > unidades_l) THEN
- menor_l := unidades_l;
- END IF;
- contador_l := contador_l + 1;
- END LOOP;
- -- SI LA MERCADERIA CONSULTADA ES CORRIENTE
- ELSIF (tipo_l = corriente_l) THEN
- disponible := (SELECT stock FROM producto WHERE barcode = codigo_barras);
- END IF;
- RETURN; -- Retorna el valor de "disponible"
- END; $$ language plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement