Files
vfp_roaauto/Scripturi_instalare/packages.sql

478 lines
20 KiB
SQL

-----------------------------------------------------------------
-- Package & package body PACK_DEVIZE pentru ROAAUTO v 1.4.151 --
-- Created by marius.atanasiu on 2/2/2006, 9:51:33 AM --
-----------------------------------------------------------------
spool packages.log
prompt
prompt Creating package PACK_DEVIZE
prompt ============================
prompt
create or replace package pack_devize is
-- Author : LIANA.MACINIC
-- Created : 1/7/2005 11:40:29 AM
-- Purpose :
procedure dev_sterge_comanda(tcSchema in varchar2,
tnIdUtil in number,
tnIdOrdl in number,
tnIdLucrare in number);
procedure dev_adauga_oper_fact(tcSchema in varchar2,
tnIdOrdl in number,
tnIdSectie in number,
tnIdNorme in number,
tnTotalFTva in number,
tnTimpN in number,
tnOre in number,
tnIdUtil in number,
tnIdMecanic in number);
procedure dev_adauga_lucrare(v_gcs in varchar2,
tnan in number,
tnluna in number,
tnIdUtil in number,
pcNr in varchar2,
pnIdInsp in number,
pnIdAsig in number,
pnIdMC in number,
pnKmInt in number,
pdTermen in date,
pnTipCom in number,
pnIdOrdl out number);
procedure dev_valideaza_comanda(v_gcs in varchar2,
tnid_ordl in number,
tnid_util in number);
procedure dev_invalideaza_comanda(v_gcs in varchar2,
tnid_ordl in number,
tnid_utils in number);
procedure dev_distribuie_timp_n(v_gcs in varchar2, v_filtru in varchar2);
procedure dev_adauga_operatie(v_gcs in varchar2,
tnid_sectie in number,
tnid_ordl in number,
tnpret in number,
tnid_util in number,
tntimpn in number,
tnid_norme in number,
tcsir_idmecanic in varchar2);
procedure dev_actualizeaza_operatie(v_gcs in varchar2,
v_camp in varchar2,
v_valoare_noua in number,
v_id_oper in number,
v_luna in number,
v_an in number);
procedure dev_valideaza_operatie(v_gcs in varchar2,
tnid_oper in number,
tnid_util in number);
procedure dev_valideaza_operatii(v_gcs in varchar2,
tnid_ordl in number,
tnid_util in number);
procedure dev_completeaza_rul(v_gcs in varchar2, tnid_lucrare in number);
procedure valideaza_operatie(V_SCHEMA IN VARCHAR2,
V_VALIDAT IN NUMBER,
V_ID_OPER IN NUMBER,
V_ID_UTIL IN NUMBER);
procedure modifica_sectie(V_SCHEMA IN VARCHAR2,
V_ID_SECTIE IN NUMBER,
V_ID_OPER IN NUMBER,
V_ID_UTIL IN NUMBER);
procedure modifica_tip_comanda(V_SCHEMA IN VARCHAR2,
V_ID_TIP IN NUMBER,
V_ID_ORDL IN NUMBER,
V_ID_UTIL IN NUMBER);
procedure sterge_operatie(V_SCHEMA IN VARCHAR2,
V_ID_OPER IN NUMBER,
V_ID_UTIL IN NUMBER);
end pack_devize;
/
prompt
prompt Creating package body PACK_DEVIZE
prompt =================================
prompt
CREATE OR REPLACE PACKAGE BODY pack_devize is
procedure dev_sterge_comanda(tcSchema in varchar2,
tnIdUtil in number,
tnIdOrdl in number,
tnIdLucrare in number) is
lnRulaje NUMBER(3) := 0;
lnOperatii NUMBER(3) := 0;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) AS SUMA FROM ' || tcSchema ||
'.RUL WHERE ID_LUCRARE=:1 AND STERS=0'
INTO lnRulaje
USING tnIdLucrare;
IF lnRulaje > 0 then
raise_application_error(-20001,
'Aceasta comanda nu poate fi stearsa, deoarece are legaturi in rulaje!');
ELSE
EXECUTE IMMEDIATE 'SELECT COUNT(*) AS SUMA FROM ' || tcSchema ||
'.DEV_OPER WHERE ID_ORDL=:1 AND STERS=0'
INTO lnOperatii
USING tnIdOrdl;
IF lnOperatii > 0 then
raise_application_error(-20001,
'Aceasta comanda nu poate fi stearsa, deoarece are adaugate operatii!');
ELSE
EXECUTE IMMEDIATE 'UPDATE ' || tcSchema ||
'.DEV_ORDL SET STERS=1,ID_UTILS=:1,DATAORAS=SYSDATE WHERE ' ||
'ID_ORDL = :2'
USING tnIdUtil, tnIdOrdl;
END IF;
END IF;
END;
------------------------------------------------------------------
procedure dev_adauga_oper_fact(tcSchema in varchar2,
tnIdOrdl in number,
tnIdSectie in number,
tnIdNorme in number,
tnTotalFTva in number,
tnTimpN in number,
tnOre in number,
tnIdUtil in number,
tnIdMecanic in number) is
V_ID_OPER number(10);
V_PRET number(17, 4);
V_DATAORA date;
V_VALIDAT number(1);
v_nou number(1);
begin
if pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >=
pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then
v_nou := 1;
else
v_nou := 0;
end if;
v_dataora := sysdate;
v_validat := 1;
execute immediate 'UPDATE ' || tcSchema || '.DEV_ORDL ' ||
'SET VALIDAT = :1,ID_UTIL_VALID = :2,DATAORAVALID = :3 WHERE ID_ORDL = :4 '
using V_VALIDAT, tnIdUtil, V_DATAORA, tnIdOrdl;
V_PRET := tnTotalFTva / tnTimpN;
execute immediate 'INSERT INTO ' || tcSchema ||
'.DEV_OPER(ID_ORDL,ID_SECTIE,TIMPN,PRET,ID_NORME,ID_UTIL,DATAORA,VALIDAT,NOU) ' ||
'VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9) RETURNING ID_OPER INTO :10'
using tnIdOrdl, tnIdSectie, tnTimpN, V_PRET, tnIdNorme, tnIdUtil, V_DATAORA, V_VALIDAT, V_NOU
returning into V_ID_OPER;
execute immediate 'INSERT INTO ' || tcSchema ||
'.DEV_OPER_MECANICI(ID_OPER,ID_MECANIC,ORE) ' ||
'VALUES(:1,:2,:3)'
using V_ID_OPER, tnIdMecanic, tnOre;
end;
------------------------------------------------------------------
procedure dev_adauga_lucrare(v_gcs in varchar2,
tnan in number,
tnluna in number,
tnIdUtil in number,
pcNr in varchar2,
pnIdInsp in number,
pnIdAsig in number,
pnIdMC in number,
pnKmInt in number,
pdTermen in date,
pnTipCom in number,
pnIdOrdl out number) is
V_DATAORA date := sysdate;
begin
execute immediate 'INSERT INTO ' || v_gcs || '.NOM_LUCRARI (NRORD,ID_MOD)
VALUES( :1, 1200)'
using pcNr;
execute immediate 'insert into ' || v_gcs ||
'.dev_ordl
(an, luna, id_inspector, id_lucrare, datai, id_util_ad, id_masiniclient,id_asigurator,id_tip,kmint,termen,dataoraad)
values( :1 , :2 , :3 , :4 , :5 , :6 , :7 , :8, :9, :10, :11, :12) returning id_ordl into :13'
using tnAn, tnLuna, pnIdInsp, pack_sesiune.dev_idLucrare, v_dataora, tnIdUtil, pnIdMC, pnIdAsig, pnTipCom, pnKmInt, pdTermen, V_DATAORA
returning into pnidOrdl;
execute immediate 'update ' || v_gcs ||
'.dev_masiniclienti set kmint=:1 ' ||
'where id_masiniclient=:2'
using pnKmInt, pnIdMC;
end;
------------------------------------------------------------------
procedure dev_valideaza_comanda(v_gcs in varchar2,
tnid_ordl in number,
tnid_util in number) as
lnNevalidate NUMBER(3);
begin
execute immediate 'SELECT COUNT(*) FROM ' || v_gcs || '.DEV_OPER ' ||
'WHERE STERS=0 AND VALIDAT=0 AND ID_ORDL=:1'
into lnNevalidate
using tnid_ordl;
if lnNevalidate > 0 then
RAISE_APPLICATION_ERROR(-20000,
'Mai sunt operatii nevalidate pe aceasta comanda!' ||
CHR(13) || CHR(10) ||
LPAD(CHR(32), 12, CHR(32)) ||
'Comanda nu a fost validata!');
end if;
execute immediate 'UPDATE ' || v_gcs || '.DEV_ORDL SET VALIDAT=1,' ||
'ID_UTIL_VALID=:1,DATAORAVALID=SYSDATE ' ||
'WHERE ID_ORDL=:2'
using tnid_util, tnid_ordl;
end;
------------------------------------------------------------------
procedure dev_invalideaza_comanda(v_gcs in varchar2,
tnid_ordl in number,
tnid_utils in number) AS
begin
execute immediate 'UPDATE ' || v_gcs || '.DEV_ORDL ' ||
'SET VALIDAT=0,ID_UTIL_VALID=0,DATAORAVALID=NULL,' ||
'ID_UTILS=:1,DATAORAS=SYSDATE ' || 'WHERE ID_ORDL=:2'
using tnid_utils, tnid_ordl;
end;
------------------------------------------------------------------
procedure dev_distribuie_timp_n(v_gcs in varchar2, v_filtru in varchar2) AS
lnManopera number(10);
lnSucces number(10);
lnTimpN number(7, 3);
lnId_oper number(10);
lnNrMecanici number(3);
lnOre number(7, 3);
lcSql varchar2(1000);
lcFiltru varchar2(2000);
lnSumaOre number(7, 3);
lnRanduri number(4);
lnIdMecanic number(1);
lcDevOper VARCHAR2(30);
begin
lcFiltru := replace(v_filtru, CHR(63), CHR(39));
lnManopera := dbms_sql.open_cursor;
/*lcSql := 'SELECT B.ID_OPER,B.TIMPN,ROUND(SUM(NVL(D.ORE,-1.000)),3)
FROM ' || v_gcs || '.dev_vvalid_comenzi A
JOIN ' || v_gcs ||
'.DEV_VOPER B ON A.ID_ORDL=B.ID_ORDL
LEFT JOIN ' || v_gcs ||
'.DEV_VOPER_DETALII_M D ON B.ID_OPER=D.ID_OPER
WHERE ' || lcFiltru || '
GROUP BY B.ID_OPER,B.TIMPN
HAVING B.TIMPN-ROUND(SUM(NVL(D.ORE,-1.000)),3)!=0';*/
IF lcFiltru IS NULL THEN
lcDevOper := 'DEV_VOPER';
ELSE
lcDevOper := 'DEV_VOPER_SIMPLU';
END IF;
lcSql := 'SELECT B.ID_OPER,B.TIMPN,ROUND(SUM(NVL(D.ORE,-1.000)),3)
FROM ' || v_gcs || '.dev_normare_comenzi A
JOIN ' || v_gcs || '.' || lcDevOper ||
' B ON A.ID_ORDL=B.ID_ORDL
LEFT JOIN ' || v_gcs || '.DEV_VOPER_DETALII_M D ON B.ID_OPER=D.ID_OPER
WHERE ' || lcFiltru || '
GROUP BY B.ID_OPER,B.TIMPN
HAVING B.TIMPN-ROUND(SUM(NVL(D.ORE,-1.000)),3)!=0';
dbms_sql.parse(lnManopera, lcSql, dbms_sql.native);
dbms_sql.define_column(lnManopera, 1, lnId_oper);
dbms_sql.define_column(lnManopera, 2, lnTimpN);
dbms_sql.define_column(lnManopera, 3, lnSumaOre);
lnIdMecanic := 1;
lnSucces := dbms_sql.execute(lnManopera);
loop
if dbms_sql.fetch_rows(lnManopera) > 0 then
dbms_sql.column_value(lnManopera, 1, lnId_oper);
dbms_sql.column_value(lnManopera, 2, lnTimpN);
dbms_sql.column_value(lnManopera, 3, lnSumaOre);
execute immediate 'SELECT COUNT(ID_MECANIC) FROM ' || v_gcs ||
'.DEV_VOPER_DETALII_M WHERE ID_OPER=:1'
into lnNrMecanici
using lnId_oper;
if lnNrMecanici = 0 then
execute immediate 'INSERT INTO ' || v_gcs ||
'.DEV_OPER_MECANICI(ID_OPER,ID_MECANIC,ORE) ' ||
' VALUES(:1,:2,:3)'
using lnId_oper, lnIdMecanic, lnTimpN;
else
lnOre := lnTimpN / lnNrMecanici;
execute immediate 'UPDATE ' || v_gcs ||
'.DEV_OPER_MECANICI SET ORE=:1 WHERE ID_OPER=:2 AND STERS=0'
using lnOre, lnId_oper;
end if;
else
exit;
end if;
end loop;
dbms_sql.close_cursor(lnManopera);
end;
------------------------------------------------------------------
procedure dev_adauga_operatie(v_gcs in varchar2,
tnid_sectie in number,
tnid_ordl in number,
tnpret in number,
tnid_util in number,
tntimpn in number,
tnid_norme in number,
tcsir_idmecanic in varchar2) AS
v_id_oper number(10);
v_lungime_sir number(3);
v_ore number(7, 3);
v_timp_ramas number(7, 3);
v_nou number(1);
begin
if pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >=
pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then
v_nou := 1;
else
v_nou := 0;
end if;
/* execute immediate 'INSERT INTO ' || v_gcs ||
'.DEV_OPER(ID_ORDL,ID_SECTIE,TIMPN,PRET,ID_NORME,ID_UTIL,NOU,DATAORA) ' ||
'VALUES (:1,:2,:3,:4,:5,:6,:7,SYSDATE) RETURNING ID_OPER INTO :8'
using tnid_ordl, tnid_sectie, tntimpn, tnpret, tnid_norme, tnid_util, v_nou
returning into v_id_oper;*/
execute immediate 'INSERT INTO ' || v_gcs ||
'.DEV_OPER(ID_ORDL,ID_SECTIE,TIMPN,PRET,ID_NORME,ID_UTILI,NOU,DATAORA) ' ||
'VALUES (:1,:2,:3,:4,:5,:6,:7,:8) RETURNING ID_OPER INTO :9'
using tnid_ordl, tnid_sectie, tntimpn, tnpret, tnid_norme, tnid_util, v_nou, SYSDATE
returning into v_id_oper;
v_lungime_sir := SIR_IN_SIR(tcsir_idmecanic, ';');
v_ore := round(tntimpn / v_lungime_sir, 3);
if v_lungime_sir > 0 then
for i in 1 .. v_lungime_sir loop
execute immediate 'INSERT INTO ' || v_gcs ||
'.DEV_OPER_MECANICI(ID_OPER,ID_MECANIC,ORE) ' ||
'VALUES(:1,:2,:3)'
using v_id_oper, ID_DIN_SIR(tcsir_idmecanic, ';', i), v_ore;
end loop;
end if;
end;
------------------------------------------------------------------
procedure dev_actualizeaza_operatie(v_gcs in varchar2,
v_camp in varchar2,
v_valoare_noua in number,
v_id_oper in number,
v_luna in number,
v_an in number) as
v_datai date;
v_data_ron date;
v_data_util date;
v_valoare number;
begin
execute immediate 'SELECT DATAI FROM ' || v_gcs ||
'.DEV_OPER WHERE ID_OPER=:1'
into v_datai
using v_id_oper;
v_data_ron := to_date(pack_sesiune.get_lunaron || '/' ||
pack_sesiune.get_anron,
'MM/YYYY');
v_data_util := to_date(v_luna || '/' || v_an, 'MM/YYYY');
if UPPER(TRIM(v_camp)) = 'PRET' and v_datai < v_data_ron and
v_data_util >= v_data_ron then
v_valoare := v_valoare_noua * 10000;
else
v_valoare := v_valoare_noua;
end if;
execute immediate 'UPDATE ' || v_gcs || '.DEV_OPER SET ' || v_camp ||
'=:1 WHERE ID_OPER=:2'
using v_valoare, v_id_oper;
end;
------------------------------------------------------------------
procedure dev_valideaza_operatie(v_gcs in varchar2,
tnid_oper in number,
tnid_util in number) as
begin
execute immediate 'UPDATE ' || v_gcs || '.DEV_OPER SET VALIDAT=1,' ||
'ID_UTIL=:1,DATAORA=SYSDATE ' || 'WHERE ID_OPER=:2'
using tnid_util, tnid_oper;
end;
------------------------------------------------------------------
procedure dev_valideaza_operatii(v_gcs in varchar2,
tnid_ordl in number,
tnid_util in number) as
begin
execute immediate 'UPDATE ' || v_gcs || '.DEV_OPER SET VALIDAT=1,' ||
'ID_UTIL=:1,DATAORA=SYSDATE ' ||
'WHERE ID_ORDL=:2 AND STERS=0 AND VALIDAT=0'
using tnid_util, tnid_ordl;
end;
------------------------------------------------------------------
procedure dev_completeaza_rul(v_gcs in varchar2, tnid_lucrare in number) AS
V_ID_FACT number(20);
begin
V_ID_FACT := pack_contafin.get_idFact();
execute immediate 'update ' || v_gcs ||
'.rul set id_fact=:1 where id_lucrare=:2'
using V_ID_FACT, tnid_lucrare;
end;
------------------------------------------------------------------
procedure valideaza_operatie(V_SCHEMA IN VARCHAR2,
V_VALIDAT IN NUMBER,
V_ID_OPER IN NUMBER,
V_ID_UTIL IN NUMBER) is
begin
EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_OPER SET VALIDAT=:1,' ||
'DATAORA=:2,ID_UTIL=:3 WHERE ID_OPER=:4'
USING V_VALIDAT, SYSDATE, V_ID_UTIL, V_ID_OPER;
end;
------------------------------------------------------------------
procedure modifica_sectie(V_SCHEMA IN VARCHAR2,
V_ID_SECTIE IN NUMBER,
V_ID_OPER IN NUMBER,
V_ID_UTIL IN NUMBER) is
begin
EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA ||
'.DEV_OPER SET ID_SECTIE=:1 WHERE ID_OPER=:2'
USING V_ID_SECTIE, V_ID_OPER;
end;
------------------------------------------------------------------
procedure modifica_tip_comanda(V_SCHEMA IN VARCHAR2,
V_ID_TIP IN NUMBER,
V_ID_ORDL IN NUMBER,
V_ID_UTIL IN NUMBER) is
begin
EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_ORDL SET ID_TIP=:1 ' ||
'WHERE ID_ORDL=:2'
USING V_ID_TIP, V_ID_ORDL;
end;
------------------------------------------------------------------
procedure sterge_operatie(V_SCHEMA IN VARCHAR2,
V_ID_OPER IN NUMBER,
V_ID_UTIL IN NUMBER) is
begin
EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_OPER SET STERS=:1,' ||
'DATAORAS=:2,ID_UTILS=:3 WHERE ID_OPER=:4'
USING 1, SYSDATE, V_ID_UTIL, V_ID_OPER;
end;
------------------------------------------------------------------
------------------------------------------------------------------
end pack_devize;
/
spool off