3.1 KiB
3.1 KiB
F_LIST_PRELIEVO_ADD_ARTICOLO
Codice Sorgente
function f_list_prelievo_add_articolo(
p_event_id number,
p_articolo_add varchar2,
p_qta_aperitivo NUMBER := 0,
p_qta_seduto NUMBER := 0,
p_qta_dolci NUMBER := 0
)
return varchar2
as
v_qta_imp number;
v_qta_giac number;
v_data_evento date;
v_cod_art varchar2(10);
v_error_json varchar2(4000);
v_qta_da_imp NUMBER;
v_qta_da_imp_test NUMBER;
v_num_evt_imp number;
BEGIN
v_cod_art := p_articolo_add;
v_qta_da_imp := nvl(p_qta_aperitivo, 0) + nvl(p_qta_seduto, 0) + nvl(p_qta_dolci, 0);
begin
select trunc(data) as data
into v_data_evento
from eventi where id = p_event_id;
exception when no_data_found then
rollback;
RETURN '{"type":"error","code":"'||SQLCODE||'","stack":"'||SQLERRM||'","message":"Evento non trovato"}';
end;
begin
select qta_giac
into v_qta_giac
from articoli
where COD_ARTICOLO = v_cod_art;
exception when no_data_found then
rollback;
RETURN '{"type":"error","code":"'||SQLCODE||'","stack":"'||SQLERRM||'","message":"Articolo non trovato"}';
end;
select count(*)
into v_num_evt_imp
from V_IMPEGNI_ARTICOLI
where COD_ARTICOLO = v_cod_art
and data between v_data_evento - 2 and v_data_evento + 2;
v_qta_imp := nvl(f_get_qta_impegnata (v_cod_art, v_data_evento - 2, v_data_evento + 2 ) , 0);
--insert impegno articolo
begin
insert into eventi_det_prel (id_evento, cod_articolo,QTA_MAN_APE,QTA_MAN_SEDU,QTA_MAN_BUFDOL, COSTO_ARTICOLO)
values (p_event_id, p_articolo_add, p_qta_aperitivo, p_qta_seduto, p_qta_dolci, f_get_costo_articolo(v_cod_art, v_data_evento));
-- aggiorna liste prelievo
EVENTI_AGGIORNA_QTA_LISTA(
P_ID_EVENTO => p_event_id
);
-- Controlla banalmente se sono stati prelevati su altri eventi
if v_qta_imp + v_qta_da_imp > v_qta_giac then
RETURN '{"type":"warning","message":"Attenzione: Non hai abbastanza articoli di questo tipo a magazzino"}';
end if;
-- Se trovo articoli già impegnati in quel giorno mostro un messaggio - 16/11/2022
-- Continuo lo stesso ma do un messaggio di errore anzichè di successo
if(v_qta_imp > 0 and v_num_evt_imp > 0) then
RETURN '{"type":"warning","code":"'||SQLCODE||'","stack":"'||SQLERRM||'","message":"Attenzione! Articolo '||p_articolo_add||' già impegnato '||v_num_evt_imp||' '||(case when v_num_evt_imp > 1 then 'volte' else 'volta' end)||' dal '||to_char(v_data_evento - 2, 'dd-mm-yyyy')||' al '||to_char(v_data_evento + 2, 'dd-mm-yyyy')||'"}';
end if;
RETURN '{"type":"success","message":"Articolo aggiunto con successo"}';
exception when others then
RETURN '{"type":"success","message":"Articolo aggiunto con errori: '||replace(replace(SQLERRM, 'ORA-20000: Errore:', ''), '-20000 - ', '')||'"}';
end;
rollback;
return '{"type":"error","code":"","stack":"","message":"Errore sconosciuto"}';
end f_list_prelievo_add_articolo;```