Files
gomag-vending/api/database-scripts/09_pack_sesiune.pck
Claude Agent b625609645 feat: configurable invoice line sorting via RF_SORTARE_COMANDA option
cursor_comanda in PACK_FACTURARE now reads RF_SORTARE_COMANDA from OPTIUNI:
1=alphabetical (default, existing behavior), 0=original web order (by ID_COMANDA_ELEMENT).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 09:15:17 +00:00

1180 lines
49 KiB
Plaintext

create or replace package pack_sesiune is
-- Author : LIANA.MACINIC
-- Created : 1/6/2005 3:32:39 PM
-- Purpose :
-- 30.09.2009
-- marius.mutu
-- calculeaza_total_cu_tva, calculeaza_total_fara_tva, calculeaza_total_tva - nvl(V_AJUSTARE,0)
-- Public type declarations
V_Schema varchar2(64);
dev_idLucrare number(20);
dev_idOrdl number(20);
dev_idOper number(20);
anbal number(4);
lunabal number(2);
dev_an number(4);
dev_luna number(2);
an number(4);
luna number(2);
gest_data_init date;
gest_data_final date;
sal_idStat number(10);
id_prg_owner syn_nom_programe.id_program%Type;
id_prg syn_def_programe.id_prog%Type;
comenzi_idSectie number(5);
-- cont plcont.cont%type;
cont VARCHAR2(4);
nIdeROASTART number(2) := 0;
nIdeROADEF number(2) := 1;
nIdeROACONT number(2) := 2;
nIdeROASAL number(2) := 3;
nIdeROARES number(2) := 4;
nIdeROAGEST number(2) := 5;
nIdeROAIMOB number(2) := 6;
nIdeROAMANAGER number(2) := 7;
nIdeROAAUTO number(2) := 8;
nIdeROANOR number(2) := 9;
nIdeROADECL number(2) := 10;
nIdeROARETAIL number(2) := 58;
nID_UTIL syn_utilizatori.id_util%Type;
nid_moneda_nationala nom_valute.id_valuta%TYPE;
nzecimale_pretv number(2);
nzecimale_preta number(2);
nzecimale_pretaval number(2);
nzecimale_pretvval number(2);
nzecimale_sumav number(2);
nzecimale_sumaa number(2);
nzecimale_sumaval number(2);
function id_sesiune RETURN NUMBER;
function get_data_init return date;
function get_data_final return date;
procedure set_data_init(tcdata date);
procedure set_data_final(tcdata date);
procedure setlunabal(V_LUNA in number);
procedure setanbal(V_AN in number);
procedure setLuna(V_LUNA in number);
procedure setAn(V_AN in number);
procedure setcont(V_CONT IN varchar2);
procedure setSchema(v_gcs in varchar2);
function getlunabal return number;
function getanbal return number;
function getluna return number;
function getan return number;
function getcont return varchar2;
function getultimazi return date;
function getSchema return varchar2;
PROCEDURE set_data_ron(V_GCS VARCHAR2);
FUNCTION get_anron RETURN ACT_TEMP.AN%TYPE;
FUNCTION get_lunaron RETURN ACT_TEMP.LUNA%TYPE;
FUNCTION suma_ron(TNSUMA NUMBER, TNAN NUMBER, TNLUNA NUMBER) RETURN NUMBER;
FUNCTION suma_ron(TNSUMA NUMBER,
TNAN NUMBER,
TNLUNA NUMBER,
TNPRECIZIE NUMBER) RETURN NUMBER;
FUNCTION suma_ron(TNSUMA NUMBER, TDDATA DATE) RETURN NUMBER;
procedure set_id_stat(tn_id_stat in number);
function get_id_stat return number;
FUNCTION getoptiunefirma(tcS IN VARCHAR2, tcOptiune IN VARCHAR2)
RETURN VARCHAR2;
FUNCTION getOptiuneFirma(tcOptiune IN VARCHAR2) RETURN VARCHAR2;
PROCEDURE set_id_prg_owner(tnId_Prg_Owner IN syn_nom_programe.id_program%Type);
PROCEDURE set_id_prg(tnId_Prg IN syn_def_programe.id_prog%Type);
FUNCTION get_id_prg_owner return syn_nom_programe.id_program%Type;
FUNCTION get_id_prg return syn_def_programe.id_prog%Type;
PROCEDURE set_id_util(tnId_Util IN syn_utilizatori.id_util%Type);
FUNCTION get_id_util RETURN syn_utilizatori.id_util%Type;
procedure set_id_sectie_comenzi(tn_id_sectie IN NUMBER);
function get_id_sectie_comenzi return number;
function e_mama(tnIdFirma IN NUMBER) return number;
PROCEDURE SetOptiuneUtilizator(tcVarname IN OPTIUNI_UTIL.VARNAME%TYPE,
tnIdUtil OPTIUNI_UTIL.ID_UTIL%TYPE,
tcVarvalue OPTIUNI_UTIL.VARVALUE%TYPE,
tcVardesc OPTIUNI_UTIL.VARDESC%TYPE := NULL);
PROCEDURE SetOptiune(tcVarname IN OPTIUNI.VARNAME%TYPE,
tcVarvalue OPTIUNI.VARVALUE%TYPE,
tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER',
tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL);
PROCEDURE SetOptiune2(tcVarname IN OPTIUNI.VARNAME%TYPE,
tcVarvalue OPTIUNI.VARVALUE2%TYPE,
tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER',
tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL);
function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number;
function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number;
function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number;
function converteste_pret_fara_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number;
function converteste_pret_TVA(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number;
function converteste_pret_cu_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number;
FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER,
V_AJUSTARE IN NUMBER,
V_CURS IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_CANTITATE IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER)
return number;
FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER,
V_AJUSTARE IN NUMBER,
V_CURS IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_CANTITATE IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER)
return number;
FUNCTION calculeaza_total_tva(V_PRET IN NUMBER,
V_AJUSTARE IN NUMBER,
V_CURS IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_CANTITATE IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER)
return number;
function tva2proctva(V_TVA IN ACT.SUMA%TYPE,
V_PRET IN ACT.SUMA%TYPE,
V_AN IN ACT.AN%TYPE,
V_LUNA IN ACT.LUNA%TYPE) RETURN ACT.PROC_TVA%TYPE;
function tva2proctva(V_TVA IN ACT.SUMA%TYPE, V_PRET IN ACT.SUMA%TYPE)
RETURN ACT.PROC_TVA%TYPE;
FUNCTION verifica_acces(V_TABELA IN VARCHAR2,
V_ID IN NUMBER,
V_MINUTE_MAX IN NUMBER) RETURN VARCHAR2;
FUNCTION verifica_acces(V_TABELA IN VARCHAR2,
V_ID IN NUMBER,
V_MINUTE_MAX IN NUMBER,
V_TIP IN NUMBER) RETURN VARCHAR2;
PROCEDURE blocheaza_acces(V_TABELA IN VARCHAR2,
V_ID IN NUMBER,
V_MINUTE_MAX IN NUMBER);
PROCEDURE deblocheaza_acces(V_SID IN NUMBER);
PROCEDURE deblocheaza_acces(V_TABELA IN VARCHAR2, V_ID IN NUMBER);
PROCEDURE deblocheaza_acces_expirat(V_TABELA IN VARCHAR2, V_ID IN NUMBER);
end pack_sesiune;
/
create or replace package body pack_sesiune is
-- 17.03.2016
-- marius.mutu
-- tva2proctva - s-a calculat si procent tva 5% din raportul tva/pret,
-- la 5% aparea cota standard ex: 20% 2016
-- 18.10.2016
-- marius.mutu
-- + SetOptiune
-- 13.11.2020
-- marius.mutu
-- + SetOptiune2 (salveaza in optiuni.varvalue2 clob in loc de optiuni.varvalue varchar2)
FUNCTION id_sesiune RETURN NUMBER IS
V_RETURN NUMBER(20) := 0;
BEGIN
V_RETURN := DEV_IDLUCRARE;
RETURN V_RETURN;
END;
FUNCTION get_data_init RETURN date IS
BEGIN
return gest_data_init;
END;
FUNCTION get_data_final RETURN date IS
BEGIN
return gest_data_final;
END;
procedure set_data_init(tcdata in date) is
lcdata date := tcdata;
begin
gest_data_init := lcdata;
end;
procedure set_data_final(tcdata in date) is
lcdata date := tcdata;
begin
gest_data_final := lcdata;
end;
------------------------------------------------------------------
procedure setlunabal(V_LUNA IN NUMBER) is
begin
lunabal := V_LUNA;
end;
------------------------------------------------------------------
procedure setanbal(V_AN IN NUMBER) is
begin
anbal := V_AN;
end;
------------------------------------------------------------------
procedure setluna(V_LUNA IN NUMBER) is
begin
dev_luna := V_LUNA;
luna := V_LUNA;
end;
------------------------------------------------------------------
procedure setan(V_AN IN NUMBER) is
begin
dev_an := V_AN;
an := V_AN;
end;
------------------------------------------------------------------
procedure setcont(V_CONT IN varchar2) is
begin
cont := V_CONT;
end;
------------------------------------------------------------------
procedure setschema(V_gcs IN varchar2) is
begin
V_schema := v_gcs;
end;
------------------------------------------------------------------
function getlunabal return number is
begin
return lunabal;
end;
------------------------------------------------------------------
function getanbal return number is
begin
return anbal;
end;
------------------------------------------------------------------
function getluna return number is
begin
return dev_luna;
end;
------------------------------------------------------------------
function getan return number is
begin
return dev_an;
end;
------------------------------------------------------------------
function getcont return varchar2 is
begin
return cont;
end;
------------------------------------------------------------------
function getultimazi return date is
begin
return last_day(to_date(dev_an || '/' || dev_luna || '/01',
'YYYY/MM/DD'));
end;
---------------------------------------------------------------
function getschema return varchar2 is
begin
return v_schema;
end;
---------------------------------------------------------------
FUNCTION getoptiunefirma(tcS IN VARCHAR2, tcOptiune IN VARCHAR2)
RETURN VARCHAR2 IS
lcValue Optiuni.Varvalue%Type := '';
BEGIN
BEGIN
select varvalue
INTO lcValue
from optiuni
where UPPER(TRIM(VARNAME)) = UPPER(TRIM(tcOptiune));
EXCEPTION
WHEN OTHERS THEN
lcValue := '';
END;
RETURN lcValue;
END;
---------------------------------------------------------------
FUNCTION getOptiuneFirma(tcOptiune IN VARCHAR2) RETURN VARCHAR2 IS
lcValue Optiuni.Varvalue%Type := '';
BEGIN
lcValue := getOptiuneFirma(user, tcOptiune);
return lcValue;
END;
---------------------------------------------------------------
PROCEDURE set_data_ron(V_GCS VARCHAR2) IS
lcDataRon varchar2(50);
BEGIN
execute immediate 'SELECT varvalue from ' || V_GCS ||
'.optiuni where upper(varname) = ''DATARON'''
into lcDataRon;
if lcDataRon is not null then
pack_contafin.nAnRON := to_number(substr(lcDataRon, 4, 4));
pack_contafin.nLunaRON := to_number(substr(lcDataRon, 1, 2));
else
pack_contafin.nAnRON := 2005;
pack_contafin.nLunaRON := 7;
end if;
END;
---------------------------------------------------------------
FUNCTION get_anron RETURN ACT_TEMP.AN%TYPE IS
BEGIN
return pack_contafin.nAnRON;
END GET_ANRON;
---------------------------------------------------------------
FUNCTION get_lunaron RETURN ACT_TEMP.LUNA%TYPE IS
BEGIN
return pack_contafin.nLunaRon;
END GET_LUNARON;
---------------------------------------------------------------
FUNCTION suma_ron(TNSUMA NUMBER, TNAN NUMBER, TNLUNA NUMBER) RETURN NUMBER IS
BEGIN
IF (tnluna + tnan * 12 <
pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) AND
(pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >=
pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) THEN
RETURN NVL(TNSUMA, 0) / 10000;
ELSE
RETURN NVL(TNSUMA, 0);
END IF;
END SUMA_RON;
---------------------------------------------------------------
FUNCTION suma_ron(TNSUMA NUMBER,
TNAN NUMBER,
TNLUNA NUMBER,
TNPRECIZIE NUMBER) RETURN NUMBER IS
BEGIN
IF (tnluna + tnan * 12 <
pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) AND
(pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >=
pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) THEN
RETURN round(NVL(TNSUMA, 0) / 10000, TNPRECIZIE);
ELSE
RETURN ROUND(NVL(TNSUMA, 0), TNPRECIZIE);
END IF;
END SUMA_RON;
----------------------------
FUNCTION suma_ron(TNSUMA NUMBER, TDDATA DATE) RETURN NUMBER IS
lnAn number(4);
lnLuna number(2);
BEGIN
lnAn := extract(year from TDDATA);
lnLuna := extract(month from TDDATA);
RETURN pack_sesiune.suma_ron(TNSUMA, LNAN, LNLUNA);
END SUMA_RON;
----------------------------
procedure set_id_stat(tn_id_stat IN NUMBER) is
begin
sal_idStat := tn_id_stat;
end;
-----------------------------------
function get_id_stat return number is
begin
return sal_idStat;
end;
-----------------------------------
PROCEDURE set_id_prg_owner(tnId_Prg_Owner IN syn_nom_programe.id_program%Type) IS
BEGIN
id_prg_owner := tnId_Prg_Owner;
END set_id_prg_owner;
-----------------------------------
PROCEDURE set_id_prg(tnId_Prg IN syn_def_programe.id_prog%Type) IS
BEGIN
id_prg := tnId_Prg;
END set_id_prg;
-----------------------------------
FUNCTION get_id_prg_owner return syn_nom_programe.id_program%Type IS
BEGIN
RETURN id_prg_owner;
END get_id_prg_owner;
-----------------------------------
FUNCTION get_id_prg return syn_def_programe.id_prog%Type IS
BEGIN
RETURN id_prg;
END get_id_prg;
-----------------------------------
-----------------------------------
PROCEDURE set_id_util(tnId_Util IN syn_utilizatori.id_util%Type) IS
v_utilizator syn_vutilizatori.UTILIZATOR%type;
BEGIN
nId_Util := tnId_Util;
begin
SELECT UTILIZATOR
INTO v_utilizator
FROM syn_vutilizatori
WHERE ID_UTIL = tnId_Util
AND INACTIV = 0;
exception
when NO_DATA_FOUND then
v_utilizator := '';
end;
dbms_session.set_identifier(v_utilizator);
END set_id_util;
-----------------------------------
FUNCTION get_id_util RETURN syn_utilizatori.id_util%Type IS
BEGIN
RETURN nId_Util;
END get_id_util;
-----------------------------------
procedure set_id_sectie_comenzi(tn_id_sectie IN NUMBER) is
begin
comenzi_idSectie := tn_id_sectie;
end;
-----------------------------------
function get_id_sectie_comenzi return number is
begin
return comenzi_idSectie;
end;
-----------------------------------
function e_mama(tnIdFirma IN NUMBER) return number is
V_E_MAMA NUMBER(1) := 0;
begin
if tnIdFirma IS NOT NULL then
V_E_MAMA := 0;
else
select max(NVL(e_mama, 0))
into V_E_MAMA
from syn_nom_firme
where schema = USER;
end if;
return v_e_mama;
end;
-----------------------------------
PROCEDURE SetOptiuneUtilizator(tcVarname IN OPTIUNI_UTIL.VARNAME%TYPE,
tnIdUtil OPTIUNI_UTIL.ID_UTIL%TYPE,
tcVarvalue OPTIUNI_UTIL.VARVALUE%TYPE,
tcVardesc OPTIUNI_UTIL.VARDESC%TYPE := NULL) IS
BEGIN
MERGE INTO optiuni_util
USING dual
on (upper(varname) = upper(tcVarname) and id_util = tnIdUtil)
WHEN MATCHED THEN
UPDATE SET varvalue = tcVarvalue
WHEN NOT MATCHED THEN
INSERT
(varname, id_util, vardesc, varvalue)
VALUES
(upper(tcVarname), tnIdUtil, tcVardesc, tcVarvalue);
END SetOptiuneUtilizator;
-----------------------------------
PROCEDURE SetOptiune(tcVarname IN OPTIUNI.VARNAME%TYPE,
tcVarvalue OPTIUNI.VARVALUE%TYPE,
tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER',
tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL) IS
BEGIN
MERGE INTO optiuni
USING dual
on (upper(varname) = upper(tcVarname))
WHEN MATCHED THEN
UPDATE SET varvalue = tcVarvalue
WHEN NOT MATCHED THEN
INSERT
(varname, varvalue, vartype, vardesc)
VALUES
(upper(tcVarname), tcVarvalue, tcVarType, tcVardesc);
END SetOptiune;
----------------------------------------------------------------------------
PROCEDURE SetOptiune2(tcVarname IN OPTIUNI.VARNAME%TYPE,
tcVarvalue OPTIUNI.VARVALUE2%TYPE,
tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER',
tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL) IS
BEGIN
MERGE INTO optiuni
USING dual
on (upper(varname) = upper(tcVarname))
WHEN MATCHED THEN
UPDATE SET varvalue2 = tcVarvalue
WHEN NOT MATCHED THEN
INSERT
(varname, varvalue2, vartype, vardesc)
VALUES
(upper(tcVarname), tcVarvalue, tcVarType, tcVardesc);
END SetOptiune2;
----------------------------------------------------------------------------
function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number IS
V_PRET_FARA_TVA number := 0;
V_ZECIMALE number(2);
V_ZECIMALEVAL number(2);
BEGIN
IF V_TIP = 1 THEN
-- achizitie
V_ZECIMALE := pack_sesiune.nzecimale_preta;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval;
ELSE
-- vanzare
V_ZECIMALE := pack_sesiune.nzecimale_pretv;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval;
END IF;
IF V_PRET_ARE_TVA = 0 THEN
-- pretul de referinta este fara tva
IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <>
pack_sesiune.nid_moneda_nationala THEN
-- pretul este in valuta
V_PRET_FARA_TVA := ROUND(V_CURS *
ROUND(V_PRET_UNITAR, V_ZECIMALEVAL),
V_ZECIMALE);
ELSE
V_PRET_FARA_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE);
END IF;
ELSE
-- pretul de referinta este cu tva
V_PRET_FARA_TVA := ROUND(calculeaza_pret_cu_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip)
/ V_PROC_TVA,
V_ZECIMALE);
END IF;
return V_PRET_FARA_TVA;
END calculeaza_pret_fara_tva;
----------------------------------------------------------------------------
function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return NUMBER IS
V_PRET_TVA number := 0;
V_ZECIMALE number(2);
V_ZECIMALEVAL number(2);
BEGIN
IF V_TIP = 1 THEN
-- achizitie
V_ZECIMALE := pack_sesiune.nzecimale_preta;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval;
ELSE
-- vanzare
V_ZECIMALE := pack_sesiune.nzecimale_pretv;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval;
END IF;
IF V_PRET_ARE_TVA = 0 THEN
-- pretul de referinta este fara tva
V_PRET_TVA := ROUND(pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip) *
(V_PROC_TVA - 1),
V_ZECIMALE);
ELSE
-- pretul de referinta este cu tva
V_PRET_TVA := pack_sesiune.calculeaza_pret_cu_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip) -
pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip);
END IF;
return V_PRET_TVA;
END calculeaza_pret_TVA;
----------------------------------------------------------------------------
function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) RETURN NUMBER IS
V_PRET_CU_TVA number := 0;
V_ZECIMALE number(2);
V_ZECIMALEVAL number(2);
BEGIN
IF V_TIP = 1 THEN
-- achizitie
V_ZECIMALE := pack_sesiune.nzecimale_preta;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval;
ELSE
-- vanzare
V_ZECIMALE := pack_sesiune.nzecimale_pretv;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval;
END IF;
IF V_PRET_ARE_TVA = 0 THEN
V_PRET_CU_TVA := pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip) +
pack_sesiune.calculeaza_pret_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip);
ELSE
-- pretul de referinta este cu tva
IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <>
pack_sesiune.nid_moneda_nationala THEN
-- pretul este in valuta
V_PRET_CU_TVA := ROUND(V_CURS * ROUND(V_PRET_UNITAR, V_ZECIMALEVAL),
V_ZECIMALE);
ELSE
V_PRET_CU_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE);
END IF;
END IF;
return V_PRET_CU_TVA;
end calculeaza_pret_cu_tva;
----------------------------------------------------------------------------
function converteste_pret_fara_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return number IS
V_PRET_FARA_TVA number := 0;
V_ZECIMALE number(2);
V_ZECIMALEVAL number(2);
BEGIN
IF V_TIP = 1 THEN
-- achizitie
V_ZECIMALE := pack_sesiune.nzecimale_preta;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval;
ELSE
-- vanzare
V_ZECIMALE := pack_sesiune.nzecimale_pretv;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval;
END IF;
IF V_PRET_ARE_TVA = 0 THEN
-- pretul de referinta este fara tva
IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <>
pack_sesiune.nid_moneda_nationala THEN
-- pretul este in valuta
V_PRET_FARA_TVA := ROUND(ROUND(V_PRET_UNITAR, V_ZECIMALE) / V_CURS,
V_ZECIMALEVAL);
ELSE
V_PRET_FARA_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE);
END IF;
ELSE
-- pretul de referinta este cu tva
V_PRET_FARA_TVA := ROUND(pack_sesiune.converteste_pret_cu_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip)
/ V_PROC_TVA,
(CASE
WHEN NVL(V_ID_VALUTA,
pack_sesiune.nid_moneda_nationala) <>
pack_sesiune.nid_moneda_nationala THEN
V_ZECIMALEVAL
ELSE
V_ZECIMALE
END));
END IF;
return V_PRET_FARA_TVA;
END converteste_pret_fara_tva;
----------------------------------------------------------------------------
function converteste_pret_TVA(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) return NUMBER IS
V_PRET_TVA number := 0;
V_ZECIMALE number(2);
V_ZECIMALEVAL number(2);
BEGIN
IF V_TIP = 1 THEN
-- achizitie
V_ZECIMALE := pack_sesiune.nzecimale_preta;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval;
ELSE
-- vanzare
V_ZECIMALE := pack_sesiune.nzecimale_pretv;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval;
END IF;
IF V_PRET_ARE_TVA = 0 THEN
-- pretul de referinta este fara tva
V_PRET_TVA := ROUND(pack_sesiune.converteste_pret_fara_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip) *
(V_PROC_TVA - 1),
(CASE
WHEN NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <>
pack_sesiune.nid_moneda_nationala THEN
V_ZECIMALEVAL
ELSE
V_ZECIMALE
END));
ELSE
-- pretul de referinta este cu tva
V_PRET_TVA := pack_sesiune.converteste_pret_cu_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip) -
pack_sesiune.converteste_pret_fara_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip);
END IF;
return V_PRET_TVA;
END converteste_pret_TVA;
----------------------------------------------------------------------------
function converteste_pret_cu_tva(V_PRET_UNITAR IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_TIP IN NUMBER) RETURN NUMBER IS
V_PRET_CU_TVA number := 0;
V_ZECIMALE number(2);
V_ZECIMALEVAL number(2);
BEGIN
IF V_TIP = 1 THEN
-- achizitie
V_ZECIMALE := pack_sesiune.nzecimale_preta;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval;
ELSE
-- vanzare
V_ZECIMALE := pack_sesiune.nzecimale_pretv;
V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval;
END IF;
IF V_PRET_ARE_TVA = 0 THEN
V_PRET_CU_TVA := pack_sesiune.converteste_pret_fara_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip) +
pack_sesiune.converteste_pret_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip);
ELSE
-- pretul de referinta este cu tva
IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <>
pack_sesiune.nid_moneda_nationala THEN
-- pretul este in valuta
V_PRET_CU_TVA := ROUND(ROUND(V_PRET_UNITAR, V_ZECIMALE) / V_CURS,
V_ZECIMALEVAL);
ELSE
V_PRET_CU_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE);
END IF;
END IF;
return V_PRET_CU_TVA;
end converteste_pret_cu_tva;
----------------------------------------------------------------------------
FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER,
V_AJUSTARE IN NUMBER,
V_CURS IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_CANTITATE IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER)
RETURN NUMBER IS
V_SUMA_CU_TVA ACT.SUMA%TYPE;
V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET,
pack_sesiune.nzecimale_pretv);
V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA,
pack_sesiune.nzecimale_sumav);
BEGIN
IF V_PRET_CU_TVA = 1 THEN
IF V_DISCOUNT_EVIDENTIAT = 1 THEN
V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET,
V_ZECIMALEPRET) +
ROUND(NVL(V_AJUSTARE, 0) * V_PROC_TVAV,
V_ZECIMALEPRET)) * V_CANTITATE,
V_ZECIMALESUMA) -
ROUND(ROUND(NVL(V_CURS, 1) *
NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALEPRET) * V_CANTITATE,
V_ZECIMALESUMA);
ELSE
V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) *
ROUND(V_PRET, V_ZECIMALEPRET),
V_ZECIMALEPRET) -
ROUND(NVL(V_CURS, 1) *
ROUND(NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALEPRET),
V_ZECIMALEPRET) +
ROUND(NVL(V_AJUSTARE, 0) * V_PROC_TVAV,
V_ZECIMALEPRET)) * V_CANTITATE,
V_ZECIMALESUMA);
END IF;
ELSE
V_SUMA_CU_TVA := pack_sesiune.calculeaza_total_fara_tva(V_PRET,
V_AJUSTARE,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV,
V_ZECIMALEPRET,
V_ZECIMALESUMA) +
pack_sesiune.calculeaza_total_tva(V_PRET,
V_AJUSTARE,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV,
V_ZECIMALEPRET,
V_ZECIMALESUMA);
END IF;
RETURN V_SUMA_CU_TVA;
END calculeaza_total_cu_tva;
----------------------------------------------------------------------------
FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER,
V_AJUSTARE IN NUMBER,
V_CURS IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_CANTITATE IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER)
RETURN NUMBER IS
V_SUMA_FARA_TVA ACT.SUMA%TYPE;
V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET,
pack_sesiune.nzecimale_pretv);
V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA,
pack_sesiune.nzecimale_sumav);
BEGIN
IF V_PRET_CU_TVA = 1 THEN
V_SUMA_FARA_TVA := pack_sesiune.calculeaza_total_cu_tva(V_PRET,
V_AJUSTARE,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV,
V_ZECIMALEPRET,
V_ZECIMALESUMA) -
pack_sesiune.calculeaza_total_tva(V_PRET,
V_AJUSTARE,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV,
V_ZECIMALEPRET,
V_ZECIMALESUMA);
ELSE
IF V_DISCOUNT_EVIDENTIAT = 1 THEN
V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET,
V_ZECIMALEPRET) +
NVL(V_AJUSTARE, 0)) * V_CANTITATE,
V_ZECIMALESUMA) -
ROUND(ROUND(NVL(V_CURS, 1) *
NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALEPRET) * V_CANTITATE,
V_ZECIMALESUMA);
ELSE
V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) *
ROUND(V_PRET, V_ZECIMALEPRET),
V_ZECIMALEPRET) -
ROUND(NVL(V_CURS, 1) *
ROUND(NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALEPRET),
V_ZECIMALEPRET) +
NVL(V_AJUSTARE, 0)) * V_CANTITATE,
V_ZECIMALESUMA);
END IF;
END IF;
RETURN V_SUMA_FARA_TVA;
END calculeaza_total_fara_tva;
----------------------------------------------------------------------------
FUNCTION calculeaza_total_tva(V_PRET IN NUMBER,
V_AJUSTARE IN NUMBER,
V_CURS IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_CANTITATE IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER)
RETURN NUMBER IS
V_SUMA_TVA ACT.SUMA%TYPE;
V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET,
pack_sesiune.nzecimale_pretv);
V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA,
pack_sesiune.nzecimale_sumav);
BEGIN
IF V_PRET_CU_TVA = 1 THEN
V_SUMA_TVA := ROUND(pack_sesiune.calculeaza_total_cu_tva(V_PRET,
V_AJUSTARE,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV,
V_ZECIMALEPRET,
V_ZECIMALESUMA) *
(V_PROC_TVAV - 1) / V_PROC_TVAV,
V_ZECIMALESUMA);
ELSE
IF V_DISCOUNT_EVIDENTIAT = 1 THEN
V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * V_PRET,
V_ZECIMALEPRET) +
NVL(V_AJUSTARE, 0)) * V_CANTITATE,
V_ZECIMALESUMA) * (V_PROC_TVAV - 1),
V_ZECIMALESUMA) -
ROUND(ROUND(ROUND(NVL(V_CURS, 1) *
NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALEPRET) * V_CANTITATE,
V_ZECIMALESUMA) * (V_PROC_TVAV - 1),
V_ZECIMALESUMA);
ELSE
V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) *
ROUND(V_PRET, V_ZECIMALEPRET),
V_ZECIMALEPRET) -
ROUND(NVL(V_CURS, 1) *
ROUND(NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALEPRET),
V_ZECIMALEPRET) +
NVL(V_AJUSTARE, 0)) * V_CANTITATE,
V_ZECIMALESUMA) * (V_PROC_TVAV - 1),
V_ZECIMALESUMA);
END IF;
END IF;
RETURN V_SUMA_TVA;
END calculeaza_total_tva;
----------------------------------------------------------------------------
function tva2proctva(V_TVA IN ACT.SUMA%TYPE,
V_PRET IN ACT.SUMA%TYPE,
V_AN IN ACT.AN%TYPE,
V_LUNA IN ACT.LUNA%TYPE) RETURN ACT.PROC_TVA%TYPE is
V_PROC_TVA ACT.PROC_TVA%TYPE;
BEGIN
if V_PRET = 0 or V_TVA = 0 then
V_PROC_TVA := 1;
else
V_PROC_TVA := ROUND(V_TVA / V_PRET, 2);
if V_PROC_TVA between 0.03 and 0.07 then
V_PROC_TVA := 1.05;
elsif V_PROC_TVA between 0.08 and 0.11 then
V_PROC_TVA := 1.09;
else
V_PROC_TVA := pack_contafin.getCotaTVAStandard(V_LUNA, V_AN);
end if;
end if;
return V_PROC_TVA;
END tva2proctva;
----------------------------------------------------------------------------
function tva2proctva(V_TVA IN ACT.SUMA%TYPE, V_PRET IN ACT.SUMA%TYPE)
RETURN ACT.PROC_TVA%TYPE is
BEGIN
return pack_sesiune.tva2proctva(V_TVA,
V_PRET,
pack_sesiune.an,
pack_sesiune.luna);
END tva2proctva;
----------------------------------------------------------------------------
FUNCTION verifica_acces(V_TABELA IN VARCHAR2,
V_ID IN NUMBER,
V_MINUTE_MAX IN NUMBER) RETURN VARCHAR2 IS
BEGIN
RETURN pack_sesiune.verifica_acces(V_TABELA, V_ID, V_MINUTE_MAX, 1);
END verifica_acces;
----------------------------------------------------------------------------
FUNCTION verifica_acces(V_TABELA IN VARCHAR2,
V_ID IN NUMBER,
V_MINUTE_MAX IN NUMBER,
V_TIP IN NUMBER) RETURN VARCHAR2 IS
-- V_TIP = 1 - verifica si blocheaza
-- = 2 - doar verifica
V_MESAJ VARCHAR2(1000);
V_DATAORAE DATE;
V_DATA_ACTUALA DATE;
BEGIN
BEGIN
SELECT MAX(DATAORAE) AS DATAORAE, SYSDATE
INTO V_DATAORAE, V_DATA_ACTUALA
FROM TABELE_BLOCATE
WHERE TABELA = V_TABELA
AND ID = V_ID;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_DATAORAE := NULL;
V_DATA_ACTUALA := NULL;
END;
IF V_DATAORAE IS NULL THEN
V_MESAJ := NULL;
IF V_TIP = 1 THEN
pack_sesiune.blocheaza_acces(V_TABELA, V_ID, NVL(V_MINUTE_MAX, 60));
END IF;
ELSE
IF V_DATA_ACTUALA > V_DATAORAE THEN
V_MESAJ := NULL;
pack_sesiune.deblocheaza_acces_expirat(V_TABELA, V_ID);
IF V_TIP = 1 THEN
pack_sesiune.blocheaza_acces(V_TABELA,
V_ID,
NVL(V_MINUTE_MAX, 60));
END IF;
ELSE
V_MESAJ := 'Nu puteti face operatii asupra acestei inregistrari! Sesiunea expira la ' ||
to_char(V_DATAORAE, 'DD/MM/YYYY HH24:mi:ss') || ' !';
END IF;
END IF;
RETURN V_MESAJ;
END verifica_acces;
----------------------------------------------------------------------------
PROCEDURE blocheaza_acces(V_TABELA IN VARCHAR2,
V_ID IN NUMBER,
V_MINUTE_MAX IN NUMBER) is
BEGIN
INSERT INTO TABELE_BLOCATE
(SID, TABELA, ID, DATAORAE)
VALUES
(sys_context('userenv', 'SID'),
V_TABELA,
V_ID,
SYSDATE + NVL(V_MINUTE_MAX, 60) / (24 * 60));
END blocheaza_acces;
----------------------------------------------------------------------------
PROCEDURE deblocheaza_acces(V_SID IN NUMBER) is
BEGIN
DELETE FROM TABELE_BLOCATE WHERE SID = V_SID;
END deblocheaza_acces;
----------------------------------------------------------------------------
PROCEDURE deblocheaza_acces(V_TABELA IN VARCHAR2, V_ID IN NUMBER) is
BEGIN
DELETE FROM TABELE_BLOCATE
WHERE SID = sys_context('userenv', 'SID')
AND TABELA = V_TABELA
AND ID = V_ID;
END deblocheaza_acces;
----------------------------------------------------------------------------
PROCEDURE deblocheaza_acces_expirat(V_TABELA IN VARCHAR2, V_ID IN NUMBER) is
BEGIN
DELETE FROM TABELE_BLOCATE
WHERE TABELA = V_TABELA
AND ID = V_ID;
END deblocheaza_acces_expirat;
----------------------------------------------------------------------------
begin
pack_sesiune.nid_moneda_nationala := pack_def.GetIdMonedaNationala();
pack_sesiune.nzecimale_preta := PACK_SESIUNE.getoptiunefirma(USER,
'PPRET');
pack_sesiune.nzecimale_pretv := PACK_SESIUNE.getoptiunefirma(USER,
'PPRETV');
pack_sesiune.nzecimale_pretaval := PACK_SESIUNE.getoptiunefirma(USER,
'PPRETVAL');
pack_sesiune.nzecimale_pretvval := PACK_SESIUNE.getoptiunefirma(USER,
'PVAL');
pack_sesiune.nzecimale_sumaa := PACK_SESIUNE.getoptiunefirma(USER,
'PC');
pack_sesiune.nzecimale_sumav := PACK_SESIUNE.getoptiunefirma(USER,
'PC');
pack_sesiune.nzecimale_sumaval := PACK_SESIUNE.getoptiunefirma(USER,
'PVAL');
end pack_sesiune;
/