Files
gomag-vending/api/database-scripts/08_PACK_FACTURARE.pck
Claude Agent a9d0cead79 chore: commit all pending changes including deploy scripts and Windows config
- deploy.ps1, iis-web.config: Windows Server deployment scripts
- api/app/routers/sync.py, dashboard.py: router updates
- api/app/services/import_service.py, sync_service.py: service updates
- api/app/static/css/style.css, js/*.js: UI updates
- api/database-scripts/08_PACK_FACTURARE.pck: Oracle package
- .gitignore: add .gittoken
- CLAUDE.md, agent configs: documentation updates

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 15:05:04 +00:00

16929 lines
772 KiB
Plaintext

CREATE OR REPLACE PACKAGE "PACK_FACTURARE" is
-- Author : MARIUS.ATANASIU
-- Created : 05/09/2005 09:25:00 AM
-- Purpose :
-- 30.10.2009
-- marius.mutu
-- nTipVanzareRetail in contabilizeaza_articol, scrie_tva
-- nTipIncasare: scrie_incsare2
-- descarca_gestiune - tva adaos
cnume_program VARCHAR(30) := 'ROAFACTURARE';
TYPE cursor_facturare IS REF CURSOR;
TYPE tip_date_gestiune IS RECORD(
id_gestiune NOM_GESTIUNI.ID_GESTIUNE%TYPE,
id_tip_gest TIPURI_GESTIUNI.ID_TIPGEST%TYPE,
cont NOM_GESTIUNI.CONT%TYPE,
acont NOM_GESTIUNI.ACONT%TYPE);
TYPE linie_stoc IS RECORD(
TIP NUMBER(1),
pret RUL.PRET%TYPE,
pretv RUL.PRETV%TYPE,
acont RUL.ACONT%TYPE,
cants STOC.CANTS%TYPE,
cant RUL.CANT%TYPE,
cante RUL.CANTE%TYPE,
tvav RUL.TVAV%TYPE,
proc_tvav RUL.PROC_TVAV%TYPE,
tva RUL.TVA%TYPE,
datain RUL.DATAIN%TYPE,
id_rul_aux RUL.ID_RUL_AUX%TYPE,
pretd RUL.PRETD%TYPE,
id_valuta RUL.ID_VALUTA%TYPE,
LOT RUL.LOT%TYPE,
ADATA_EXPIRARE RUL.ADATA_EXPIRARE%TYPE,
serie RUL.SERIE%TYPE,
ID_LUCRARE_REZ RUL.ID_LUCRARE_REZ%TYPE,
ID_PART_REZ RUL.ID_PART_REZ%TYPE,
PRETACHCTVA NOM_ARTICOLE.PRETACHCTVA%TYPE);
TYPE tab_stoc_type IS TABLE OF linie_stoc;
TYPE articol_aviz IS RECORD(
ID_VANZARE VANZARI_DETALII.ID_VANZARE%TYPE,
ID_VANZARE_DET VANZARI_DETALII.ID_VANZARE_DET%TYPE,
CANTITATE VANZARI_DETALII.CANTITATE%TYPE,
CUSTODIE VANZARI_DETALII.CUSTODIE%TYPE,
COD ACT.COD%TYPE,
ID_FACT ACT.ID_FACT%TYPE,
NRACT ACT.NRACT%TYPE,
SERIE_ACT ACT.SERIE_ACT%TYPE,
DATAACT ACT.DATAACT%TYPE,
ASCD ACT.ASCD%TYPE,
ID_SECTIE ACT.ID_SECTIE%TYPE);
TYPE tab_articole_aviz_type IS TABLE OF articol_aviz;
nid_tipnir SERII_TIPDOC.ID_TIPDOC%TYPE := 1;
nid_tipbon SERII_TIPDOC.ID_TIPDOC%TYPE := 2;
nid_tipfactura SERII_TIPDOC.ID_TIPDOC%TYPE := 5;
nid_tipaviz SERII_TIPDOC.ID_TIPDOC%TYPE := 6;
-- 30.10.2009
nTipVanzareRetail VANZARI.TIP%TYPE := 43;
-- 30.10.2009 ^
-- 26.08.2009
nTipFacturaHotel VANZARI.TIP%TYPE := 44;
nTipFacturaRestaurant VANZARI.TIP%TYPE := 45;
-- 26.08.2009 ^
nTipNotaPlata VANZARI.TIP%TYPE := 46;
nTipFacturaACN VANZARI.TIP%TYPE := 51;
/*** Valori pentru (lnIdSet,tnTip)
** Facturare
** (25000,1) - pe baza de lista de preturi ( 25010 - daca e cu scadere din gestiune )
** (25001,2) - pe baza de contracte ( 25011 - daca e cu scadere din gestiune )
** (25002,3) - pe baza de comenzi ( 25012 - daca e cu scadere din gestiune )
** (25003,4) - pe baza de avize ( 25013 - daca e cu scadere din gestiune )
** (25004,5) - pe baza de lista de preturi in valuta ( 25014 - daca e cu scadere din gestiune )
** (25005,6) - pe baza de contract in valuta ( 25015 - daca e cu scadere din gestiune )
** (25006,7) - credit note
** (25007,8) - retur factura in lei ( 25017 )
** (25008,9) - retur factura in valuta ( 25018 )
** (25009,10) - factura fiscala in valuta ( 25019 )
** (25042,43) - bon fiscal ROARETAIL ( 25052 - daca e cu scadere din gestiune )
** (25043,44) - factura hotel
** (25044,45) - factura restaurant ( 25054 )
** (25045,46) - nota de plata restaurant ( 25055 )
** (25047,48) - factura marfa custodie cu desc. k ( 25057 )
** (25048,49) - factura marfa custodie fara desc. k ( 25058 )
** (25051,52) - pe baza de contract factura fiscala in valuta ( 25061 - daca e cu scadere din gestiune )
** Avize de expeditie
** (25020,21) - catre clienti din comanda ( 25030 - daca e cu scadere din gestiune )
** (25021,22) - catre clienti din lista ( 25031 - daca e cu scadere din gestiune )
** (25022,23) - transfer catre subunitati din lista ( 25032 - daca e cu scadere din gestiune )
** (25023,24) - aviz de retur ( 25033 - daca e cu scadere din gestiune )
** (25024,25) - transfer catre subunitati din comanda ( 25034 - daca e cu scadere din gestiune )
** (25025,26) - catre clienti din contract ( 25035 - daca e cu scadere din gestiune )
** (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune )
** (25027,28) - catre clienti debitori din comanda ( 25037 - daca e cu scadere din gestiune )
** (25028,29) - catre clienti debitori din lista ( 25038 - daca e cu scadere din gestiune )
** (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune )
** (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune )
** (25041,42) - catre clienti custodie pe baza de comanda ( 25051 - daca e cu scadere din gestiune )
** (25046,47) - catre clienti custodie pe baza de comanda ptr. descarcare cu K ( 25056 - daca e cu scadere din gestiune )
** (25049,50) - in lucru retur de la clienti custodie ( 25059 - daca e cu scadere din gestiune )
** ROAGEST
** (236/240/241/242,-6) - retur de la gestiune valorica
**
** ROARETAIL
** (25042,43) - bonuri fiscale colectate de la magazine ( 25052 - daca e cu scadere din gestiune )
** ROAACNPRO
** (50100,51) - factura ROAACNPRO ( 25060 - daca e cu scadere din gestiune )
*/
--------------------------------------
nTipIncasareBonFiscal NUMBER := 2;
nTipIncasareCardBancar NUMBER := 3;
nTipIncasareTichete NUMBER := 5;
nTipIncasareChitanta NUMBER := 11;
------------------------------------
nSaftPaymentCodeNumerar varchar2(9) := '10';
nSaftPaymentCodeCard varchar2(9) := '48';
------------------------------------
nid_act ACT.ID_ACT%TYPE;
nid_serie SERII.ID_SERIE%TYPE;
cserie_act SERII.SERIE%TYPE;
v_date_gestiune tip_date_gestiune;
ddata_curs DATE;
ddata_ireg ACT.DATAIREG%TYPE;
nid_fdoc ACT.ID_FDOC%TYPE;
ddata_act ACT.DATAACT%TYPE;
ddata_scadenta ACT.DATASCAD%TYPE;
nnumar_act ACT.NRACT%TYPE;
nid_part ACT.ID_PARTD%TYPE;
nid_part_rez ACT.ID_PARTD%TYPE;
nid_lucrare NOM_LUCRARI.ID_LUCRARE%TYPE;
nid_sectie_stoc NOM_SECTII.ID_SECTIE%TYPE; -- id_sectie pentru politica de preturi cu facturare din stoc
nid_gestiune_sursa NOM_GESTIUNI.ID_GESTIUNE%TYPE;
nid_responsabil ACT.ID_RESPONSABIL%TYPE;
cexplicatia4 ACT.EXPLICATIA4%TYPE;
nid_ordl DEV_ORDL.ID_ORDL%TYPE;
nid_set ACT.ID_SET%TYPE;
nid_util SYN_UTILIZATORI.ID_UTIL%TYPE;
nproc_tva_max ACT.PROC_TVA%TYPE;
cdescriere ACT.EXPLICATIA%TYPE;
ntip NUMBER(2);
nid_moneda_nationala NOM_VALUTE.ID_VALUTA%TYPE;
nid_fact ACT.ID_FACT%TYPE;
nid_factc ACT.ID_FACTC%TYPE;
nperechec ACT.PERECHEC%TYPE;
nid_partc ACT.ID_PARTC%TYPE;
nid_jtva_coloana ACT.ID_JTVA_COLOANA%TYPE;
nTaxCode ACT.TAXCODE%TYPE;
ntva_incasare NUMBER(1);
nid_comanda COMENZI.ID_COMANDA%TYPE;
nin_valuta VANZARI.IN_VALUTA%TYPE;
nid_valuta NOM_VALUTE.ID_VALUTA%TYPE;
nid_politica_stoc CRM_POLITICI_PRETURI.ID_POL%TYPE;
nid_sucursala SYN_NOM_FIRME.ID_FIRMA%TYPE;
nid_venchelt NOM_VENIT_CHELTUIELI.ID_VENCHELT%TYPE;
ntotftva ACT.SUMA%TYPE;
ntottva ACT.SUMA%TYPE;
ndifftva VANZARI.DIFTOTFTVA%TYPE;
ndiftva VANZARI.DIFTOTTVA%TYPE;
nfactavizcust NUMBER(1);
nafisare_scadenta VANZARI.AFISARE_SCADENTA%TYPE;
ncoeficient_k VANZARI.COEFICIENT_K%TYPE;
cserie_act_incasare SERII.SERIE%TYPE;
nnumar_act_incasare ACT.NRACT%TYPE;
ntip_doc_incasare NUMBER(2); -- 2 (BON FISCAL) sau 11 (CHITANTA) pentru SCRIE_IN_VANZARI
nsuma_incasare ACT.SUMA%TYPE; -- SUMA pentru SCRIE_IN_VANZARI
-- in rate sau articole
clistaid VARCHAR2(3000);
clistaid_avize VARCHAR2(3000); -- folosit pentru facturare din avize
nid_vanzare VANZARI.ID_VANZARE%TYPE;
ccod_retur VARCHAR2(3000);
clista_cursuri VARCHAR2(1000);
nluna ACT.LUNA%TYPE;
nan ACT.AN%TYPE;
nzecimale_procent NUMBER(2);
nscadere_stoc NUMBER(1) := 0;
ndiscount_evidentiat NUMBER(1) := 0;
cascc ACT.ASCC%TYPE;
cascd ACT.ASCD%TYPE;
nnumar_bon ACT.NNIR%TYPE := 0;
nanalitice_378 NUMBER(1) := 0;
ntip_factura VANZARI.TIP_FACTURA%TYPE;
nid_beneficiar VANZARI.ID_BENEFICIAR%TYPE;
ntip_saft VANZARI.TIP_SAFT%TYPE; -- EFACTURA 380/381/751
PROCEDURE verificare_setari_program(V_ID_UTIL IN NUMBER,
V_MESAJ OUT VARCHAR2);
PROCEDURE initializeaza_facturare(V_ID_UTIL IN NUMBER);
PROCEDURE initializeaza_seturi_temp;
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER);
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_EXPLICATIA4 IN VARCHAR2,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER);
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_EXPLICATIA4 IN VARCHAR2,
V_ID_ORDL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER);
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_EXPLICATIA4 IN VARCHAR2,
V_ID_ORDL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER,
V_TIP_FACTURA IN NUMBER,
V_ID_BENEFICIAR IN NUMBER,
V_TIP_SAFT IN NUMBER DEFAULT 380);
PROCEDURE initializeaza_setari_facturare;
PROCEDURE initializeaza_date_gestiune(V_ID_GESTIUNE IN NUMBER,
V_ID_TIPGEST IN NUMBER,
V_CONT IN VARCHAR2,
V_ACONT IN VARCHAR2);
PROCEDURE citeste_setari_document(V_TIP IN NUMBER,
V_ID_FDOC OUT NUMBER,
V_FDOC OUT VARCHAR2);
PROCEDURE citeste_setari_partener(V_TIP IN NUMBER,
V_ID_PART OUT NUMBER,
V_DENUMIRE OUT VARCHAR2);
PROCEDURE citeste_setari_pol_pret(V_TIP IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_POL OUT NUMBER,
V_DENUMIRE OUT VARCHAR2);
PROCEDURE genereaza_numar_proforma(V_NR_PROFORMA OUT NUMBER);
PROCEDURE completare_politica_stoc;
PROCEDURE modificare_politica_stoc(V_ID_POL IN NUMBER);
PROCEDURE cursor_preturi(V_DATA_CURS IN DATE,
V_TIP IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_ID_GESTIUNE_INIT IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_contract(V_DATA_CURS IN DATE,
V_TIP IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_GESTIUNE_INIT IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_AGENT OUT NUMBER,
V_NUME_AGENT OUT VARCHAR2,
V_CURSOR OUT cursor_facturare,
V_CURSOR2 OUT cursor_facturare);
PROCEDURE cursor_comanda(V_DATA_CURS IN DATE,
V_TIP IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_lucrare(V_DATA_CURS IN DATE,
V_ID_GESTIUNE IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_articole_k(V_DATA_CURS IN DATE,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_avize(V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_DISCOUNT OUT NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_aviz_nir(V_ID_GESTIUNE_DEST IN NUMBER,
V_ID_FURNIZOR IN NUMBER,
V_NR_ACT IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_retur(V_IN_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_retur_document(V_IN_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_COPIERE IN NUMBER,
V_PROFORMA IN NUMBER,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_copiere(V_IN_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_gestiune(V_DATA_CURS IN DATE,
V_ID_POL IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_gestiuni_articol(V_ID_ARTICOL IN NUMBER,
V_TIP IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_gestiuni_articol_stoc0(V_ID_ARTICOL IN NUMBER,
V_TIP IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE cursor_gestiuni_articol_retur(V_ID_ARTICOL IN NUMBER,
V_TIP IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_PRETV IN NUMBER,
V_DISCOUNT IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare);
PROCEDURE adauga_articol_factura_deviz(V_ID_ARTICOL IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_ID_JTVA_COLOANA_EX IN NUMBER DEFAULT NULL,
V_ID_CTR IN NUMBER DEFAULT NULL,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_LOT IN VARCHAR2 DEFAULT NULL);
PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_ID_RUL_AUX IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_LOT IN VARCHAR2 DEFAULT NULL);
PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN NUMBER,
V_PRET_CU_TVA IN NUMBER);
PROCEDURE adauga_articol_lucrare_pret(V_ID_COMANDA IN NUMBER,
V_ID_ARTICOL IN NUMBER,
V_ID_POL IN NUMBER,
V_CANTITATE IN NUMBER,
V_CONT IN VARCHAR2,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_ID_GESTIUNE_DEST IN NUMBER,
V_ID_UTIL IN NUMBER,
V_PRETIN in number);
PROCEDURE adauga_articol_set(V_ID_VANZARE_SET IN NUMBER,
V_DENUMIRE IN VARCHAR2,
V_EXPLICATIE IN VARCHAR2,
V_UM IN VARCHAR2,
V_SERIE IN VARCHAR2,
V_CANTITATE IN NUMBER,
V_PRET IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER);
PROCEDURE adauga_articol_factura(V_ID_TEMP IN NUMBER,
V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_EXPLICATIE IN VARCHAR2,
V_ID_POL IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_PRET_ACHIZITIE_TEMP IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET_TEMP IN NUMBER,
V_ID_VALUTA_TEMP IN NUMBER,
V_PRETURI_CU_TVA_TEMP IN NUMBER,
V_IN_STOC_TEMP IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_CONT IN VARCHAR2,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_ID_PART_REZ IN NUMBER,
V_ID_LUCRARE_REZ IN NUMBER,
V_PRETV_ORIG IN NUMBER,
V_ID_VANZARE_SET IN NUMBER,
V_ID_CTR IN NUMBER,
V_ID_UTIL IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_LOT IN VARCHAR2 DEFAULT NULL);
PROCEDURE sterge_articol_factura(V_ID_TEMP IN NUMBER,
V_ID_UTIL IN NUMBER);
PROCEDURE adauga_diferente_pret(V_SIR_ID_TEMP IN VARCHAR2,
V_SIR_DIFERENTA IN VARCHAR,
V_ID_UTIL IN NUMBER);
PROCEDURE adauga_rata_factura(V_ID_RATA IN NUMBER,
V_PRET IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL);
PROCEDURE sterge_rata_factura(V_ID_RATA IN NUMBER, V_ID_UTIL IN NUMBER);
PROCEDURE sterge_proforma_old(V_ID_PROFORMA IN NUMBER,
V_ID_UTIL IN NUMBER);
PROCEDURE sterge_factura(V_ID_VANZARE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER);
PROCEDURE sterge_proforma(V_ID_VANZARE IN NUMBER, V_ID_UTIL IN NUMBER);
PROCEDURE scrie_proforma_old(V_DISCOUNT_PROFORMA IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_ID_PROFORMA OUT NUMBER,
V_NUMAR_ACT OUT NUMBER);
PROCEDURE scrie_proforma(V_TOTFTVA IN NUMBER,
V_TOTTVA IN NUMBER,
V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER);
PROCEDURE inchide_comanda;
PROCEDURE scrie_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_ID_SERIE_ACT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);
/* PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER,
V_TOTTVA IN NUMBER,
V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/
PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER,
V_TOTTVA IN NUMBER,
V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);
/* PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_TEXT_ADITIONAL_RETUR IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_SERIE_ACT IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_ID_VANZARE_RETUR OUT NUMBER,
V_CURSOR_RETUR OUT cursor_facturare);*/
PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_TEXT_ADITIONAL_RETUR IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_SERIE_ACT IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_ID_VANZARE_RETUR OUT NUMBER,
V_CURSOR_RETUR OUT cursor_facturare);
/* PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_VERIFICARE_FACTURAT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/
PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_VERIFICARE_FACTURAT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);
/* PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_SCRIS OUT NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/
PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_SCRIS OUT NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);
FUNCTION contabilizeaza_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE)
RETURN NUMBER;
FUNCTION contabilizeaza_rata(detalii_rata VANZARI_DETALII_TEMP%ROWTYPE)
RETURN NUMBER;
PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRETV_ALES IN NUMBER,
V_PRET_UNITAR IN NUMBER,
V_AJUSTARE IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_CANTE IN NUMBER,
V_DISCOUNT IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_CONT IN VARCHAR2,
V_ID_VENCHELT IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_ID_PART_REZ IN NUMBER,
V_ID_LUCRARE_REZ IN NUMBER);
PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRETV_ALES IN NUMBER,
V_PRET_UNITAR IN NUMBER,
V_AJUSTARE IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_CANTE IN NUMBER,
V_DISCOUNT IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_CONT IN VARCHAR2,
V_ID_VENCHELT IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_ID_PART_REZ IN NUMBER,
V_ID_LUCRARE_REZ IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_TAXCODE IN NUMBER);
PROCEDURE scrie_fact_aviz_custodie(V_COD IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_ARTICOL IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN VARCHAR2,
V_CANTITATE IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRETV IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_PROC_TVAV IN NUMBER);
PROCEDURE transfera_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE);
FUNCTION scrie_nota(V_CANTITATE IN NUMBER,
V_PRET IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_PRET_ARE_TVA IN NUMBER, -- 0 DACA V_PRET NU CONTINE SI TVA-UL ( PRETUL FOLOSIT CA REFERINTA )
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_CTR IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_SCD IN VARCHAR2,
V_ASCD IN VARCHAR2,
V_SCC IN VARCHAR2,
V_ASCC IN VARCHAR2,
V_ID_GESTIN IN NUMBER,
V_ID_GESTOUT IN NUMBER,
V_ID_SET IN NUMBER,
V_CU_TVA IN NUMBER, -- 0 DACA SE SCRIE SI NOTA DE TVA
V_PTVA IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_PAYMENTCODE IN NUMBER DEFAULT NULL) RETURN NUMBER;
PROCEDURE scrie_tva(V_SUMA IN NUMBER,
V_SUMA_VAL IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_CONT IN VARCHAR2,
V_ACONT IN VARCHAR2,
V_CURS IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_CTR IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_PTVA IN NUMBER,
V_ID_FACT IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER);
FUNCTION scrie_discount(V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_ASCC IN VARCHAR2,
V_ID_SECTIE IN NUMBER,
V_ID_CTR IN NUMBER,
V_CURS IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_CU_TVA IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL)
RETURN NUMBER;
PROCEDURE scrie_descarcare_k(V_COEFICIENT_K IN NUMBER);
PROCEDURE scrie_avans(V_SUMA IN NUMBER);
Procedure scrie_incasari(V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_CTR IN NUMBER);
PROCEDURE scrie_incasare2(V_TIP IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_ID_CTR IN NUMBER,
V_ID_BANCASA IN NUMBER,
V_SUMA IN NUMBER,
V_ASCC IN ACT.ASCC%TYPE DEFAULT NULL,
V_PSCD IN ACT.SCD%TYPE DEFAULT NULL,
V_ASCD IN ACT.ASCD%TYPE DEFAULT NULL);
/* PROCEDURE scrie_incasare(V_NUMAR_ACT_INCASARE IN NUMBER,
V_ID_CTR IN NUMBER,
V_ID_CASA IN NUMBER,
V_SUMA IN NUMBER);*/
PROCEDURE scrie_note_banca_compensari;
/* PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_ID_VANZARE OUT NUMBER);*/
PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_ID_VANZARE OUT NUMBER);
PROCEDURE scrie_atasamente_factura(V_ID_VANZARE IN NUMBER,
V_NUME_FRX IN NUMBER,
V_WDOCUMENT IN BLOB,
V_ID_UTIL IN NUMBER);
PROCEDURE scrie_seturi;
PROCEDURE scrie_seturi_proforma;
PROCEDURE initializeaza_part_rez(V_ID_PART IN NUMBER);
PROCEDURE cumuleaza_note_act;
PROCEDURE cumuleaza_note_act_temp;
PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);
PROCEDURE modifica_date_factura(V_ID_VANZARE IN NUMBER,
V_ID_RUTA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_AGENT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_FACTURARE IN VANZARI.ID_FACTURARE%TYPE,
V_LISTARE_DETALIATA IN VANZARI.LISTARE_DETALIATA%TYPE,
V_TEXT_ADITIONAL IN VANZARI.TEXT_ADITIONAL%TYPE,
V_TIP_SAFT IN VANZARI.TIP_SAFT%TYPE DEFAULT NULL,
V_EFACTURA IN VANZARI.EFACTURA%TYPE DEFAULT NULL,
V_DATA_ACT IN VANZARI.DATA_ACT%TYPE DEFAULT NULL,
V_DATA_SCAD IN VANZARI.DATA_SCAD%TYPE DEFAULT NULL,
V_NUMAR_ACT IN VANZARI.NUMAR_ACT%TYPE DEFAULT NULL,
V_SERIE_ACT IN VANZARI.SERIE_ACT%TYPE DEFAULT NULL);
PROCEDURE modifica_explicatie_articol(V_ID_VANZARE_DET IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL);
PROCEDURE initializeaza_moneda_nationala;
PROCEDURE scrie_cursuri_proforma(V_ID_PROFORMA IN NUMBER);
PROCEDURE scrie_cursuri(V_ID_VANZARE IN NUMBER);
PROCEDURE scrie_rate_factura(V_DATAORA IN DATE);
FUNCTION calculeaza_k RETURN NUMBER;
PROCEDURE calculeaza_pret(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,
V_PRET_FARA_TVA OUT NUMBER,
V_PRET_TVA OUT NUMBER,
V_PRET_CU_TVA OUT NUMBER);
/* 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) 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) 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) return number;*/
PROCEDURE calculeaza_sume(V_PRET_UNITAR IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER,
V_CANTITATE IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_SUMA_FARA_TVA OUT NUMBER,
V_SUMA_TVA OUT NUMBER,
V_SUMA_CU_TVA OUT NUMBER);
/* PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER);*/
PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER);
PROCEDURE finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER);
/* PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER);*/
PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER);
PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER);
Procedure initializeaza_scriere_actrul(tdDataOra IN DATE,
tnSuprascriereCod IN NUMBER DEFAULT 1);
PROCEDURE finalizeaza_scriere_actrul;
PROCEDURE marcheaza_facturat(V_VERIFICARE IN NUMBER);
PROCEDURE scrie_cantitati_vanzari_avize;
PROCEDURE scrie_corespondente_vanzari(V_TIP IN NUMBER);
PROCEDURE cauta_date_ultima_factura(V_ID_PART IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_DELEGAT OUT NUMBER,
V_NUME_DELEGAT OUT VARCHAR2,
V_SERIE_BI OUT VARCHAR2,
V_CNP OUT VARCHAR2,
V_ID_MASINA OUT NUMBER,
V_NRINMAT OUT VARCHAR2);
PROCEDURE cauta_date_ultima_factura_tip(V_TIP IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_DELEGAT OUT NUMBER,
V_NUME_DELEGAT OUT VARCHAR2,
V_SERIE_BI OUT VARCHAR2,
V_CNP OUT VARCHAR2,
V_ID_MASINA OUT NUMBER,
V_NRINMAT OUT VARCHAR2);
PROCEDURE cauta_date_comanda(V_ID_CLIENT IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_DATA_FACTURA IN DATE,
V_LISTAID OUT VARCHAR2,
V_DESCRIERE OUT VARCHAR2);
PROCEDURE cauta_date_comanda_gest(V_ID_GESTIUNE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_DATA_FACTURA IN DATE,
V_LISTAID OUT VARCHAR2,
V_DESCRIERE OUT VARCHAR2);
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)
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_cu_tva_fact(V_PRET IN NUMBER,
V_DIFERENTA 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)
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)
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)
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 calculeaza_total_fara_tva_fact(V_PRET IN NUMBER,
V_DIFERENTA 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)
RETURN NUMBER;
FUNCTION calculeaza_total_tva_fact(V_PRET IN NUMBER,
V_DIFERENTA 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)
RETURN NUMBER;
PROCEDURE actualizeaza_vanzari(V_COD_VECHI IN NUMBER,
V_COD_NOU IN NUMBER);
PROCEDURE sterge_din_vanzari(V_COD IN NUMBER,
V_AN IN NUMBER,
V_LUNA IN NUMBER,
V_ID_UTIL IN NUMBER);
PROCEDURE verifica_cursuri_valute(V_DATA_CURS IN DATE,
V_ID_UTIL IN NUMBER);
PROCEDURE verifica_total_document;
PROCEDURE verifica_analitice378;
function GetAnaliticByGrupUtilizatori(tnIdUtilizator ACT.ID_UTIL%TYPE,
tcCont ACT.SCD%TYPE)
return ACT.ASCD%TYPE;
FUNCTION GetAnaliticByArticol(tcCont RUL.CONT%TYPE,
tnIdGestiune RUL.ID_GESTIUNE%TYPE DEFAULT NULL,
tnIdArticol RUL.ID_ARTICOL%TYPE DEFAULT NULL)
return RUL.ACONT%TYPE;
Procedure citeste_vanzari_seturi(V_COD IN NUMBER,
V_CURSOR OUT cursor_facturare);
Procedure citeste_proforme_seturi(V_ID_PROFORMA IN NUMBER,
V_CURSOR OUT cursor_facturare);
procedure adauga_note_tva_incasare;
function citeste_lungcampexplart return NUMBER;
function getAnaliticK(tnProcTvaV IN NUMBER) return VARCHAR2;
procedure getSoldClient(tnAn IN NUMBER,
tnLuna IN NUMBER,
tnIdPart IN NUMBER,
tnIdFact IN NUMBER default 0,
V_CURSOR OUT cursor_facturare);
end PACK_FACTURARE;
/
CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
-- ultima eroare atribuita : FACT-024
-- 09.02.2010
-- marius.mutu
-- la vanzarea din stoc din ROARETAIL - aflu preturile de achizitie/vanzare, seria, gestiunea si trebuie sa intru pe ramura default
-- DESCARCAREA DE GESTIUNE OFFLINE TREBUIE RESCRISA SA FOLOSEASCA PROCEDURA PACK_RETAIL_STOC.SALVEAZABON
-- 29.03.2010
-- marius.mutu
-- adaugare GetAnaliticByArticol pentru obtinerea analiticului 607,608, 378,388
-- dupa configurare_analitice pe gestiuni/articole in procedura descarcare_gestiune
-- 08.07.2010
-- marius.mutu
-- descarca_gestiune - In mesaj Eroare FACT-007 se afiseaza Id gestiune, Id articol
-- 11.08.2010
-- marius.mutu
-- scrie_incasari, transmit parametri V_SCD, V_ASCD la scrie_incasare2 + optiune pentru CONT DEBIT V_SCD
-- 08.11.2010
-- transfera_articol
-- (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune )
-- la retur transfer, trebuie schimbat semnul diferentei de pret
-- 05.07.2011
-- marius.mutu
-- contabilizeaza_articol - tratare exceptie NO_DATA_FOUND FACT-024
-- 13.01.2014
-- marius.mutu
-- Am completat ID_RESPONSABIL la instructiunile INSERT INTO ACT_TEMP
-- 03.02.2015
-- marius.mutu
-- citeste_setari_document: adaugat PROFORMA, BON FISCAL
-- 16.02.2015
-- marius.mutu
-- CURSOR_PRETURI
-- FACTURARE LISTA PRETURI: se selecteaza toate articolele din lista de preturi, indiferent daca au stoc > 0
-- optiunea RF_FACTURARE_FARA_STOC = 1
-- descarca_gestiune: se pot vinde pe factura si articole retur (cante < 0) si articole care nu sunt in stoc (RF_FACTURARE_FARA_STOC)
-- 06.03.2015
-- marius.mutu
-- descarca_gestiune: la factura de vanzare lista de preturi se descarca mai intai
-- articolele retur din facturi anterioare, apoi
-- articolele din stoc (indiferent daca cantitate este pozitiva sau negativa), apoi
-- articolele fara stoc (RF_FACTURARE_FARA_STOC)
-- asa se pot factura articole din stoc, cu cantitate < 0 (retur, fara factura anterioara)
-- 30.04.2015
-- marius.mutu
-- descarca gestiune: la factura de vanzare lista de preturi s-au pus 2 ramuri
-- tip = 1 daca exista cantitate retur < 0 si lista articole retur din rulaj + tip = 2,3
-- tip = 2,3 daca nu exista cantitate retur < 0 + lista articole retur din rulaj
-- pentru ca la conpress group statea sa parcurga tot rulajul de la tip = 1, chiar daca v_cante nu era < 0
-- 16.06.2015
-- marius.mutu
-- modifica_date_factura
-- + id_facturare,listare_detaliata
-- 01.02.2016
-- marius.mutu
-- cumuleaza_note_act
-- sterg inregistrarile cu suma 0 doar daca am inregistrari cu suma <> 0
-- altfel nu se inregistreaza nimic in Reg. Jurnal ACT, doar in RUL si VANZARI/VANZARI_DETALII
-- getAnaliticK: tratare caz cota TVA 1.24, 1.20, 1.19
-- 18.03.2016
-- marius.mutu
-- descarca_gestiune: PROC_TVAV_ORIG se ia din STOC daca este gestiune mf la pret de vz sau stoc.proc_tvav <> 0
-- in loc sa se calculeze pack_sesiune.tva2proctva
-- 14.07.2016
-- marius.mutu
-- modifica_date_factura - adaugare parametru V_TEXT_ADITIONAL
-- 08.12.2016
-- marius.mutu
-- cursor_avize - factura din aviz. se iau si cantitatile negative, nu numai cele pozitive (avize de retur)
-- 12.12.2016
-- marius.mutu
-- scrie_factura_avize - daca articolele aveau discount unitar si nu era evidentiat distinct contabil, valoarea 4111 = 418 era (pret diminuat cu discount) - discount
-- am facut discountul = 0 pe ramura cu discount neevidentiat in notele contabile, dupa ce l-am extras din pret.
-- 03.02.2017
-- marius.mutu
-- cursor_preturi - la factura in valuta nu aducea articole discount 667. nu stiu de ce. la facturile in lei nu era restrictia.
-- 03.02.2017
-- marius.mutu
-- cursor_preturi - aviz de expeditie - se afiseaza si articole negestionabile
-- 20.03.2017
-- marius.mutu
-- denormalizare vanzari - completare date redundante pentru a nu se mai selecta de fiecare data pentru fact_vfacturi
-- scrie_incasari - se completeaza pack_Facturi.ntip_doc_incasare CHITANTA/BON FISCAL
-- scrie_in_vanzari - completare vanzari cu sume calculate din vanzari_detalii si act pentru a nu se mai calcula la fiecare selectie din fact_vfacturi
-- scrie_corespondente_vanzari - completare vanzari.avize cu seria/nr avize facturate pentru a nu se mai selecta din fact_vdetalii_avize
-- 11.10.2017
-- marius.mutu
-- pack_facturare.getAnaliticK - se folosesc optiuni noi pentru fiecare cota TVA
-- 27.10.2017
-- marius.mutu
-- pack_facturare.descarca_gestiune - vanzare de articole fara stoc - analiticul se completeaza conform configurarilor
-- 16.03.2018
-- marius.mutu
-- scrie_factura2 - tratare aviz retur tip = 24
-- 05.02.2019
-- marius.mutu
-- scrie_in_vanzari, finalizeaza_avize_lucrare: corectate vanzari.total_fara_tva si total_cu_tva pe ramura cu seturi
-- 21.03.2019
-- marius.mutu
-- citeste_setari_document: adaugat FACTURA ROAACNPRO 51
-- 10.04.2019
-- marius.mutu
-- adauga_articol_factura_stoc, adauga_articol_factura_deviz - completare VANZARI_DETALII_TEMP.ID_TEMP CU 0 (NOT NULL)
-- scrie_in_vanzari tip = 51 factura ACN
-- 09.08.2019
-- marius.mutu
-- adauga_articol_factura_deviz : V_ID_CTR
-- scrie_in_vanzari: VANZARI_DETALII_TEMP.ID_JTVA_COLOANA_EX
-- 28.08.2019
-- marius.mutu
-- finalizeaza_factura - completez id_fact
-- scrie_in_vanzari - completeaza data_scad, id_ctr
-- scrie_in_vanzari - completeaza id_valuta, curs, multiplicator. nu stiu de ce nu se completau
-- 02.09.2019
-- marius.mutu
-- scrie_in_vanzari - completeaza vanzari.valval, tvaval, totval
-- 29.10.2019
-- marius.mutu
-- sterge_factura pack_acn.sterge_vanzare pentru tip = 51 (ROAACNPRO)
-- initializeaza_date_factura, scrie_in_vanzari - completare vanzari.tip_factura, id_beneficiar
-- 06.11.2019
-- marius.mutu
-- scrie_nota, scrie_tva, verifica_totaluri - tratare cont 709 (rabat), la fel ca si 667 (discount)
-- 03.07.2020
-- marius.mutu
-- initializeaza_date_factura se initializeaza cu NULL ntip_doc_incasare, nsuma_incasare, clistaid_avize
-- ramaneau completate pe facturile urmatoare de la o factura anterioara
-- 28.01.2021
-- marius.mutu
-- MODIFICARE PACK_FACTURARE.SCRIE_PROFORMA, STERGE_PROFORMA sa scrie in VANZARI
-- + PACK_FACTURARE.cursor_retur_document = PACK_FACTURARE.cursor_retur + parametrul eproforma
-- 26.03.2021
-- marius.mutu
-- cursor_retur_document + parametru v_copiere, pentru atributul gestionabil
-- 05.07.2021
-- marius.mutu
-- scrie_in_vanzari - text aditional repl chr(170) cu chr(13) + chr(10) - bug da eroare la CHR(13) + chr(10)
-- 27.07.2021
-- marius.mutu
-- cursor_retur_document - completat cu coloane din vanzari_detalii
-- 22.11.2021
-- marius.mutu
-- scrie_incasare2 - INCASARE CARD 5125 IN LOC DE 5312
-- citeste_setari_document
-- 26.11.2021
-- marius.mutu
-- scrie_incasari - initializare ntip_doc_incasare cu ultimul tip de incasare folosit
-- 04.03.2022
-- scrie_tva - explicatia in registrul jurnal fara 'TVA '
-- 22.03.2022
-- ADAUGA_ARTICOL_FACTURA, ADAUGA_ARTICOL_FACTURA_DEVIZ, ADAUGA_ARTICOL_FACTURA_STOC, adauga_rata_factura, cumuleaza_note_act + V_TAXCODE (COD TAXA SAFT)
-- incasari - SAFT ACT.paymentcode
-- 27.03.2022
-- ADAUGA_ARTICOL_FACTURA, ADAUGA_ARTICOL_FACTURA_DEVIZ, ADAUGA_ARTICOL_FACTURA_STOC, adauga_rata_factura, TAXCODE NULL
-- 09.06.2022
-- SCRIE_TVA: COMPLETEAZA TAXCODE PE LINIA DE TVA
-- 24.06.2022
-- modifica_date_factura - COMPLETARE VANZARI.TIP_SAFT
-- 27.01.2023
-- scrie_in_vanzari corectare calcul valori in lei, daca factura este in valuta, total_ron = sum(pret_ron * cantitatea), in loc de total_valuta * curs
-- 08.02.2023
-- modifica_date_factura + efactura
-- 22.02.2023
-- scrie_in_vanzari corectare calcul valori in lei, daca factura este in valuta sau invoice, total_ron = sum(pret_ron * cantitatea), in loc de total_valuta * curs
-- 08.05.2023
-- verifica_total_document - completare TAXCODE SAFT
-- scrie_nota - tratare 512x - la incasarea cu cardul 5125 se aduna si suma de plata la total, apoi se scadea la verifica_total_document
-- 22.05.2023
-- modifica_explicatie_articol - completare TAXCODE SAFT
-- 13.06.2023
-- scriere ID_JTVA_COLOANA, SAFT.TAXCODE in RUL
-- descarca_gestiune + ID_JTVA_COLOANA, TAXCODE
-- facturare_articole2, contabilizeaza_articol > descarca_gestiune
-- finalizeaza_factura - corectie vanzari.id_Fact daca factura este incasata
-- 09.10.2023
-- + getSoldClient
-- 09.11.2023
-- verifica_total_document - se exclud notele 512x = 4111 din valoarea facturii
-- 17.11.2023
-- adaugat tipul 52 factura fiscala in valuta pe contract
-- scrie_factura2
-- 22.11.2023
-- getSoldClient - nu mai scad soldul 419. Presupun ca pentru avansuri 419 se emit facturi de avans 4111 si se storneaza avansul 419 pe factura finala
-- 10.12.2023
-- descarca_gestiune - 345: pun 711 = 345 valoare de achizitie, in loc de valoarea de vanzare
-- descarca_gestiune - 345: am pus 348 = 345, in loc de 348 = 711
-- descarca_gestiune - 345: Se inregistreaza 345 = 348, 348 = 345 doar daca lnDescarcare345FaraAdaos = 0
-- 21.12.2023 scrie_nota - scrie_discount se completeaza taxcode pe linia 667 = 4111
-- 15.01.2024
-- scrie_discount - corectie note 667 = 4111 pentru bonuri fiscale magazine, tip 43, scria 667 = 418
-- 23.04.2024
-- GetAnaliticByGrupUtilizatori: se tine cont de inregistrarile sterse
-- 04.06.2024
-- cursor_gestiuni_articol, adauga_articol_factura, adauga_articol_factura_stoc, adauga_articol_factura_deviz, scrie_in_vanzari + LOT
-- 18.10.2024
-- initializeaza_date_factura.tip_saft
-- 23.06.2025
-- pack_facturare.modifica_date_factura - se pot modifica data_act, data_scad, numar_Act, serie_act
-- 17.09.2025
-- contabilizeaza_articol - limitare explicatie la 100 caractere
-- scrie_corespondente_vanzari - VANZARI.AVIZE maxim 1000 caractere
PROCEDURE verificare_setari_program(V_ID_UTIL IN NUMBER,
V_MESAJ OUT VARCHAR2) IS
V_NR_INREGISTRARI NUMBER(5);
V_ID_TIPENTITATE SERII_TIPENTITATI.ID_TIPENTITATE%TYPE;
V_LUNA DATE;
BEGIN
V_MESAJ := NULL;
V_LUNA := to_date(pack_sesiune.getan() || pack_sesiune.getluna(),
'YYYYMM');
-- verificare drepturi politici de preturi
SELECT COUNT(ID_POLITICA)
INTO V_NR_INREGISTRARI
FROM UTILIZATORI_ROL_INTERN A
LEFT JOIN POLITICI_GRUPURI B
ON A.ID_GRUP = B.ID_GRUP
WHERE A.STERS = 0
AND B.STERS = 0
AND A.ID_UTIL = V_ID_UTIL;
IF V_NR_INREGISTRARI = 0 THEN
V_MESAJ := 'Nu aveti drepturi pe politicile de preturi! (ROAPRETURI)';
END IF;
--
-- verificare setari bonuri
SELECT ID_TIPENTITATE
INTO V_ID_TIPENTITATE
FROM SERII_TIPDOC
WHERE ID_TIPDOC = pack_facturare.nid_tipbon;
CASE
WHEN V_ID_TIPENTITATE = 1 THEN
-- pe gestiuni
SELECT COUNT(B.ID_GESTIUNE)
INTO V_NR_INREGISTRARI
FROM GEST_CORESP_UTIL_GRUPE A
LEFT JOIN GEST_CORESP_GRUPE_GESTIUNI B
ON A.ID_GRUPE = B.ID_GRUPE
WHERE A.STERS = 0
AND B.STERS = 0
AND A.ID_UTIL = V_ID_UTIL
AND B.ID_GESTIUNE IN
(SELECT ID_ENTITATE
FROM PLAJE_NUMERE
WHERE STERS = 0
AND INACTIV = 0
AND ID_TIPDOC = pack_facturare.nid_tipbon
AND ID_TIPENTITATE = V_ID_TIPENTITATE
AND V_LUNA BETWEEN DATAI AND DATAS);
IF V_NR_INREGISTRARI = 0 THEN
V_MESAJ := V_MESAJ || CHR(13) || CHR(10) ||
'Nu aveti drepturi pe gestiunile pentru care sunt configurate seriile de bonuri! (ROAGEST)';
END IF;
WHEN V_ID_TIPENTITATE = 2 THEN
-- o singura serie
V_MESAJ := V_MESAJ;
WHEN V_ID_TIPENTITATE = 3 THEN
-- pe gestionar
SELECT COUNT(ID_PLAJA)
INTO V_NR_INREGISTRARI
FROM PLAJE_NUMERE
WHERE STERS = 0
AND INACTIV = 0
AND ID_TIPDOC = pack_facturare.nid_tipbon
AND ID_TIPENTITATE = V_ID_TIPENTITATE
AND V_LUNA BETWEEN DATAI AND DATAS;
IF V_NR_INREGISTRARI = 0 THEN
V_MESAJ := V_MESAJ || CHR(13) || CHR(10) ||
'Nu aveti setata plaja de numere pentru bonuri! (ROAGEST)';
END IF;
ELSE
V_MESAJ := V_MESAJ || CHR(13) || CHR(10) ||
'Setare incorecta pentru seriile de bonuri! (ROAGEST)';
END CASE;
-- verificare drepturi gestiuni
SELECT COUNT(ID_GESTIUNE)
INTO V_NR_INREGISTRARI
FROM GEST_CORESP_UTIL_GRUPE A
LEFT JOIN GEST_CORESP_GRUPE_GESTIUNI B
ON A.ID_GRUPE = B.ID_GRUPE
WHERE A.STERS = 0
AND B.STERS = 0
AND A.ID_UTIL = V_ID_UTIL;
IF V_NR_INREGISTRARI = 0 THEN
V_MESAJ := V_MESAJ || CHR(13) || CHR(10) ||
'Nu aveti drepturi pe gestiuni! (ROAGEST)';
END IF;
-- verificare curs valutar
SELECT COUNT(ID_CURS)
INTO V_NR_INREGISTRARI
FROM CURS A
WHERE A.STERS = 0
AND A.DATA <= TRUNC(SYSDATE)
AND A.DATA2 >= TRUNC(SYSDATE);
IF V_NR_INREGISTRARI = 0 THEN
V_MESAJ := V_MESAJ || CHR(13) || CHR(10) ||
'Nu este setat cursul valutar pentru ziua de azi!';
END IF;
IF V_MESAJ IS NOT NULL THEN
V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || CHR(13) || CHR(10) ||
'Faceti setarile necesare! ';
END IF;
END verificare_setari_program;
-------------------------------------------------------------------
PROCEDURE initializeaza_facturare(V_ID_UTIL IN NUMBER) IS
V_DENUMIRE_POL CRM_POLITICI_PRETURI.NUME_LISTA_PRETURI%TYPE;
BEGIN
pack_facturare.initializeaza_moneda_nationala();
/* pack_facturare.nzecimale_pretval := PACK_SESIUNE.getoptiunefirma(USER,
'PVAL');
pack_facturare.nzecimale_sumaval := pack_facturare.nzecimale_pretval;
pack_facturare.nzecimale_preta := PACK_SESIUNE.getoptiunefirma(USER,
'PPRET');
pack_facturare.nzecimale_sumaa := PACK_SESIUNE.getoptiunefirma(USER,
'PC');
pack_facturare.nzecimale_pretv := PACK_SESIUNE.getoptiunefirma(USER,
'PPRETV');
pack_facturare.nzecimale_sumav := pack_facturare.nzecimale_sumaa;*/
pack_facturare.nzecimale_procent := 3;
pack_facturare.citeste_setari_pol_pret(1,
V_ID_UTIL,
pack_facturare.nid_politica_stoc,
V_DENUMIRE_POL);
END initializeaza_facturare;
-------------------------------------------------------------------
PROCEDURE initializeaza_seturi_temp IS
begin
DELETE FROM VANZARI_SETURI_TEMP;
end initializeaza_seturi_temp;
-------------------------------------------------------------------
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER) IS
begin
-- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_explicatia4, v_id_ordl
pack_facturare.initializeaza_date_factura(V_DATA_IREG,
V_ID_FDOC,
V_DATA_ACT,
V_DATA_SCADENTA,
V_SERIE_FACTURA,
V_NUMAR_ACT,
V_ID_CLIENT,
V_ID_LUCRARE,
V_ID_SECTIE,
V_ID_VENCHELT,
V_ID_RESPONSABIL,
NULL,
NULL,
V_LISTAID,
V_DESCRIERE,
V_TIP,
V_ID_SET,
V_DATA_CURS,
V_ID_VALUTA,
V_IN_VALUTA,
V_TVA_INCASARE,
V_ID_SUCURSALA,
V_ID_UTIL,
NULL,
NULL,
NULL);
end initializeaza_date_factura;
-------------------------------------------------------------------
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_EXPLICATIA4 IN VARCHAR2,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER) IS
BEGIN
-- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_id_ordl
pack_facturare.initializeaza_date_factura(V_DATA_IREG,
V_ID_FDOC,
V_DATA_ACT,
V_DATA_SCADENTA,
V_SERIE_FACTURA,
V_NUMAR_ACT,
V_ID_CLIENT,
V_ID_LUCRARE,
V_ID_SECTIE,
V_ID_VENCHELT,
V_ID_RESPONSABIL,
V_EXPLICATIA4,
NULL,
V_LISTAID,
V_DESCRIERE,
V_TIP,
V_ID_SET,
V_DATA_CURS,
V_ID_VALUTA,
V_IN_VALUTA,
V_TVA_INCASARE,
V_ID_SUCURSALA,
V_ID_UTIL,
NULL,
NULL,
NULL);
END initializeaza_date_factura;
-------------------------------------------------------------------
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_EXPLICATIA4 IN VARCHAR2,
V_ID_ORDL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER) IS
BEGIN
-- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_tip_factura, v_id_beneficiar
pack_facturare.initializeaza_date_factura(V_DATA_IREG,
V_ID_FDOC,
V_DATA_ACT,
V_DATA_SCADENTA,
V_SERIE_FACTURA,
V_NUMAR_ACT,
V_ID_CLIENT,
V_ID_LUCRARE,
V_ID_SECTIE,
V_ID_VENCHELT,
V_ID_RESPONSABIL,
V_EXPLICATIA4,
V_ID_ORDL,
V_LISTAID,
V_DESCRIERE,
V_TIP,
V_ID_SET,
V_DATA_CURS,
V_ID_VALUTA,
V_IN_VALUTA,
V_TVA_INCASARE,
V_ID_SUCURSALA,
V_ID_UTIL,
NULL,
NULL,
NULL);
END initializeaza_date_factura;
-------------------------------------------------------------------
PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE,
V_ID_FDOC IN NUMBER,
V_DATA_ACT IN DATE,
V_DATA_SCADENTA IN DATE,
V_SERIE_FACTURA IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_CLIENT IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_RESPONSABIL IN NUMBER,
V_EXPLICATIA4 IN VARCHAR2,
V_ID_ORDL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_DESCRIERE IN VARCHAR2,
V_TIP IN NUMBER,
V_ID_SET IN NUMBER,
V_DATA_CURS IN DATE,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_TVA_INCASARE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_UTIL IN NUMBER,
V_TIP_FACTURA IN NUMBER,
V_ID_BENEFICIAR IN NUMBER,
V_TIP_SAFT IN NUMBER DEFAULT 380) IS
BEGIN
DELETE FROM VANZARI_DETALII_TEMP;
pack_facturare.nid_act := 0;
pack_facturare.ntotftva := 0;
pack_facturare.ntottva := 0;
pack_facturare.ndifftva := 0;
pack_facturare.ndiftva := 0;
pack_facturare.nid_fact := -1;
pack_facturare.nfactavizcust := 0;
pack_facturare.nid_util := V_ID_UTIL;
pack_facturare.nid_sucursala := V_ID_SUCURSALA;
pack_facturare.initializeaza_facturare(pack_facturare.nid_util);
pack_facturare.initializeaza_seturi_temp();
v_date_gestiune.id_gestiune := NULL;
v_date_gestiune.id_tip_gest := NULL;
v_date_gestiune.cont := NULL;
v_date_gestiune.acont := NULL;
pack_facturare.ndiscount_evidentiat := PACK_SESIUNE.getoptiunefirma(USER,
'DISCOUNTEVIDENTIAT');
pack_facturare.cascd := NULL;
pack_facturare.cascc := NULL;
pack_facturare.nid_jtva_coloana := NULL;
pack_facturare.nTaxCode := NULL;
pack_facturare.ddata_curs := V_DATA_CURS;
pack_facturare.ddata_ireg := V_DATA_IREG;
pack_facturare.nid_fdoc := V_ID_FDOC;
pack_facturare.ddata_act := V_DATA_ACT;
pack_facturare.ddata_scadenta := V_DATA_SCADENTA;
pack_facturare.cserie_act := TRIM(V_SERIE_FACTURA);
pack_facturare.nnumar_act := V_NUMAR_ACT;
IF V_TIP IN (23, 25, 27, 30, 41, -6) THEN
pack_facturare.nid_gestiune_sursa := V_ID_CLIENT;
pack_facturare.nid_part := 0;
ELSE
pack_facturare.nid_gestiune_sursa := 0;
pack_facturare.nid_part := V_ID_CLIENT;
END IF;
pack_facturare.nid_lucrare := nvl(V_ID_LUCRARE, 0);
pack_facturare.nid_venchelt := V_ID_VENCHELT;
pack_facturare.nid_sectie_stoc := V_ID_SECTIE;
pack_facturare.nid_responsabil := V_ID_RESPONSABIL;
pack_facturare.nid_ordl := V_ID_ORDL;
pack_facturare.cexplicatia4 := V_EXPLICATIA4;
pack_facturare.nid_set := V_ID_SET;
pack_facturare.ntip := V_TIP;
pack_facturare.clistaid := V_LISTAID;
pack_facturare.cdescriere := V_DESCRIERE;
pack_facturare.nproc_tva_max := -1;
pack_facturare.clista_cursuri := NULL;
pack_facturare.nperechec := 0;
pack_facturare.nid_factc := 0;
pack_facturare.nid_partc := 0;
pack_facturare.nan := EXTRACT(YEAR FROM V_DATA_IREG);
pack_facturare.nluna := EXTRACT(MONTH FROM V_DATA_IREG);
pack_facturare.ntva_incasare := V_TVA_INCASARE;
pack_facturare.cserie_act_incasare := NULL;
pack_facturare.nnumar_act_incasare := NULL;
pack_facturare.ntip_doc_incasare := NULL;
pack_facturare.nsuma_incasare := NULL;
pack_facturare.clistaid_avize := NULL;
pack_facturare.verifica_analitice378();
pack_facturare.nin_valuta := V_IN_VALUTA;
pack_facturare.nid_valuta := V_ID_VALUTA;
IF pack_facturare.ntip IN (3, 21, 28, 42, 47) THEN
-- facturare de pe comanda
-- aviz de pe comanda
pack_facturare.nid_comanda := to_number(pack_facturare.clistaid);
ELSE
pack_facturare.nid_comanda := NULL;
END IF;
pack_facturare.ntip_factura := V_TIP_FACTURA;
pack_facturare.nid_beneficiar := V_ID_BENEFICIAR;
pack_facturare.ntip_saft := V_TIP_SAFT;
END initializeaza_date_factura;
-------------------------------------------------------------------
PROCEDURE initializeaza_setari_facturare IS
BEGIN
BEGIN
SELECT TO_NUMBER(NVL(VARVALUE, '0'))
INTO pack_facturare.nscadere_stoc
FROM OPTIUNI
WHERE PROGRAM = pack_facturare.cnume_program
AND VARNAME = 'SCADERESTOC';
IF pack_facturare.nscadere_stoc = 1 AND pack_facturare.ntip <> 4 THEN
SELECT MAX(NVL(IN_STOC, 0))
INTO pack_facturare.nscadere_stoc
FROM VANZARI_DETALII_TEMP
WHERE ID_RATA IS NULL;
IF pack_facturare.nscadere_stoc = 1 THEN
pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon,
NULL,
pack_facturare.nid_gestiune_sursa,
pack_facturare.nid_util,
pack_facturare.nid_sucursala,
pack_facturare.nnumar_bon);
END IF;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
pack_facturare.nscadere_stoc := 0;
END;
END initializeaza_setari_facturare;
-------------------------------------------------------------------
PROCEDURE initializeaza_date_gestiune(V_ID_GESTIUNE IN NUMBER,
V_ID_TIPGEST IN NUMBER,
V_CONT IN VARCHAR2,
V_ACONT IN VARCHAR2) IS
BEGIN
v_date_gestiune.id_gestiune := V_ID_GESTIUNE;
v_date_gestiune.id_tip_gest := V_ID_TIPGEST;
v_date_gestiune.cont := V_CONT;
v_date_gestiune.acont := V_ACONT;
END initializeaza_date_gestiune;
-------------------------------------------------------------------
PROCEDURE citeste_setari_document(V_TIP IN NUMBER,
V_ID_FDOC OUT NUMBER,
V_FDOC OUT VARCHAR2) IS
V_VARNAME OPTIUNI.VARNAME%TYPE;
BEGIN
CASE
WHEN V_TIP BETWEEN 1 AND 20 OR V_TIP BETWEEN - 4 AND - 1 OR
V_TIP IN (-8, -11, -12, 45, 48, 49, 50, 51, 52) THEN
-- id_fdoc_factura
V_VARNAME := 'ID_FDOC_FACT';
WHEN V_TIP IN (24, 41, -6, -7, -13) THEN
-- id_fdoc_aviz_retur
V_VARNAME := 'ID_FDOC_AVIZ_RETUR';
WHEN V_TIP BETWEEN 21 AND 40 OR V_TIP in (47, 42, -9, -10) THEN
-- id_fdoc_aviz
V_VARNAME := 'ID_FDOC_AVIZ';
WHEN V_TIP = 0 THEN
-- id_fdoc_compensare
V_VARNAME := 'ID_FDOC_COMPENSARE';
WHEN V_TIP = -100 THEN
-- id_fdoc_chitanta
V_VARNAME := 'ID_FDOC_CHITANTA';
WHEN V_TIP = -101 THEN
-- id_fdoc_bonfiscal
V_VARNAME := 'ID_FDOC_BONFISCAL';
WHEN V_TIP = -102 THEN
-- id_fdoc_proforma
V_VARNAME := 'ID_FDOC_PROFORMA';
WHEN V_TIP = -103 THEN
-- id_fdoc_card
V_VARNAME := 'ID_FDOC_CARD';
ELSE
-- id_fdoc_factura
V_VARNAME := 'ID_FDOC_FACT';
END CASE;
BEGIN
SELECT TO_NUMBER(A.VARVALUE), B.FEL_DOCUMENT
INTO V_ID_FDOC, V_FDOC
FROM OPTIUNI A
LEFT JOIN NOM_FDOC B
ON TO_NUMBER(A.VARVALUE) = B.ID_FDOC
WHERE A.VARNAME = V_VARNAME
AND (A.PROGRAM = pack_facturare.cnume_program OR
A.PROGRAME LIKE '%' || pack_facturare.cnume_program || '%')
AND B.STERS = 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_FDOC := NULL;
V_FDOC := '';
END;
END citeste_setari_document;
-------------------------------------------------------------------
PROCEDURE citeste_setari_partener(V_TIP IN NUMBER,
V_ID_PART OUT NUMBER,
V_DENUMIRE OUT VARCHAR2) IS
V_VARNAME OPTIUNI.VARNAME%TYPE;
BEGIN
CASE
WHEN V_TIP = 0 THEN
-- id_part_banca_comp
V_VARNAME := 'ID_PART_BANCA_COMP';
WHEN V_TIP = 1 THEN
V_VARNAME := 'ID_PART_CASA';
END CASE;
BEGIN
SELECT TO_NUMBER(A.VARVALUE), B.DENUMIRE
INTO V_ID_PART, V_DENUMIRE
FROM OPTIUNI A
LEFT JOIN NOM_PARTENERI B
ON TO_NUMBER(A.VARVALUE) = B.ID_PART
WHERE A.PROGRAM = pack_facturare.cnume_program
AND A.VARNAME = V_VARNAME
AND B.STERS = 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_PART := NULL;
V_DENUMIRE := '';
END;
END citeste_setari_partener;
-------------------------------------------------------------------
PROCEDURE citeste_setari_pol_pret(V_TIP IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_POL OUT NUMBER,
V_DENUMIRE OUT VARCHAR2) IS
BEGIN
BEGIN
CASE
WHEN V_TIP IN (23, 30, 41) THEN
SELECT TO_NUMBER(A.VARVALUE), B.NUME
INTO V_ID_POL, V_DENUMIRE
FROM OPTIUNI A
LEFT JOIN CRM_VPOLPRETCURUTIL B
ON TO_NUMBER(A.VARVALUE) = B.ID_POL
WHERE A.PROGRAM = pack_facturare.cnume_program
AND A.VARNAME = 'ID_POL_PRET_TR'
AND B.ID_UTIL = V_ID_UTIL;
WHEN V_TIP = 1 THEN
SELECT TO_NUMBER(A.VARVALUE), B.NUME
INTO V_ID_POL, V_DENUMIRE
FROM OPTIUNI A
LEFT JOIN CRM_VPOLPRETCURUTIL B
ON TO_NUMBER(A.VARVALUE) = B.ID_POL
WHERE A.PROGRAM = pack_facturare.cnume_program
AND A.VARNAME = 'ID_POL_PRET_STOC'
AND B.ID_UTIL = V_ID_UTIL;
WHEN V_TIP IN (48, 49) THEN
SELECT TO_NUMBER(A.VARVALUE), B.NUME
INTO V_ID_POL, V_DENUMIRE
FROM OPTIUNI A
LEFT JOIN CRM_VPOLPRETCURUTIL B
ON TO_NUMBER(A.VARVALUE) = B.ID_POL
WHERE A.PROGRAM = pack_facturare.cnume_program
AND A.VARNAME = 'IDPOLPRETFACTK'
AND B.ID_UTIL = V_ID_UTIL;
END CASE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_POL := NULL;
V_DENUMIRE := '';
END;
END citeste_setari_pol_pret;
-------------------------------------------------------------------
PROCEDURE genereaza_numar_proforma(V_NR_PROFORMA OUT NUMBER) IS
BEGIN
pack_serii_numere.dezaloca_numar(pack_facturare.nid_tipfactura);
SELECT SEQ_NR_PROFORME.NEXTVAL INTO V_NR_PROFORMA FROM DUAL;
pack_facturare.nnumar_act := V_NR_PROFORMA;
END genereaza_numar_proforma;
-------------------------------------------------------------------
PROCEDURE completare_politica_stoc IS
BEGIN
IF pack_facturare.nid_politica_stoc IS NOT NULL THEN
MERGE INTO CRM_POLITICI_PRET_ART A
USING (SELECT ID_ARTICOL
FROM NOM_ARTICOLE
WHERE STERS = 0
AND INACTIV = 0
AND IN_STOC = 1) B
ON (A.ID_POL = pack_facturare.nid_politica_stoc AND A.ID_ARTICOL = B.ID_ARTICOL)
WHEN NOT MATCHED THEN
INSERT
(ID_POL, ID_ARTICOL, ID_VALUTA)
VALUES
(pack_facturare.nid_politica_stoc,
B.ID_ARTICOL,
pack_facturare.nid_moneda_nationala);
UPDATE NOM_ARTICOLE
SET IN_CRM = 1
WHERE ID_ARTICOL IN
(SELECT ID_ARTICOL
FROM CRM_POLITICI_PRET_ART
WHERE STERS = 0
AND ID_POL = pack_facturare.nid_politica_stoc)
AND IN_CRM = 0;
END IF;
END completare_politica_stoc;
-------------------------------------------------------------------
PROCEDURE modificare_politica_stoc(V_ID_POL IN NUMBER) is
BEGIN
UPDATE CRM_POLITICI_PRETURI
SET ID_VALUTA = pack_def.GetIdMonedaNationala()
WHERE ID_POL = V_ID_POL;
UPDATE CRM_POLITICI_PRET_ART
SET PRET = 0,
PRETFTVA = 0,
PRETCTVA = 0,
PROC_TVAV = NULL,
DISCOUNT_UNITAR = NULL,
ID_VALUTA = pack_def.GetIdMonedaNationala()
WHERE ID_POL = V_ID_POL;
END modificare_politica_stoc;
-------------------------------------------------------------------
PROCEDURE cursor_preturi(V_DATA_CURS IN DATE,
V_TIP IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_ID_GESTIUNE_INIT IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
lnFacturareFaraStoc NUMBER(1) := 0;
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
pack_facturare.completare_politica_stoc();
pack_facturare.verifica_cursuri_valute(V_DATA_CURS, V_ID_UTIL);
-- FACTURARE LISTA PRETURI: se selecteaza toate articolele din lista de preturi, indiferent daca au stoc > 0
lnFacturareFaraStoc := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_FACTURARE_FARA_STOC'),
'0'));
CASE
WHEN V_TIP = 45 THEN
-- factura restaurant
OPEN V_CURSOR FOR
SELECT rownum as id_c,
B.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
B.ID_VALUTA,
A.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(F.CURS, 0) *
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(F.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, '') AS UM,
C.IN_STOC AS GESTIONABIL,
1 AS CANTITATE,
B.PROC_TVAV,
A.PRETURI_CU_TVA,
F.CURS,
F.MULTIPLICATOR,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(F.CURS, 0) *
ROUND(NVL(B.PRET, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(F.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
G.NUME_VAL,
DECODE(A.ID_POL,
NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1),
1,
0) AS MODIFICABIL,
A.ID_GESTIUNE,
'371' AS CONT
FROM (select a1.id_util,
a3.id_pol,
a3.preturi_cu_tva,
a3.nume_lista_preturi,
a3.id_nota,
a6.id_gestiune
from utilizatori_rol_intern a1
left join politici_grupuri a2
on a1.id_grup = a2.id_grup
left join crm_politici_preturi a3
on a2.id_politica = a3.id_pol
left join crm_note_vanzari a4
on a3.id_nota = a4.id_nota
left join note_contabile a5
on a4.id_set = a5.id_set
left join rest_coresp_pol_gest a6
on a3.id_pol = a6.id_pol
where a1.sters = 0
and a2.sters = 0
and a3.sters = 0
and a1.id_util = V_ID_UTIL
and NVL(a5.in_valuta, 0) = 0
and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')),
sysdate),
sysdate) between a3.datai and
NVL(a3.datas, to_date('300012', 'YYYYMM'))
and NVL(a1.ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
and nvl(a6.id_rest_locatie, 0) =
NVL(V_ID_GESTIUNE_INIT, -1)) A
LEFT JOIN CRM_POLITICI_PRET_ART B
ON A.ID_POL = B.ID_POL
LEFT JOIN NOM_ARTICOLE C
ON B.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) F
ON B.ID_VALUTA = F.ID_VALUTA
LEFT JOIN NOM_VALUTE G
ON B.ID_VALUTA = G.ID_VALUTA
ORDER BY C.DENUMIRE;
WHEN V_TIP IN (1, 2) THEN
-- factura in lei
OPEN V_CURSOR FOR
SELECT rownum as id_c,
B.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
B.ID_VALUTA,
A.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(F.CURS, 0) *
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(F.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, '') AS UM,
C.IN_STOC AS GESTIONABIL,
(CASE
WHEN lnFacturareFaraStoc = 1 AND E.CANTITATE < 0 THEN
0
ELSE
NVL(E.CANTITATE, 0)
END) AS CANTITATE,
B.PROC_TVAV,
A.PRETURI_CU_TVA,
F.CURS,
F.MULTIPLICATOR,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(F.CURS, 0) *
ROUND(NVL(B.PRET, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(F.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
G.NUME_VAL,
DECODE(A.ID_POL,
NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1),
1,
0) AS MODIFICABIL
FROM (select a1.id_util,
a3.id_pol,
a3.preturi_cu_tva,
a3.nume_lista_preturi,
a3.id_nota
from utilizatori_rol_intern a1
left join politici_grupuri a2
on a1.id_grup = a2.id_grup
left join crm_politici_preturi a3
on a2.id_politica = a3.id_pol
left join crm_note_vanzari a4
on a3.id_nota = a4.id_nota
left join note_contabile a5
on a4.id_set = a5.id_set
where a1.sters = 0
and a2.sters = 0
and a3.sters = 0
and a1.id_util = V_ID_UTIL
and NVL(a5.in_valuta, 0) = 0
and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')),
sysdate),
sysdate) between a3.datai and
NVL(a3.datas, to_date('300012', 'YYYYMM'))
and NVL(a1.ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)) A
LEFT JOIN CRM_POLITICI_PRET_ART B
ON A.ID_POL = B.ID_POL
LEFT JOIN NOM_ARTICOLE C
ON B.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANTITATE
FROM STOC
WHERE LUNA = V_LUNA
AND AN = V_AN
AND NVL(ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
AND ID_GESTIUNE IN
(SELECT DISTINCT D1.ID_GESTIUNE
FROM GEST_CORESP_GRUPE_GESTIUNI D1
LEFT JOIN GEST_CORESP_UTIL_GRUPE D2
ON D1.ID_GRUPE = D2.ID_GRUPE
WHERE D1.STERS = 0
AND D2.STERS = 0
AND D2.ID_UTIL = V_ID_UTIL
AND NVL2(V_ID_GESTIUNE_INIT,
D1.ID_GESTIUNE,
-1) = NVL(V_ID_GESTIUNE_INIT, -1))
GROUP BY ID_ARTICOL) E
ON B.ID_ARTICOL = E.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) F
ON B.ID_VALUTA = F.ID_VALUTA
LEFT JOIN NOM_VALUTE G
ON B.ID_VALUTA = G.ID_VALUTA
WHERE (lnFacturareFaraStoc = 1 and NVL(E.CANTITATE, 0) <= 0)
OR DECODE(NVL(C.IN_STOC, 2), 1, NVL(E.CANTITATE, 0), 2, 0, 1) > 0
ORDER BY C.DENUMIRE;
WHEN V_TIP IN (5, 6, 10, 52) THEN
-- factura in valuta
OPEN V_CURSOR FOR
SELECT rownum as id_c,
A.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
V_ID_VALUTA AS ID_VALUTA, -- A.ID_VALUTA
A.NUME_LISTA_PRETURI,
ROUND(NVL(D.CURS, 0) *
ROUND(A.DISCOUNT_UNITAR,
pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv) AS DISCOUNT_UNITAR,
ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) AS DISCOUNT_UNITAR_VAL,
A.CODMAT,
A.CODBARE,
A.DENUMIRE,
NVL(A.UM, '') AS UM,
A.GESTIONABIL,
(CASE
WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN
0
ELSE
NVL(C.CANTITATE, 0)
END) AS CANTITATE,
A.PROC_TVAV,
A.PRETURI_CU_TVA,
D.CURS,
D.MULTIPLICATOR,
ROUND(NVL(D.CURS, 0) *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv) AS PRET,
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) AS PRET_VAL,
1 AS TIP_VALUTA,
E.NUME_VAL
FROM FACT_VPRETURI_UTILIZATOR A
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANTITATE
FROM STOC
WHERE LUNA = V_LUNA
AND AN = V_AN
AND NVL(ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
AND ID_GESTIUNE IN
(SELECT DISTINCT A1.ID_GESTIUNE
FROM GEST_CORESP_GRUPE_GESTIUNI A1
LEFT JOIN GEST_CORESP_UTIL_GRUPE A2
ON A1.ID_GRUPE = A2.ID_GRUPE
WHERE A1.STERS = 0
AND A2.STERS = 0
AND A2.ID_UTIL = V_ID_UTIL
AND NVL2(V_ID_GESTIUNE_INIT,
A1.ID_GESTIUNE,
-1) = NVL(V_ID_GESTIUNE_INIT, -1))
GROUP BY ID_ARTICOL) C
ON A.ID_ARTICOL = C.ID_ARTICOL
/* AND NVL(C.ID_RUL_AUX, 0) = 0*/
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) D
ON V_ID_VALUTA = D.ID_VALUTA
LEFT JOIN NOM_VALUTE E
ON V_ID_VALUTA = E.ID_VALUTA
WHERE A.ID_UTIL = V_ID_UTIL
-- AND A.ID_VALUTA = V_ID_VALUTA AND A.IN_VALUTA = 1
AND ((A.ID_VALUTA = V_ID_VALUTA AND A.IN_VALUTA = 1) OR
A.ID_POL = pack_facturare.nid_politica_stoc)
AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR
DECODE(A.GESTIONABIL, 1, NVL(C.CANTITATE, 0), 1) > 0)
ORDER BY A.DENUMIRE;
WHEN V_TIP = 7 THEN
-- credit note
OPEN V_CURSOR FOR
SELECT rownum as id_c,
A.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
V_ID_VALUTA AS ID_VALUTA, -- A.ID_VALUTA
A.NUME_LISTA_PRETURI,
ROUND(NVL(D.CURS, 0) *
ROUND(A.DISCOUNT_UNITAR,
pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv) AS DISCOUNT_UNITAR,
ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) AS DISCOUNT_UNITAR_VAL,
A.CODMAT,
A.CODBARE,
A.DENUMIRE,
NVL(A.UM, '') AS UM,
A.GESTIONABIL,
(CASE
WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN
0
ELSE
NVL(C.CANTITATE, 0)
END) AS CANTITATE,
A.PROC_TVAV,
A.PRETURI_CU_TVA,
D.CURS,
D.MULTIPLICATOR,
ROUND(NVL(D.CURS, 0) *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv) AS PRET,
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) AS PRET_VAL,
1 AS TIP_VALUTA,
E.NUME_VAL
FROM FACT_VPRETURI_UTILIZATOR A
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANTITATE
FROM STOC
WHERE LUNA = V_LUNA
AND AN = V_AN
AND NVL(ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
AND ID_GESTIUNE IN
(SELECT DISTINCT A1.ID_GESTIUNE
FROM GEST_CORESP_GRUPE_GESTIUNI A1
LEFT JOIN GEST_CORESP_UTIL_GRUPE A2
ON A1.ID_GRUPE = A2.ID_GRUPE
WHERE A1.STERS = 0
AND A2.STERS = 0
AND A2.ID_UTIL = V_ID_UTIL
AND NVL2(V_ID_GESTIUNE_INIT,
A1.ID_GESTIUNE,
-1) = NVL(V_ID_GESTIUNE_INIT, -1))
GROUP BY ID_ARTICOL) C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND ID_VALUTA = V_ID_VALUTA
AND STERS = 0) D
ON V_ID_VALUTA = D.ID_VALUTA
LEFT JOIN NOM_VALUTE E
ON V_ID_VALUTA = E.ID_VALUTA
WHERE A.ID_UTIL = V_ID_UTIL
AND A.ID_VALUTA = V_ID_VALUTA
AND A.IN_VALUTA = 1
AND NVL(A.nota_discount, 0) = 1
AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR
DECODE(A.GESTIONABIL, 1, NVL(C.CANTITATE, 0), 1) > 0)
ORDER BY A.DENUMIRE;
ELSE
-- aviz
OPEN V_CURSOR FOR
SELECT rownum as id_c,
A.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
A.ID_VALUTA,
A.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(D.CURS, 0) *
ROUND(A.DISCOUNT_UNITAR,
pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
A.CODMAT,
A.CODBARE,
A.DENUMIRE,
NVL(A.UM, '') AS UM,
A.GESTIONABIL,
(CASE
WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN
0
ELSE
NVL(C.CANTITATE, 0)
END) AS CANTITATE,
A.PROC_TVAV,
A.PRETURI_CU_TVA,
D.CURS,
D.MULTIPLICATOR,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(D.CURS, 0) *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A.PRET, pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(E.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
E.NUME_VAL,
DECODE(A.ID_POL,
NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1),
1,
0) AS MODIFICABIL
FROM FACT_VPRETURI_UTILIZATOR A
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANTITATE
FROM STOC
WHERE LUNA = V_LUNA
AND AN = V_AN
AND NVL(ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
AND ID_GESTIUNE IN
(SELECT DISTINCT A1.ID_GESTIUNE
FROM GEST_CORESP_GRUPE_GESTIUNI A1
LEFT JOIN GEST_CORESP_UTIL_GRUPE A2
ON A1.ID_GRUPE = A2.ID_GRUPE
WHERE A1.STERS = 0
AND A2.STERS = 0
AND A2.ID_UTIL = V_ID_UTIL
AND NVL2(V_ID_GESTIUNE_INIT,
A1.ID_GESTIUNE,
-1) = NVL(V_ID_GESTIUNE_INIT, -1))
GROUP BY ID_ARTICOL) C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) D
ON A.ID_VALUTA = D.ID_VALUTA
LEFT JOIN NOM_VALUTE E
ON A.ID_VALUTA = E.ID_VALUTA
WHERE A.ID_UTIL = V_ID_UTIL
AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR
DECODE(NVL(A.GESTIONABIL, 2),
1,
NVL(C.CANTITATE, 0),
2,
0,
1) > 0)
ORDER BY A.DENUMIRE;
END CASE;
END cursor_preturi;
-------------------------------------------------------------------
PROCEDURE cursor_contract(V_DATA_CURS IN DATE,
V_TIP IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_GESTIUNE_INIT IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_AGENT OUT NUMBER,
V_NUME_AGENT OUT VARCHAR2,
V_CURSOR OUT cursor_facturare,
V_CURSOR2 OUT cursor_facturare) IS
V_NR_INREGISTRARI NUMBER(10);
V_NR_INREGISTRARI_TOT NUMBER(10);
V_SEPARATOR VARCHAR2(10) := ',';
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
BEGIN
SELECT DISTINCT ID_AGENT, NUME_AGENT
INTO V_ID_AGENT, V_NUME_AGENT
FROM VCONTRACTE
WHERE ID_CTR IN
(SELECT X as ID_CTR
FROM table(charn2collection(V_LISTAID, V_SEPARATOR)));
EXCEPTION
WHEN TOO_MANY_ROWS THEN
V_ID_AGENT := NULL;
V_NUME_AGENT := NULL;
END;
-- verificare ca exista cursul pentru valutele din CTR_SCADENTAR si CTR_ARTICOLE
WITH CRS AS
(SELECT X as ID_CTR
FROM table(charn2collection(V_LISTAID, V_SEPARATOR)))
SELECT SUM(CASE
WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END),
SUM(CASE
WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END)
INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT
FROM (SELECT DISTINCT NVL(C.ID_VALUTA, B.ID_VALUTA) AS ID_VALUTA
FROM CONTRACTE A
LEFT JOIN CTR_ARTICOLE B
ON A.ID_CTR = B.ID_CTR
AND A.OPT_FACTURARE = 3
LEFT JOIN CTR_SCADENTAR C
ON A.ID_CTR = B.ID_CTR
AND A.OPT_FACTURARE IN (1, 2)
WHERE A.ID_CTR IN (SELECT ID_CTR FROM CRS)
AND A.STERS = 0
AND A.INACTIV = 0) A
LEFT JOIN CURS B
ON A.ID_VALUTA = B.ID_VALUTA
AND B.STERS = 0
AND B.DATA <= V_DATA_CURS
AND B.DATA2 >= V_DATA_CURS;
IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN
RAISE_APPLICATION_ERROR(-20005,
'Nu este setat cursul din data de ' ||
to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !');
END IF;
OPEN V_CURSOR2 FOR
WITH CRS AS
(SELECT X as ID_CTR
FROM table(charn2collection(V_LISTAID, V_SEPARATOR)))
SELECT rownum - 10000 as id_c,
id_ctr,
id_articol,
id_rata,
id_pol,
id_valuta,
numar || '/' || to_char(data, 'DD.MM.YYYY') as numar_contract,
numar,
data,
discount_unitar,
discount_unitar_val,
codmat,
codbare,
denumire,
preturi_cu_tva,
um,
gestionabil,
cantitate,
proc_tvav,
curs,
multiplicator,
pret,
pret_val,
tip_valuta,
nume_val,
nr_rata,
data_rata,
data_scadenta,
explicatie,
opt_facturare
FROM (SELECT A.ID_CTR,
C.ID_ARTICOL,
NULL as id_rata,
C.ID_POL,
B.ID_VALUTA,
A.NUMAR,
A.DATA,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(F.CURS, 0) *
ROUND(ROUND(B.PRET_UNITAR,
pack_sesiune.nzecimale_pretvval)
* B.COEF_DISCOUNT / 100,
pack_sesiune.nzecimale_pretvval) /
NVL(F.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(ROUND(B.PRET_UNITAR,
pack_sesiune.nzecimale_pretv) *
B.COEF_DISCOUNT / 100,
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(ROUND(B.PRET_UNITAR,
pack_sesiune.nzecimale_pretvval) *
B.COEF_DISCOUNT / 100,
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
E.CODMAT,
E.CODBARE,
E.DENUMIRE,
B.PRET_CU_TVA AS PRETURI_CU_TVA,
NVL(E.UM, '') AS UM,
E.IN_STOC AS GESTIONABIL,
B.CANT AS CANTITATE,
C.PROC_TVAV,
F.CURS,
F.MULTIPLICATOR,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(F.CURS, 0) *
ROUND(B.PRET_UNITAR,
pack_sesiune.nzecimale_pretvval) /
NVL(F.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(B.PRET_UNITAR, pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(B.PRET_UNITAR, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
G.NUME_VAL,
NULL as NR_RATA,
null as data_rata,
null as data_scadenta,
'' as explicatie,
A.OPT_FACTURARE
FROM (SELECT ID_CTR, NUMAR, DATA, OPT_FACTURARE
FROM CONTRACTE
WHERE ID_CTR in (SELECT ID_CTR FROM CRS)
AND OPT_FACTURARE = 3
AND STERS = 0) A
LEFT JOIN CTR_ARTICOLE B
ON A.ID_CTR = B.ID_CTR
LEFT JOIN CRM_POLITICI_PRET_ART C
ON B.ID_POL_ART = C.ID_POL_ART
LEFT JOIN NOM_ARTICOLE E
ON C.ID_ARTICOL = E.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) F
ON B.ID_VALUTA = F.ID_VALUTA
LEFT JOIN NOM_VALUTE G
ON B.ID_VALUTA = G.ID_VALUTA
UNION ALL
SELECT A01.ID_CTR,
null as id_articol,
B01.ID_RATA,
NULL AS ID_POL,
B01.ID_VALUTA,
A01.NUMAR,
A01.DATA,
0 as discount_unitar,
0 as discount_unitar_val,
null as codmat,
null as codbare,
B01.DEN_RATA as denumire,
B01.PRET_CU_TVA AS PRETURI_CU_TVA,
NULL AS UM,
0 as gestionabil,
1 as cantitate,
(A01.PROC_TVA + 100) / 100 AS PROC_TVAV,
E01.CURS,
E01.MULTIPLICATOR,
(CASE
WHEN NVL(F01.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E01.CURS, 0) *
(ROUND(B01.VALRATA,
pack_sesiune.nzecimale_pretvval) -
DECODE(B01.PRET_CU_TVA,
0,
NVL(D01.VALVALUTA, 0),
NVL(D01.VALVALUTACTVA, 0))) /
NVL(E01.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(ROUND(B01.VALRATA, pack_sesiune.nzecimale_pretv) -
DECODE(B01.PRET_CU_TVA,
0,
NVL(D01.VALVALUTA, 0),
NVL(D01.VALVALUTACTVA, 0)),
pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(F01.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(ROUND(B01.VALRATA,
pack_sesiune.nzecimale_pretvval) -
DECODE(B01.PRET_CU_TVA,
0,
NVL(D01.VALVALUTA, 0),
NVL(D01.VALVALUTACTVA, 0)),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(F01.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
F01.NUME_VAL,
B01.NR_RATA,
B01.DATA_RATA,
B01.DATA_SCADENTA,
UPPER(NVL(C01.DENUMIRE, B01.DEN_RATA)) AS EXPLICATIE,
A01.OPT_FACTURARE
FROM (SELECT ID_CTR, NUMAR, DATA, OPT_FACTURARE, PROC_TVA
FROM CONTRACTE
WHERE STERS = 0
AND ID_CTR in (SELECT ID_CTR FROM CRS)
AND OPT_FACTURARE IN (1, 2)) A01
LEFT JOIN CTR_SCADENTAR B01
ON A01.ID_CTR = B01.ID_CTR
AND B01.STERS = 0
LEFT JOIN (SELECT DENUMIRE, ID_CTR AS ID_CONTRACT
FROM (SELECT C1.ID_CTR,
C3.DENUMIRE,
ROW_NUMBER() OVER(PARTITION BY C1.ID_CTR ORDER BY C1.ID_CTR_ART) AS NRCRT
FROM CTR_ARTICOLE C1
LEFT JOIN CRM_POLITICI_PRET_ART C2
ON C1.ID_POL_ART = C2.ID_POL_ART
LEFT JOIN NOM_ARTICOLE C3
ON C2.ID_ARTICOL = C3.ID_ARTICOL
WHERE C1.id_ctr in
(SELECT ID_CTR FROM CRS))
WHERE NRCRT = 1) C01
ON A01.ID_CTR = C01.ID_CONTRACT
AND A01.OPT_FACTURARE = 2
-- 14.11.2012 : am scos round(...) de la valvaluta si valvalutactva - trebuie rotunjite in fct. de id_valuta
LEFT JOIN (SELECT SUM(VALVALUTA) AS VALVALUTA,
SUM(VALVALUTACTVA) AS VALVALUTACTVA,
ID_RATA
FROM CTR_RATE_FACTURI
WHERE STERS = 0
GROUP BY ID_RATA) D01
ON B01.ID_RATA = D01.ID_RATA
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) E01
ON B01.ID_VALUTA = E01.ID_VALUTA
LEFT JOIN NOM_VALUTE F01
ON B01.ID_VALUTA = F01.ID_VALUTA
-- 14.11.2012 : am scos round(...) de la valrata - trebuie rotunjita in fct. de id_valuta
WHERE B01.VALRATA -
DECODE(B01.PRET_CU_TVA,
0,
NVL(D01.VALVALUTA, 0),
NVL(D01.VALVALUTACTVA, 0)) > 0)
ORDER BY data, numar, data_rata, denumire;
pack_facturare.cursor_preturi(V_DATA_CURS,
V_TIP,
V_ID_VALUTA,
V_ID_GESTIUNE_INIT,
V_LUNA,
V_AN,
V_ID_UTIL,
V_ID_SUCURSALA,
V_CURSOR);
END cursor_contract;
-------------------------------------------------------------------
PROCEDURE cursor_comanda(V_DATA_CURS IN DATE,
V_TIP IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_ID_COMANDA COMENZI.ID_COMANDA%TYPE;
V_NR_INREGISTRARI NUMBER(10);
V_NR_INREGISTRARI_TOT NUMBER(10);
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
V_ID_COMANDA := TO_NUMBER(V_LISTAID);
-- verificare ca exista cursul pentru valutele din COMENZI_ELEMENTE
SELECT SUM(CASE
WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END),
SUM(CASE
WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END)
INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT
FROM (SELECT DISTINCT ID_VALUTA
FROM COMENZI_ELEMENTE
WHERE ID_COMANDA = V_ID_COMANDA) A
LEFT JOIN CURS B
ON A.ID_VALUTA = B.ID_VALUTA
AND B.STERS = 0
AND B.DATA <= V_DATA_CURS
AND B.DATA2 >= V_DATA_CURS;
IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN
RAISE_APPLICATION_ERROR(-20005,
'Nu este setat cursul din data de ' ||
to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !');
END IF;
IF V_TIP <= 20 THEN
-- factura
OPEN V_CURSOR FOR
SELECT ROWNUM as id_c,
A.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
A.ID_VALUTA,
G.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(NVL(B.DISCOUNT_UNITAR, 0) +
NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.DISCOUNT_UNITAR, 0) +
NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.DISCOUNT_UNITAR, 0) +
NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, '') AS UM,
C.IN_STOC AS GESTIONABIL,
A.CANTITATE - NVL(D.CANTITATE, 0) AS CANTITATE,
B.PROC_TVAV,
A.PRET_CU_TVA AS PRETURI_CU_TVA,
E.CURS,
E.MULTIPLICATOR,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A.PRET, pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
F.NUME_VAL
FROM COMENZI_ELEMENTE A
LEFT JOIN CRM_POLITICI_PRET_ART B
ON A.ID_POL = B.ID_POL
AND A.ID_ARTICOL = B.ID_ARTICOL
LEFT JOIN CRM_POLITICI_PRETURI G
ON B.ID_POL = G.ID_POL
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
AND A1.ID_COMANDA = V_ID_COMANDA
GROUP BY B1.ID_ARTICOL) D
ON A.ID_ARTICOL = D.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) E
ON A.ID_VALUTA = E.ID_VALUTA
LEFT JOIN NOM_VALUTE F
ON A.ID_VALUTA = F.ID_VALUTA
WHERE A.STERS = 0
AND A.ID_COMANDA = V_ID_COMANDA
AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0
ORDER BY C.DENUMIRE;
ELSE
-- aviz
OPEN V_CURSOR FOR
SELECT ROWNUM as id_c,
A.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
A.ID_VALUTA,
G.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(NVL(B.DISCOUNT_UNITAR, 0) +
NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.DISCOUNT_UNITAR, 0) +
NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.DISCOUNT_UNITAR, 0) +
NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, '') AS UM,
C.IN_STOC AS GESTIONABIL,
A.CANTITATE - NVL(D.CANTITATE, 0) AS CANTITATE,
B.PROC_TVAV,
A.PRET_CU_TVA AS PRETURI_CU_TVA,
E.CURS,
E.MULTIPLICATOR,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A.PRET, pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
F.NUME_VAL
FROM COMENZI_ELEMENTE A
LEFT JOIN CRM_POLITICI_PRET_ART B
ON A.ID_POL = B.ID_POL
AND A.ID_ARTICOL = B.ID_ARTICOL
LEFT JOIN CRM_POLITICI_PRETURI G
ON B.ID_POL = G.ID_POL
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
AND A1.ID_COMANDA = V_ID_COMANDA
GROUP BY B1.ID_ARTICOL) D
ON A.ID_ARTICOL = D.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) E
ON A.ID_VALUTA = E.ID_VALUTA
LEFT JOIN NOM_VALUTE F
ON A.ID_VALUTA = F.ID_VALUTA
WHERE A.STERS = 0
AND A.ID_COMANDA = V_ID_COMANDA
AND SIGN(A.CANTITATE) * (A.CANTITATE - NVL(D.CANTITATE, 0)) > 0
ORDER BY C.DENUMIRE;
END IF;
END cursor_comanda;
-------------------------------------------------------------------
PROCEDURE cursor_lucrare(V_DATA_CURS IN DATE,
V_ID_GESTIUNE IN NUMBER,
V_ID_LUCRARE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_NR_INREGISTRARI NUMBER(10);
V_NR_INREGISTRARI_TOT NUMBER(10);
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
-- verificare ca exista cursul pentru valutele din COMENZI_ELEMENTE
SELECT SUM(CASE
WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END),
SUM(CASE
WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END)
INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT
FROM (SELECT DISTINCT ID_VALUTA
FROM COMENZI_ELEMENTE
WHERE ID_COMANDA IN
(SELECT ID_COMANDA
FROM COMENZI
WHERE ID_LUCRARE = V_ID_LUCRARE
AND STERS = 0
AND ID_SUCURSALA = V_ID_SUCURSALA)) A
LEFT JOIN CURS B
ON A.ID_VALUTA = B.ID_VALUTA
AND B.STERS = 0
AND B.DATA <= V_DATA_CURS
AND B.DATA2 >= V_DATA_CURS;
IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN
RAISE_APPLICATION_ERROR(-20005,
'Nu este setat cursul din data de ' ||
to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !');
END IF;
IF TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('FACTALGREPCOM'), '0')) = 1 THEN
-- in gestiunea sursa exista un singur cont
OPEN V_CURSOR FOR
select A1.id_articol,
A1.id_comanda,
A1.id_comanda_element,
A1.id_gestiune,
A1.id_pol,
A1.cont,
A3.nume_gestiune,
A2.codmat,
A2.codbare,
A2.denumire,
A1.cant_com,
A1.cant_ramasa,
A1.cant_stoc,
A1.cantitate,
A1.cant_stoc -
(SUM(a1.cantitate) over(partition by a1.id_articol)) as cant_disp,
A1.ID_VALUTA,
NVL(A4.PROC_TVAV, 1) AS PROC_TVAV,
A1.PRET_CU_TVA AS PRETURI_CU_TVA,
NVL(A5.CURS, 0) AS CURS,
NVL(A5.MULTIPLICATOR, 1) AS MULTIPLICATOR,
(CASE
WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A5.CURS, 0) *
(ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)) /
NVL(A5.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS PRET,
1 - NVL(A6.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
A6.NUME_VAL,
(CASE
WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A5.CURS, 0) *
(ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)) /
NVL(A5.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) + ROUND((CASE
WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A5.CURS, 0) *
(ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)) /
NVL(A5.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) * (CASE
WHEN A1.PRET_CU_TVA = 0 THEN
A4.PROC_TVAV - 1
ELSE
0
END),
pack_sesiune.nzecimale_pretv) AS PRETCTVA
from (SELECT CRS.ID_ARTICOL,
CRS.ID_VALUTA,
CRS.PRET_CU_TVA,
CRS.PRET,
CRS.ID_POL,
CRS.ID_COMANDA_ELEMENT,
CRS.ID_COMANDA,
CRS.ID_GESTIUNE,
CRS.CONT,
CRS.PROCENT,
CRS.CANT_COM,
CRS.CANT_RAMASA,
CRS.CANT_STOC,
CRS.CANT_REP,
CRS.INCOMPLET,
CRS.cant_rep + (case
when CRS.incomplet = 1 and CRS.cant_stoc > 0 and
CRS.cant_stoc - sum(CRS.cant_rep)
over(partition by CRS.id_articol) > 0 then
trunc((CRS.cant_stoc - sum(CRS.cant_rep)
over(partition by CRS.id_articol)) /
sum(CRS.incomplet)
over(partition by CRS.id_articol)) +
(case
when mod((CRS.cant_stoc - sum(CRS.cant_rep)
over(partition by CRS.id_articol)),
sum(CRS.incomplet)
over(partition by CRS.id_articol)) >=
row_number()
over(partition by CRS.id_articol order by
CRS.incomplet desc,
CRS.procent desc) then
1
else
0
end)
else
0
end) as cantitate
FROM (SELECT A.ID_ARTICOL,
A.ID_VALUTA,
A.PRET_CU_TVA,
A.PRET - NVL(A.DISCOUNT_UNITAR, 0) AS PRET,
A.ID_POL,
A.ID_COMANDA_ELEMENT,
COM.ID_COMANDA,
COM.ID_GESTIUNE,
STOC.CONT,
FLOOR(RATIO_TO_REPORT(A.CANTITATE -
NVL(D.CANTITATE, 0))
OVER(PARTITION BY A.ID_ARTICOL) * 100) / 100 as procent,
A.CANTITATE AS CANT_COM,
A.CANTITATE - NVL(D.CANTITATE, 0) AS CANT_RAMASA,
NVL(STOC.CANT_STOC, 0) AS CANT_STOC,
(case
when NVL(STOC.CANT_STOC, 0) -
(SUM(A.CANTITATE - NVL(D.CANTITATE, 0))
OVER(PARTITION BY A.ID_ARTICOL)) > 0 and
A.CANTITATE - NVL(D.CANTITATE, 0) > 0 and
NVL(STOC.CANT_STOC, 0) > 0 then
A.CANTITATE - NVL(D.CANTITATE, 0)
when NVL(STOC.CANT_STOC, 0) > 0 and
A.CANTITATE - NVL(D.CANTITATE, 0) > 0 then
LEAST(A.CANTITATE - NVL(D.CANTITATE, 0),
FLOOR(FLOOR(RATIO_TO_REPORT(A.CANTITATE -
NVL(D.CANTITATE,
0))
OVER(PARTITION BY
A.ID_ARTICOL) * 100) / 100 *
NVL(STOC.CANT_STOC, 0)))
else
0
end) AS CANT_REP,
(case
when NVL(STOC.CANT_STOC, 0) -
(SUM(A.CANTITATE - NVL(D.CANTITATE, 0))
OVER(PARTITION BY A.ID_ARTICOL)) > 0 and
A.CANTITATE - NVL(D.CANTITATE, 0) > 0 and
NVL(STOC.CANT_STOC, 0) > 0 then
0
when A.CANTITATE - NVL(D.CANTITATE, 0) -
FLOOR(FLOOR(RATIO_TO_REPORT(A.CANTITATE -
NVL(D.CANTITATE,
0))
OVER(PARTITION BY
A.ID_ARTICOL) * 100) / 100 *
NVL(STOC.CANT_STOC, 0)) > 0 AND
NVL(STOC.CANT_STOC, 0) > 0 AND
A.CANTITATE - NVL(D.CANTITATE, 0) > 0 then
1
else
0
end) AS incomplet
FROM COMENZI COM
LEFT JOIN COMENZI_ELEMENTE A
ON COM.ID_COMANDA = A.ID_COMANDA
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL,
A1.ID_COMANDA,
SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D
ON A.ID_ARTICOL = D.ID_ARTICOL
AND A.ID_COMANDA = D.ID_COMANDA
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
CONT
FROM STOC
WHERE AN = V_AN
AND LUNA = V_LUNA
AND ID_GESTIUNE = V_ID_GESTIUNE
AND NVL2(V_ID_SUCURSALA,
ID_SUCURSALA,
-99) =
NVL(V_ID_SUCURSALA, -99)
GROUP BY ID_ARTICOL, CONT) STOC
ON A.ID_ARTICOL = STOC.ID_ARTICOL
WHERE A.STERS = 0
AND COM.ID_LUCRARE = V_ID_LUCRARE
AND COM.STERS = 0
AND COM.ID_SECTIE IN
(SELECT ID_SECTIE
FROM NOM_SECTII
WHERE STERS = 0
AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99))
AND C.IN_STOC = 1
AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0
AND COM.ID_GESTIUNE IS NOT NULL
order by 1, 2 desc) CRS) A1
LEFT JOIN NOM_ARTICOLE A2
ON A1.ID_ARTICOL = A2.ID_ARTICOL
LEFT JOIN NOM_GESTIUNI A3
ON A1.ID_GESTIUNE = A3.ID_GESTIUNE
LEFT JOIN CRM_POLITICI_PRET_ART A4
ON A1.ID_POL = A4.ID_POL
AND A1.ID_ARTICOL = A4.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) A5
ON A1.ID_VALUTA = A5.ID_VALUTA
LEFT JOIN NOM_VALUTE A6
ON A1.ID_VALUTA = A6.ID_VALUTA
ORDER BY a2.denumire, a2.codmat, a3.nume_gestiune;
ELSE
OPEN V_CURSOR FOR
select A1.id_articol,
A1.id_comanda,
A1.id_comanda_element,
A1.id_gestiune,
A1.id_pol,
A1.cont,
A3.nume_gestiune,
A2.codmat,
A2.codbare,
A2.denumire,
A1.cant_com,
A1.cant_ramasa,
A1.cant_stoc,
A1.CANT_REP as cantitate,
A1.cant_stoc -
(SUM(a1.CANT_REP) over(partition by a1.id_articol)) as cant_disp,
A1.ID_VALUTA,
NVL(A4.PROC_TVAV, 1) AS PROC_TVAV,
A1.PRET_CU_TVA AS PRETURI_CU_TVA,
NVL(A5.CURS, 0) AS CURS,
NVL(A5.MULTIPLICATOR, 1) AS MULTIPLICATOR,
(CASE
WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A5.CURS, 0) *
(ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)) /
NVL(A5.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS PRET,
1 - NVL(A6.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
A6.NUME_VAL,
(CASE
WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A5.CURS, 0) *
(ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)) /
NVL(A5.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) + ROUND((CASE
WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A5.CURS, 0) *
(ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)) /
NVL(A5.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) -
ROUND(NVL(A4.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) * (CASE
WHEN A1.PRET_CU_TVA = 0 THEN
A4.PROC_TVAV - 1
ELSE
0
END),
pack_sesiune.nzecimale_pretv) AS PRETCTVA
from (SELECT A.ID_ARTICOL,
A.ID_VALUTA,
A.PRET_CU_TVA,
A.PRET - NVL(A.DISCOUNT_UNITAR, 0) AS PRET,
A.ID_POL,
A.ID_COMANDA_ELEMENT,
COM.ID_COMANDA,
COM.ID_GESTIUNE,
STOC.CONT,
A.CANTITATE AS CANT_COM,
A.CANTITATE - NVL(D.CANTITATE, 0) AS CANT_RAMASA,
NVL(STOC.CANT_STOC, 0) AS CANT_STOC,
(CASE
WHEN NVL(STOC.CANT_STOC, 0) > 0 THEN
A.CANTITATE - NVL(D.CANTITATE, 0)
ELSE
0
END) AS CANT_REP,
0 AS incomplet
FROM COMENZI COM
LEFT JOIN COMENZI_ELEMENTE A
ON COM.ID_COMANDA = A.ID_COMANDA
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL,
A1.ID_COMANDA,
SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D
ON A.ID_ARTICOL = D.ID_ARTICOL
AND A.ID_COMANDA = D.ID_COMANDA
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
CONT
FROM STOC
WHERE AN = V_AN
AND LUNA = V_LUNA
AND ID_GESTIUNE = V_ID_GESTIUNE
AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
GROUP BY ID_ARTICOL, CONT) STOC
ON A.ID_ARTICOL = STOC.ID_ARTICOL
WHERE A.STERS = 0
AND COM.ID_LUCRARE = V_ID_LUCRARE
AND COM.STERS = 0
AND COM.ID_SECTIE IN
(SELECT ID_SECTIE
FROM NOM_SECTII
WHERE STERS = 0
AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99))
AND C.IN_STOC = 1
AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0
AND COM.ID_GESTIUNE IS NOT NULL
order by 1, 2 desc) A1
LEFT JOIN NOM_ARTICOLE A2
ON A1.ID_ARTICOL = A2.ID_ARTICOL
LEFT JOIN NOM_GESTIUNI A3
ON A1.ID_GESTIUNE = A3.ID_GESTIUNE
LEFT JOIN CRM_POLITICI_PRET_ART A4
ON A1.ID_POL = A4.ID_POL
AND A1.ID_ARTICOL = A4.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) A5
ON A1.ID_VALUTA = A5.ID_VALUTA
LEFT JOIN NOM_VALUTE A6
ON A5.ID_VALUTA = A6.ID_VALUTA
ORDER BY a2.denumire, a2.codmat, a3.nume_gestiune;
END IF;
END cursor_lucrare;
-------------------------------------------------------------------
PROCEDURE cursor_articole_k(V_DATA_CURS IN DATE,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
OPEN V_CURSOR FOR
SELECT rownum as id_c,
B.ID_ARTICOL,
NULL AS LOT,
NULL as SERIE,
A.ID_POL,
B.ID_VALUTA,
A.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(D.CURS, 0) *
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, '') AS UM,
C.IN_STOC AS GESTIONABIL,
0 AS CANTITATE,
B.PROC_TVAV,
A.PRETURI_CU_TVA,
D.CURS,
D.MULTIPLICATOR,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(D.CURS, 0) *
ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) /
NVL(D.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(E.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
E.NUME_VAL
FROM (select a1.id_util,
a3.id_pol,
a3.preturi_cu_tva,
a3.nume_lista_preturi,
a3.id_nota
from utilizatori_rol_intern a1
left join politici_grupuri a2
on a1.id_grup = a2.id_grup
left join crm_politici_preturi a3
on a2.id_politica = a3.id_pol
left join crm_note_vanzari a4
on a3.id_nota = a4.id_nota
left join note_contabile a5
on a4.id_set = a5.id_set
where a1.sters = 0
and a2.sters = 0
and a3.sters = 0
and a1.id_util = V_ID_UTIL
and NVL(a5.in_valuta, 0) = 0
and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')),
sysdate),
sysdate) between a3.datai and
NVL(a3.datas, to_date('300012', 'YYYYMM'))
and NVL(a1.ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)
and a3.id_pol =
to_number(pack_sesiune.getoptiunefirma('IDPOLPRETFACTK'))) A
LEFT JOIN CRM_POLITICI_PRET_ART B
ON A.ID_POL = B.ID_POL
LEFT JOIN NOM_ARTICOLE C
ON B.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) D
ON B.ID_VALUTA = D.ID_VALUTA
LEFT JOIN NOM_VALUTE E
ON B.ID_VALUTA = E.ID_VALUTA
WHERE C.IN_STOC = 0
AND C.IN_CRM = 1
AND C.STERS = 0
AND C.INACTIV = 0
ORDER BY C.DENUMIRE;
END cursor_articole_k;
-------------------------------------------------------------------
PROCEDURE cursor_avize(V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_DISCOUNT OUT NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_SEPARATOR VARCHAR2(10) := ',';
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
V_DISCOUNT := 0;
OPEN V_CURSOR FOR
WITH CRS AS
(SELECT X as ID_VANZARE
FROM table(charn2collection(V_LISTAID, V_SEPARATOR)))
SELECT ROWNUM AS ID_C,
A.ID_ARTICOL,
A.LOT,
A.SERIE,
A.ID_POL,
A.ID_VALUTA,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.CURS *
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(A.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, '') AS UM,
0 AS GESTIONABIL,
A.CANTITATE - NVL(B.CANTITATE, 0) AS CANTITATE,
A.PROC_TVAV,
A.ID_JTVA_COLOANA,
A.ID_GESTIUNE,
A.CONT,
A.PRET_CU_TVA AS PRETURI_CU_TVA,
A.CURS,
A.MULTIPLICATOR,
A.PRET_ACHIZITIE,
A.PRETD,
A.ID_VALUTAD AS ID_VALUTA_D,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.CURS *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(A.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A.PRET, pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(D.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
D.NUME_VAL
FROM (SELECT A1.ID_ARTICOL,
A1.LOT,
A1.SERIE,
A1.ID_POL,
A1.DISCOUNT_UNITAR,
SUM(A1.CANTITATE) AS CANTITATE,
A1.PROC_TVAV,
A1.ID_JTVA_COLOANA,
NVL(A1.ID_GESTIUNE, -1000) AS ID_GESTIUNE,
NVL(A1.CONT, 'XXXX') AS CONT,
A1.PRET_CU_TVA,
A1.PRET_ACHIZITIE,
A1.PRETD,
A1.ID_VALUTAD,
A1.PRET,
A1.ID_VALUTA,
NVL(B1.CURS, 0) AS CURS,
NVL(B1.MULTIPLICATOR, 1) AS MULTIPLICATOR
FROM VANZARI_DETALII A1
LEFT JOIN VANZARI_CURSURI B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND A1.ID_VALUTA = B1.ID_VALUTA
WHERE A1.STERS = 0
AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)
GROUP BY A1.ID_ARTICOL,
A1.ID_POL,
A1.LOT,
A1.SERIE,
A1.DISCOUNT_UNITAR,
A1.PROC_TVAV,
A1.ID_JTVA_COLOANA,
NVL(A1.ID_GESTIUNE, -1000),
NVL(A1.CONT, 'XXXX'),
A1.PRET_CU_TVA,
A1.PRET_ACHIZITIE,
A1.PRETD,
A1.ID_VALUTAD,
A1.PRET,
A1.ID_VALUTA,
NVL(B1.CURS, 0),
NVL(B1.MULTIPLICATOR, 1)) A
LEFT JOIN (SELECT A2.ID_ARTICOL,
A2.LOT,
A2.SERIE,
A2.ID_POL,
A2.DISCOUNT_UNITAR,
SUM(B2.CANTITATE) AS CANTITATE,
A2.PROC_TVAV,
A2.ID_JTVA_COLOANA,
NVL(A2.ID_GESTIUNE, -1000) AS ID_GESTIUNE,
NVL(A2.CONT, 'XXXX') AS CONT,
A2.PRET_CU_TVA,
A2.PRET_ACHIZITIE,
A2.PRETD,
A2.ID_VALUTAD,
A2.PRET,
A2.ID_VALUTA
FROM VANZARI_DETALII A2
RIGHT JOIN VANZARI_CANTITATI B2
ON A2.ID_VANZARE_DET = B2.ID_VANZARE_DET_AVIZ
WHERE A2.STERS = 0
AND A2.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)
AND B2.STERS = 0
GROUP BY A2.ID_ARTICOL,
A2.ID_POL,
A2.LOT,
A2.SERIE,
A2.DISCOUNT_UNITAR,
A2.PROC_TVAV,
A2.ID_JTVA_COLOANA,
NVL(A2.ID_GESTIUNE, -1000),
NVL(A2.CONT, 'XXXX'),
A2.PRET_CU_TVA,
A2.PRET_ACHIZITIE,
A2.PRETD,
A2.ID_VALUTAD,
A2.PRET,
A2.ID_VALUTA) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_POL = B.ID_POL
AND NVL(A.LOT, '+_') = NVL(B.LOT, '+_')
AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_')
AND A.DISCOUNT_UNITAR = B.DISCOUNT_UNITAR
AND A.PROC_TVAV = B.PROC_TVAV
AND NVL(A.ID_JTVA_COLOANA, -9999) = NVL(B.ID_JTVA_COLOANA, -9999)
AND NVL(A.ID_GESTIUNE, -9999) = NVL(B.ID_GESTIUNE, -9999)
AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX')
AND A.PRET_CU_TVA = B.PRET_CU_TVA
AND A.PRET = B.PRET
AND A.ID_VALUTA = B.ID_VALUTA
AND NVL(A.PRET_ACHIZITIE, 0) = NVL(B.PRET_ACHIZITIE, 0)
AND NVL(A.PRETD, 0) = NVL(B.PRETD, 0)
AND NVL(A.ID_VALUTAD, -99) = NVL(B.ID_VALUTAD, -99)
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN NOM_VALUTE D
ON A.ID_VALUTA = D.ID_VALUTA
WHERE A.CANTITATE <> NVL(B.CANTITATE, 0)
ORDER BY C.DENUMIRE;
END cursor_avize;
-------------------------------------------------------------------
PROCEDURE cursor_aviz_nir(V_ID_GESTIUNE_DEST IN NUMBER,
V_ID_FURNIZOR IN NUMBER,
V_NR_ACT IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
BEGIN
OPEN V_CURSOR FOR
select rownum as id_c,
rownum as id_temp,
a.ID_ARTICOL,
a.LOT,
a.SERIE,
a.ID_GESTIUNE,
b.ID_VALUTA,
0 as discount_unitar,
c.CODMAT,
c.DENUMIRE,
Nvl(c.UM, Chr(32)) as um,
1 as gestionabil,
a.CANT as cantitate,
a.PROC_TVAV,
decode(d.nr_pag, 6, 1, 7, 1, 0) as preturi_cu_tva,
0 as CURS,
1 as multiplicator,
a.PRET as preta,
a.pretv + a.tvav as pretctva,
a.pretv as pretftva,
a.tvav,
0 as pret_val,
b.nume_val,
0 as discount_unitar_val,
0 as tip_valuta,
a.cont,
a.pretd,
a.id_valuta as id_valuta_d
from rul A
left join (select id_valuta, nume_val
from vnom_valute
where moneda_nationala = 1
and rownum = 1) b
on 1 = 1
left join nom_articole c
on a.id_articol = c.id_articol
left join nom_gestiuni d
on a.id_gestiune = d.id_gestiune
where a.sters = 0
and a.id_gestiune = V_ID_GESTIUNE_DEST
and a.cod in (select max(a1.cod)
from act a1
where a1.sters = 0
and a1.id_partc = V_ID_FURNIZOR
and a1.scc = '401'
and a1.nract = V_NR_ACT
and NVL2(V_ID_SUCURSALA, a1.id_sucursala, -1) =
NVL(V_ID_SUCURSALA, -1));
END cursor_aviz_nir;
-------------------------------------------------------------------
PROCEDURE cursor_retur(V_IN_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_COPIERE NUMBER := 0;
V_PROFORMA NUMBER := 0;
BEGIN
pack_facturare.cursor_retur_document(V_IN_VALUTA,
V_LISTAID,
V_COPIERE,
V_PROFORMA,
V_ID_UTIL,
V_CURSOR);
END;
PROCEDURE cursor_retur_document(V_IN_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_COPIERE IN NUMBER,
V_PROFORMA IN NUMBER,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_SEPARATOR VARCHAR2(10) := ',';
-- V_COPIERE: 1 (COPIERE) GESTIONABIL = NOM_ARTICOLE.IN_STOC, 0 (RETUR) GESTIONABIL = VANZARI_DETALII.ID_GEST <> 0
-- V_PROFORMA: Daca este proforma (1), fac articolele negestionabile sa pot alege orice cantitate
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
OPEN V_CURSOR FOR
WITH CRS AS
(SELECT X as ID_VANZARE
FROM table(charn2collection(V_LISTAID, V_SEPARATOR)))
SELECT ROWNUM AS ID_C,
A.ID_ARTICOL,
A.LOT,
A.SERIE,
A.ID_POL,
A.ID_VALUTA,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.CURS *
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(A.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
B.CODMAT,
B.CODBARE,
B.DENUMIRE,
NVL(B.UM, '') AS UM,
(case
when V_PROFORMA = 1 then
0
when V_COPIERE = 1 then
B.IN_STOC
else
A.GESTIONABIL
end) AS GESTIONABIL,
A.CANTITATE,
A.PROC_TVAV,
A.ID_JTVA_COLOANA,
A.PRET_CU_TVA AS PRETURI_CU_TVA,
A.CURS,
A.MULTIPLICATOR,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.CURS *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(A.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A.PRET, pack_sesiune.nzecimale_pretv)
END) + A.DIFERENTA AS PRET,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(C.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
C.NUME_VAL,
A.EXPLICATIE,
nvl(A.ID_GESTIUNE, 0) as ID_GESTIUNE,
A.PRET_ACHIZITIE,
A.PRETD,
A.ID_JTVA_COLOANA_EX
FROM (SELECT A1.ID_ARTICOL,
A1.LOT,
A1.SERIE,
A1.ID_POL,
A1.DISCOUNT_UNITAR,
A1.DIFERENTA,
--SUM(A1.CANTITATE) AS CANTITATE,
A1.CANTITATE,
A1.PROC_TVAV,
A1.ID_JTVA_COLOANA,
NVL2(A1.ID_GESTIUNE, 1, 0) AS GESTIONABIL,
A1.PRET_CU_TVA,
A1.PRET,
A1.ID_VALUTA,
NVL(A2.CURS, 0) AS CURS,
NVL(A2.MULTIPLICATOR, 1) AS MULTIPLICATOR,
A1.EXPLICATIE,
A1.ID_GESTIUNE,
A1.PRET_ACHIZITIE,
A1.PRETD,
A1.ID_JTVA_COLOANA_EX
FROM VANZARI_DETALII A1
LEFT JOIN VANZARI_CURSURI A2
ON A1.ID_VANZARE = A2.ID_VANZARE
AND A1.ID_VALUTA = A2.ID_VALUTA
WHERE A1.STERS = 0
AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
LEFT JOIN NOM_VALUTE C
ON A.ID_VALUTA = C.ID_VALUTA
ORDER BY B.DENUMIRE;
END cursor_retur_document;
-----------------------------------------------------------------
PROCEDURE cursor_copiere(V_IN_VALUTA IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_SEPARATOR VARCHAR2(10) := ',';
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
OPEN V_CURSOR FOR
WITH CRS AS
(SELECT X as ID_VANZARE
FROM table(charn2collection(V_LISTAID, V_SEPARATOR)))
SELECT ROWNUM AS ID_C,
A.ID_ARTICOL,
A.LOT,
A.SERIE,
A.ID_POL,
A.ID_VALUTA,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.CURS *
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(A.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
B.CODMAT,
B.CODBARE,
B.DENUMIRE,
NVL(B.UM, '') AS UM,
A.GESTIONABIL,
A.CANTITATE,
A.PROC_TVAV,
A.ID_JTVA_COLOANA,
A.PRET_CU_TVA AS PRETURI_CU_TVA,
A.CURS,
A.MULTIPLICATOR,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.CURS *
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(A.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(A.PRET, pack_sesiune.nzecimale_pretv)
END) + A.DIFERENTA AS PRET,
(CASE
WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(A.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(C.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
C.NUME_VAL
FROM (SELECT A1.ID_ARTICOL,
A1.LOT,
A1.SERIE,
A1.ID_POL,
A1.DISCOUNT_UNITAR,
A1.DIFERENTA,
--SUM(A1.CANTITATE) AS CANTITATE,
A1.CANTITATE,
A1.PROC_TVAV,
A1.ID_JTVA_COLOANA,
NVL2(A1.ID_GESTIUNE, 1, 0) AS GESTIONABIL,
A1.PRET_CU_TVA,
A1.PRET,
A1.ID_VALUTA,
NVL(A2.CURS, 0) AS CURS,
NVL(A2.MULTIPLICATOR, 1) AS MULTIPLICATOR
FROM VANZARI_DETALII A1
LEFT JOIN VANZARI_CURSURI A2
ON A1.ID_VANZARE = A2.ID_VANZARE
AND A1.ID_VALUTA = A2.ID_VALUTA
WHERE A1.STERS = 0
AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
LEFT JOIN NOM_VALUTE C
ON A.ID_VALUTA = C.ID_VALUTA
ORDER BY B.DENUMIRE;
END cursor_copiere;
-------------------------------------------------------------------
PROCEDURE cursor_gestiune(V_DATA_CURS IN DATE,
V_ID_POL IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_NR_INREGISTRARI NUMBER(10);
V_NR_INREGISTRARI_TOT NUMBER(10);
BEGIN
pack_facturare.initializeaza_facturare(V_ID_UTIL);
-- verificare ca exista cursul pentru valutele din CRM_POLITICI_PRET_ART
SELECT SUM(CASE
WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END),
SUM(CASE
WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END)
INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT
FROM (SELECT DISTINCT A2.ID_VALUTA
FROM STOC A1
LEFT JOIN CRM_POLITICI_PRET_ART A2
ON A1.ID_ARTICOL = A2.ID_ARTICOL
WHERE A1.ID_GESTIUNE = V_ID_GESTIUNE
AND A2.ID_POL = V_ID_POL
AND NVL(A1.ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A
LEFT JOIN CURS B
ON A.ID_VALUTA = B.ID_VALUTA
AND B.STERS = 0
AND B.DATA <= V_DATA_CURS
AND B.DATA2 >= V_DATA_CURS;
IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN
RAISE_APPLICATION_ERROR(-20005,
'Nu este setat cursul din data de ' ||
to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !');
END IF;
-- nu se mai verifica dreptul pe gestiune
-- v_id_gestiune este dintre gestiunile pe care are drepturi utilizatorul
OPEN V_CURSOR FOR
SELECT ROWNUM as id_c, A.*
FROM (SELECT A.ID_ARTICOL,
NULL AS LOT,
NULL AS SERIE,
V_ID_GESTIUNE AS ID_GESTIUNE,
--A.CONT,
B.ID_POL,
B.ID_VALUTA,
D.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, '') AS UM,
1 AS GESTIONABIL,
SUM(NVL(A.CANTS + A.CANT - A.CANTE, 0)) AS CANTITATE,
B.PROC_TVAV,
D.PRETURI_CU_TVA,
E.CURS,
E.MULTIPLICATOR,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(B.PRET, pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(B.PRET, pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(B.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA,
F.NUME_VAL,
DECODE(B.ID_POL,
NVL(pack_facturare.nid_politica_stoc,
B.ID_POL + 1),
1,
0) AS MODIFICABIL
FROM (SELECT ID_ARTICOL, CANT, CANTS, CANTE
FROM STOC
WHERE AN = V_AN
AND LUNA = V_LUNA
AND ID_GESTIUNE = V_ID_GESTIUNE
AND NVL(ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)) A
JOIN (SELECT ID_ARTICOL,
ID_POL,
ID_VALUTA,
DISCOUNT_UNITAR,
PROC_TVAV,
PRET
FROM CRM_POLITICI_PRET_ART
WHERE ID_POL = V_ID_POL) B
ON A.ID_ARTICOL = B.ID_ARTICOL
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN CRM_POLITICI_PRETURI D
ON B.ID_POL = D.ID_POL
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
AND DATA2 >= V_DATA_CURS
AND STERS = 0) E
ON B.ID_VALUTA = E.ID_VALUTA
LEFT JOIN NOM_VALUTE F
ON B.ID_VALUTA = F.ID_VALUTA
GROUP BY A.ID_ARTICOL,
-- A.CONT,
B.ID_POL,
B.ID_VALUTA,
D.NUME_LISTA_PRETURI,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END),
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(B.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END),
C.CODMAT,
C.CODBARE,
C.DENUMIRE,
NVL(C.UM, ''),
C.IN_STOC,
B.PROC_TVAV,
D.PRETURI_CU_TVA,
E.CURS,
E.MULTIPLICATOR,
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(E.CURS, 0) *
ROUND(B.PRET,
pack_sesiune.nzecimale_pretvval) /
NVL(E.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(B.PRET, pack_sesiune.nzecimale_pretv)
END),
(CASE
WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(B.PRET, pack_sesiune.nzecimale_pretvval)
ELSE
0
END),
1 - NVL(F.MONEDA_NATIONALA, 1),
F.NUME_VAL
ORDER BY C.DENUMIRE) A
WHERE A.CANTITATE > 0;
END cursor_gestiune;
-------------------------------------------------------------------
PROCEDURE cursor_gestiuni_articol(V_ID_ARTICOL IN NUMBER,
V_TIP IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
BEGIN
OPEN V_CURSOR FOR
SELECT 0 AS ALES,
A.ID_GESTIUNE,
A.CANTITATE,
A.CONT,
A.ACONT,
A.LOT,
A.SERIE,
A.PRET,
A.PRETD,
A.ID_VALUTA,
B.NUME_GESTIUNE,
A.DATAIN,
A.PRETV,
A.PRETVCTVA,
A.ID_PART_REZ,
A.ID_LUCRARE_REZ,
C.DENUMIRE AS PART_REZ,
D.NRORD AS NRORD_REZ,
E.NUME_VAL
FROM (SELECT A1.ID_GESTIUNE,
A2.ID_ARTICOL,
A2.PRET,
A2.PRETD,
A2.ID_VALUTA,
A2.LOT,
A2.SERIE,
SUM(NVL(A2.CANTS + A2.CANT - A2.CANTE, 0)) AS CANTITATE,
A2.CONT,
A2.ACONT,
A2.DATAIN,
A2.PRETV,
A2.PRETV + A2.TVAV as PRETVCTVA,
A2.ID_PART_REZ,
A2.ID_LUCRARE_REZ
FROM (SELECT DISTINCT A11.ID_GESTIUNE
FROM GEST_CORESP_GRUPE_GESTIUNI A11
LEFT JOIN GEST_CORESP_UTIL_GRUPE A12
ON A11.ID_GRUPE = A12.ID_GRUPE
WHERE A11.STERS = 0
AND A12.STERS = 0
AND A12.ID_UTIL = V_ID_UTIL
AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) =
NVL(V_ID_GESTIUNE, 2)) A1
LEFT JOIN STOC A2
ON A1.ID_GESTIUNE = A2.ID_GESTIUNE
AND A2.LUNA = V_LUNA
AND A2.AN = V_AN
AND NVL2(V_ID_SUCURSALA, A2.ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
AND A2.ID_ARTICOL = V_ID_ARTICOL
GROUP BY A1.ID_GESTIUNE,
A2.ID_ARTICOL,
A2.PRET,
A2.PRETD,
A2.ID_VALUTA,
A2.LOT,
A2.SERIE,
A2.CONT,
A2.ACONT,
A2.DATAIN,
A2.PRETV,
A2.TVAV,
A2.ID_PART_REZ,
A2.ID_LUCRARE_REZ) A
LEFT JOIN NOM_GESTIUNI B
ON A.ID_GESTIUNE = B.ID_GESTIUNE
LEFT JOIN NOM_PARTENERI C
ON A.ID_PART_REZ = C.ID_PART
LEFT JOIN VNOM_LUCRARI D
ON A.ID_LUCRARE_REZ = D.ID_LUCRARE
LEFT JOIN NOM_VALUTE E
ON A.ID_VALUTA = E.ID_VALUTA
WHERE A.CANTITATE > 0
ORDER BY A.DATAIN,
B.NUME_GESTIUNE,
A.LOT,
A.SERIE,
A.PRET,
A.PRETV,
A.CONT,
A.ACONT,
C.DENUMIRE,
D.NRORD;
END cursor_gestiuni_articol;
-------------------------------------------------------------------
-- adaugare articol gestionabil pe factura, daca nu exista in stoc
-- pentru optiunea RF_FACTURARE_FARA_STOC = 1
-- se selecteaza din stoc datele de pe ultima intrare, ultimele 12 luni
-------------------------------------------------------------------
PROCEDURE cursor_gestiuni_articol_stoc0(V_ID_ARTICOL IN NUMBER,
V_TIP IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
BEGIN
OPEN V_CURSOR FOR
SELECT 0 AS ALES,
A.ID_GESTIUNE,
A.CANTITATE,
CAST(NVL2(B.CONT, B.CONT, NVL2(A.CONT, A.CONT, '371')) AS
VARCHAR2(4)) AS CONT,
A.ACONT,
A.LOT,
A.SERIE,
NVL(A.PRET, 0.00) AS PRET,
NVL(A.PRETD, 0.00) AS PRETD,
A.ID_VALUTA,
B.NUME_GESTIUNE,
A.DATAIN,
NVL(A.PRETV, 0.00) AS PRETV,
NVL(A.PRETVCTVA, 0.00) AS PRETVCTVA,
A.ID_PART_REZ,
A.ID_LUCRARE_REZ,
C.DENUMIRE AS PART_REZ,
D.NRORD AS NRORD_REZ,
E.NUME_VAL
FROM (SELECT A1.ID_GESTIUNE,
A2.ID_ARTICOL,
A2.PRET,
A2.PRETD,
A2.ID_VALUTA,
A2.LOT,
A2.SERIE,
1000 AS CANTITATE, -- cantitate suficienta 1000 pentru vanzarea articolelor gestionabile fara stoc
A2.CONT,
A2.ACONT,
A2.DATAIN,
A2.PRETV,
A2.PRETV + A2.TVAV as PRETVCTVA,
CAST(NULL AS Number(10, 0)) AS ID_PART_REZ,
CAST(NULL AS Number(10, 0)) AS ID_LUCRARE_REZ
FROM (SELECT DISTINCT A11.ID_GESTIUNE
FROM GEST_CORESP_GRUPE_GESTIUNI A11
JOIN GEST_CORESP_UTIL_GRUPE A12
ON A11.ID_GRUPE = A12.ID_GRUPE
JOIN NOM_GESTIUNI A13
ON A11.ID_GESTIUNE = A13.ID_GESTIUNE
WHERE A11.STERS = 0
AND A12.STERS = 0
AND A12.ID_UTIL = V_ID_UTIL
AND A13.STERS = 0
AND A13.INACTIV = 0
AND A13.NR_PAG IN (2, 4, 5, 6, 7)
AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) =
NVL(V_ID_GESTIUNE, 2)) A1
LEFT JOIN STOC A2
ON A1.ID_GESTIUNE = A2.ID_GESTIUNE
AND A2.AN >= V_AN - 1 -- anul precedent si anul curent
AND A2.PRET <> 0
AND NVL2(V_ID_SUCURSALA, A2.ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
AND A2.ID_ARTICOL = V_ID_ARTICOL
GROUP BY A1.ID_GESTIUNE,
A2.ID_ARTICOL,
A2.PRET,
A2.PRETD,
A2.ID_VALUTA,
A2.LOT,
A2.SERIE,
A2.CONT,
A2.ACONT,
A2.DATAIN,
A2.PRETV,
A2.TVAV,
A2.ID_PART_REZ,
A2.ID_LUCRARE_REZ) A
LEFT JOIN NOM_GESTIUNI B
ON A.ID_GESTIUNE = B.ID_GESTIUNE
LEFT JOIN NOM_PARTENERI C
ON A.ID_PART_REZ = C.ID_PART
LEFT JOIN VNOM_LUCRARI D
ON A.ID_LUCRARE_REZ = D.ID_LUCRARE
LEFT JOIN NOM_VALUTE E
ON A.ID_VALUTA = E.ID_VALUTA
ORDER BY NVL(A.DATAIN, TO_DATE('1900', 'YYYY')) DESC,
B.NUME_GESTIUNE,
A.LOT,
A.SERIE,
A.PRET,
A.PRETV,
A.CONT,
A.ACONT,
C.DENUMIRE,
D.NRORD;
END cursor_gestiuni_articol_stoc0;
-------------------------------------------------------------------
PROCEDURE cursor_gestiuni_articol_retur(V_ID_ARTICOL IN NUMBER,
V_TIP IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_PRETV IN NUMBER,
V_DISCOUNT IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER,
V_LISTAID IN VARCHAR2,
V_ID_SUCURSALA IN NUMBER,
V_CURSOR OUT cursor_facturare) IS
V_SEPARATOR VARCHAR2(10) := ',';
BEGIN
OPEN V_CURSOR FOR
WITH CRS AS
(
SELECT X as ID_VANZARE
FROM table(charn2collection(V_LISTAID, V_SEPARATOR))
)
SELECT 0 AS ALES,
A1.ID_GESTIUNE,
A2.CANTITATE,
A2.CONT,
A2.ACONT,
A2.LOT,
A2.SERIE,
A2.PRET,
A2.PRETD,
A2.ID_VALUTA,
B.NUME_GESTIUNE,
A2.DATAIN,
A2.PRETV,
A2.PRETVCTVA,
A2.ID_PART_REZ,
A2.ID_LUCRARE_REZ,
C.DENUMIRE AS PART_REZ,
D.NRORD AS NRORD_REZ,
E.NUME_VAL
FROM (SELECT DISTINCT A11.ID_GESTIUNE
FROM GEST_CORESP_GRUPE_GESTIUNI A11
LEFT JOIN GEST_CORESP_UTIL_GRUPE A12
ON A11.ID_GRUPE = A12.ID_GRUPE
WHERE A11.STERS = 0
AND A12.STERS = 0
AND A12.ID_UTIL = V_ID_UTIL
AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) =
NVL(V_ID_GESTIUNE, 2)) A1
LEFT JOIN (SELECT SUM(A22.CANTE) AS CANTITATE,
A22.ID_GESTIUNE,
A23.NR_PAG,
A22.ID_ARTICOL,
A22.PRET,
A22.PRETD,
A22.ID_VALUTA,
A22.LOT,
A22.SERIE,
A22.CONT,
A22.ACONT,
A22.DATAIN,
A22.PRETV,
A22.PRETV + A22.TVAV AS PRETVCTVA,
A22.ID_PART_REZ,
A22.ID_LUCRARE_REZ
FROM (SELECT COD
FROM VANZARI
WHERE ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A21
LEFT JOIN RUL A22
ON A21.COD = A22.COD
AND A22.STERS = 0
AND A22.ID_TIP_RULAJ = 0
AND A22.ID_ARTICOL = V_ID_ARTICOL
AND NVL2(V_ID_SUCURSALA, A22.ID_SUCURSALA, -99) =
NVL(V_ID_SUCURSALA, -99)
LEFT JOIN NOM_GESTIUNI A23
ON A22.ID_GESTIUNE = A23.ID_GESTIUNE
GROUP BY A22.ID_GESTIUNE,
A23.NR_PAG,
A22.ID_ARTICOL,
A22.PRET,
A22.PRETD,
A22.ID_VALUTA,
A22.LOT,
A22.SERIE,
A22.CONT,
A22.ACONT,
A22.DATAIN,
A22.PRETV,
A22.TVAV,
A22.ID_PART_REZ,
A22.ID_LUCRARE_REZ) A2
ON A1.ID_GESTIUNE = A2.ID_GESTIUNE
LEFT JOIN NOM_GESTIUNI B
ON A1.ID_GESTIUNE = B.ID_GESTIUNE
LEFT JOIN NOM_PARTENERI C
ON A2.ID_PART_REZ = C.ID_PART
LEFT JOIN VNOM_LUCRARI D
ON A2.ID_LUCRARE_REZ = D.ID_LUCRARE
LEFT JOIN NOM_VALUTE E
ON A2.ID_VALUTA = E.ID_VALUTA
WHERE A2.CANTITATE > 0
ORDER BY A2.DATAIN,
B.NUME_GESTIUNE,
A2.LOT,
A2.SERIE,
A2.PRET,
A2.PRETV,
A2.CONT,
A2.ACONT,
C.DENUMIRE,
D.NRORD;
END cursor_gestiuni_articol_retur;
-------------------------------------------------------------------
PROCEDURE adauga_articol_factura_deviz(V_ID_ARTICOL IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_ID_JTVA_COLOANA_EX IN NUMBER DEFAULT NULL,
V_ID_CTR IN NUMBER DEFAULT NULL,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_LOT IN VARCHAR2 DEFAULT NULL) IS
BEGIN
INSERT INTO VANZARI_DETALII_TEMP
(ID_ARTICOL,
EXPLICATIA,
SERIE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
PRET,
PROC_TVAV,
ID_JTVA_COLOANA,
ID_JTVA_COLOANA_EX,
CANTITATE,
DISCOUNT_UNITAR,
ID_GESTIUNE,
CONT,
ID_VALUTA,
CURS,
MULTIPLICATOR,
PRET_CU_TVA,
IN_STOC,
ID_TEMP,
ID_CTR,
TAXCODE,
LOT)
VALUES
(V_ID_ARTICOL,
V_EXPLICATIE,
V_SERIE,
V_PRET_ACHIZITIE,
V_PRETD,
V_ID_VALUTAD,
V_PRET,
V_PROC_TVAV,
V_ID_JTVA_COLOANA,
V_ID_JTVA_COLOANA_EX,
V_CANTITATE,
V_DISCOUNT_UNITAR,
V_ID_GESTIUNE,
V_CONT,
NVL(V_ID_VALUTA, pack_facturare.nid_moneda_nationala),
DECODE(V_CURS, 0, 1, V_CURS),
V_MULTIPLICATOR,
V_PRET_CU_TVA,
1,
0,
V_ID_CTR,
decode(V_TAXCODE, 0, null, V_TAXCODE),
V_LOT);
END adauga_articol_factura_deviz;
-------------------------------------------------------------------
PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_ID_RUL_AUX IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_LOT IN VARCHAR2 DEFAULT NULL) IS
lcExplicatia varchar2(240);
BEGIN
if pack_facturare.ntip = 50 and nvl(V_ID_RUL_AUX, 0) <> 0 then
select to_char(V_CANTITATE / ROUND(LUNGIME * LATIME / 1000000, 2)) ||
' buc. - ' || to_char(LUNGIME) || 'x' || to_char(LATIME)
into lcExplicatia
from DEV_ESTIMARI_PRODUSE
where id_dev_estimare_prod in
(select id_dev_estimare_prod
from rul_auxiliar
where id_rul_aux = V_ID_RUL_AUX)
and sters = 0;
end if;
INSERT INTO VANZARI_DETALII_TEMP
(ID_ARTICOL,
SERIE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
PRET,
PROC_TVAV,
ID_JTVA_COLOANA,
CANTITATE,
DISCOUNT_UNITAR,
ID_GESTIUNE,
CONT,
ID_VALUTA,
CURS,
MULTIPLICATOR,
PRET_CU_TVA,
IN_STOC,
EXPLICATIA,
ID_TEMP,
TAXCODE,
LOT)
VALUES
(V_ID_ARTICOL,
V_SERIE,
V_PRET_ACHIZITIE,
V_PRETD,
V_ID_VALUTAD,
V_PRET,
V_PROC_TVAV,
V_ID_JTVA_COLOANA,
V_CANTITATE,
V_DISCOUNT_UNITAR,
V_ID_GESTIUNE,
V_CONT,
NVL(V_ID_VALUTA, pack_facturare.nid_moneda_nationala),
DECODE(V_CURS, 0, 1, V_CURS),
V_MULTIPLICATOR,
V_PRET_CU_TVA,
1,
lcExplicatia,
0,
decode(V_TAXCODE, 0, NULL, V_TAXCODE),
V_LOT);
END adauga_articol_factura_stoc;
-------------------------------------------------------------------
PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN NUMBER,
V_PRET_CU_TVA IN NUMBER) is
begin
adauga_articol_factura_stoc(V_ID_ARTICOL,
V_SERIE,
V_PRET_ACHIZITIE,
V_PRETD,
V_ID_VALUTAD,
V_PRET,
V_ID_VALUTA,
V_CURS,
V_MULTIPLICATOR,
V_PROC_TVAV,
V_ID_JTVA_COLOANA,
V_CANTITATE,
V_DISCOUNT_UNITAR,
V_ID_GESTIUNE,
V_CONT,
V_PRET_CU_TVA,
null,
null,
null,
null);
end;
-------------------------------------------------------------------
PROCEDURE adauga_articol_lucrare_pret(V_ID_COMANDA IN NUMBER,
V_ID_ARTICOL IN NUMBER,
V_ID_POL IN NUMBER,
V_CANTITATE IN NUMBER,
V_CONT IN VARCHAR2,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_ID_GESTIUNE_DEST IN NUMBER,
V_ID_UTIL IN NUMBER,
V_PRETIN IN NUMBER) IS
V_PRET CRM_POLITICI_PRET_ART.PRET%TYPE;
V_DISCOUNT_UNITAR CRM_POLITICI_PRET_ART.DISCOUNT_UNITAR%TYPE;
V_PROC_TVAV CRM_POLITICI_PRET_ART.PROC_TVAV%TYPE;
V_ID_VALUTA CRM_POLITICI_PRET_ART.ID_VALUTA%TYPE;
V_PRETURI_CU_TVA CRM_POLITICI_PRETURI.PRETURI_CU_TVA%TYPE;
V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE;
V_CODMAT NOM_ARTICOLE.CODMAT%TYPE;
V_NR_COMANDA COMENZI.NR_COMANDA%TYPE;
BEGIN
BEGIN
SELECT NVL(V_PRETIN, A.PRET) as PRET,
NVL(C.PROC_TVAV, (D.COTA_TVA + 100) / 100),
C.ID_VALUTA,
B.PRETURI_CU_TVA,
NVL(C.DISCOUNT_UNITAR, 0) + NVL(A.DISCOUNT_UNITAR, 0)
INTO V_PRET,
V_PROC_TVAV,
V_ID_VALUTA,
V_PRETURI_CU_TVA,
V_DISCOUNT_UNITAR
FROM COMENZI_ELEMENTE A
LEFT JOIN CRM_POLITICI_PRETURI B
ON A.ID_POL = B.ID_POL
LEFT JOIN CRM_POLITICI_PRET_ART C
ON A.ID_POL = C.ID_POL
AND A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN JTVA_COLOANE D
ON D.ID_JTVA_COLOANA = V_ID_JTVA_COLOANA
WHERE A.ID_COMANDA = V_ID_COMANDA
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_POL = V_ID_POL
AND A.STERS = 0;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
SELECT DENUMIRE, CODMAT
INTO V_DENUMIRE, V_CODMAT
FROM NOM_ARTICOLE
WHERE ID_ARTICOL = V_ID_ARTICOL;
SELECT NR_COMANDA
INTO V_NR_COMANDA
FROM COMENZI
WHERE ID_COMANDA = V_ID_COMANDA;
RAISE_APPLICATION_ERROR(-20000,
'Articolul ' || V_DENUMIRE || ' cu codul ' ||
V_CODMAT || ' este dublat pe comanda ' ||
V_NR_COMANDA || ' !');
END;
INSERT INTO VANZARI_DETALII_TEMP
(ID_ARTICOL,
ID_POL,
PRET,
PRET_CU_TVA,
PROC_TVAV,
CANTITATE,
DISCOUNT_UNITAR,
ID_GESTIUNE,
CONT,
ID_VALUTA,
CURS,
MULTIPLICATOR,
ID_JTVA_COLOANA,
IN_STOC,
ID_GESTIUNE_DEST,
ID_COMANDA,
ID_UTIL,
ID_TEMP)
SELECT V_ID_ARTICOL,
V_ID_POL,
V_PRET,
V_PRETURI_CU_TVA,
V_PROC_TVAV,
V_CANTITATE,
V_DISCOUNT_UNITAR,
pack_facturare.nid_gestiune_sursa,
V_CONT,
V_ID_VALUTA,
DECODE(V_CURS, 0, 1, V_CURS),
V_MULTIPLICATOR,
V_ID_JTVA_COLOANA,
1,
V_ID_GESTIUNE_DEST,
V_ID_COMANDA,
V_ID_UTIL,
COUNT(*) + 1
FROM VANZARI_DETALII_TEMP;
END adauga_articol_lucrare_pret;
-------------------------------------------------------------------
PROCEDURE adauga_articol_set(V_ID_VANZARE_SET IN NUMBER,
V_DENUMIRE IN VARCHAR2,
V_EXPLICATIE IN VARCHAR2,
V_UM IN VARCHAR2,
V_SERIE IN VARCHAR2,
V_CANTITATE IN NUMBER,
V_PRET IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER) is
begin
INSERT INTO VANZARI_SETURI_TEMP
(ID_VANZARE_SET,
DENUMIRE,
EXPLICATIE,
CANTITATE,
UM,
SERIE,
PRET,
DISCOUNT_UNITAR)
VALUES
((-1) * V_ID_VANZARE_SET,
V_DENUMIRE,
V_EXPLICATIE,
V_CANTITATE,
V_UM,
V_SERIE,
V_PRET,
V_DISCOUNT_UNITAR);
end adauga_articol_set;
-------------------------------------------------------------------
PROCEDURE adauga_articol_factura(V_ID_TEMP IN NUMBER,
V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_EXPLICATIE IN VARCHAR2,
V_ID_POL IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_PRET_ACHIZITIE_TEMP IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRET_TEMP IN NUMBER,
V_ID_VALUTA_TEMP IN NUMBER,
V_PRETURI_CU_TVA_TEMP IN NUMBER,
V_IN_STOC_TEMP IN NUMBER,
V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_CONT IN VARCHAR2,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_ID_PART_REZ IN NUMBER,
V_ID_LUCRARE_REZ IN NUMBER,
V_PRETV_ORIG IN NUMBER,
V_ID_VANZARE_SET IN NUMBER,
V_ID_CTR IN NUMBER,
V_ID_UTIL IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_LOT IN VARCHAR2 DEFAULT NULL) IS
V_ID_GESTIUNE2 NOM_GESTIUNI.ID_GESTIUNE%TYPE;
V_CONT2 VARCHAR2(4);
V_ID_COMANDA COMENZI.ID_COMANDA%TYPE;
V_PRET_ACHIZITIE VANZARI_DETALII.PRET_ACHIZITIE%TYPE;
V_ID_POLITICA_PRETACH CRM_POLITICI_PRETURI.ID_POL%TYPE;
V_PROCENT_ADAOS NUMBER(10, 2);
V_PRET CRM_POLITICI_PRET_ART.PRET%TYPE;
V_PROC_TVAV CRM_POLITICI_PRET_ART.PROC_TVAV%TYPE;
V_ID_VALUTA CRM_POLITICI_PRET_ART.ID_VALUTA%TYPE;
V_PRETURI_CU_TVA CRM_POLITICI_PRETURI.PRETURI_CU_TVA%TYPE;
V_IN_STOC NOM_ARTICOLE.IN_STOC%TYPE;
V_OPT_FACTURARE CONTRACTE.OPT_FACTURARE%TYPE;
BEGIN
V_PRET_ACHIZITIE := V_PRET_ACHIZITIE_TEMP;
IF V_ID_GESTIUNE <> -1000 THEN
V_ID_GESTIUNE2 := V_ID_GESTIUNE;
END IF;
IF V_CONT <> 'XXXX' THEN
V_CONT2 := V_CONT;
END IF;
IF pack_facturare.ntip IN (2, 6, 26, 52) THEN
-- factura / aviz pe baza de contract
BEGIN
SELECT NVL(OPT_FACTURARE, 3)
INTO V_OPT_FACTURARE
FROM CONTRACTE
WHERE ID_CTR = V_ID_CTR;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_OPT_FACTURARE := 4;
END;
END IF;
CASE
WHEN pack_facturare.ntip IN (3, 21, 28, 42, 47) THEN
-- facturare/aviz din comenzi
V_ID_COMANDA := to_number(pack_facturare.clistaid);
SELECT A.PRET,
C.PROC_TVAV,
C.ID_VALUTA,
B.PRETURI_CU_TVA,
D.IN_STOC
INTO V_PRET,
V_PROC_TVAV,
V_ID_VALUTA,
V_PRETURI_CU_TVA,
V_IN_STOC
FROM COMENZI_ELEMENTE A
LEFT JOIN CRM_POLITICI_PRETURI B
ON A.ID_POL = B.ID_POL
LEFT JOIN CRM_POLITICI_PRET_ART C
ON A.ID_POL = C.ID_POL
AND A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN NOM_ARTICOLE D
ON A.ID_ARTICOL = D.ID_ARTICOL
WHERE A.ID_COMANDA = V_ID_COMANDA
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.STERS = 0;
WHEN pack_facturare.ntip = 4 THEN
-- facturare din avize
SELECT DISTINCT A.PRET,
A.PROC_TVAV,
A.ID_VALUTA,
A.PRET_CU_TVA,
B.IN_STOC
INTO V_PRET,
V_PROC_TVAV,
V_ID_VALUTA,
V_PRETURI_CU_TVA,
V_IN_STOC
FROM VANZARI_DETALII A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
WHERE A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_POL = V_ID_POL
AND NVL(A.ID_GESTIUNE, -1000) = V_ID_GESTIUNE
AND A.DISCOUNT_UNITAR = V_DISCOUNT_UNITAR
AND NVL(A.CONT, 'XXXX') = V_CONT
AND A.ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid,
',') AS num_tab)));
WHEN pack_facturare.ntip = 45 THEN
-- facturare restaurant
BEGIN
V_ID_POLITICA_PRETACH := to_number(pack_sesiune.getoptiunefirma('ID_POLPRODREST'));
V_PROCENT_ADAOS := to_number(pack_sesiune.getoptiunefirma('RESTPROCADAOS'));
V_PRET := V_PRET_TEMP;
V_ID_VALUTA := V_ID_VALUTA_TEMP;
V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP;
V_IN_STOC := V_IN_STOC_TEMP;
SELECT ROUND((A.COTA_TVA + 100) / 100, 2),
NVL2(B.PRETFTVA,
round(decode(B.ID_VALUTA,
pack_def.GetIdMonedaNationala(),
1,
V_CURS) * NVL(B.PRETFTVA, 0),
pack_sesiune.nzecimale_preta),
NVL2(V_PROCENT_ADAOS,
round(pack_sesiune.calculeaza_pret_fara_tva(V_PRET,
V_CURS,
V_ID_VALUTA,
(A.COTA_TVA + 100) / 100,
V_PRETURI_CU_TVA,
1) * 100 /
(100 + V_PROCENT_ADAOS),
pack_sesiune.nzecimale_preta),
0))
INTO V_PROC_TVAV, V_PRET_ACHIZITIE
FROM JTVA_COLOANE A
LEFT JOIN (SELECT PRETFTVA, ID_VALUTA
FROM CRM_POLITICI_PRET_ART
WHERE NVL2(V_ID_POLITICA_PRETACH, ID_POL, 1) =
NVL(V_ID_POLITICA_PRETACH, 2)
AND ID_ARTICOL = V_ID_ARTICOL) B
ON 1 = 1
WHERE A.ID_JTVA_COLOANA = V_ID_JTVA_COLOANA;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu a fost gasita cota de TVA! (FACT-018 : ' ||
V_ID_ARTICOL || ')');
END;
WHEN V_OPT_FACTURARE = 3 THEN
-- facturare/aviz de pe contract cu preturile de pe contract
BEGIN
SELECT DECODE(A.PRET_UNITAR, 0, V_PRET_TEMP, A.PRET_UNITAR),
B.PROC_TVAV,
B.ID_VALUTA,
A.PRET_CU_TVA,
C.IN_STOC
INTO V_PRET,
V_PROC_TVAV,
V_ID_VALUTA,
V_PRETURI_CU_TVA,
V_IN_STOC
FROM CTR_ARTICOLE A
LEFT JOIN CRM_POLITICI_PRET_ART B
ON A.ID_POL_ART = B.ID_POL_ART
LEFT JOIN NOM_ARTICOLE C
ON B.ID_ARTICOL = C.ID_ARTICOL
WHERE B.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_CTR = V_ID_CTR
AND B.ID_POL = V_ID_POL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
SELECT ROUND((COTA_TVA + 100) / 100, 2)
INTO V_PROC_TVAV
FROM JTVA_COLOANE
WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu a fost gasita cota de TVA! (FACT-012 : ' ||
V_ID_ARTICOL || ')');
END;
V_PRET := V_PRET_TEMP;
V_ID_VALUTA := V_ID_VALUTA_TEMP;
V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP;
V_IN_STOC := V_IN_STOC_TEMP;
END;
ELSE
BEGIN
SELECT ROUND((COTA_TVA + 100) / 100, 2)
INTO V_PROC_TVAV
FROM JTVA_COLOANE
WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu a fost gasita cota de TVA! (FACT-013 : ' ||
V_ID_ARTICOL || ')');
END;
V_PRET := V_PRET_TEMP;
V_ID_VALUTA := V_ID_VALUTA_TEMP;
V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP;
V_IN_STOC := V_IN_STOC_TEMP;
/* SELECT A.PRET,
A.PROC_TVAV,
A.ID_VALUTA,
B.PRETURI_CU_TVA,
C.IN_STOC
INTO V_PRET,
V_PROC_TVAV,
V_ID_VALUTA,
V_PRETURI_CU_TVA,
V_IN_STOC
FROM CRM_POLITICI_PRET_ART A
LEFT JOIN CRM_POLITICI_PRETURI B ON A.ID_POL = B.ID_POL
LEFT JOIN NOM_ARTICOLE C ON A.ID_ARTICOL = C.ID_ARTICOL
WHERE A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_POL = V_ID_POL;*/
END CASE;
INSERT INTO VANZARI_DETALII_TEMP
(ID_TEMP,
ID_ARTICOL,
SERIE,
LOT,
EXPLICATIA,
ID_POL,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
PRET,
PRET_CU_TVA,
PROC_TVAV,
CANTITATE,
DISCOUNT_UNITAR,
ID_GESTIUNE,
CONT,
ID_VALUTA,
CURS,
MULTIPLICATOR,
ID_JTVA_COLOANA,
IN_STOC,
ID_VANZARE_SET,
ID_PART_REZ,
ID_LUCRARE_REZ,
PRETV_ORIG,
CUSTODIE,
ID_CTR,
ID_UTIL,
TAXCODE)
VALUES
(V_ID_TEMP,
V_ID_ARTICOL,
V_SERIE,
V_LOT,
V_EXPLICATIE,
V_ID_POL,
NVL(V_PRET_ACHIZITIE, 0),
NVL(V_PRETD, 0),
V_ID_VALUTAD,
V_PRET,
V_PRETURI_CU_TVA,
V_PROC_TVAV,
V_CANTITATE,
V_DISCOUNT_UNITAR,
V_ID_GESTIUNE2,
V_CONT2,
V_ID_VALUTA,
DECODE(V_CURS, 0, 1, V_CURS),
V_MULTIPLICATOR,
V_ID_JTVA_COLOANA,
V_IN_STOC,
(-1) * V_ID_VANZARE_SET,
V_ID_PART_REZ,
V_ID_LUCRARE_REZ,
V_PRETV_ORIG,
(CASE WHEN pack_facturare.ntip IN (42, 47) OR
pack_facturare.v_date_gestiune.cont = '357' THEN 1 ELSE 0 END),
V_ID_CTR,
V_ID_UTIL,
decode(V_TAXCODE, 0, NULL, V_TAXCODE));
END adauga_articol_factura;
-------------------------------------------------------------------
PROCEDURE sterge_articol_factura(V_ID_TEMP IN NUMBER,
V_ID_UTIL IN NUMBER) IS
BEGIN
DELETE FROM VANZARI_DETALII_TEMP WHERE ID_TEMP = V_ID_TEMP;
END sterge_articol_factura;
-------------------------------------------------------------------
PROCEDURE adauga_diferente_pret(V_SIR_ID_TEMP IN VARCHAR2,
V_SIR_DIFERENTA IN VARCHAR,
V_ID_UTIL IN NUMBER) IS
V_SEPARATOR VARCHAR2(1) := '|';
BEGIN
MERGE INTO VANZARI_DETALII_TEMP A
USING (SELECT ID_TEMP, SUM(DIFERENTA) AS DIFERENTA
FROM (SELECT to_number(substr(V_SIR_ID_TEMP,
decode(rownum,
1,
1,
instr(V_SIR_ID_TEMP,
V_SEPARATOR,
1,
rownum - 1) + 1),
instr(V_SIR_ID_TEMP,
V_SEPARATOR,
1,
rownum) -
decode(rownum,
1,
0,
instr(V_SIR_ID_TEMP,
V_SEPARATOR,
1,
rownum - 1)) - 1)) AS ID_TEMP,
to_number(substr(V_SIR_DIFERENTA,
decode(rownum,
1,
1,
instr(V_SIR_DIFERENTA,
V_SEPARATOR,
1,
rownum - 1) + 1),
instr(V_SIR_DIFERENTA,
V_SEPARATOR,
1,
rownum) -
decode(rownum,
1,
0,
instr(V_SIR_DIFERENTA,
V_SEPARATOR,
1,
rownum - 1)) - 1)) AS DIFERENTA
FROM dual
CONNECT BY level <=
length(V_SIR_ID_TEMP) -
length(REPLACE(V_SIR_ID_TEMP, V_SEPARATOR)))
GROUP BY ID_TEMP) B
ON (A.ID_TEMP = B.ID_TEMP)
WHEN MATCHED THEN
UPDATE SET DIFERENTA = B.DIFERENTA;
END adauga_diferente_pret;
-------------------------------------------------------------------
PROCEDURE adauga_rata_factura(V_ID_RATA IN NUMBER,
V_PRET IN NUMBER,
V_CURS IN NUMBER,
V_MULTIPLICATOR IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL) IS
V_CANTITATE VANZARI_DETALII.CANTITATE%TYPE := 1;
V_PRETURI_CU_TVA VANZARI_DETALII.PRET_CU_TVA%TYPE;
V_PROC_TVAV VANZARI_DETALII.PROC_TVAV%TYPE;
V_ID_CTR CONTRACTE.ID_CTR%TYPE;
V_ID_VALUTA NOM_VALUTE.ID_VALUTA%TYPE;
lnIdTemp NUMBER(10);
BEGIN
SELECT (B.PROC_TVA + 100) / 100 AS PROC_TVAV,
A.ID_VALUTA,
A.ID_CTR,
A.PRET_CU_TVA
INTO V_PROC_TVAV, V_ID_VALUTA, V_ID_CTR, V_PRETURI_CU_TVA
FROM CTR_SCADENTAR A
LEFT JOIN CONTRACTE B
ON A.ID_CTR = B.ID_CTR
WHERE A.ID_RATA = V_ID_RATA;
SELECT COUNT(*) + 1 INTO lnIdTemp from vanzari_detalii_temp;
INSERT INTO VANZARI_DETALII_TEMP
(ID_RATA,
PRET,
PROC_TVAV,
CANTITATE,
ID_VALUTA,
CURS,
MULTIPLICATOR,
EXPLICATIA,
PRET_CU_TVA,
ID_JTVA_COLOANA,
ID_CTR,
ID_UTIL,
ID_TEMP,
TAXCODE)
VALUES
(V_ID_RATA,
V_PRET,
V_PROC_TVAV,
V_CANTITATE,
V_ID_VALUTA,
V_CURS,
V_MULTIPLICATOR,
V_EXPLICATIE,
V_PRETURI_CU_TVA,
V_ID_JTVA_COLOANA,
V_ID_CTR,
V_ID_UTIL,
lnIdTemp,
decode(V_TAXCODE, 0, NULL, V_TAXCODE));
END adauga_rata_factura;
-------------------------------------------------------------------
PROCEDURE sterge_rata_factura(V_ID_RATA IN NUMBER, V_ID_UTIL IN NUMBER) IS
BEGIN
DELETE FROM VANZARI_DETALII_TEMP WHERE ID_RATA = V_ID_RATA;
END sterge_rata_factura;
-------------------------------------------------------------------
PROCEDURE sterge_proforma_old(V_ID_PROFORMA IN NUMBER,
V_ID_UTIL IN NUMBER) IS
V_STERS NUMBER(1) := 1;
V_NESTERS NUMBER(1) := 0;
V_DATAORA DATE := SYSDATE;
BEGIN
UPDATE PROFORME_DETALII
SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA
WHERE ID_PROFORMA = V_ID_PROFORMA
AND STERS = V_NESTERS;
UPDATE PROFORME
SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA
WHERE ID_PROFORMA = V_ID_PROFORMA;
END sterge_proforma_old;
-------------------------------------------------------------------
PROCEDURE sterge_factura(V_ID_VANZARE IN NUMBER,
V_LUNA IN NUMBER,
V_AN IN NUMBER,
V_ID_UTIL IN NUMBER) IS
TYPE sir_id_rata IS TABLE OF VANZARI_DETALII.ID_RATA%TYPE;
arr_id_rata sir_id_rata;
V_COD ACT.COD%TYPE;
V_ID_SET XSETS.ID_SET%TYPE := 0;
V_STERS NUMBER(1) := 1;
V_NESTERS NUMBER(1) := 0;
V_DATAORA DATE := SYSDATE;
V_TIP VANZARI.TIP%TYPE;
V_NR_AVIZE_FACT NUMBER(10);
V_NR_FACT_RETUR NUMBER(10);
V_ID_COMANDA COMENZI.ID_COMANDA%TYPE;
BEGIN
-- pentru o factura :
-- verific daca exista facturi de retur
SELECT COUNT(*)
INTO V_NR_FACT_RETUR
FROM VANZARI_CORESP
WHERE STERS = 0
AND ID_VANZARE_AVIZ = V_ID_VANZARE
AND TIP = 3;
IF V_NR_FACT_RETUR > 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Pentru acesta factura s-au emis facturi de retur. Trebuie sa stergeti mai intai factura de retur!');
END IF;
-- ptr. un aviz normal:
-- verific daca exista facturi sau avize de retur pe avizul resp.
SELECT COUNT(*)
INTO V_NR_AVIZE_FACT
FROM VANZARI_CORESP
WHERE STERS = 0
AND ID_VANZARE_AVIZ = V_ID_VANZARE
AND TIP IN (1, 2);
IF V_NR_AVIZE_FACT > 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Pe acest aviz s-au emis facturi / aviz de retur. Trebuie sa stergeti mai intai facturile / avizul de retur!');
END IF;
-- ptr. o factura din aviz:
-- verific daca sunt avize de retur pe avizele pentru care s-a emis factura resp.
SELECT COUNT(*)
INTO V_NR_AVIZE_FACT
FROM VANZARI_CORESP
WHERE STERS = 0
AND ID_VANZARE_AVIZ IN (SELECT ID_VANZARE_AVIZ
FROM VANZARI_CORESP
WHERE ID_VANZARE_FACT = V_ID_VANZARE
AND TIP = 1)
AND TIP = 2;
IF V_NR_AVIZE_FACT > 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Pe unul dintre avizele facturate s-a emis si aviz de retur! ' ||
'Trebuie sa stergeti avizul de retur mai intai!');
END IF;
UPDATE VANZARI
SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA
WHERE ID_VANZARE = V_ID_VANZARE
RETURNING COD, TIP, ID_COMANDA INTO V_COD, V_TIP, V_ID_COMANDA;
CASE
WHEN V_TIP = 24 THEN
-- aviz de retur
UPDATE VANZARI
SET FACTURAT = 0, ID_UTILFACT = NULL, DATA_FACTURAT = NULL
WHERE ID_VANZARE IN (SELECT ID_VANZARE_AVIZ
FROM VANZARI_CORESP
WHERE ID_VANZARE_FACT = V_ID_VANZARE
AND STERS = 0)
AND FACTURAT = 1;
WHEN V_TIP > 20 and
V_TIP not in (pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
pack_facturare.nTipNotaPlata) THEN
-- alte tipuri de avize
UPDATE VANZARI_CANTITATI
SET STERS = 1
WHERE ID_VANZARE_DET_AVIZ IN
(SELECT ID_VANZARE_DET AS ID_VANZARE_DET_AVIZ
FROM VANZARI_DETALII
WHERE ID_VANZARE = V_ID_VANZARE
AND STERS = 0);
WHEN V_TIP = 4 THEN
-- factura din aviz
UPDATE VANZARI
SET FACTURAT = 0, ID_UTILFACT = NULL, DATA_FACTURAT = NULL
WHERE ID_VANZARE IN (SELECT ID_VANZARE_AVIZ
FROM VANZARI_CORESP
WHERE ID_VANZARE_FACT = V_ID_VANZARE
AND STERS = 0)
AND FACTURAT = 1;
UPDATE VANZARI_CANTITATI
SET STERS = 1
WHERE ID_VANZARE_DET IN
(SELECT ID_VANZARE_DET
FROM VANZARI_DETALII
WHERE ID_VANZARE = V_ID_VANZARE);
WHEN V_TIP = pack_facturare.nTipFacturaRestaurant THEN
SELECT DISTINCT ID_SET
INTO V_ID_SET
FROM ACT
WHERE COD IN
(SELECT COD FROM VANZARI WHERE ID_VANZARE = V_ID_VANZARE);
ELSE
V_STERS := 1;
END CASE;
IF V_ID_COMANDA IS NOT NULL THEN
UPDATE COMENZI_ELEMENTE
SET STERS = V_STERS, DATAORAS = V_DATAORA, ID_UTILS = V_ID_UTIL
WHERE ID_COMANDA = V_ID_COMANDA
AND CANTITATE < 0;
END IF;
UPDATE VANZARI_DETALII
SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA
WHERE ID_VANZARE = V_ID_VANZARE
AND STERS = V_NESTERS
RETURNING ID_RATA BULK COLLECT INTO arr_id_rata;
IF V_TIP IN (2, 6, 52) THEN
FOR i IN arr_id_rata.FIRST .. arr_id_rata.LAST LOOP
IF arr_id_rata(i) IS NOT NULL THEN
UPDATE CTR_RATE_FACTURI
SET STERS = V_STERS,
ID_UTILS = V_ID_UTIL,
DATAORAS = V_DATAORA
WHERE ID_FACT IN
(SELECT DISTINCT ID_FACT FROM ACT WHERE COD = V_COD)
AND ID_RATA = arr_id_rata(i)
AND STERS = V_NESTERS;
END IF;
END LOOP;
END IF;
UPDATE VANZARI_CORESP
SET STERS = V_STERS
WHERE ID_VANZARE_FACT = V_ID_VANZARE
OR ID_VANZARE_AVIZ = V_ID_VANZARE;
CASE
WHEN V_TIP IN (pack_facturare.nTipFacturaRestaurant, nTipNotaPlata) AND
V_ID_SET <>
25000 + pack_facturare.nTipFacturaRestaurant - 1 + 10 then
pack_restaurant.sterge_vanzare(V_ID_VANZARE, V_ID_UTIL);
WHEN V_TIP = pack_facturare.nTipFacturaHotel then
pack_hotel.sterge_vanzare(V_ID_VANZARE, V_ID_UTIL);
WHEN V_TIP = pack_facturare.nTipFacturaACN then
-- apelez cu execute immediate pentru ca nu exista pack_acn decat pe firma ACN
if pack_migrare.ObjectExist('PACK_ACN') = 1 then
execute immediate 'begin pack_acn.sterge_vanzare(:1, :2); end;'
using V_ID_VANZARE, V_ID_UTIL;
end if;
ELSE
NULL;
END CASE;
END sterge_factura;
-------------------------------------------------------------------
PROCEDURE sterge_proforma(V_ID_VANZARE IN NUMBER, V_ID_UTIL IN NUMBER) IS
TYPE sir_id_rata IS TABLE OF VANZARI_DETALII.ID_RATA%TYPE;
arr_id_rata sir_id_rata;
V_COD ACT.COD%TYPE;
V_ID_SET XSETS.ID_SET%TYPE := 0;
V_STERS NUMBER(1) := 1;
V_NESTERS NUMBER(1) := 0;
V_DATAORA DATE := SYSDATE;
V_TIP VANZARI.TIP%TYPE;
V_NR_AVIZE_FACT NUMBER(10);
V_NR_FACT_RETUR NUMBER(10);
V_ID_COMANDA COMENZI.ID_COMANDA%TYPE;
BEGIN
UPDATE VANZARI
SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA
WHERE ID_VANZARE = V_ID_VANZARE;
UPDATE VANZARI_DETALII
SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA
WHERE ID_VANZARE = V_ID_VANZARE
AND STERS = V_NESTERS;
END sterge_proforma;
PROCEDURE scrie_proforma(V_TOTFTVA IN NUMBER,
V_TOTTVA IN NUMBER,
V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER) is
begin
pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
pack_facturare.nid_vanzare);
if pack_facturare.nid_vanzare is not null then
V_ID_VANZARE := pack_facturare.nid_vanzare;
-- completez vanzari.eproforma
update vanzari
set eproforma = 1
where id_vanzare = pack_facturare.nid_vanzare;
end if;
end;
-------------------------------------------------------------------
PROCEDURE scrie_proforma_old(V_DISCOUNT_PROFORMA IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_ID_PROFORMA OUT NUMBER,
V_NUMAR_ACT OUT NUMBER) IS
V_DATAORA DATE := SYSDATE;
BEGIN
pack_serii_numere.dezaloca_numar(pack_facturare.nid_tipfactura);
pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT;
pack_facturare.genereaza_numar_proforma(V_NUMAR_ACT);
INSERT /*+ APPEND */
INTO PROFORME
(id_util,
dataora,
id_part,
id_comanda,
numar_act,
tip,
data_act,
discount,
discount_evidentiat,
text_aditional,
in_valuta,
id_sucursala)
VALUES
(pack_facturare.nid_util,
V_DATAORA,
pack_facturare.nid_part,
pack_facturare.nid_comanda,
pack_facturare.nnumar_act,
pack_facturare.ntip,
pack_facturare.ddata_act,
V_DISCOUNT_PROFORMA,
pack_facturare.ndiscount_evidentiat,
REPLACE(V_TEXT_ADITIONAL, CHR(13) || CHR(10), CHR(32)),
pack_facturare.nin_valuta,
pack_facturare.nid_sucursala)
RETURNING ID_PROFORMA INTO V_ID_PROFORMA;
pack_facturare.scrie_cursuri_proforma(V_ID_PROFORMA);
pack_facturare.scrie_seturi_proforma;
INSERT /*+ APPEND */
INTO PROFORME_DETALII
(ID_PROFORMA,
ID_ARTICOL,
ID_POL,
CANTITATE,
PRET,
PROC_TVAV,
ID_JTVA_COLOANA,
DISCOUNT_UNITAR,
ID_GESTIUNE,
ID_VALUTA,
EXPLICATIE,
CONT,
PRET_CU_TVA,
SERIE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
ID_CTR,
ID_PROFORMA_SET)
SELECT V_ID_PROFORMA AS ID_PROFORMA,
ID_ARTICOL,
ID_POL,
CANTITATE,
PRET,
PROC_TVAV,
ID_JTVA_COLOANA,
DISCOUNT_UNITAR,
ID_GESTIUNE,
ID_VALUTA,
EXPLICATIA AS EXPLICATIE,
CONT,
PRET_CU_TVA,
SERIE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
ID_CTR,
DECODE(ID_VANZARE_SET, 0, NULL, ID_VANZARE_SET) AS ID_PROFORMA_SET
FROM VANZARI_DETALII_TEMP;
IF SQL%ROWCOUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu exista articole in lista de vanzare! (FACT-001)');
END IF;
END scrie_proforma_old;
-------------------------------------------------------------------
PROCEDURE inchide_comanda IS
BEGIN
INSERT INTO COMENZI_ELEMENTE
(ID_COMANDA,
ID_ARTICOL,
ID_POL,
PRET,
DISCOUNT_UNITAR,
CANTITATE,
ID_VALUTA,
PRET_CU_TVA)
SELECT to_number(pack_facturare.clistaid) AS ID_COMANDA,
A.ID_ARTICOL,
A.ID_POL,
A.PRET,
A.DISCOUNT_UNITAR,
NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0) - A.CANTITATE AS CANTITATE,
A.ID_VALUTA,
A.PRET_CU_TVA
FROM COMENZI_ELEMENTE A
LEFT JOIN (SELECT ID_ARTICOL,
ID_POL,
ID_VALUTA,
SUM(CANTITATE) AS CANTITATE
FROM VANZARI_DETALII_TEMP
GROUP BY ID_ARTICOL, ID_POL, ID_VALUTA) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_POL = B.ID_POL
AND A.ID_VALUTA = B.ID_VALUTA
LEFT JOIN (SELECT B.ID_ARTICOL,
B.ID_POL,
B.ID_VALUTA,
SUM(B.CANTITATE) AS CANTITATE
FROM VANZARI A
LEFT JOIN VANZARI_DETALII B
ON A.ID_VANZARE = B.ID_VANZARE
AND B.STERS = 0
WHERE A.ID_COMANDA = to_number(pack_facturare.clistaid)
AND A.STERS = 0
GROUP BY B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA) C
ON A.ID_ARTICOL = C.ID_ARTICOL
AND A.ID_POL = C.ID_POL
AND A.ID_VALUTA = C.ID_VALUTA
WHERE A.STERS = 0
AND A.ID_COMANDA = to_number(pack_facturare.clistaid)
AND A.CANTITATE > NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0);
END inchide_comanda;
-------------------------------------------------------------------
PROCEDURE scrie_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_ID_SERIE_ACT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS
CURSOR CRS IS
SELECT ROWNUM AS NRCRT, ID_COMANDA, ID_GESTIUNE
FROM (SELECT ID_COMANDA, ID_GESTIUNE
FROM COMENZI
WHERE STERS = 0
AND ID_LUCRARE = pack_facturare.nid_lucrare
-- modificare 11.07
AND ID_COMANDA IN
(SELECT ID_COMANDA FROM VANZARI_DETALII_TEMP)
-- AND ID_GESTIUNE IN
-- (SELECT DISTINCT ID_GESTIUNE_DEST FROM VANZARI_DETALII_TEMP)
-- modificare 11.07 ^
ORDER BY ID_COMANDA);
CRS_LINIE CRS%ROWTYPE;
TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE;
tab_detalii tab_detalii_type;
NR_AVIZ NUMBER(5) := 0;
NR_ELEMENT NUMBER(5) := 0;
ELEM_OPTIUNE NUMBER(5) := 0;
BEGIN
DELETE FROM VANZARI_TEMP;
pack_contafin.sterge_temp_actrul();
pack_facturare.initializeaza_setari_facturare();
pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT;
pack_facturare.nid_serie := V_ID_SERIE_ACT;
ELEM_OPTIUNE := NVL(pack_sesiune.getoptiunefirma('NRMAXELEMPAG'),
9999);
OPEN CRS;
LOOP
FETCH CRS
INTO CRS_LINIE;
EXIT WHEN CRS%NOTFOUND;
IF CRS_LINIE.NRCRT > 1 THEN
IF pack_facturare.nid_serie IS NULL THEN
pack_facturare.nnumar_act := pack_facturare.nnumar_act + 1;
ELSE
pack_serii_numere.aloca_numar(pack_facturare.nid_tipaviz,
pack_facturare.nid_serie,
NULL,
pack_facturare.nid_util,
pack_facturare.nid_sucursala,
pack_facturare.nnumar_act);
END IF;
END IF;
pack_facturare.nid_comanda := CRS_LINIE.ID_COMANDA;
pack_facturare.v_date_gestiune.id_gestiune := CRS_LINIE.ID_GESTIUNE;
pack_facturare.v_date_gestiune.acont := NULL;
SELECT NR_PAG, CONT, ACONT
INTO pack_facturare.v_date_gestiune.id_tip_gest,
pack_facturare.v_date_gestiune.cont,
pack_facturare.v_date_gestiune.acont
FROM NOM_GESTIUNI
WHERE ID_GESTIUNE = pack_facturare.v_date_gestiune.id_gestiune;
INSERT INTO VANZARI_TEMP
(id_gestiune_dest, id_lucrare, numar_act, id_comanda, id_gestiune)
values
(pack_facturare.v_date_gestiune.id_gestiune,
pack_facturare.nid_lucrare,
pack_facturare.nnumar_act,
pack_facturare.nid_comanda,
pack_facturare.nid_gestiune_sursa);
pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon,
NULL,
pack_facturare.nid_gestiune_sursa,
pack_facturare.nid_util,
pack_facturare.nid_sucursala,
pack_facturare.nnumar_bon);
SELECT *
BULK COLLECT
INTO tab_detalii
FROM VANZARI_DETALII_TEMP
WHERE ID_COMANDA = CRS_LINIE.ID_COMANDA;
-- modificare 11.07 : WHERE ID_GESTIUNE_DEST = pack_facturare.v_date_gestiune.id_gestiune;
IF SQL%ROWCOUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu exista articole in lista de vanzare! (FACT-002)');
END IF;
NR_AVIZ := 1;
NR_ELEMENT := 0;
FOR i IN tab_detalii.first .. tab_detalii.last LOOP
-- modificare 01.07.2008
-- daca depasesc un anumit numar de elemente pe aviz, generez datele pentru urmatorul
NR_ELEMENT := NR_ELEMENT + 1;
IF NR_AVIZ < FLOOR((NR_ELEMENT - 1) / ELEM_OPTIUNE) + 1 THEN
NR_AVIZ := NR_AVIZ + 1;
IF pack_facturare.nid_serie IS NULL THEN
pack_facturare.nnumar_act := pack_facturare.nnumar_act + 1;
ELSE
pack_serii_numere.aloca_numar(pack_facturare.nid_tipaviz,
pack_facturare.nid_serie,
NULL,
pack_facturare.nid_util,
pack_facturare.nid_sucursala,
pack_facturare.nnumar_act);
END IF;
INSERT INTO VANZARI_TEMP
(id_gestiune_dest,
id_lucrare,
numar_act,
id_comanda,
id_gestiune)
values
(pack_facturare.v_date_gestiune.id_gestiune,
pack_facturare.nid_lucrare,
pack_facturare.nnumar_act,
pack_facturare.nid_comanda,
pack_facturare.nid_gestiune_sursa);
pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon,
NULL,
pack_facturare.nid_gestiune_sursa,
pack_facturare.nid_util,
pack_facturare.nid_sucursala,
pack_facturare.nnumar_bon);
END IF;
-- modificare 01.07.2008 ^
pack_facturare.transfera_articol(tab_detalii(i));
END LOOP;
END LOOP;
CLOSE CRS;
-- cumulare note
pack_facturare.cumuleaza_note_act();
-- pack_facturare.completeaza_analitice(); am mutat-o in cumuleaza_note_act
if pack_contafin.verifica_note_contabile(1) > 0 then
pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE);
else
pack_facturare.finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA);
OPEN V_CURSOR_VERIFICARE FOR
SELECT * FROM ACT_TEMP WHERE 1 = 2;
end if;
V_ID_VANZARE := NULL;
END scrie_avize_lucrare;
-------------------------------------------------------------------
/* PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER,
V_TOTTVA IN NUMBER,
V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS
lnIdFacturare NUMBER(10) := null;
lnListareDetaliata NUMBER(1) := 0;
begin
pack_facturare.scrie_factura2(V_TOTFTVA,
V_TOTTVA,
V_DISCOUNT_FACTURA,
V_SERIE_ACT_INCASARE,
V_NUMAR_ACT_INCASARE,
V_LISTA_INCASARE,
V_ID_DELEGAT,
V_ID_MASINA,
lnIdFacturare,
lnListareDetaliata,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_DISCOUNT_EVIDENTIAT,
V_PARAMETRU_ADITIONAL,
V_ID_VANZARE,
V_CURSOR_VERIFICARE);
end;*/
-------------------------------------------------------------------
PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER,
V_TOTTVA IN NUMBER,
V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS
-- V_LISTA_INCASARE : tip1|valoare1|id_bancasa1;tip2|valoare2|id_bancasa2 (pentru incasari cu mai multe tipuri ex: NUMERAR + CARD + TICHETE)
TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE;
tab_detalii tab_detalii_type;
V_INCASAT_CALCUL ACT.SUMA%TYPE := 0;
V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0;
V_ASCD ACT.ASCD%TYPE;
V_ID_SECTIE ACT.ID_SECTIE%TYPE;
V_ID_CTR ACT.ID_CTR%TYPE;
V_SEPARATOR VARCHAR2(1) := ',';
BEGIN
pack_contafin.sterge_temp_actrul();
pack_facturare.ntotftva := V_TOTFTVA;
pack_facturare.ntottva := V_TOTTVA;
pack_facturare.initializeaza_setari_facturare();
IF pack_facturare.nscadere_stoc = 0 AND
pack_facturare.ntip IN (23, 25, 30, 41) THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu exista configurari pentru transfer intre subunitati fara scadere din stoc! (FACT-003)');
END IF;
pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT;
SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP;
IF SQL%ROWCOUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu exista articole in lista de vanzare! (FACT-004)');
END IF;
FOR i IN tab_detalii.first .. tab_detalii.last LOOP
CASE
WHEN pack_facturare.ntip IN (23, 25, 30, 41) THEN
-- transfer intre subunitati
V_INCASAT_CALCUL := 0;
pack_facturare.transfera_articol(tab_detalii(i));
/* WHEN pack_facturare.ntip = pack_facturare.nTipNotaPlata THEN
pack_facturare.descarca_gestiune(tab_detalii(i).id_articol,
tab_detalii(i).serie,
tab_detalii(i).pret_achizitie,
tab_detalii(i).pretd,
tab_detalii(i).id_valutad,
tab_detalii(i).pretv_orig,
tab_detalii(i).pret,
tab_detalii(i).diferenta,
tab_detalii(i).proc_tvav,
tab_detalii(i).pret_cu_tva,
tab_detalii(i).cantitate,
tab_detalii(i).discount_unitar,
tab_detalii(i).id_gestiune,
pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE
tab_detalii(i).cont,
pack_facturare.nid_venchelt, -- V_ID_VENCHELT
tab_detalii(i).id_valuta,
tab_detalii(i).curs,
NULL, -- V_ID_PART_REZ
NULL);*/
WHEN pack_facturare.ntip IN (42, 47) THEN
V_INCASAT_CALCUL := 0;
pack_facturare.nfactavizcust := 1;
pack_facturare.descarca_gestiune(tab_detalii (i).id_articol,
tab_detalii (i).serie,
tab_detalii (i).pret_achizitie,
tab_detalii (i).pretd,
tab_detalii (i).id_valutad,
tab_detalii (i).pretv_orig,
tab_detalii (i).pret,
tab_detalii (i).diferenta,
tab_detalii (i).proc_tvav,
tab_detalii (i).pret_cu_tva,
tab_detalii (i).cantitate,
tab_detalii (i).discount_unitar,
tab_detalii (i).id_gestiune,
pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE
tab_detalii (i).cont,
pack_facturare.nid_venchelt, -- V_ID_VENCHELT
tab_detalii (i).id_valuta,
tab_detalii (i).curs / tab_detalii(i).multiplicator,
NULL, -- V_ID_PART_REZ
NULL,
tab_detalii (i).id_jtva_coloana,
tab_detalii (i).taxcode);
pack_facturare.nfactavizcust := 0;
WHEN pack_facturare.ntip IN (2, 6, 52) AND
NVL(tab_detalii(i).id_rata, 0) <> 0 THEN
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.contabilizeaza_rata(tab_detalii(i));
ELSE
-- 24 = AVIZ RETUR
IF pack_facturare.ntip = 24 THEN
SELECT STRINGAGG(COD)
INTO pack_facturare.ccod_retur
FROM VANZARI
WHERE ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(charn2collection(pack_facturare.clistaid,
V_SEPARATOR)));
END IF;
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.contabilizeaza_articol(tab_detalii(i));
END CASE;
END LOOP;
IF pack_facturare.ntip in (48, 49) THEN
pack_facturare.scrie_descarcare_k(V_PARAMETRU_ADITIONAL);
END IF;
BEGIN
SELECT ID_CTR
INTO V_ID_CTR
FROM (SELECT SUM(SUMA), ID_CTR
FROM ACT_TEMP
WHERE SCD IN ('4111', '418')
GROUP BY ID_CTR
ORDER BY 1)
WHERE ROWNUM < 2;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_CTR := NULL;
END;
IF V_DISCOUNT_FACTURA <> 0 THEN
SELECT DISTINCT ASCD, ID_SECTIE
INTO V_ASCD, V_ID_SECTIE
FROM ACT_TEMP
WHERE SCD IN ('4111', '418', '461')
AND ROWNUM < 2;
V_DISCOUNT_TOTAL_CU_TVA := pack_facturare.scrie_discount(1,
V_DISCOUNT_FACTURA,
pack_facturare.nid_valuta,
pack_facturare.nin_valuta,
V_ASCD,
V_ID_SECTIE,
V_ID_CTR,
1,
(100 +
pack_facturare.nproc_tva_max) / 100,
0,
1, -- V_CU_TVA
pack_facturare.nid_jtva_coloana,
pack_facturare.nTaxCode);
END IF;
V_INCASAT_CALCUL := V_INCASAT_CALCUL - V_DISCOUNT_TOTAL_CU_TVA;
/* IF V_AVANS <> 0 THEN
V_INCASAT_CALCUL := V_INCASAT_CALCUL - ABS(v_avans);
pack_facturare.scrie_avans(V_ID_CONTRACT, (-1) * ABS(v_avans));
END IF;*/
IF V_LISTA_INCASARE IS NOT NULL THEN
pack_facturare.scrie_incasari(V_SERIE_ACT_INCASARE,
V_NUMAR_ACT_INCASARE,
V_LISTA_INCASARE,
V_ID_CTR);
END IF;
-- cumulare note
pack_facturare.cumuleaza_note_act();
if pack_contafin.verifica_note_contabile(1) > 0 then
pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE);
V_ID_VANZARE := NULL;
else
pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_PARAMETRU_ADITIONAL);
OPEN V_CURSOR_VERIFICARE FOR
SELECT * FROM VACT WHERE 1 = 2;
V_ID_VANZARE := pack_facturare.nid_vanzare;
end if;
END scrie_factura2;
-------------------------------------------------------------------
/* PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_TEXT_ADITIONAL_RETUR IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_SERIE_ACT IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_ID_VANZARE_RETUR OUT NUMBER,
V_CURSOR_RETUR OUT cursor_facturare) is
lnIdFacturare NUMBER(10) := null;
lnListareDetaliata NUMBER(1) := 0;
begin
pack_facturare.scrie_factura_avize_retur(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
lnIdFacturare,
lnListareDetaliata,
V_DATAORA_EXP,
V_ID_AGENT,
V_DISCOUNT_EVIDENTIAT,
V_TEXT_ADITIONAL,
V_TEXT_ADITIONAL_RETUR,
V_SIR_MODIFICARI_ACONT,
V_SIR_MODIFICARI_PART,
V_PARAMETRU_ADITIONAL,
V_SERIE_ACT,
V_NUMAR_ACT,
V_ID_VANZARE,
V_ID_VANZARE_RETUR,
V_CURSOR_RETUR);
end;*/
-------------------------------------------------------------------
PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_TEXT_ADITIONAL_RETUR IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_SERIE_ACT IN VARCHAR2,
V_NUMAR_ACT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_ID_VANZARE_RETUR OUT NUMBER,
V_CURSOR_RETUR OUT cursor_facturare) IS
lcSirIdFacturi VARCHAR2(3000);
V_NUME_DOC NOM_FDOC.FEL_DOCUMENT%TYPE;
V_CURSOR_VERIFICARE cursor_facturare;
V_SCRIS NUMBER(1);
V_SEPARATOR VARCHAR2(1) := ',';
BEGIN
IF V_SIR_MODIFICARI_ACONT IS NOT NULL OR
V_SIR_MODIFICARI_PART IS NOT NULL THEN
-- nu a fost scrisa factura la prima apelare
pack_facturare.finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_SIR_MODIFICARI_ACONT,
V_SIR_MODIFICARI_PART,
V_PARAMETRU_ADITIONAL,
V_ID_VANZARE);
END IF;
-- scrie avizul de retur
DELETE FROM VANZARI_DETALII_TEMP;
SELECT STRINGAGG(COD)
INTO pack_facturare.ccod_retur
FROM VANZARI
WHERE ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(charn2collection(pack_facturare.clistaid,
V_SEPARATOR)));
SELECT STRINGAGG(ID_VANZARE_FACT)
INTO lcSirIdFacturi
FROM (SELECT DISTINCT ID_VANZARE_FACT
FROM VANZARI_CORESP
WHERE ID_VANZARE_AVIZ IN
(SELECT X AS ID_VANZARE_AVIZ
FROM table(charn2collection(pack_Facturare.clistaid,
V_SEPARATOR)))
AND STERS = 0
AND TIP = 1);
INSERT INTO VANZARI_DETALII_TEMP
(CUSTODIE,
ID_ARTICOL,
SERIE,
ID_POL,
DISCOUNT_UNITAR,
PRET,
CANTITATE,
PROC_TVAV,
ID_GESTIUNE,
CONT,
ID_UTIL,
ID_VALUTA,
PRET_CU_TVA,
ID_JTVA_COLOANA,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
IN_STOC,
CURS,
MULTIPLICATOR)
SELECT CUSTODIE,
ID_ARTICOL,
SERIE,
ID_POL,
DISCOUNT_UNITAR,
PRET,
CANTITATE,
PROC_TVAV,
ID_GESTIUNE,
CONT,
ID_UTIL,
ID_VALUTA,
PRET_CU_TVA,
(CASE
WHEN ID_JTVA_COLOANA IS NULL THEN
(CASE PROC_TVAV
WHEN 1.24 THEN
15
WHEN 1.19 THEN
1
WHEN 1.09 THEN
3
ELSE
8
END)
ELSE
ID_JTVA_COLOANA
END) AS ID_JTVA_COLOANA,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
1 AS IN_STOC,
CURS,
MULTIPLICATOR
FROM (SELECT A.CUSTODIE,
A.ID_ARTICOL,
A.SERIE,
A.ID_POL,
NVL(A.DISCOUNT_UNITAR, 0) AS DISCOUNT_UNITAR,
A.PRET,
SUM(CASE
WHEN A.ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(charn2collection(lcSirIdFacturi,
V_SEPARATOR))) THEN
A.CANTITATE
ELSE
(-1) * A.CANTITATE
END) AS CANTITATE,
A.PROC_TVAV,
A.ID_GESTIUNE,
A.CONT,
pack_facturare.nid_util AS ID_UTIL,
A.ID_VALUTA,
A.PRET_CU_TVA,
A.PRET_ACHIZITIE,
A.PRETD,
A.ID_VALUTAD,
NVL(B.CURS, 1) AS CURS,
NVL(B.MULTIPLICATOR, 1) AS MULTIPLICATOR,
A.ID_JTVA_COLOANA
FROM VANZARI_DETALII A
LEFT JOIN VANZARI_CURSURI B
ON A.ID_VANZARE = B.ID_VANZARE
AND A.ID_VALUTA = B.ID_VALUTA
WHERE A.STERS = 0
AND A.ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(charn2collection(pack_facturare.clistaid ||
V_SEPARATOR ||
lcSirIdFacturi,
V_SEPARATOR)))
GROUP BY A.CUSTODIE,
A.ID_ARTICOL,
A.ID_POL,
NVL(A.DISCOUNT_UNITAR, 0),
A.SERIE,
A.PRET_ACHIZITIE,
A.PRETD,
A.ID_VALUTAD,
A.PRET,
A.PROC_TVAV,
A.ID_JTVA_COLOANA,
A.ID_GESTIUNE,
A.CONT,
A.ID_VALUTA,
A.PRET_CU_TVA,
NVL(B.CURS, 1),
NVL(B.MULTIPLICATOR, 1))
WHERE CANTITATE < 0;
/* lcSelect_discount := 'SELECT (-1)*SUM(DISCOUNT) FROM VANZARI WHERE ID_VANZARE IN (' ||
pack_facturare.v_listaid || ')';
EXECUTE IMMEDIATE lcSelect_discount
INTO V_DISCOUNT_AVIZ;*/
pack_facturare.nperechec := 0;
pack_facturare.nid_factc := 0;
pack_facturare.ntip := 24;
-- numar aviz retur
pack_facturare.cserie_act := V_SERIE_ACT;
pack_facturare.nnumar_act := V_NUMAR_ACT;
pack_facturare.nid_set := 25000 + pack_facturare.ntip - 1 +
pack_facturare.nscadere_stoc * 10;
pack_facturare.citeste_setari_document(pack_facturare.ntip,
pack_facturare.nid_fdoc,
V_NUME_DOC);
-- numar de bon pentru retur
pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon,
NULL,
pack_facturare.nid_gestiune_sursa,
pack_facturare.nid_util,
pack_facturare.nid_sucursala,
pack_facturare.nnumar_bon);
pack_facturare.scrie_aviz_retur(V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL_RETUR,
V_DISCOUNT_EVIDENTIAT,
V_SCRIS,
V_ID_VANZARE_RETUR,
V_CURSOR_VERIFICARE);
CLOSE V_CURSOR_VERIFICARE;
IF V_SCRIS = 0 THEN
pack_facturare.finalizeaza_factura(0,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL_RETUR,
0);
V_ID_VANZARE_RETUR := pack_facturare.nid_vanzare;
END IF;
OPEN V_CURSOR_RETUR FOR
SELECT ID_VANZARE_DET,
NULL AS EXPLICATIE,
DENUMIRE,
SERIE,
DISCOUNT_UNITAR,
DISCOUNT_UNITAR_VAL,
PRET,
PRET_VAL,
CURS,
MULTIPLICATOR,
CANTITATE,
PROC_TVAV,
UM,
ID_VALUTA,
PRET_CU_TVA,
TIP_VALUTA,
CODMAT,
CODMATF,
ID_JTVA_COLOANA,
CODBARE,
0 AS PRET_ACHIZITIE,
NULL AS ID_VANZARE_SET,
0 AS ID_GESTIUNE,
0 AS ID_CTR,
NULL AS NUMAR_CONTRACT,
NUME_VAL
FROM (SELECT MIN(A.ID_VANZARE_DET) AS ID_VANZARE_DET,
B.DENUMIRE,
A.SERIE,
C.CURS,
C.MULTIPLICATOR,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(C.CURS, 0) *
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(C.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END) AS DISCOUNT_UNITAR,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS DISCOUNT_UNITAR_VAL,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(C.CURS, 0) *
ROUND(NVL(A.PRET, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(C.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretv)
END) AS PRET,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretvval)
ELSE
0
END) AS PRET_VAL,
SUM(CASE
WHEN A.ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(charn2collection(lcSirIdFacturi,
V_SEPARATOR))) THEN
A.CANTITATE
ELSE
(-1) * A.CANTITATE
END) AS CANTITATE,
A.PROC_TVAV,
B.UM,
A.ID_VALUTA,
A.PRET_CU_TVA,
(CASE
WHEN A.ID_VALUTA <>
pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END) AS TIP_VALUTA,
B.CODMAT,
B.CODMATF,
A.ID_JTVA_COLOANA,
B.CODBARE,
D.NUME_VAL
FROM VANZARI_DETALII A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
LEFT JOIN VANZARI_CURSURI C
ON A.ID_VALUTA = C.ID_VALUTA
AND A.ID_VANZARE = C.ID_VANZARE
LEFT JOIN NOM_VALUTE D
ON A.ID_VALUTA = D.ID_VALUTA
WHERE A.STERS = 0
AND A.ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(charn2collection(pack_facturare.clistaid ||
V_SEPARATOR ||
lcSirIdFacturi,
V_SEPARATOR)))
GROUP BY B.DENUMIRE,
A.SERIE,
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(C.CURS, 0) *
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(C.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretv)
END),
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A.DISCOUNT_UNITAR, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END),
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(C.CURS, 0) *
ROUND(NVL(A.PRET, 0),
pack_sesiune.nzecimale_pretvval) /
NVL(C.MULTIPLICATOR, 1),
pack_sesiune.nzecimale_pretv)
ELSE
ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretv)
END),
(CASE
WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN
ROUND(NVL(A.PRET, 0),
pack_sesiune.nzecimale_pretvval)
ELSE
0
END),
A.PROC_TVAV,
A.ID_JTVA_COLOANA,
B.UM,
B.CODMAT,
B.CODMATF,
B.CODBARE,
A.ID_VALUTA,
A.PRET_CU_TVA,
C.CURS,
C.MULTIPLICATOR,
(CASE
WHEN A.ID_VALUTA <>
pack_facturare.nid_moneda_nationala THEN
1
ELSE
0
END),
D.NUME_VAL)
WHERE CANTITATE < 0;
END scrie_factura_avize_retur;
/* -------------------------------------------------------------------
PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_VERIFICARE_FACTURAT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) is
lnIdFacturare NUMBER(10) := null;
lnListareDetaliata NUMBER(1) := 0;
begin
pack_facturare.scrie_factura_avize(V_DISCOUNT_FACTURA,
V_SERIE_ACT_INCASARE,
V_NUMAR_ACT_INCASARE,
V_LISTA_INCASARE,
V_ID_DELEGAT,
V_ID_MASINA,
lnIdFacturare,
lnListareDetaliata,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_DISCOUNT_EVIDENTIAT,
V_VERIFICARE_FACTURAT,
V_ID_VANZARE,
V_CURSOR_VERIFICARE);
end;*/
-------------------------------------------------------------------
PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_VERIFICARE_FACTURAT IN NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS
TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE;
tab_detalii tab_detalii_type;
articole_aviz tab_articole_aviz_type;
V_INCASAT_CALCUL ACT.SUMA%TYPE := 0;
V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0;
V_PRET ACT.SUMA%TYPE;
V_ID_VENCHELT ACT.ID_VENCHELT%TYPE;
V_ID_SECTIE ACT.ID_SECTIE%TYPE;
V_EXPLICATIE ACT.EXPLICATIA%TYPE;
V_ASCD ACT.ASCD%TYPE;
V_SCD ACT.SCD%TYPE;
V_SCC ACT.SCC%TYPE;
V_CU_TVA NOTE_CONTABILE.CU_TVA%TYPE;
V_IN_VALUTA NOTE_CONTABILE.IN_VALUTA%TYPE;
V_CANTITATE VANZARI_DETALII.CANTITATE%TYPE;
V_CANTITATE_RAMASA VANZARI_DETALII.CANTITATE%TYPE;
V_PTVA NUMBER(4);
V_LISTAID VARCHAR2(32000) := '<>';
V_ID_CTR ACT.ID_CTR%TYPE;
V_DISCOUNT_UNITAR VANZARI_DETALII.DISCOUNT_UNITAR%TYPE;
BEGIN
pack_contafin.sterge_temp_actrul();
pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT;
pack_facturare.initializeaza_setari_facturare();
V_SCD := '4111';
V_SCC := '418';
V_ID_VENCHELT := 0;
V_CU_TVA := 0;
V_IN_VALUTA := 0;
V_EXPLICATIE := SUBSTR('FACTURARE AVIZE ' || pack_facturare.cdescriere,
1,
100);
pack_facturare.nid_partc := pack_facturare.nid_part;
SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP;
IF SQL%ROWCOUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu exista articole in lista de vanzare! (FACT-005)');
END IF;
FOR i IN tab_detalii.first .. tab_detalii.last LOOP
IF tab_detalii(i).proc_tvav > 1 THEN
V_CU_TVA := 1;
V_PTVA := (tab_detalii(i).proc_tvav - 1) * 100;
ELSE
V_CU_TVA := 0;
V_PTVA := 0;
END IF;
IF pack_facturare.nproc_tva_max < V_PTVA THEN
pack_facturare.nproc_tva_max := V_PTVA;
pack_facturare.nid_jtva_coloana := tab_detalii(i).id_jtva_coloana;
pack_facturare.nTaxCode := tab_detalii(i).taxcode;
END IF;
SELECT A.ID_VANZARE,
A.ID_VANZARE_DET,
A.CANTITATE,
A.CUSTODIE,
C.COD,
C.ID_FACT,
C.NRACT,
C.SERIE_ACT,
C.DATAACT,
MIN(C.ASCD) AS ASCD,
NVL(B.ID_SECTIE, E.ID_SECTIE) AS ID_SECTIE
BULK COLLECT
INTO articole_aviz
FROM VANZARI_DETALII A
LEFT JOIN VANZARI B
ON A.ID_VANZARE = B.ID_VANZARE
LEFT JOIN ACT C
ON B.COD = C.COD
AND C.SCD = DECODE(B.TIP, 42, '357', '418')
AND DECODE(B.TIP, 42, '4428', C.SCC) = '4428'
LEFT JOIN CRM_POLITICI_PRETURI D
ON A.ID_POL = D.ID_POL
LEFT JOIN CRM_NOTE_VANZARI E
ON D.ID_NOTA = E.ID_NOTA
WHERE A.ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid,
',') as num_tab)))
AND A.ID_ARTICOL = tab_detalii(i).id_articol
AND A.DISCOUNT_UNITAR = tab_detalii(i).discount_unitar
AND A.ID_POL = tab_detalii(i).id_pol
AND A.ID_VALUTA = tab_detalii(i).id_valuta
AND A.PRET = tab_detalii(i).pret
AND A.PRET_ACHIZITIE = tab_detalii(i).pret_achizitie
AND NVL(A.PRETD, 0) = NVL(tab_detalii(i).pretd, NVL(A.PRETD, 0))
AND NVL(A.ID_VALUTAD, -99) =
NVL(tab_detalii(i).id_valutad, NVL(A.ID_VALUTAD, -99))
AND NVL(A.ID_GESTIUNE, -9999) =
NVL(tab_detalii(i).id_gestiune, -9999)
AND NVL(A.CONT, 'XXXX') = NVL(tab_detalii(i).cont, 'XXXX')
AND NVL(A.SERIE, '+_') = NVL(tab_detalii(i).serie, '+_')
GROUP BY A.ID_VANZARE,
A.ID_VANZARE_DET,
A.CANTITATE,
A.CUSTODIE,
C.COD,
C.ID_FACT,
C.NRACT,
C.SERIE_ACT,
C.DATAACT,
NVL(B.ID_SECTIE, E.ID_SECTIE)
ORDER BY 6;
V_CANTITATE_RAMASA := tab_detalii(i).cantitate;
IF SQL%ROWCOUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu au fost gasite articolele! (FACT-015)');
END IF;
FOR j IN articole_aviz.first .. articole_aviz.last LOOP
EXIT WHEN V_CANTITATE_RAMASA = 0;
pack_facturare.nid_factc := articole_aviz(j).id_fact;
pack_facturare.nperechec := articole_aviz(j).nract;
V_CANTITATE := articole_aviz(j).cantitate;
IF V_CANTITATE_RAMASA >= V_CANTITATE THEN
V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE;
ELSE
V_CANTITATE := V_CANTITATE_RAMASA;
V_CANTITATE_RAMASA := 0;
END IF;
-- modificare 20.11
IF instr(V_LISTAID, '<' || articole_aviz(j).id_vanzare || '>') = 0 THEN
V_LISTAID := V_LISTAID || '<' || articole_aviz(j).id_vanzare || '>,';
END IF;
IF articole_aviz(j).custodie = 1 THEN
pack_facturare.nfactavizcust := 1;
tab_detalii(i).cantitate := V_CANTITATE;
tab_detalii(i).id_rata := articole_aviz(j).cod;
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.contabilizeaza_articol(tab_detalii(i));
UPDATE VANZARI_DETALII_TEMP
SET CANTITATE = CANTITATE - V_CANTITATE
WHERE ID_TEMP = tab_detalii(i).id_temp;
MERGE INTO VANZARI_DETALII_TEMP A
USING DUAL B
ON (A.ID_ARTICOL = tab_detalii(i).id_articol AND A.ID_POL = tab_detalii(i).id_pol AND A.PRET = tab_detalii(i).pret AND A.PRET_CU_TVA = tab_detalii(i).pret_cu_tva AND A.PROC_TVAV = tab_detalii(i).proc_tvav AND A.DISCOUNT_UNITAR = tab_detalii(i).discount_unitar AND A.ID_GESTIUNE = tab_detalii(i).id_gestiune AND NVL(A.CONT, 'XXXX') = NVL(tab_detalii(i).cont, 'XXX') AND NVL(A.ID_VALUTA, -1) = NVL(tab_detalii(i).id_valuta, -1) AND NVL(A.CURS, 1) = NVL(tab_detalii(i).curs, 1) AND A.ID_JTVA_COLOANA = tab_detalii(i).id_jtva_coloana AND A.IN_STOC = tab_detalii(i).in_stoc AND NVL(A.ID_GESTIUNE_DEST, -99) = NVL(tab_detalii(i).id_gestiune_dest, -99) AND NVL(A.ID_UTIL, 0) = NVL(tab_detalii(i).id_util, 0) AND A.PRET_ACHIZITIE = tab_detalii(i).pret_achizitie AND NVL(A.ID_VANZARE_SET, -99) = NVL(tab_detalii(i).id_vanzare_set, -99) AND A.CUSTODIE = articole_aviz(j).custodie)
WHEN MATCHED THEN
UPDATE SET CANTITATE = CANTITATE + V_CANTITATE
WHEN NOT MATCHED THEN
INSERT
(ID_ARTICOL,
ID_POL,
PRET,
PRET_CU_TVA,
PROC_TVAV,
CANTITATE,
DISCOUNT_UNITAR,
ID_GESTIUNE,
CONT,
ID_VALUTA,
CURS,
MULTIPLICATOR,
ID_JTVA_COLOANA,
IN_STOC,
ID_GESTIUNE_DEST,
ID_COMANDA,
ID_UTIL,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
ID_VANZARE_SET,
ID_LUCRARE_REZ,
ID_PART_REZ,
NUMAR_ACT,
CUSTODIE,
ID_TEMP)
VALUES
(tab_detalii(i).id_articol,
tab_detalii(i).id_pol,
tab_detalii(i).pret,
tab_detalii(i).pret_cu_tva,
tab_detalii(i).proc_tvav,
V_CANTITATE,
tab_detalii(i).discount_unitar,
tab_detalii(i).id_gestiune,
tab_detalii(i).cont,
tab_detalii(i).id_valuta,
tab_detalii(i).curs,
tab_detalii(i).multiplicator,
tab_detalii(i).id_jtva_coloana,
tab_detalii(i).in_stoc,
tab_detalii(i).id_gestiune_dest,
tab_detalii(i).id_comanda,
tab_detalii(i).id_util,
tab_detalii(i).pret_achizitie,
NVL(tab_detalii(i).pretd, 0),
tab_detalii(i).id_valutad,
tab_detalii(i).id_vanzare_set,
tab_detalii(i).id_lucrare_rez,
tab_detalii(i).id_part_rez,
pack_facturare.nnumar_act,
articole_aviz(j).custodie,
-1000);
pack_facturare.nfactavizcust := 0;
ELSE
IF pack_facturare.ndiscount_evidentiat = 1 AND tab_detalii(i).discount_unitar <> 0 THEN
V_PRET := tab_detalii(i).pret;
V_DISCOUNT_UNITAR := tab_detalii(i).discount_unitar;
V_DISCOUNT_TOTAL_CU_TVA := V_DISCOUNT_TOTAL_CU_TVA +
pack_facturare.scrie_discount(V_CANTITATE,
tab_detalii (i).discount_unitar,
tab_detalii (i).id_valuta,
V_IN_VALUTA,
articole_aviz(j).ascd, -- ASCD
articole_aviz(j).id_sectie,
tab_detalii (i).id_ctr,
tab_detalii (i).curs / tab_detalii(i).multiplicator,
tab_detalii (i).proc_tvav,
tab_detalii (i).pret_cu_tva,
V_CU_TVA,
tab_detalii (i).id_jtva_coloana);
ELSE
V_PRET := tab_detalii(i).pret - tab_detalii(i).discount_unitar;
V_DISCOUNT_UNITAR := 0;
END IF;
-- scriere nota in act
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.scrie_nota(V_CANTITATE,
V_PRET,
V_DISCOUNT_UNITAR,
tab_detalii (i).pret_cu_tva,
tab_detalii (i).id_valuta,
V_IN_VALUTA,
tab_detalii (i).curs / tab_detalii(i).multiplicator,
V_ID_VENCHELT,
articole_aviz (j).id_sectie,
tab_detalii (i).id_ctr,
V_EXPLICATIE,
V_SCD,
articole_aviz (j).ascd, -- ascd
V_SCC,
articole_aviz (j).ascd, -- ascc
0, -- V_ID_GESTIN
0, -- V_ID_GESTOUT
pack_facturare.nid_set, -- V_ID_SET
V_CU_TVA,
tab_detalii (i).proc_tvav * 100 - 100,
tab_detalii (i).id_jtva_coloana,
tab_detalii (i).taxcode,
null);
END IF;
END LOOP;
END LOOP;
BEGIN
SELECT ID_CTR
INTO V_ID_CTR
FROM (SELECT SUM(SUMA), ID_CTR
FROM ACT_TEMP
WHERE SCD IN ('4111', '418')
GROUP BY ID_CTR
ORDER BY 1)
WHERE ROWNUM < 2;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_CTR := NULL;
END;
IF V_DISCOUNT_FACTURA <> 0 THEN
SELECT DISTINCT ASCD, ID_SECTIE
INTO V_ASCD, V_ID_SECTIE
FROM ACT_TEMP
WHERE SCD = '4111'
AND ROWNUM < 2;
V_DISCOUNT_TOTAL_CU_TVA := V_DISCOUNT_TOTAL_CU_TVA +
pack_facturare.scrie_discount(1,
V_DISCOUNT_FACTURA,
pack_facturare.nid_valuta,
pack_facturare.nin_valuta,
V_ASCD,
V_ID_SECTIE,
V_ID_CTR,
1,
(100 +
pack_facturare.nproc_tva_max) / 100,
1,
1, -- V_CU_TVA
pack_facturare.nid_jtva_coloana,
pack_facturare.nTaxCode);
END IF;
V_INCASAT_CALCUL := V_INCASAT_CALCUL - V_DISCOUNT_TOTAL_CU_TVA;
/* IF V_AVANS <> 0 THEN
V_INCASAT_CALCUL := V_INCASAT_CALCUL - ABS(v_avans);
pack_facturare.scrie_avans((-1) * ABS(v_avans));
END IF;*/
IF V_LISTA_INCASARE IS NOT NULL THEN
pack_facturare.scrie_incasari(V_SERIE_ACT_INCASARE,
V_NUMAR_ACT_INCASARE,
V_LISTA_INCASARE,
V_ID_CTR);
END IF;
-- modificare 22.08.2008
DELETE FROM VANZARI_DETALII_TEMP WHERE CANTITATE = 0;
-- cumulare note
pack_facturare.cumuleaza_note_act();
pack_facturare.clistaid_avize := REPLACE(REPLACE(V_LISTAID, '<'), '>');
if pack_contafin.verifica_note_contabile(1) > 0 then
pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE);
V_ID_VANZARE := NULL;
else
pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_VERIFICARE_FACTURAT);
OPEN V_CURSOR_VERIFICARE FOR
SELECT * FROM ACT_TEMP WHERE 1 = 2;
V_ID_VANZARE := pack_facturare.nid_vanzare;
end if;
END scrie_factura_avize;
-------------------------------------------------------------------
/* PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_SCRIS OUT NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS
lnIdFacturare NUMBER(10) := null;
lnListareDetaliata NUMBER(1) := 0;
begin
pack_facturare.scrie_aviz_retur(V_ID_DELEGAT,
V_ID_MASINA,
lnIdFacturare,
lnListareDetaliata,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_DISCOUNT_EVIDENTIAT,
V_SCRIS,
V_ID_VANZARE,
V_CURSOR_VERIFICARE);
end;*/
-------------------------------------------------------------------
PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_DISCOUNT_EVIDENTIAT IN NUMBER,
V_SCRIS OUT NUMBER,
V_ID_VANZARE OUT NUMBER,
V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS
TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE;
tab_detalii tab_detalii_type;
V_INCASAT_CALCUL ACT.SUMA%TYPE := 0;
BEGIN
pack_contafin.sterge_temp_actrul();
pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT;
pack_facturare.initializeaza_setari_facturare();
SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP;
IF SQL%ROWCOUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu exista articole in lista de vanzare! (FACT-006)');
END IF;
FOR i IN tab_detalii.first .. tab_detalii.last LOOP
pack_facturare.nfactavizcust := tab_detalii(i).custodie;
IF pack_facturare.nfactavizcust = 1 THEN
pack_facturare.descarca_gestiune(tab_detalii (i).id_articol,
tab_detalii (i).serie,
tab_detalii (i).pret_achizitie,
tab_detalii (i).pretd,
tab_detalii (i).id_valutad,
tab_detalii (i).pretv_orig,
tab_detalii (i).pret,
tab_detalii (i).diferenta,
tab_detalii (i).proc_tvav,
tab_detalii (i).pret_cu_tva,
tab_detalii (i).cantitate,
tab_detalii (i).discount_unitar,
tab_detalii (i).id_gestiune,
pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE
tab_detalii (i).cont,
pack_facturare.nid_venchelt, -- ID_VENCHELT,
tab_detalii (i).id_valuta,
tab_detalii (i).curs / tab_detalii(i).multiplicator,
NULL, -- V_ID_PART_REZ
NULL,
tab_detalii (i).id_jtva_coloana,
tab_detalii (i).taxcode);
ELSE
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.contabilizeaza_articol(tab_detalii(i));
END IF;
pack_facturare.nfactavizcust := 0;
END LOOP;
-- cumulare note
pack_facturare.scrie_note_banca_compensari();
pack_facturare.cumuleaza_note_act();
if pack_contafin.verifica_note_contabile(1) > 0 then
pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE);
V_SCRIS := 0;
V_ID_VANZARE := NULL;
else
pack_facturare.finalizeaza_factura(0, -- V_DISCOUNT_FACTURA
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
0); -- V_VERIFICAT_FACTURAT
OPEN V_CURSOR_VERIFICARE FOR
SELECT * FROM ACT_TEMP WHERE 1 = 2;
V_SCRIS := 1;
V_ID_VANZARE := pack_facturare.nid_vanzare;
end if;
END scrie_aviz_retur;
-------------------------------------------------------------------
FUNCTION contabilizeaza_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE)
RETURN NUMBER IS
V_COMPUS NUMBER(1);
V_ID_POL_ART CRM_POLITICI_PRET_ART.Id_Pol_Art%TYPE;
V_INCASAT_CALCUL ACT.SUMA%TYPE := 0;
V_SCD ACT.SCD%TYPE;
V_ASCD ACT.ASCD%TYPE;
V_SCC ACT.SCC%TYPE;
V_ASCC ACT.ASCC%TYPE;
V_EXPLICATIE ACT.EXPLICATIA%TYPE;
V_IN_VALUTA NUMBER(1) := 0;
/* CURSOR cursor_elemente_pachet IS
SELECT A.ID_POL_ART,
B.ID_POL,
B.ID_ARTICOL,
B.PRET,
B.PROC_TVAV,
B.ID_VALUTA,
C.ID_NOTA,
C.PRETURI_CU_TVA,
NVL(B.ID_VENCHELT, D.ID_VENCHELT) AS ID_VENCHELT,
DECODE(B.ID_POL,
NVL(pack_facturare.nid_politica_stoc, -99),
pack_facturare.nid_sectie_stoc,
D.ID_SECTIE) as ID_SECTIE,
D.ID_SET,
E.EXPLICATIE,
E.SCD,
E.ASCD,
E.SCC,
E.ASCC,
E.CU_TVA,
E.IN_VALUTA
FROM CRM_PACHETE_ARTICOLE A
LEFT JOIN CRM_POLITICI_PRET_ART B ON A.ID_POL_ART = B.ID_POL_ART
LEFT JOIN CRM_POLITICI_PRETURI C ON B.ID_POL = C.ID_POL
LEFT JOIN CRM_NOTE_VANZARI D ON C.ID_NOTA = D.ID_NOTA
LEFT JOIN NOTE_CONTABILE E ON D.ID_SET = E.ID_SET
WHERE A.STERS = 0
AND A.ID_PACHET = V_ID_POL_ART;
crs_rand_elemente_pachet cursor_elemente_pachet%rowtype;*/
CURSOR cursor_articol IS
SELECT A.ID_POL_ART,
A.ID_POL,
A.ID_ARTICOL,
A.PRET,
(CASE
WHEN A.ID_POL = pack_facturare.nid_politica_stoc AND
pack_facturare.nin_valuta = 1 THEN
pack_facturare.nid_valuta
ELSE
A.ID_VALUTA
END) AS ID_VALUTA,
B.ID_NOTA,
B.PRETURI_CU_TVA,
/* (CASE
WHEN (A.ID_POL = pack_facturare.nid_politica_stoc AND
pack_facturare.nid_venchelt IS NOT NULL) OR
(A.ID_VENCHELT IS NULL AND C.ID_VENCHELT IS NULL) THEN
pack_facturare.nid_venchelt
ELSE
NVL(A.ID_VENCHELT, C.ID_VENCHELT)
END) AS ID_VENCHELT,
DECODE(A.ID_POL,
NVL(pack_facturare.nid_politica_stoc, -99),
pack_facturare.nid_sectie_stoc,
C.ID_SECTIE) as ID_SECTIE,*/
NVL(pack_facturare.nid_venchelt,
NVL(A.ID_VENCHELT, C.ID_VENCHELT)) AS ID_VENCHELT,
NVL(pack_facturare.nid_sectie_stoc, C.ID_SECTIE) as ID_SECTIE,
C.ID_SET,
D.EXPLICATIE,
D.SCD,
D.ASCD,
D.SCC,
D.ASCC,
D.CU_TVA,
(CASE
WHEN A.ID_POL = pack_facturare.nid_politica_stoc AND
pack_facturare.nin_valuta = 1 THEN
1
ELSE
D.IN_VALUTA
END) AS IN_VALUTA
FROM CRM_POLITICI_PRET_ART A
LEFT JOIN CRM_POLITICI_PRETURI B
ON A.ID_POL = B.ID_POL
LEFT JOIN CRM_NOTE_VANZARI C
ON B.ID_NOTA = C.ID_NOTA
LEFT JOIN NOTE_CONTABILE D
ON C.ID_SET = D.ID_SET
WHERE
-- A.STERS = 0 AND
A.ID_POL = detalii_articol.id_pol
AND A.ID_ARTICOL = detalii_articol.id_articol;
crs_rand_articol cursor_articol%rowtype;
lcArticol nom_articole.denumire%type;
lcPolitica crm_politici_preturi.nume_lista_preturi%type;
BEGIN
-- 05.07.2011
BEGIN
SELECT COMPUS, ID_POL_ART
INTO V_COMPUS, V_ID_POL_ART
FROM VCRM_POLITICI_PRET_ART
WHERE ID_ARTICOL = detalii_articol.id_articol
AND ID_POL = detalii_articol.id_pol;
EXCEPTION
WHEN NO_DATA_FOUND THEN
SELECT DENUMIRE
INTO lcArticol
FROM NOM_ARTICOLE
where id_articol = detalii_articol.id_articol;
SELECT NUME_LISTA_PRETURI
INTO lcPolitica
FROM CRM_POLITICI_PRETURI
where id_pol = detalii_articol.id_pol;
RAISE_APPLICATION_ERROR(-20000,
'Articolul ' || detalii_articol.id_articol || '|' ||
lcArticol ||
' nu este definit in politica de preturi ' ||
detalii_articol.id_pol || '|' || lcPolitica ||
'! (FACT-024)');
END;
-- 05.07.2011 ^
IF V_COMPUS = 1 THEN
-- articol compus
RAISE_APPLICATION_ERROR(-20000,
'Nu sunt facute configurarile pentru articolele compuse! (FACT-016 : ' ||
detalii_articol.id_articol || '.' ||
detalii_articol.id_pol || ' )');
-- in_valuta = ?
/* OPEN cursor_elemente_pachet;
FETCH cursor_elemente_pachet
INTO crs_rand_elemente_pachet;
WHILE cursor_elemente_pachet%FOUND LOOP
CASE
WHEN pack_facturare.v_tip <= 20 THEN
-- factura
V_SCD := crs_rand_elemente_pachet.scd;
V_ASCD := crs_rand_elemente_pachet.ascd;
V_SCC := crs_rand_elemente_pachet.scc;
V_ASCC := crs_rand_elemente_pachet.ascc;
ELSE
-- aviz
V_SCD := '418';
V_ASCD := crs_rand_elemente_pachet.ascd;
V_SCC := crs_rand_elemente_pachet.scc;
V_ASCC := crs_rand_elemente_pachet.ascc;
END CASE;
IF pack_facturare.v_discount_evidentiat = 0 THEN
V_PRET := crs_rand_elemente_pachet.pret -
detalii_articol.discount_unitar *
ROUND(crs_rand_elemente_pachet.pret /
detalii_articol.pret,
pack_facturare.v_zecimale_procent);
ELSE
V_PRET := crs_rand_elemente_pachet.pret;
END IF;
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.scrie_nota(detalii_articol.cantitate,
V_PRET,
detalii_articol.pret_cu_tva,
detalii_articol.id_valuta,
crs_rand_elemente_pachet.in_valuta,
detalii_articol.curs,
crs_rand_elemente_pachet.id_venchelt,
crs_rand_elemente_pachet.id_sectie,
crs_rand_elemente_pachet.explicatie,
V_SCD,
V_ASCD,
V_SCC,
V_ASCC,
0,
0,
V_ID_CONTRACT,
pack_facturare.v_id_set,
crs_rand_elemente_pachet.cu_tva,
detalii_articol.proc_tvav * 100 - 100,
detalii_articol.id_jtva_coloana);
IF pack_facturare.v_scadere_stoc = 1 AND
detalii_articol.id_gestiune <> -1000 AND
detalii_articol.in_stoc = 1 THEN
pack_facturare.descarca_gestiune(crs_rand_elemente_pachet.id_articol,
detalii_articol.serie,
crs_rand_elemente_pachet.pret,
crs_rand_elemente_pachet.proc_tvav,
detalii_articol.pret_cu_tva,
detalii_articol.cantitate,
detalii_articol.discount_unitar *
ROUND(crs_rand_elemente_pachet.pret /
detalii_articol.pret,
pack_facturare.v_zecimale_procent),
detalii_articol.id_gestiune,
detalii_articol.cont,
detalii_articol.id_valuta,
detalii_articol.curs);
END IF;
FETCH cursor_elemente_pachet
INTO crs_rand_elemente_pachet;
END LOOP;
CLOSE cursor_elemente_pachet;
-- discount ? */
ELSE
-- articol simplu
OPEN cursor_articol;
FETCH cursor_articol
INTO crs_rand_articol;
WHILE cursor_articol%FOUND LOOP
CASE
-- 30.10.2009
WHEN pack_facturare.ntip <= 20 or
pack_facturare.ntip IN (pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
pack_facturare.nTipNotaPlata,
pack_facturare.nTipVanzareRetail,
48,
49,51,52) THEN
-- 30.10.2009 ^
-- factura,factura roahotel
V_SCD := crs_rand_articol.scd;
V_ASCD := NVL(crs_rand_articol.ascd,
PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util,
V_SCD));
WHEN pack_facturare.ntip in (28, 29) THEN
-- aviz catre clienti debitori
V_SCD := '461';
V_ASCD := PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util,
V_SCD);
ELSE
-- aviz
V_SCD := '418';
V_ASCD := PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util,
V_SCD);
END CASE;
V_SCC := crs_rand_articol.scc;
V_ASCC := NVL(crs_rand_articol.ascc,
PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util,
V_SCC));
CASE
WHEN pack_facturare.ntip = 7 THEN
V_EXPLICATIE := SUBSTR(TRIM(crs_rand_articol.explicatie) ||
' INVOICE:' || pack_facturare.cdescriere, 1, 100);
WHEN pack_facturare.ntip IN (8, 9) THEN
V_EXPLICATIE := SUBSTR(TRIM(crs_rand_articol.explicatie) ||
' RETUR FACTURA:' || pack_facturare.cdescriere, 1,100);
ELSE
V_EXPLICATIE := crs_rand_articol.explicatie;
END CASE;
IF pack_facturare.nTip <> pack_facturare.nTipNotaPlata THEN
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.scrie_nota(detalii_articol.cantitate,
detalii_articol.pret,
detalii_articol.discount_unitar,
detalii_articol.pret_cu_tva,
detalii_articol.id_valuta,
crs_rand_articol.in_valuta,
detalii_articol.curs /
detalii_articol.multiplicator,
crs_rand_articol.id_venchelt,
crs_rand_articol.id_sectie,
detalii_articol.id_ctr,
V_EXPLICATIE,
V_SCD,
V_ASCD,
V_SCC,
V_ASCC,
0,
0,
pack_facturare.nid_set,
crs_rand_articol.cu_tva,
detalii_articol.proc_tvav * 100 - 100,
detalii_articol.id_jtva_coloana,
detalii_articol.taxcode,
null);
END IF;
V_IN_VALUTA := crs_rand_articol.in_valuta;
IF pack_facturare.ntip <> 4 THEN
IF pack_facturare.nscadere_stoc = 1 AND
detalii_articol.id_gestiune <> -1000 AND
detalii_articol.in_stoc = 1 THEN
pack_facturare.descarca_gestiune(detalii_articol.id_articol,
detalii_articol.serie,
detalii_articol.pret_achizitie,
detalii_articol.pretd,
detalii_articol.id_valutad,
detalii_articol.pretv_orig,
detalii_articol.pret,
detalii_articol.diferenta,
detalii_articol.proc_tvav,
detalii_articol.pret_cu_tva,
detalii_articol.cantitate,
detalii_articol.discount_unitar,
detalii_articol.id_gestiune,
crs_rand_articol.id_sectie,
detalii_articol.cont,
crs_rand_articol.id_venchelt,
detalii_articol.id_valuta,
detalii_articol.curs /
detalii_articol.multiplicator,
detalii_articol.id_part_rez,
detalii_articol.id_lucrare_rez,
detalii_articol.id_jtva_coloana,
detalii_articol.taxcode);
END IF;
IF detalii_articol.discount_unitar <> 0 AND
pack_facturare.ndiscount_evidentiat = 1 THEN
V_INCASAT_CALCUL := V_INCASAT_CALCUL -
pack_facturare.scrie_discount(detalii_articol.cantitate,
detalii_articol.discount_unitar,
detalii_articol.id_valuta,
V_IN_VALUTA,
V_ASCD,
crs_rand_articol.id_sectie,
detalii_articol.id_ctr,
detalii_articol.curs /
detalii_articol.multiplicator,
detalii_articol.proc_tvav,
detalii_articol.pret_cu_tva,
crs_rand_articol.cu_tva,
detalii_articol.id_jtva_coloana,
detalii_articol.taxcode);
END IF;
ELSE
pack_facturare.scrie_fact_aviz_custodie(detalii_articol.id_rata, -- V_COD
crs_rand_articol.id_sectie,
detalii_articol.id_articol,
detalii_articol.id_gestiune,
detalii_articol.cont,
detalii_articol.cantitate,
detalii_articol.pret_cu_tva,
detalii_articol.pret_achizitie,
detalii_articol.pretd,
detalii_articol.id_valutad,
detalii_articol.pret,
detalii_articol.discount_unitar,
detalii_articol.id_valuta,
detalii_articol.curs /
detalii_articol.multiplicator,
detalii_articol.proc_tvav);
END IF;
FETCH cursor_articol
INTO crs_rand_articol;
END LOOP;
CLOSE cursor_articol;
END IF;
RETURN V_INCASAT_CALCUL;
END contabilizeaza_articol;
-------------------------------------------------------------------
FUNCTION contabilizeaza_rata(detalii_rata VANZARI_DETALII_TEMP%ROWTYPE)
RETURN NUMBER IS
V_INCASAT_CALCUL ACT.SUMA%TYPE := 0;
V_ID_VENCHELT ACT.ID_VENCHELT%TYPE;
V_ID_SECTIE ACT.ID_SECTIE%TYPE;
V_ID_SET ACT.ID_SET%TYPE;
V_EXPLICATIE ACT.EXPLICATIA%TYPE;
V_SCD ACT.SCD%TYPE;
V_ASCD ACT.ASCD%TYPE;
V_SCC ACT.SCC%TYPE;
V_ASCC ACT.ASCC%TYPE;
V_CU_TVA NOTE_CONTABILE.CU_TVA%TYPE;
V_IN_VALUTA NOTE_CONTABILE.IN_VALUTA%TYPE;
BEGIN
BEGIN
SELECT NVL(B.ID_VENCHELT, pack_facturare.nid_venchelt),
NVL(pack_facturare.nid_sectie_stoc, B.ID_SECTIE) AS ID_SECTIE,
B.ID_SET,
C.EXPLICATIE,
C.SCD,
C.ASCD,
C.SCC,
C.ASCC,
C.CU_TVA,
C.IN_VALUTA
INTO V_ID_VENCHELT,
V_ID_SECTIE,
V_ID_SET,
V_EXPLICATIE,
V_SCD,
V_ASCD,
V_SCC,
V_ASCC,
V_CU_TVA,
V_IN_VALUTA
FROM CONTRACTE A
LEFT JOIN CRM_NOTE_VANZARI B
ON A.ID_NOTA = B.ID_NOTA
LEFT JOIN NOTE_CONTABILE C
ON B.ID_SET = C.ID_SET
WHERE A.STERS = 0
AND A.ID_CTR = detalii_rata.id_ctr
AND B.STERS = 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu sunt configurate notele de vanzare pentru acest contract!');
END;
IF pack_facturare.ndiscount_evidentiat = 1 AND
detalii_rata.discount_unitar > 0 THEN
V_INCASAT_CALCUL := V_INCASAT_CALCUL -
pack_facturare.scrie_discount(detalii_rata.cantitate,
detalii_rata.discount_unitar,
detalii_rata.id_valuta,
V_IN_VALUTA,
V_ASCD,
V_ID_SECTIE,
detalii_rata.id_ctr,
detalii_rata.curs /
detalii_rata.multiplicator,
detalii_rata.proc_tvav,
detalii_rata.pret_cu_tva,
V_CU_TVA,
detalii_rata.id_jtva_coloana,
detalii_rata.taxcode);
END IF;
-- scriere nota in act
V_INCASAT_CALCUL := V_INCASAT_CALCUL +
pack_facturare.scrie_nota(detalii_rata.cantitate,
detalii_rata.pret,
detalii_rata.discount_unitar,
detalii_rata.pret_cu_tva,
detalii_rata.id_valuta,
V_IN_VALUTA,
detalii_rata.curs /
detalii_rata.Multiplicator,
V_ID_VENCHELT,
V_ID_SECTIE,
detalii_rata.id_ctr,
detalii_rata.explicatia,
V_SCD,
V_ASCD,
V_SCC,
V_ASCC,
0, -- V_ID_GESTIN
0, -- V_ID_GESTOUT
pack_facturare.nid_set, -- V_ID_SET
V_CU_TVA,
detalii_rata.proc_tvav * 100 - 100,
detalii_rata.id_jtva_coloana,
detalii_Rata.Taxcode,
null); --(tab_detalii(i).proc_tvav - 1) * 100
RETURN V_INCASAT_CALCUL;
END;
-------------------------------------------------------------------
PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRETV_ALES IN NUMBER,
V_PRET_UNITAR IN NUMBER,
V_AJUSTARE IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_CANTE IN NUMBER,
V_DISCOUNT IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_CONT IN VARCHAR2,
V_ID_VENCHELT IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_ID_PART_REZ IN NUMBER,
V_ID_LUCRARE_REZ IN NUMBER) IS
begin
PACK_FACTURARE.descarca_gestiune(V_ID_ARTICOL => V_ID_ARTICOL,
V_SERIE => V_SERIE,
V_PRET_ACHIZITIE => V_PRET_ACHIZITIE,
V_PRETD => V_PRETD,
V_ID_VALUTAD => V_ID_VALUTAD,
V_PRETV_ALES => V_PRETV_ALES,
V_PRET_UNITAR => V_PRET_UNITAR,
V_AJUSTARE => V_AJUSTARE,
V_PROC_TVAV => V_PROC_TVAV,
V_PRET_ARE_TVA => V_PRET_ARE_TVA,
V_CANTE => V_CANTE,
V_DISCOUNT => V_DISCOUNT,
V_ID_GESTIUNE => V_ID_GESTIUNE,
V_ID_SECTIE => V_ID_SECTIE,
V_CONT => V_CONT,
V_ID_VENCHELT => V_ID_VENCHELT,
V_ID_VALUTA => V_ID_VALUTA,
V_CURS => V_CURS,
V_ID_PART_REZ => V_ID_PART_REZ,
V_ID_LUCRARE_REZ => V_ID_LUCRARE_REZ,
V_ID_JTVA_COLOANA => NULL,
V_TAXCODE => NULL);
end;
PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER,
V_SERIE IN VARCHAR2,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRETV_ALES IN NUMBER,
V_PRET_UNITAR IN NUMBER,
V_AJUSTARE IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_CANTE IN NUMBER,
V_DISCOUNT IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_CONT IN VARCHAR2,
V_ID_VENCHELT IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_ID_PART_REZ IN NUMBER,
V_ID_LUCRARE_REZ IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_TAXCODE IN NUMBER) IS
V_PRET STOC.PRET%TYPE;
V_TVA STOC.TVA%TYPE;
V_PRETV_ORIG STOC.PRETV%TYPE;
V_ACONT STOC.ACONT%TYPE;
V_ACONT_REST STOC.ACONT%TYPE;
V_ACONT_GEST NOM_GESTIUNI.ACONT%TYPE;
V_ADAOS RUL.ADAOS%TYPE;
V_ADAOS_ORIG RUL.ADAOS%TYPE;
V_PRETV RUL.PRETV%TYPE;
V_TVAV RUL.PRETV%TYPE;
V_PRETVTVA RUL.PRETVTVA%TYPE;
V_TVAV_ORIG RUL.PRETV%TYPE;
V_PROC_TVAV_ORIG RUL.PROC_TVAV%TYPE;
V_DISCOUNT_UNITAR RUL.DISCUNITAR%TYPE;
V_DISCOUNT_TVA RUL.DISCOUNT_TVA%TYPE;
V_DISCOUNT_CU_TVA RUL.DISCUNITAR%TYPE;
V_PROC_DISCOUNT RUL.PROC_DISC%TYPE;
V_PROCENT RUL.PROCENT%TYPE;
V_PROCENT_ORIG RUL.PROCENT%TYPE;
V_EXPLICATIE ACT.EXPLICATIA%TYPE;
V_SUMA ACT.SUMA%TYPE;
V_INCASAT_CALCUL ACT.SUMA%TYPE;
V_CONT2 ACT.SCD%TYPE;
V_CONT3 ACT.SCD%TYPE;
V_ACONT2 ACT.ASCD%TYPE;
V_ANALITICCUST ACT.ASCD%TYPE;
V_TIP_GESTIUNE NOM_GESTIUNI.NR_PAG%TYPE;
tab_stoc tab_stoc_type;
V_CANTITATE STOC.CANTS%TYPE;
V_CANTITATE_RAMASA STOC.CANTS%TYPE;
V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE;
V_ID_TIP_RULAJ NOM_TIP_RULAJ.ID_TIP_RULAJ%TYPE := 3;
--V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.nzecimale_pretv;
V_VALOARE_PRET ACT.SUMA%TYPE;
V_VALOARE_PRETV ACT.SUMA%TYPE;
V_VALOARE_PRETV_ORIG ACT.SUMA%TYPE;
V_VALOARE_TVA ACT.SUMA%TYPE;
V_VALOARE_TVAV ACT.SUMA%TYPE;
V_VALOARE_TVAV_ORIG ACT.SUMA%TYPE;
V_VALOARE_ADAOS ACT.SUMA%TYPE;
V_VALOARE_ADAOS_ORIG ACT.SUMA%TYPE;
V_VALOARE_DIFERENTA_PRETV ACT.SUMA%TYPE;
V_VALOARE_DIFERENTA_TVAV ACT.SUMA%TYPE;
V_VALOARE_PRETVTVA ACT.SUMA%TYPE;
V_PROC_TVA ACT.PROC_TVA%TYPE;
V_TIP_INREG RUL.AN%TYPE;
V_DATAIN RUL.DATAIN%TYPE;
-- diferenta dintre pretul de lista si pretul de vanzare din stoc
V_DISCOUNT_EVIDENTIAT_AVIZ VANZARI.DISCOUNT_EVIDENTIAT%TYPE;
lcAcont607 ACT.ASCD%TYPE;
lcAcont608 ACT.ASCD%TYPE;
lcAcont378 ACT.ASCD%TYPE;
lcAcont388 ACT.ASCD%TYPE;
V_ACONT3 ACT.ASCD%TYPE;
lnFacturareFaraStoc NUMBER(1) := 0;
lnDescarcare345FaraAdaos NUMBER(1) := 0;
lnInStoc number(10) := 1;
BEGIN
lnFacturareFaraStoc := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_FACTURARE_FARA_STOC'),
'0'));
lnDescarcare345FaraAdaos := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_DESCARCARE_345_FARA_ADAOS'),
'0'));
-- NU SE DESCARCA GESTIUNEA PENTRU ARTICOLELE NEGESTIONABILE
-- ASTFEL INCAT SA SE POATA FACE OPERATII GEN AVIZ DIN CUSTODIE INCLUSIV CU ARTICOLE NEGESTIONABILE
SELECT MAX(IN_STOC)
INTO lnInStoc
FROM NOM_ARTICOLE
WHERE ID_ARTICOL = V_ID_ARTICOL;
if lnInStoc = 0 then
GOTO SFARSIT;
end if;
-- V_PRETV_ORIG si V_PRETV_ALES
V_EXPLICATIE := NULL;
pack_facturare.calculeaza_pret(V_PRET_UNITAR,
V_CURS,
V_ID_VALUTA,
V_PROC_TVAV,
V_PRET_ARE_TVA,
2,
V_PRETV,
V_TVAV,
V_PRETVTVA);
pack_facturare.calculeaza_pret(V_DISCOUNT,
V_CURS,
V_ID_VALUTA,
V_PROC_TVAV,
V_PRET_ARE_TVA,
2,
V_DISCOUNT_UNITAR,
V_DISCOUNT_TVA,
V_DISCOUNT_CU_TVA);
IF V_PRETVTVA <> 0 THEN
V_PROC_DISCOUNT := ROUND(V_DISCOUNT_CU_TVA / V_PRETVTVA,
pack_facturare.nzecimale_procent) * 100;
ELSE
V_PROC_DISCOUNT := 0;
END IF;
-- modificare pentru discount evidentiat
IF pack_facturare.ndiscount_evidentiat = 0 THEN
V_PRETV := V_PRETV - V_DISCOUNT_UNITAR;
V_TVAV := V_TVAV - V_DISCOUNT_TVA;
V_PRETVTVA := V_PRETVTVA - V_DISCOUNT_CU_TVA;
V_DISCOUNT_UNITAR := 0;
V_DISCOUNT_TVA := 0;
V_DISCOUNT_CU_TVA := 0;
END IF;
-- modificare pentru facturile in valuta
IF V_AJUSTARE <> 0 THEN
V_PRETV := V_PRETV + V_AJUSTARE;
V_TVAV := V_TVAV + ROUND(V_AJUSTARE * V_PROC_TVAV,
pack_sesiune.nzecimale_pretv);
V_PRETVTVA := V_PRETV + V_TVAV;
END IF;
--
BEGIN
SELECT NR_PAG, NVL(ACONT, 'XXXX')
INTO V_TIP_GESTIUNE, V_ACONT_GEST
FROM NOM_GESTIUNI
WHERE ID_GESTIUNE = V_ID_GESTIUNE
AND STERS = 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Eroare la selectarea gestiunii! (FACT-007 : ' ||
V_ID_GESTIUNE || '.' || V_ID_ARTICOL || ')');
END;
CASE
WHEN pack_facturare.ntip IN (8, 9) THEN
-- factura de retur
SELECT 1 as tip,
a.pret,
a.pretv,
a.acont,
0 as cants,
a.cante as cant,
0 as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
b.PRETACHCTVA
BULK COLLECT
INTO tab_stoc
FROM RUL A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
WHERE A.STERS = 0
AND NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = V_CONT
AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_')
AND A.PRETV = V_PRETV_ALES
AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET)
AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0))
AND NVL(A.ID_VALUTA, 0) =
NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD),
NVL(A.ID_VALUTA, 0))
AND A.CANTE <> 0
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0)
AND A.ID_TIP_RULAJ = 0
AND A.COD IN
(SELECT COD
FROM VANZARI
WHERE ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid,
',') as num_tab))));
WHEN pack_Facturare.ntip = 24 THEN
BEGIN
SELECT DISTINCT DISCOUNT_EVIDENTIAT
INTO V_DISCOUNT_EVIDENTIAT_AVIZ
FROM VANZARI
WHERE COD IN
(SELECT X AS COD
FROM table(cast(CHARN2COLLECTION(pack_facturare.ccod_retur,
',') as num_tab)));
EXCEPTION
WHEN TOO_MANY_ROWS THEN
RAISE_APPLICATION_ERROR(-20000,
'O parte dintre avize sunt cu discount evidentiat,iar altele sunt fara! (FACT-022)');
END;
-- aviz de retur
SELECT 1 as tip,
A.pret,
A.pretv,
A.acont,
0 as cants,
A.cante as cant,
0 as cante,
A.tvav,
A.proc_tvav,
A.tva,
A.datain,
A.id_rul_aux,
A.pretd,
A.id_valuta,
A.lot,
A.adata_expirare,
A.serie,
A.id_lucrare_rez,
A.id_part_rez,
B.PRETACHCTVA
BULK COLLECT
INTO tab_stoc
FROM RUL A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
WHERE A.STERS = 0
AND A.ID_TIP_RULAJ = 0
AND NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = V_CONT
AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_')
AND A.PRETV = DECODE(V_DISCOUNT_EVIDENTIAT_AVIZ,
1,
V_PRETV,
V_PRETV - V_DISCOUNT_UNITAR)
AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET)
AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0))
AND NVL(A.ID_VALUTA, 0) =
NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD),
NVL(A.ID_VALUTA, 0))
AND A.CANTE <> 0
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0)
AND A.COD IN
(SELECT X AS COD
FROM table(cast(CHARN2COLLECTION(pack_facturare.ccod_retur,
',') as num_tab)));
WHEN pack_Facturare.ntip = pack_facturare.nTipFacturaHotel THEN
-- 09.02.2010
-- la vanzarea din stoc din ROARETAIL - aflu preturile de achizitie/vanzare, seria, gestiunea si trebuie sa intru pe ramura default
-- DESCARCAREA DE GESTIUNE OFFLINE TREBUIE RESCRISA SA FOLOSEASCA PROCEDURA PACK_RETAIL_STOC.SALVEAZABON
-- pack_Facturare.ntip = pack_gestiuni_retail.nTipVanzareRetail
-- BONURI FISCALE DIN ROARETAIL (NU AM PRETUL DE ACHIZITIE, CONTUL) PACK_GESTIUNI_RETAIL.DESCARCARE_RETAIL
-- 09.02.2010 ^
SELECT 1 as tip,
a.pret,
a.pretv,
a.acont,
a.cants,
a.cant,
a.cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
b.PRETACHCTVA
BULK COLLECT
INTO tab_stoc
FROM STOC A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
WHERE NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND A.LUNA = pack_facturare.nluna
AND A.AN = pack_facturare.nan
AND A.CANTS + A.CANT > a.cante
ORDER BY A.PRET;
WHEN pack_Facturare.ntip in
(pack_facturare.nTipFacturaRestaurant,
pack_facturare.nTipNotaPlata) THEN
V_ACONT_REST := NULL;
SELECT *
BULK COLLECT
INTO tab_stoc
FROM (SELECT 1 as tip,
a.pret,
a.pretv,
a.acont,
a.cants,
a.cant + nvl(b.cant, 0) as cant,
a.cante + nvl(b.cante, 0) as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
c.pretachctva
FROM STOC A
LEFT JOIN (select sum(cant) as cant,
sum(cante) as cante,
id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare
from rul_temp
where an = 1
group by id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_GESTIUNE = B.ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX')
AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX')
AND A.PRET = B.PRET
AND A.PRETV = B.PRETV
AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_')
AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0)
AND A.PROC_TVAV = B.PROC_TVAV
AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0)
AND A.PRETD = B.PRETD
AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0)
AND NVL(A.LOT, '_') = NVL(B.LOT, '_')
AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) =
NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY'))
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
WHERE NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND A.LUNA = pack_facturare.nluna
AND A.AN = pack_facturare.nan
AND A.CANTS + A.CANT + nvl(b.cant, 0) >
a.cante + nvl(b.cante, 0)
UNION ALL
SELECT 2 AS TIP,
NVL(V_PRET_ACHIZITIE, 0) as pret,
NVL(V_PRETV_ALES, 0) as pretv,
V_ACONT_REST as acont,
V_CANTE as cants,
0 as cant,
0 as cante,
pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES,
1,
pack_Facturare.nid_moneda_nationala,
V_PROC_TVAV,
0,
2) as tvav,
V_PROC_TVAV as proc_tvav,
pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE,
1,
pack_facturare.nid_moneda_nationala,
V_PROC_TVAV,
0,
1) as tva,
NULL as datain,
NULL as id_rul_aux,
V_PRETD as pretd,
V_ID_VALUTAD as id_valuta,
NULL as lot,
NULL as adata_expirare,
V_SERIE as serie,
V_ID_LUCRARE_REZ as id_lucrare_rez,
V_ID_PART_REZ as id_part_rez,
pretachctva
FROM NOM_ARTICOLE
WHERE ID_ARTICOL = V_ID_ARTICOL)
ORDER BY TIP, PRET;
WHEN V_CANTE < 0 and pack_facturare.clistaid is not null and
instr(pack_facturare.clistaid, ':') > 0 THEN
-- tip = 1 facturare cu articole retur din rulaj, nu din stoc
-- am facut ramura separata pt ca la conpress group bon fiscal de la chiosc
-- statea foarte mult sa parcurga rulajul,
-- desi nu aveam nici V_CANTE < 0 nici pack_facturare.clista_id
-- este la fel ca ramura else, dar cu tip = 1 in plus
-- tip = 2 facturare articole din stoc (cantitate pozitiva sau negativa)
-- tip = 3 facturare articole fara stoc, din nomenclatorul de articole, RF_FACTURARE_FARA_STOC = 1
SELECT *
BULK COLLECT
INTO tab_stoc
FROM (SELECT 1 as tip, -- ARTICOLE RETUR, DIN RUL
a.pret,
a.pretv,
a.acont,
0 as cants,
a.cante as cant,
0 as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
b.PRETACHCTVA
FROM RUL A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
WHERE V_CANTE < 0
AND A.STERS = 0
AND NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = V_CONT
AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_')
AND A.PRETV = V_PRETV_ALES
AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET)
AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0))
AND NVL(A.ID_VALUTA, 0) =
NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD),
NVL(A.ID_VALUTA, 0))
AND A.CANTE <> 0
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0)
AND A.ID_TIP_RULAJ = 0
AND A.COD IN
(SELECT COD
FROM VANZARI
WHERE ID_VANZARE IN
(select id_vanzare
from (select cast(getwordnum(id_articol_id_vanzare,
1,
':') as
number(20, 0)) as id_articol,
cast(getwordnum(id_articol_id_vanzare,
2,
':') as
number(20, 0)) as id_vanzare
from (select x as id_articol_id_vanzare
FROM table(cast(CHARC2COLLECTION(pack_facturare.clistaid,
',') as
char_tab))))
where id_articol = V_ID_ARTICOL)) -- ID_ARTICOL:ID_VANZARE,ID_ARTICOL:ID_VANZARE
UNION ALL
SELECT 2 as tip, -- FARA ARTICOLE RETUR, DIN STOC. ulterior am inclus si articolele vandute normal (nu din rulaj) dar cu cantitate negativa, care exista in stoc
a.pret,
a.pretv,
a.acont,
a.cants,
a.cant + nvl(b.cant, 0) as cant,
a.cante + nvl(b.cante, 0) as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
c.pretachctva
FROM STOC A
LEFT JOIN (select sum(cant) as cant,
sum(cante) as cante,
id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare
from rul_temp
where an = 1
group by id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_GESTIUNE = B.ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX')
AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX')
AND A.PRET = B.PRET
AND A.PRETV = B.PRETV
AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_')
AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0)
AND A.PROC_TVAV = B.PROC_TVAV
AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0)
AND A.PRETD = B.PRETD
AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0)
AND NVL(A.LOT, '_') = NVL(B.LOT, '_')
AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) =
NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY'))
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
WHERE V_CANTE <> 0
AND NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = V_CONT
AND A.PRET = V_PRET_ACHIZITIE
AND A.PRETD = V_PRETD
AND NVL(A.ID_VALUTA, 0) =
DECODE(V_ID_VALUTAD, -99, 0, NVL(V_ID_VALUTAD, 0))
AND A.PRETV = V_PRETV_ALES -- modificare v 2.0.19
AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_')
AND A.LUNA = pack_facturare.nluna
AND A.AN = pack_facturare.nan
AND A.CANTS + A.CANT + nvl(b.cant, 0) >
a.cante + nvl(b.cante, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0)
UNION ALL
SELECT 3 AS TIP, -- ARTICOLE FARA STOC, DIN NOMENCLATORUL DE ARTICOLE, RF_FACTURARE_FARA_STOC = 1
NVL(V_PRET_ACHIZITIE, 0) as pret,
NVL(V_PRETV_ALES, 0) as pretv,
pack_facturare.getanaliticbyarticol(V_CONT,
V_ID_GESTIUNE,
V_ID_ARTICOL) as acont,
V_CANTE as cants,
0 as cant,
0 as cante,
pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES,
1,
pack_Facturare.nid_moneda_nationala,
V_PROC_TVAV,
0,
2) as tvav,
V_PROC_TVAV as proc_tvav,
pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE,
1,
pack_facturare.nid_moneda_nationala,
V_PROC_TVAV,
0,
1) as tva,
NULL as datain,
NULL as id_rul_aux,
V_PRETD as pretd,
V_ID_VALUTAD as id_valuta,
NULL as lot,
NULL as adata_expirare,
V_SERIE as serie,
V_ID_LUCRARE_REZ as id_lucrare_rez,
V_ID_PART_REZ as id_part_rez,
pretachctva
FROM NOM_ARTICOLE
WHERE lnFacturareFaraStoc = 1
and ID_ARTICOL = V_ID_ARTICOL)
ORDER BY TIP, PRET;
ELSE
SELECT *
BULK COLLECT
INTO tab_stoc
FROM (SELECT 2 as tip, -- FARA ARTICOLE RETUR, DIN STOC. ulterior am inclus si articolele vandute normal (nu din rulaj) dar cu cantitate negativa, care exista in stoc
a.pret,
a.pretv,
a.acont,
a.cants,
a.cant + nvl(b.cant, 0) as cant,
a.cante + nvl(b.cante, 0) as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
c.pretachctva
FROM STOC A
LEFT JOIN (select sum(cant) as cant,
sum(cante) as cante,
id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare
from rul_temp
where an = 1
group by id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_GESTIUNE = B.ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX')
AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX')
AND A.PRET = B.PRET
AND A.PRETV = B.PRETV
AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_')
AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0)
AND A.PROC_TVAV = B.PROC_TVAV
AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0)
AND A.PRETD = B.PRETD
AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0)
AND NVL(A.LOT, '_') = NVL(B.LOT, '_')
AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) =
NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY'))
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
WHERE V_CANTE <> 0
AND NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = V_CONT
AND A.PRET = V_PRET_ACHIZITIE
AND A.PRETD = V_PRETD
AND NVL(A.ID_VALUTA, 0) =
DECODE(V_ID_VALUTAD, -99, 0, NVL(V_ID_VALUTAD, 0))
AND A.PRETV = V_PRETV_ALES -- modificare v 2.0.19
AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_')
AND A.LUNA = pack_facturare.nluna
AND A.AN = pack_facturare.nan
AND A.CANTS + A.CANT + nvl(b.cant, 0) >
a.cante + nvl(b.cante, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0)
UNION ALL
SELECT 3 AS TIP, -- ARTICOLE FARA STOC, DIN NOMENCLATORUL DE ARTICOLE, RF_FACTURARE_FARA_STOC = 1
NVL(V_PRET_ACHIZITIE, 0) as pret,
NVL(V_PRETV_ALES, 0) as pretv,
pack_facturare.getanaliticbyarticol(V_CONT,
V_ID_GESTIUNE,
V_ID_ARTICOL) as acont,
V_CANTE as cants,
0 as cant,
0 as cante,
pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES,
1,
pack_Facturare.nid_moneda_nationala,
V_PROC_TVAV,
0,
2) as tvav,
V_PROC_TVAV as proc_tvav,
pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE,
1,
pack_facturare.nid_moneda_nationala,
V_PROC_TVAV,
0,
1) as tva,
NULL as datain,
NULL as id_rul_aux,
V_PRETD as pretd,
V_ID_VALUTAD as id_valuta,
NULL as lot,
NULL as adata_expirare,
V_SERIE as serie,
V_ID_LUCRARE_REZ as id_lucrare_rez,
V_ID_PART_REZ as id_part_rez,
pretachctva
FROM NOM_ARTICOLE
WHERE lnFacturareFaraStoc = 1
and ID_ARTICOL = V_ID_ARTICOL)
ORDER BY TIP, PRET;
-- AND NVL(A.ID_RUL_AUX, 0) = 0
END CASE;
IF SQL%ROWCOUNT = 0 THEN
BEGIN
SELECT DENUMIRE
INTO V_DENUMIRE
FROM NOM_ARTICOLE
WHERE ID_ARTICOL = V_ID_ARTICOL;
RAISE_APPLICATION_ERROR(-20000,
'Articolul ' || V_DENUMIRE ||
' nu mai e in stoc! (FACT-008)');
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Unul dintre articole nu mai exista in stoc! (FACT-009)');
END;
END IF;
V_CANTITATE_RAMASA := V_CANTE;
FOR i IN tab_stoc.first .. tab_stoc.last LOOP
EXIT WHEN V_CANTITATE_RAMASA = 0;
V_TIP_INREG := 1;
V_PRET := tab_stoc(i).PRET;
V_TVA := tab_stoc(i).TVA;
V_PRETV_ORIG := tab_stoc(i).PRETV;
V_ACONT := tab_stoc(i).ACONT;
V_DATAIN := tab_stoc(i).DATAIN;
-- 29.03.2010
lcAcont607 := GetAnaliticByArticol('607', V_ID_GESTIUNE, V_ID_ARTICOL);
lcAcont607 := CASE
WHEN lcAcont607 IS NULL THEN
REPLACE(V_ACONT, 'X')
ELSE
lcAcont607
END;
lcAcont608 := GetAnaliticByArticol('608', V_ID_GESTIUNE, V_ID_ARTICOL);
lcAcont608 := CASE
WHEN lcAcont608 IS NULL THEN
REPLACE(V_ACONT, 'X')
ELSE
lcAcont608
END;
lcAcont378 := GetAnaliticByArticol('378', V_ID_GESTIUNE, V_ID_ARTICOL);
lcAcont378 := CASE
WHEN lcAcont378 IS NULL THEN
REPLACE(V_ACONT, 'X')
ELSE
lcAcont378
END;
lcAcont388 := GetAnaliticByArticol('388', V_ID_GESTIUNE, V_ID_ARTICOL);
lcAcont388 := CASE
WHEN lcAcont388 IS NULL THEN
REPLACE(V_ACONT, 'X')
ELSE
lcAcont388
END;
-- 29.03.2010
V_CANTITATE := tab_stoc(i).CANTS + tab_stoc(i).CANT - tab_stoc(i).CANTE;
IF V_CANTITATE_RAMASA >= V_CANTITATE THEN
V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE;
ELSE
V_CANTITATE := V_CANTITATE_RAMASA;
V_CANTITATE_RAMASA := 0;
END IF;
V_ADAOS := V_PRETV - V_PRET;
V_ADAOS_ORIG := V_PRETV_ORIG - V_PRET;
IF V_PRET <> 0 THEN
V_PROCENT := ROUND(V_ADAOS * 100 / V_PRET,
pack_facturare.nzecimale_procent);
V_PROCENT_ORIG := ROUND(V_ADAOS_ORIG * 100 / V_PRET,
pack_facturare.nzecimale_procent);
ELSE
V_PROCENT := 0;
V_PROCENT_ORIG := 0;
END IF;
V_TVAV_ORIG := tab_stoc(i).TVAV;
-- gestiune marfa la pret de vanzare sau marfa pret de achizitie* (defalcata in stoc si dupa pretul de vanzare)
IF V_TIP_GESTIUNE in (6, 7) OR tab_stoc(i).TVAV <> 0 THEN
V_PROC_TVAV_ORIG := tab_stoc(i).PROC_TVAV;
ELSE
V_PROC_TVAV_ORIG := pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG,
V_PRETV_ORIG,
pack_facturare.nan,
pack_facturare.nluna);
END IF;
V_SUMA := 0;
V_INCASAT_CALCUL := 0;
/* V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/
V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV_ORIG
ELSE
V_PRETV_ORIG +
V_TVAV_ORIG
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV_ORIG,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV
ELSE
V_PRETV +
V_TVAV
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
V_DISCOUNT_CU_TVA
END,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_DIFERENTA_TVAV := V_VALOARE_TVAV - V_VALOARE_TVAV_ORIG;
/* V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/
V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV_ORIG
ELSE
V_PRETV_ORIG +
V_TVAV_ORIG
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV_ORIG,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV
ELSE
V_PRETV +
V_TVAV
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
V_DISCOUNT_CU_TVA
END,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_DIFERENTA_PRETV := V_VALOARE_PRETV - V_VALOARE_PRETV_ORIG;
V_PROC_TVA := pack_sesiune.TVA2PROCTVA(V_TVA,
V_PRET,
pack_facturare.nan,
pack_facturare.nluna);
V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE
WHEN tab_stoc(i).pretachctva = 1 THEN
V_PRET + V_TVA
ELSE
V_PRET
END),
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => 0,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => tab_stoc(i).pretachctva,
V_PROC_TVAV => V_PROC_TVA,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa);
V_VALOARE_TVA := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE
WHEN tab_stoc(i).pretachctva = 1 THEN
V_PRET + V_TVA
ELSE
V_TVA
END),
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => 0,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => tab_stoc(i).pretachctva,
V_PROC_TVAV => V_PROC_TVA,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa);
V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET;
V_VALOARE_ADAOS_ORIG := V_VALOARE_PRETV_ORIG - V_VALOARE_PRET;
V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV
ELSE
V_PRETV +
V_TVAV
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => 0,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
CASE
WHEN V_CONT = '371' AND pack_facturare.ntip = 47 THEN
V_ANALITICCUST := pack_facturare.getAnaliticK(V_PROC_TVAV);
-- 357-371.C
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
(CASE
WHEN V_TIP_GESTIUNE = 6 THEN
V_VALOARE_PRETVTVA
ELSE
V_VALOARE_PRET
END),
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR
V_EXPLICATIE,
'357',
NULL,
'371',
V_ANALITICCUST,
0,
0,
1,
0,
0,
NULL);
-- 371.C-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
V_ANALITICCUST,
'371',
REPLACE(V_ACONT, 'X'),
0,
V_ID_GESTIUNE,
1,
0,
0,
NULL);
IF V_TIP_GESTIUNE = 6 THEN
--371.C-378.C
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'371',
V_ANALITICCUST,
'378',
V_ANALITICCUST,
0, -- id_gestin
0,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--371.C-4428.C
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'371',
V_ANALITICCUST,
'4428',
V_ANALITICCUST,
0, -- id_gestin
0,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--378-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'378',
REPLACE(V_ACONT,
'X'),
'371',
REPLACE(V_ACONT,
'X'),
V_ID_GESTIUNE, -- id_gestin
V_ID_GESTIUNE,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--4428-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'4428',
NULL,
'371',
REPLACE(V_ACONT,
'X'),
V_ID_GESTIUNE, -- id_gestin
V_ID_GESTIUNE,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
END IF;
IF V_TIP_GESTIUNE IN (6, 7) AND
(V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR
V_DISCOUNT_UNITAR <> 0) THEN
IF V_TIP_GESTIUNE = 6 THEN
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_PRETV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE,
0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
'378',
REPLACE(V_ACONT,
'X'),
V_ID_GESTIUNE, -- id_gestin
V_ID_GESTIUNE,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--371-4428
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE,
0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
'4428',
NULL,
V_ID_GESTIUNE, -- id_gestin
V_ID_GESTIUNE,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
END IF;
IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
V_ID_ARTICOL,
tab_stoc(i).serie,
V_ID_GESTIUNE,
NVL(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
decode(rownum, 2, V_CANTITATE, 0) as CANT,
decode(rownum, 1, V_CANTITATE, 0) as CANTE,
V_CONT as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
END IF;
WHEN V_CONT = '371' AND pack_facturare.nfactavizcust = 1
/* (pack_facturare.ntip = 42 or (pack_facturare.ntip = 24 and pack_facturare.nfactavizcust = 1))*/
THEN
-- 357-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
(CASE
WHEN V_TIP_GESTIUNE = 6 THEN
V_VALOARE_PRETVTVA
ELSE
V_VALOARE_PRET
END),
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR
V_EXPLICATIE,
'357',
NULL,
'371',
REPLACE(V_ACONT, 'X', ''),
0,
V_ID_GESTIUNE,
1,
0,
0,
NULL);
IF V_TIP_GESTIUNE IN (6, 7) AND
(V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR
V_DISCOUNT_UNITAR <> 0) THEN
IF V_TIP_GESTIUNE = 6 THEN
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_PRETV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE,
0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
'378',
REPLACE(V_ACONT,
'X'),
V_ID_GESTIUNE, -- id_gestin
V_ID_GESTIUNE,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--371-4428
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE,
0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
'4428',
NULL,
V_ID_GESTIUNE, -- id_gestin
V_ID_GESTIUNE,
2,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
END IF;
IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
V_ID_ARTICOL,
tab_stoc(i).serie,
V_ID_GESTIUNE,
NVL(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
decode(rownum, 2, V_CANTITATE, 0) as CANT,
decode(rownum, 1, V_CANTITATE, 0) as CANTE,
V_CONT as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
END IF;
WHEN V_CONT IN ('371', '357') AND V_TIP_GESTIUNE <> 6 AND
pack_facturare.nfactavizcust = 0 THEN
--607-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET ARE TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
V_ID_VENCHELT,
V_ID_SECTIE,
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'607',
lcAcont607, -- REPLACE(V_ACONT, 'X')
V_CONT,
REPLACE(V_ACONT, 'X'),
0, -- ID_GESTIN
V_ID_GESTIUNE,
3,
0,
0,
NULL);
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET ARE TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- V_ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR,
V_EXPLICATIE,
V_CONT,
REPLACE(V_ACONT, 'X'),
'378',
lcAcont378, -- REPLACE(V_ACONT, 'X')
V_ID_GESTIUNE, -- V_ID_GESTIN
V_ID_GESTIUNE,
3,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--378-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET ARE TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'378',
lcAcont378, -- REPLACE(V_ACONT, 'X')
V_CONT,
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
3,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
IF V_CONT = '357' THEN
-- 371 - 357
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
V_CONT,
NULL,
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
3,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
END IF;
IF V_TIP_GESTIUNE = 7 AND
(V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
V_ID_ARTICOL,
tab_stoc(i).serie,
V_ID_GESTIUNE,
NVL(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
decode(rownum, 2, V_CANTITATE, 0) as CANT,
decode(rownum, 1, V_CANTITATE, 0) as CANTE,
V_CONT as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
WHEN V_CONT IN ('371', '357') AND V_TIP_GESTIUNE = 6 THEN
--607-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
V_ID_VENCHELT,
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'607',
lcAcont607, -- REPLACE(V_ACONT, 'X'),
'371',
REPLACE(V_ACONT, 'X'),
0,
V_ID_GESTIUNE,
4,
0,
0,
NULL);
--378-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS_ORIG,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'378',
lcAcont378, -- REPLACE(V_ACONT, 'X'),
'371',
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
4,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--4428-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_TVAV_ORIG,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'4428',
NULL,
'371',
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
4,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
IF V_CONT = '357' THEN
-- 371 - 357
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET +
V_VALOARE_ADAOS_ORIG +
V_VALOARE_TVAV_ORIG,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
V_CONT,
NULL,
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
4,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
END IF;
IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN
INSERT INTO RUL_TEMP
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANTE,
CANT,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
ID_RUL_AUX,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
V_ID_ARTICOL,
tab_stoc(i).serie,
V_ID_GESTIUNE,
nvl(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
decode(rownum, 1, V_CANTITATE, 0) as CANTE,
decode(rownum, 2, V_CANTITATE, 0) as CANT,
V_CONT,
V_ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET,
V_TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).id_rul_aux,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
V_ID_TIP_RULAJ,
tab_stoc(i).LOT,
tab_stoc(i).ADATA_EXPIRARE,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM DUAL
CONNECT BY level <= 2;
V_DATAIN := pack_facturare.ddata_act;
V_TIP_INREG := V_TIP_INREG - 1;
--378-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_PRETV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'378',
lcAcont378, --REPLACE(V_ACONT,'X'),
V_CONT,
REPLACE(V_ACONT,
'X'),
V_ID_GESTIUNE, -- V_ID_GESTIN
V_ID_GESTIUNE,
5,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
-- 30.10.2009
--4428-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR,
V_EXPLICATIE,
'4428',
NULL,
V_CONT,
REPLACE(V_ACONT,
'X'),
V_ID_GESTIUNE, -- id_gestin
V_ID_GESTIUNE,
5,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
-- 30.10.2009 ^
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_PRETV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
V_CONT,
REPLACE(V_ACONT,
'X'),
'378',
lcAcont378, --REPLACE(V_ACONT,'X'),
V_ID_GESTIUNE, -- V_ID_GESTIN
V_ID_GESTIUNE,
5,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
-- 30.10.2009
--371-4428
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
V_CONT,
REPLACE(V_ACONT,
'X'),
'4428',
NULL,
V_ID_GESTIUNE, -- V_ID_GESTIN
V_ID_GESTIUNE,
5,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
-- 30.10.2009 ^
END IF;
WHEN V_CONT IN ('341', '345', '346', '381') AND
pack_facturare.nfactavizcust = 0 THEN
-- 711 - 34X / 608 - 381
IF V_CONT = '381' THEN
V_CONT2 := '608';
V_CONT3 := '388';
V_SUMA := V_VALOARE_PRET;
V_ACONT2 := lcAcont608;
V_ACONT3 := lcAcont388;
ELSE
V_CONT2 := '711';
V_CONT3 := '348';
V_SUMA := V_VALOARE_PRET;
V_ACONT2 := REPLACE(V_ACONT, 'X');
V_ACONT3 := REPLACE(V_ACONT, 'X');
END IF;
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_SUMA,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
V_ID_VENCHELT,
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
V_CONT2,
V_ACONT2, -- REPLACE(V_ACONT, 'X'),
V_CONT,
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
6,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
IF V_VALOARE_ADAOS <> 0 AND lnDescarcare345FaraAdaos = 0 THEN
-- 34X -348 / 381 - 388
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
V_CONT,
REPLACE(V_ACONT,
'X'),
V_CONT3,
V_ACONT3, -- REPLACE(V_ACONT,'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
7,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
-- 348 - 34x / 388 - 381
/* IF V_CONT = '381' THEN
V_CONT2 := V_CONT;
V_ACONT2 := REPLACE(V_ACONT, 'X');
ELSE
V_ACONT2 := NULL;
END IF;*/
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
V_ID_VENCHELT,
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
V_CONT3,
V_ACONT3, -- REPLACE(V_ACONT,'X'),
V_CONT,
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
7,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
END IF;
IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND
V_TIP_GESTIUNE IN (6, 7) THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
V_ID_ARTICOL,
tab_stoc(i).serie,
V_ID_GESTIUNE,
NVL(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
decode(rownum, 2, V_CANTITATE, 0) as CANT,
decode(rownum, 1, V_CANTITATE, 0) as CANTE,
V_CONT as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
WHEN V_CONT <> '371' AND pack_facturare.nfactavizcust = 0 THEN
--371-x
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
V_ID_VENCHELT,
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT, 'X'),
V_CONT,
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
8,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--607-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
V_ID_VENCHELT,
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'607',
lcAcont607, -- REPLACE(V_ACONT, 'X'),
'371',
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
8,
0,
0,
NULL);
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT, 'X'),
'378',
lcAcont378, -- REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
8,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
--378-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'378',
lcAcont378, -- REPLACE(V_ACONT, 'X'),
'371',
REPLACE(V_ACONT, 'X'),
0, -- V_ID_GESTIN
V_ID_GESTIUNE,
8,
0,
(V_PROC_TVAV - 1) * 100,
NULL);
IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND
V_TIP_GESTIUNE IN (6, 7) THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
V_ID_ARTICOL,
tab_stoc(i).serie,
V_ID_GESTIUNE,
NVL(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
decode(rownum, 2, V_CANTITATE, 0) as CANT,
decode(rownum, 1, V_CANTITATE, 0) as CANTE,
V_CONT as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Combinatie invalida! (FACT-010 : ' ||
V_ID_ARTICOL || '.' || V_ID_GESTIUNE || '.' ||
V_CONT || ')');
END CASE;
INSERT INTO RUL_TEMP
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
DISCUNITAR,
DISCOUNT_TVA,
PROC_DISC,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_RUL_AUX,
ID_SET,
LOT,
ADATA_EXPIRARE,
ID_LUCRARE_REZ,
ID_PART_REZ,
ID_JTVA_COLOANA,
TAXCODE)
VALUES
(V_TIP_INREG,
V_ID_ARTICOL,
tab_stoc(i).serie,
V_ID_GESTIUNE,
nvl(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
V_CANTITATE,
V_CONT,
V_ACONT,
V_PRETV,
V_TVAV,
V_PRETVTVA,
V_PROC_TVAV,
V_PROC_TVAV,
V_PRET,
V_TVA,
V_DISCOUNT_UNITAR,
V_DISCOUNT_TVA,
V_PROC_DISCOUNT,
V_ADAOS,
V_PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
V_DATAIN,
pack_facturare.ddata_act,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
tab_stoc(i).id_rul_aux,
pack_facturare.nid_set,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ,
V_ID_JTVA_COLOANA,
V_TAXCODE);
END LOOP;
<<SFARSIT>>
NULL;
END descarca_gestiune;
-------------------------------------------------------------------
PROCEDURE scrie_fact_aviz_custodie(V_COD IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_ARTICOL IN NUMBER,
V_ID_GESTIUNE IN NUMBER,
V_CONT IN VARCHAR2,
V_CANTITATE IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_PRET_ACHIZITIE IN NUMBER,
V_PRETD IN NUMBER,
V_ID_VALUTAD IN NUMBER,
V_PRETV IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_PROC_TVAV IN NUMBER) IS
V_VALOARE_TVAV ACT.SUMA%TYPE;
V_VALOARE_PRETV ACT.SUMA%TYPE;
V_VALOARE_PRET ACT.SUMA%TYPE;
V_VALOARE_ADAOS ACT.SUMA%TYPE;
V_VALOARE_PRETVTVA ACT.SUMA%TYPE;
V_PRETACHCTVA NOM_ARTICOLE.PRETACHCTVA%TYPE;
V_INCASAT_CALCUL ACT.SUMA%TYPE := 0;
V_PROC_TVA RUL.PROC_TVA%TYPE;
V_ACONT RUL.ACONT%TYPE;
V_TVA RUL.TVA%TYPE;
V_PRETV_RON RUL.PRETV%TYPE;
V_DISCOUNT_EVIDENTIAT_AVIZ NUMBER(1);
BEGIN
SELECT DISCOUNT_EVIDENTIAT
INTO V_DISCOUNT_EVIDENTIAT_AVIZ
FROM VANZARI
WHERE COD = V_COD;
IF V_PRET_ARE_TVA = 1 THEN
IF V_DISCOUNT_EVIDENTIAT_AVIZ = 1 THEN
V_PRETV_RON := pack_sesiune.calculeaza_pret_cu_tva(V_PRETV,
V_CURS,
V_ID_VALUTA,
V_PROC_TVA,
V_PRET_ARE_TVA,
2);
ELSE
V_PRETV_RON := pack_sesiune.calculeaza_pret_cu_tva(V_PRETV -
V_DISCOUNT_UNITAR,
V_CURS,
V_ID_VALUTA,
V_PROC_TVA,
V_PRET_ARE_TVA,
2);
END IF;
ELSE
IF V_DISCOUNT_EVIDENTIAT_AVIZ = 1 THEN
V_PRETV_RON := pack_sesiune.calculeaza_pret_fara_tva(V_PRETV,
V_CURS,
V_ID_VALUTA,
V_PROC_TVA,
V_PRET_ARE_TVA,
2);
ELSE
V_PRETV_RON := pack_sesiune.calculeaza_pret_fara_tva(V_PRETV -
V_DISCOUNT_UNITAR,
V_CURS,
V_ID_VALUTA,
V_PROC_TVA,
V_PRET_ARE_TVA,
2);
END IF;
END IF;
SELECT A.PROC_TVA, A.TVA, A.ACONT, B.PRETACHCTVA
INTO V_PROC_TVA, V_TVA, V_ACONT, V_PRETACHCTVA
FROM RUL A
LEFT JOIN NOM_ARTICOLE B
ON A.ID_ARTICOL = B.ID_ARTICOL
WHERE A.COD = V_COD
AND A.STERS = 0
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.PRET = V_PRET_ACHIZITIE
AND A.PRETD = V_PRETD
AND NVL(A.ID_VALUTA, 0) = NVL(V_ID_VALUTAD, 0)
AND DECODE(V_PRET_ARE_TVA, 1, A.PRETV + A.TVAV, A.PRETV) =
V_PRETV_RON
AND A.ID_GESTIUNE = V_ID_GESTIUNE
AND A.ID_TIP_RULAJ = 0
AND ROWNUM = 1;
V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => V_PRETV,
V_AJUSTARE => 0,
V_CURS => V_CURS,
V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRETV,
V_AJUSTARE => 0,
V_CURS => V_CURS,
V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRET_ACHIZITIE +
(CASE
WHEN V_PRETACHCTVA = 1 THEN
V_TVA
ELSE
0
END),
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => 0,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRETACHCTVA,
V_PROC_TVAV => V_PROC_TVA,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa);
V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET;
V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => V_PRETV,
V_AJUSTARE => 0,
V_CURS => V_CURS,
V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
IF V_CONT = '371' THEN
-- 371 - 357
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRETVTVA,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
0, -- V_ID_CTR
NULL,
'371',
REPLACE(V_ACONT, 'X'),
'357',
NULL,
0,
V_ID_GESTIUNE,
1,
0,
0,
NULL);
--607-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR
NULL,
'607',
REPLACE(V_ACONT, 'X', ''),
'371',
REPLACE(V_ACONT, 'X', ''),
0,
V_ID_GESTIUNE,
1,
0,
0,
NULL);
--378-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR
NULL,
'378',
REPLACE(V_ACONT, 'X'),
'371',
REPLACE(V_ACONT, 'X'),
V_ID_GESTIUNE,
V_ID_GESTIUNE,
1,
0,
0,
NULL);
--4428-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
NVL(V_ID_SECTIE, 0),
NULL, -- V_ID_CTR
NULL,
'4428',
NULL,
'371',
REPLACE(V_ACONT, 'X'),
V_ID_GESTIUNE,
V_ID_GESTIUNE,
1,
0,
0,
NULL);
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Nu exista configurari pentru contul ' ||
V_CONT || ' ! (FACT-011)');
END IF;
END scrie_fact_aviz_custodie;
-------------------------------------------------------------------
PROCEDURE transfera_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE) IS
V_PRET STOC.PRET%TYPE;
V_PRETV_ORIG STOC.PRETV%TYPE;
V_ACONT STOC.ACONT%TYPE;
V_ACONT_GEST NOM_GESTIUNI.ACONT%TYPE;
V_ID_SECTIE RUL.ID_SECTIE%TYPE;
V_ADAOS RUL.ADAOS%TYPE;
V_ADAOS_ORIG RUL.ADAOS%TYPE;
V_PRETV RUL.PRETV%TYPE;
V_TVAV RUL.PRETV%TYPE;
V_PRETVTVA RUL.PRETVTVA%TYPE;
V_TVAV_ORIG RUL.PRETV%TYPE;
V_DISCOUNT_CU_TVA RUL.DISCUNITAR%TYPE;
V_DISCOUNT_UNITAR RUL.DISCUNITAR%TYPE;
V_DISCOUNT_TVA RUL.DISCOUNT_TVA%TYPE;
-- V_PROC_DISCOUNT RUL.PROC_DISC%TYPE;
V_PROCENT RUL.PROCENT%TYPE;
V_PROCENT_ORIG RUL.PROCENT%TYPE;
V_DATAIN RUL.DATAIN%TYPE;
V_CONT2 ACT.SCD%TYPE;
V_CONT3 ACT.SCD%TYPE;
V_ACONT2 ACT.ASCC%TYPE;
V_EXPLICATIE ACT.EXPLICATIA%TYPE;
V_SUMA ACT.SUMA%TYPE;
V_INCASAT_CALCUL ACT.SUMA%TYPE;
V_TIP_GESTIUNE NOM_GESTIUNI.NR_PAG%TYPE;
tab_stoc tab_stoc_type;
V_CANTITATE STOC.CANTS%TYPE;
V_CANTITATE_RAMASA STOC.CANTS%TYPE;
V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE;
V_VALOARE_PRET ACT.SUMA%TYPE;
V_VALOARE_PRETV ACT.SUMA%TYPE;
V_VALOARE_PRETV_ORIG ACT.SUMA%TYPE;
V_VALOARE_PRETVTVA ACT.SUMA%TYPE;
V_VALOARE_TVAV ACT.SUMA%TYPE;
V_VALOARE_TVAV_ORIG ACT.SUMA%TYPE;
V_VALOARE_ADAOS ACT.SUMA%TYPE;
V_VALOARE_ADAOS_ORIG ACT.SUMA%TYPE;
V_VALOARE_DIFERENTA_PRETV ACT.SUMA%TYPE;
V_VALOARE_DIFERENTA_TVAV ACT.SUMA%TYPE;
V_PRET_ARE_TVA NUMBER(1) := 0;
V_PROC_TVAV RUL.PROC_TVAV%TYPE;
V_PROC_TVA ACT.PROC_TVA%TYPE;
V_TVA ACT.SUMA%TYPE;
-- V_ZECIMALE_PRET NUMBER(1) := pack_facturare.nzecimale_calcul_ach;
V_TIP_INREG RUL.AN%TYPE;
BEGIN
IF pack_facturare.nid_sectie_stoc IS NULL THEN
BEGIN
SELECT B.ID_SECTIE
INTO V_ID_SECTIE
FROM CRM_POLITICI_PRETURI A
LEFT JOIN CRM_NOTE_VANZARI B
ON A.ID_NOTA = B.ID_NOTA
WHERE A.ID_POL = detalii_articol.id_pol;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_SECTIE := 0;
END;
ELSE
V_ID_SECTIE := pack_facturare.nid_sectie_stoc;
END IF;
V_EXPLICATIE := NULL;
pack_facturare.calculeaza_pret(detalii_articol.pret,
detalii_articol.curs /
detalii_articol.multiplicator,
detalii_articol.id_valuta,
detalii_articol.proc_tvav,
detalii_articol.pret_cu_tva,
2,
V_PRETV,
V_TVAV,
V_PRETVTVA);
pack_facturare.calculeaza_pret(detalii_articol.discount_unitar,
detalii_articol.curs /
detalii_articol.multiplicator,
detalii_articol.id_valuta,
detalii_articol.proc_tvav,
detalii_articol.pret_cu_tva,
2,
V_DISCOUNT_UNITAR,
V_DISCOUNT_TVA,
V_DISCOUNT_CU_TVA);
-- modificare pentru discount evidentiat
IF pack_facturare.ndiscount_evidentiat = 0 THEN
V_PRETV := V_PRETV - V_DISCOUNT_UNITAR;
V_TVAV := V_TVAV - V_DISCOUNT_TVA;
V_PRETVTVA := V_PRETVTVA - V_DISCOUNT_CU_TVA;
V_DISCOUNT_UNITAR := 0;
V_DISCOUNT_TVA := 0;
V_DISCOUNT_CU_TVA := 0;
END IF;
/* IF V_PRETVTVA <> 0 THEN
V_PROC_DISCOUNT := ROUND(V_DISCOUNT_CU_TVA / V_PRETVTVA,
pack_facturare.nzecimale_procent) * 100;
ELSE
V_PROC_DISCOUNT := 0;
END IF;*/
BEGIN
SELECT NR_PAG, NVL(ACONT, 'XXXX')
INTO V_TIP_GESTIUNE, V_ACONT_GEST
FROM NOM_GESTIUNI
WHERE ID_GESTIUNE = detalii_articol.id_gestiune
AND STERS = 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Eroare la selectarea gestiunii! (FACT-019 : ' ||
detalii_articol.id_gestiune || ')');
END;
CASE
WHEN pack_facturare.ntip = 27 THEN
-- (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune )
SELECT 1 as tip,
a.pret,
a.pretv,
a.acont,
a.cants,
a.cant + nvl(b.cant, 0) as cant,
a.cante + nvl(b.cante, 0) as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
c.pretachctva
BULK COLLECT
INTO tab_stoc
FROM STOC a
LEFT JOIN (select sum(cant) as cant,
sum(cante) as cante,
id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare
from rul_temp
where an = 1
group by id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_GESTIUNE = B.ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX')
AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX')
AND A.PRET = B.PRET
AND A.PRETV = B.PRETV
AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_')
AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0)
AND A.PROC_TVAV = B.PROC_TVAV
AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0)
AND NVL(A.PRETD, 0) = NVL(B.PRETD, 0)
AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0)
AND NVL(A.LOT, '_') = NVL(B.LOT, '_')
AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) =
NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY'))
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
WHERE NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = detalii_articol.id_articol
AND A.ID_GESTIUNE = detalii_articol.id_gestiune
AND NVL(A.CONT, 'XXXX') = detalii_articol.cont
AND A.LUNA = pack_facturare.nluna
AND A.AN = pack_facturare.nan
AND A.CANTS + A.CANT + NVL(B.CANT, 0) >
A.CANTE + NVL(B.CANTE, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) =
NVL(detalii_articol.id_lucrare_rez, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0)
ORDER BY A.PRET;
WHEN pack_facturare.ntip = 30 THEN
-- (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune )
SELECT 1 as tip,
a.pret,
a.pretv,
a.acont,
a.cants,
a.cant + nvl(b.cant, 0) as cant,
a.cante + nvl(b.cante, 0) as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
c.pretachctva
BULK COLLECT
INTO tab_stoc
FROM STOC A
LEFT JOIN (select sum(cant) as cant,
sum(cante) as cante,
id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare
from rul_temp
where an = 1
group by id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_GESTIUNE = B.ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX')
AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX')
AND A.PRET = B.PRET
AND A.PRETV = B.PRETV
AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_')
AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0)
AND A.PROC_TVAV = B.PROC_TVAV
AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0)
AND A.PRETD = B.PRETD
AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0)
AND NVL(A.LOT, '_') = NVL(B.LOT, '_')
AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) =
NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY'))
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
WHERE NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = detalii_articol.id_articol
AND NVL(A.SERIE, '+_') = NVL(detalii_articol.serie, '+_')
AND A.ID_GESTIUNE = detalii_articol.id_gestiune
AND A.PRETV = V_PRETV
AND A.PRETD = detalii_articol.pretd
AND NVL(A.ID_VALUTA, 0) =
decode(detalii_articol.id_valutad,
-99,
0,
NVL(detalii_articol.id_valutad, 0))
AND A.PRET = detalii_articol.pret_achizitie
AND NVL(A.CONT, 'XXXX') = detalii_articol.cont
AND A.LUNA = pack_facturare.nluna
AND A.AN = pack_facturare.nan
AND A.CANTS + A.CANT + NVL(B.CANT, 0) >
A.CANTE + NVL(B.CANTE, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) =
NVL(detalii_articol.id_lucrare_rez, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0)
/* AND NVL(ID_RUL_AUX, 0) = 0*/
ORDER BY A.PRET;
ELSE
SELECT 1 as tip,
a.pret,
a.pretv,
a.acont,
a.cants,
a.cant + nvl(b.cant, 0) as cant,
a.cante + nvl(b.cante, 0) as cante,
a.tvav,
a.proc_tvav,
a.tva,
a.datain,
a.id_rul_aux,
a.pretd,
a.id_valuta,
a.lot,
a.adata_expirare,
a.serie,
a.id_lucrare_rez,
a.id_part_rez,
c.pretachctva
BULK COLLECT
INTO tab_stoc
FROM STOC A
LEFT JOIN (select sum(cant) as cant,
sum(cante) as cante,
id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare
from rul_temp
where an = 1
group by id_articol,
id_gestiune,
cont,
acont,
serie,
pret,
pretv,
id_lucrare_rez,
id_part_rez,
proc_tvav,
id_rul_aux,
pretd,
id_valuta,
lot,
adata_expirare) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_GESTIUNE = B.ID_GESTIUNE
AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX')
AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX')
AND A.PRET = B.PRET
AND A.PRETV = B.PRETV
AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_')
AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0)
AND A.PROC_TVAV = B.PROC_TVAV
AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0)
AND A.PRETD = B.PRETD
AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0)
AND NVL(A.LOT, '_') = NVL(B.LOT, '_')
AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) =
NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY'))
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
WHERE NVL(A.ID_SUCURSALA, -99) =
NVL(pack_facturare.nid_sucursala, -99)
AND A.ID_ARTICOL = detalii_articol.id_articol
AND NVL(A.SERIE, '+_') = NVL(detalii_articol.serie, '+_')
AND A.ID_GESTIUNE = detalii_articol.id_gestiune
AND A.PRET = detalii_articol.pret_achizitie
AND A.PRETV = detalii_articol.pretv_orig -- modificare v 2.0.19
AND NVL(A.CONT, 'XXXX') = detalii_articol.cont
AND A.LUNA = pack_facturare.nluna
AND A.AN = pack_facturare.nan
AND A.CANTS + A.CANT + NVL(B.CANT, 0) >
A.CANTE + NVL(B.CANTE, 0)
AND NVL(A.ID_LUCRARE_REZ, 0) =
NVL(detalii_articol.id_lucrare_rez, 0)
AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0)
/* AND NVL(ID_RUL_AUX, 0) = 0*/
ORDER BY PRET;
END CASE;
IF SQL%ROWCOUNT = 0 THEN
BEGIN
SELECT DENUMIRE
INTO V_DENUMIRE
FROM NOM_ARTICOLE
WHERE ID_ARTICOL = detalii_articol.id_articol;
RAISE_APPLICATION_ERROR(-20000,
'Articolul ' || V_DENUMIRE ||
' nu mai e in stoc! (FACT-020)');
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Unul dintre articole nu mai exista in stoc! (FACT-021 : ' ||
detalii_articol.id_articol || ')');
END;
END IF;
V_CANTITATE_RAMASA := detalii_articol.cantitate;
IF pack_facturare.ntip = 27 THEN
-- (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune )
DELETE FROM VANZARI_DETALII_TEMP
WHERE ID_TEMP = detalii_articol.id_temp;
END IF;
FOR i IN tab_stoc.first .. tab_stoc.last LOOP
EXIT WHEN V_CANTITATE_RAMASA = 0;
V_TIP_INREG := 1;
V_TVA := tab_stoc(i).TVA;
V_PRET := tab_stoc(i).PRET;
V_PRETV_ORIG := tab_stoc(i).PRETV;
V_ACONT := tab_stoc(i).ACONT;
V_DATAIN := tab_stoc(i).DATAIN;
V_CANTITATE := tab_stoc(i).CANTS + tab_stoc(i).CANT - tab_stoc(i).CANTE;
IF V_CANTITATE_RAMASA >= V_CANTITATE THEN
V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE;
ELSE
V_CANTITATE := V_CANTITATE_RAMASA;
V_CANTITATE_RAMASA := 0;
END IF;
V_ADAOS := V_PRETV - V_PRET;
V_ADAOS_ORIG := V_PRETV_ORIG - V_PRET;
IF V_PRET <> 0 THEN
V_PROCENT := ROUND(V_ADAOS * 100 / V_PRET,
pack_facturare.nzecimale_procent);
V_PROCENT_ORIG := ROUND(V_ADAOS_ORIG * 100 / V_PRET,
pack_facturare.nzecimale_procent);
ELSE
V_PROCENT := 0;
V_PROCENT_ORIG := 0;
END IF;
V_TVAV_ORIG := tab_stoc(i).TVAV;
V_SUMA := 0;
V_INCASAT_CALCUL := 0;
V_PRET_ARE_TVA := detalii_articol.pret_cu_tva;
V_PROC_TVAV := detalii_articol.proc_tvav;
V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV
ELSE
V_PRETV +
V_TVAV
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
V_DISCOUNT_CU_TVA
END,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
/* V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/
V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV_ORIG
ELSE
V_PRETV_ORIG +
V_TVAV_ORIG
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG,
V_PRETV_ORIG,
pack_facturare.nan,
pack_facturare.nluna),
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_DIFERENTA_TVAV := V_VALOARE_TVAV - V_VALOARE_TVAV_ORIG;
V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV
ELSE
V_PRETV +
V_TVAV
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
V_DISCOUNT_CU_TVA
END,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
/* V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/
V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV_ORIG
ELSE
V_PRETV_ORIG +
V_TVAV_ORIG
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG,
V_PRETV_ORIG,
pack_facturare.nan,
pack_facturare.nluna),
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_VALOARE_DIFERENTA_PRETV := V_VALOARE_PRETV - V_VALOARE_PRETV_ORIG;
V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_PRETV
ELSE
V_PRETV +
V_TVAV
END,
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => CASE
V_PRET_ARE_TVA
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
V_DISCOUNT_CU_TVA
END,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav);
V_PROC_TVA := pack_sesiune.TVA2PROCTVA(V_TVA,
V_PRET,
pack_facturare.nan,
pack_facturare.nluna);
V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE
WHEN tab_stoc(i).pretachctva = 1 THEN
V_PRET + V_TVA
ELSE
V_PRET
END),
V_AJUSTARE => 0,
V_CURS => 1,
V_DISCOUNT_UNITAR => 0,
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => tab_stoc(i).pretachctva,
V_PROC_TVAV => V_PROC_TVA,
V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta,
V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa);
V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET;
V_VALOARE_ADAOS_ORIG := V_VALOARE_PRETV_ORIG - V_VALOARE_PRET;
-- 08.11.2010
-- (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune )
-- la retur transfer, trebuie schimbat semnul diferentei de pret
if pack_facturare.ntip = 41 then
V_VALOARE_DIFERENTA_TVAV := -V_VALOARE_DIFERENTA_TVAV;
V_VALOARE_DIFERENTA_PRETV := -V_VALOARE_DIFERENTA_PRETV;
end if;
-- 08.11.2010 ^
CASE
WHEN detalii_articol.cont IN ('341', '345', '346', '381') THEN
-- x - 345 / 341 / 346 / 381
IF detalii_articol.cont = '381' THEN
V_CONT2 := '388';
V_CONT3 := detalii_articol.cont;
ELSE
V_CONT2 := '348';
V_CONT3 := '711';
END IF;
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
(case
when pack_facturare.ntip = 41 then
detalii_articol.cont
else
pack_facturare.v_date_gestiune.cont
end), -- scd
(case
when pack_facturare.ntip = 41 then
REPLACE(V_ACONT, 'X', '')
else
REPLACE(pack_facturare.v_date_gestiune.acont,
'X',
'')
end), -- ascd
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.cont
else
detalii_articol.cont
end), -- scc
(case
when pack_facturare.ntip = 41 then
REPLACE(pack_facturare.v_date_gestiune.acont,
'X',
'')
else
REPLACE(V_ACONT, 'X', '')
end), -- ascc
(case
when pack_facturare.ntip = 41 then
detalii_articol.id_gestiune
else
pack_facturare.v_date_gestiune.id_gestiune
end), -- gestin
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- gestout
1,
0,
0,
NULL);
IF V_VALOARE_ADAOS <> 0 THEN
-- 341 / 345 / 346 - 348 / 381 - 388
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
detalii_articol.cont,
REPLACE(V_ACONT,
'X',
''),
V_CONT2,
NULL,
pack_facturare.v_date_gestiune.id_gestiune, -- V_ID_GESTIN
detalii_articol.id_gestiune,
2,
0,
0,
NULL);
-- 348 - 711 / 388 - 381
IF V_CONT3 = '711' THEN
V_ACONT2 := NULL;
ELSE
V_ACONT2 := REPLACE(V_ACONT, 'X');
END IF;
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
V_CONT2,
NULL,
V_CONT3,
V_ACONT2,
0, -- V_ID_GESTIN
detalii_articol.id_gestiune,
2,
0,
0,
NULL);
END IF;
WHEN V_TIP_GESTIUNE <> 6 AND
pack_facturare.v_date_gestiune.id_tip_gest <> 6 THEN
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
(case
when pack_facturare.ntip = 41 then
detalii_articol.cont
else
pack_facturare.v_date_gestiune.cont
end), -- scd
(case
when pack_facturare.ntip = 41 then
REPLACE(V_ACONT, 'X')
else
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
end), -- ascd
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.cont
else
detalii_articol.cont
end), -- scc
(case
when pack_facturare.ntip = 41 then
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
else
REPLACE(V_ACONT, 'X')
end), -- ascc
(case
when pack_facturare.ntip = 41 then
detalii_articol.id_gestiune
else
pack_facturare.v_date_gestiune.id_gestiune
end), -- id_gestin
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestout
3,
0,
0,
NULL);
IF V_TIP_GESTIUNE = 7 AND
(V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR
V_DISCOUNT_UNITAR <> 0) THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
detalii_articol.id_articol,
tab_stoc(i).serie,
detalii_articol.id_gestiune,
nvl(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
-- decode(rownum, 2, V_CANTITATE, 0) as CANT,
(case
when (rownum = 1 and pack_facturare.ntip = 41) or
(rownum = 2 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANT,
-- decode(rownum, 1, V_CANTITATE, 0) as CANTE,
(case
when (rownum = 2 and pack_facturare.ntip = 41) or
(rownum = 1 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANTE,
detalii_articol.cont as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum,
1,
tab_stoc(i).proc_Tvav,
detalii_articol.proc_tvav) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
WHEN V_TIP_GESTIUNE = pack_facturare.v_date_gestiune.id_tip_gest AND
pack_facturare.v_date_gestiune.id_tip_gest = 6 THEN
-- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRETVTVA,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
(case
when pack_facturare.ntip = 41 then
detalii_articol.cont
else
pack_facturare.v_date_gestiune.cont
end), -- scd
(case
when pack_facturare.ntip = 41 then
REPLACE(V_ACONT, 'X')
else
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
end), -- ascd
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.cont
else
detalii_articol.cont
end), -- scc
(case
when pack_facturare.ntip = 41 then
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
else
REPLACE(V_ACONT, 'X')
end), -- ascc
(case
when pack_facturare.ntip = 41 then
detalii_articol.id_gestiune
else
pack_facturare.v_date_gestiune.id_gestiune
end), -- id_gestin
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestout
4,
0,
0,
NULL);
IF V_TIP_GESTIUNE = 6 AND
(V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR
V_DISCOUNT_UNITAR <> 0) THEN
-- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_PRETV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont,
'X'),
'378',
NULL, -- pack_facturare.v_date_gestiune.acont,
detalii_articol.id_gestiune,
detalii_articol.id_gestiune, -- pack_facturare.v_date_gestiune.id_gestiune,
5,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
--371-4428
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont,
'X'),
'4428',
NULL,
detalii_articol.id_gestiune,
detalii_articol.id_gestiune, -- pack_facturare.v_date_gestiune.id_gestiune,
5,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
IF V_DISCOUNT_UNITAR = 0 THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_GESTIUNEC,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
detalii_articol.id_articol,
tab_stoc(i).serie,
detalii_articol.id_gestiune,
pack_facturare.v_date_gestiune.id_gestiune,
nvl(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
-- decode(rownum, 2, V_CANTITATE, 0) as CANT,
(case
when (rownum = 1 and pack_facturare.ntip = 41) or
(rownum = 2 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANT,
-- decode(rownum, 1, V_CANTITATE, 0) as CANTE,
(case
when (rownum = 2 and pack_facturare.ntip = 41) or
(rownum = 1 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANTE,
detalii_articol.cont as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum,
1,
tab_stoc(i).proc_Tvav,
detalii_articol.proc_tvav) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
END IF;
-- daca are analitice la adaos : trebuie sa transfer adaosul dintr-un analitic in altul
IF pack_facturare.nanalitice_378 = 1 THEN
-- 378 - 378
V_INCASAT_CALCUL := scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'378', -- scd
Null, -- ascd
'378', -- scc
Null, -- ascc
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestin
(case
when pack_facturare.ntip = 41 then
detalii_articol.id_gestiune
else
pack_facturare.v_date_gestiune.id_gestiune
end), -- id_gestout
4,
0,
0,
NULL);
IF NVL(V_ACONT, '') <>
NVL(pack_facturare.v_date_gestiune.acont, '') THEN
-- 4428 - 4428
V_INCASAT_CALCUL := scrie_nota(1,
V_VALOARE_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'4428', -- scd
Null, -- ascd
'4428', -- scc
Null, -- ascc
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestin
(case
when pack_facturare.ntip = 41 then
detalii_articol.id_gestiune
else
pack_facturare.v_date_gestiune.id_gestiune
end), -- id_gestout
4,
0,
0,
NULL);
END IF;
END IF;
WHEN (V_TIP_GESTIUNE IN (4, 5, 7) AND
pack_facturare.v_date_gestiune.id_tip_gest = 6 and
pack_facturare.ntip <> 41) OR
(pack_facturare.ntip = 41 AND V_TIP_GESTIUNE = 6 AND
pack_facturare.v_date_gestiune.id_tip_gest IN (4, 5, 7)) THEN
-- achizitie > vanzare
-- 371- x
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- V_ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
(case
when pack_facturare.ntip = 41 then
detalii_articol.cont
else
'371'
end), -- scd
(case
when pack_facturare.ntip = 41 then
REPLACE(V_ACONT, 'X')
else
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
end), --ascd
(case
when pack_facturare.ntip = 41 then
'371'
else
detalii_articol.cont
end), -- scc
(case
when pack_facturare.ntip = 41 then
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
else
REPLACE(V_ACONT, 'X')
end), -- ascc
(case
when pack_facturare.ntip = 41 then
detalii_articol.id_gestiune
else
pack_facturare.v_date_gestiune.id_gestiune
end), -- id_gestin
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestout
6,
0,
0,
NULL);
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- V_ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371', -- scd
(case
when pack_facturare.ntip = 41 then
REPLACE(V_ACONT, 'X')
else
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
end), -- ascd
'378',
NULL, -- ascc
(case
when pack_facturare.ntip <> 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestin
(case
when pack_facturare.ntip <> 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestout
6,
0,
0,
NULL);
--371-4428
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371', -- scd
(case
when pack_facturare.ntip <> 41 then
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
else
REPLACE(V_ACONT, 'X')
end), -- ascd
'4428',
NULL, -- ascc
(case
when pack_facturare.ntip <> 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestin
(case
when pack_facturare.ntip <> 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- id_gestout
6,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
IF ((V_TIP_GESTIUNE = 7 AND pack_facturare.ntip <> 41) or
(pack_facturare.v_date_gestiune.id_tip_gest = 7 AND
pack_facturare.ntip = 41)) AND
(V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR
V_DISCOUNT_UNITAR <> 0) THEN
IF pack_facturare.v_date_gestiune.id_tip_gest = 7 and
V_TIP_GESTIUNE = 6 and pack_facturare.ntip = 41 THEN
-- 371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_PRETV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
'378',
NULL,
detalii_articol.id_gestiune,
detalii_articol.id_gestiune,
7,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
--371-4428
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT,
'X'),
'4428',
NULL,
detalii_articol.id_gestiune,
detalii_articol.id_gestiune,
7,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
END IF;
IF V_DISCOUNT_UNITAR = 0 THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
detalii_articol.id_articol,
tab_stoc(i).serie,
detalii_articol.id_gestiune,
nvl(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
(case
when (rownum = 1 and pack_facturare.ntip = 41) or
(rownum = 2 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANT,
(case
when (rownum = 2 and pack_facturare.ntip = 41) or
(rownum = 1 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANTE,
detalii_articol.cont as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum,
1,
tab_stoc(i).proc_Tvav,
detalii_articol.proc_tvav) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
END IF;
WHEN (V_TIP_GESTIUNE = 6 AND
pack_facturare.v_date_gestiune.id_tip_gest IN (4, 5, 7) and
pack_facturare.ntip <> 41) OR
(pack_facturare.ntip = 41 AND V_TIP_GESTIUNE IN (4, 5, 7) AND
pack_facturare.v_date_gestiune.id_tip_gest = 6) THEN
-- vanzare > achizitie
-- retur achizitie > vanzare
-- pack_facturare.ntip = 41 = retur transfer
--x-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_PRET,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
(case
when pack_facturare.ntip = 41 then
'371'
else
pack_facturare.v_date_gestiune.cont
end),
(case
when pack_facturare.ntip = 41 then
REPLACE(V_ACONT, 'X')
else
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
end),
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.cont
else
'371'
end),
(case
when pack_facturare.ntip = 41 then
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
else
REPLACE(V_ACONT, 'X')
end),
(case
when pack_facturare.ntip = 41 then
detalii_articol.id_gestiune
else
pack_facturare.v_date_gestiune.id_gestiune
end), -- V_ID_GESTIN
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
8,
0,
0,
NULL);
--378-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_ADAOS,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'378',
NULL,
'371',
(case
when pack_facturare.ntip = 41 then
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
else
REPLACE(V_ACONT, 'X')
end),
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- V_ID_GESTIN
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
8,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
--4428-371
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'4428',
NULL,
'371',
(case
when pack_facturare.ntip = 41 then
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')
else
REPLACE(V_ACONT, 'X')
end),
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end), -- V_ID_GESTIN
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
8,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR
V_DISCOUNT_UNITAR <> 0) and pack_facturare.ntip <> 41 THEN
-- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE
--371-378
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_PRETV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT, 'X'),
'378',
NULL,
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
9,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
--371-4428
V_INCASAT_CALCUL := pack_facturare.scrie_nota(1,
V_VALOARE_DIFERENTA_TVAV,
0, -- DISCOUNT_UNITAR
0, -- PRET CU TVA
pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA
0, -- V_IN_VALUTA
0, -- V_CURS,
0, -- ID_VENCHELT
V_ID_SECTIE,
NULL, -- V_ID_CTR
V_EXPLICATIE,
'371',
REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont,
'X'),
'4428',
NULL,
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
9,
0,
(detalii_articol.proc_tvav - 1) * 100,
NULL);
END IF;
IF ((V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND
V_DISCOUNT_UNITAR = 0 AND
(pack_facturare.ntip <> 41 OR
(pack_facturare.ntip = 41 AND V_TIP_GESTIUNE = 7))) THEN
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
detalii_articol.id_articol,
tab_stoc(i).serie,
(case
when pack_facturare.ntip = 41 then
pack_facturare.v_date_gestiune.id_gestiune
else
detalii_articol.id_gestiune
end),
nvl(pack_facturare.nid_lucrare, 0),
pack_facturare.nid_responsabil,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
-- decode(rownum, 2, V_CANTITATE, 0) as CANT,
(case
when (rownum = 1 and pack_facturare.ntip = 41) or
(rownum = 2 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANT,
-- decode(rownum, 1, V_CANTITATE, 0) as CANTE,
(case
when (rownum = 2 and pack_facturare.ntip = 41) or
(rownum = 1 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANTE,
detalii_articol.cont as CONT,
REPLACE(V_ACONT, 'X', '') as ACONT,
decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV,
decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV,
decode(rownum,
1,
tab_stoc(i).pretv + tab_stoc(i).tvav,
V_PRETVTVA) as PRETVTVA,
decode(rownum,
1,
tab_stoc(i).proc_Tvav,
detalii_articol.proc_tvav) as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS,
decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT,
pack_facturare.ddata_act,
pack_facturare.nnumar_bon,
decode(rownum,
1,
tab_stoc(i).datain,
pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, null) as dataout,
tab_stoc(i).pretd,
tab_stoc(i).id_valuta,
pack_facturare.nid_set,
3 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
tab_stoc(i).ID_PART_REZ
FROM dual
CONNECT BY level <= 2;
V_TIP_INREG := V_TIP_INREG - 1;
V_DATAIN := pack_facturare.ddata_act;
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Combinatie invalida de gestiuni! (FACT-014 : ' ||
detalii_articol.cont || '.' ||
detalii_articol.id_gestiune || '.' ||
pack_facturare.v_date_gestiune.id_gestiune || ')');
END CASE;
-- pe randul 1 e iesirea
-- pe randul 2 e intrarea
INSERT INTO rul_temp
(AN,
ID_ARTICOL,
SERIE,
ID_GESTIUNE,
ID_GESTIUNEC,
ID_LUCRARE,
ID_RESPONSABIL,
NRACT,
SERIE_ACT,
CANT,
CANTE,
CONT,
ACONT,
PRETV,
TVAV,
PRETVTVA,
PROC_TVAV,
PROC_TVA,
PRET,
TVA,
ADAOS,
PROCENT,
DATAACT,
NNIR,
DATAIN,
DATAOUT,
PRETD,
ID_VALUTA,
ID_SET,
ID_TIP_RULAJ,
LOT,
ADATA_EXPIRARE,
ID_RUL_AUX,
ID_LUCRARE_REZ,
ID_PART_REZ)
SELECT decode(rownum, 1, V_TIP_INREG, 0),
detalii_articol.id_articol as ID_ARTICOL,
tab_stoc(i).serie as SERIE,
decode(rownum,
1,
detalii_articol.id_gestiune,
pack_facturare.v_date_gestiune.id_gestiune) as ID_GESTIUNE,
decode(rownum,
2,
detalii_articol.id_gestiune,
pack_facturare.v_date_gestiune.id_gestiune) as ID_GESTIUNEC,
nvl(pack_facturare.nid_lucrare, 0) as ID_LUCRARE,
pack_facturare.nid_responsabil as ID_RESPONSABIL,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
-- decode(rownum, 2, V_CANTITATE, 0) as CANT,
(case
when (rownum = 1 and pack_facturare.ntip = 41) or
(rownum = 2 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANT,
-- decode(rownum, 1, V_CANTITATE, 0) as CANTE,
(case
when (rownum = 2 and pack_facturare.ntip = 41) or
(rownum = 1 and pack_facturare.ntip <> 41) then
V_CANTITATE
else
0
end) as CANTE,
decode(rownum,
1,
detalii_articol.cont,
pack_facturare.v_date_gestiune.cont) as CONT,
decode(rownum,
1,
REPLACE(V_ACONT, 'X'),
REPLACE(pack_facturare.v_date_gestiune.acont, 'X')) as ACONT,
(case
when rownum = 1 and V_TIP_GESTIUNE IN (6, 7) then
V_PRETV
when rownum = 2 and
pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then
V_PRETV - V_DISCOUNT_UNITAR
else
0
end) as PRETV,
(case
when rownum = 1 and V_TIP_GESTIUNE IN (6, 7) then
V_TVAV
when rownum = 2 and
pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then
V_TVAV - V_DISCOUNT_TVA
else
0
end) as TVAV,
(case
when rownum = 1 and V_TIP_GESTIUNE in (6, 7) then
V_PRETVTVA
when rownum = 2 and
pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then
V_PRETVTVA - V_DISCOUNT_CU_TVA
else
0
end) as PRETVTVA,
detalii_articol.proc_tvav as PROC_TVAV,
V_PROC_TVA as PROC_TVA,
V_PRET as PRET,
V_TVA AS TVA,
V_ADAOS as ADAOS,
V_PROCENT as PROCENT,
pack_facturare.ddata_act as DATAACT,
pack_facturare.nnumar_bon as NNIR,
decode(rownum, 1, V_DATAIN, pack_facturare.ddata_act) as datain,
decode(rownum, 1, pack_facturare.ddata_act, NULL) as dataout,
tab_stoc(i).pretd as PRETD,
tab_stoc(i).id_valuta as ID_VALUTA,
pack_facturare.nid_set as ID_SET,
1 as ID_TIP_RULAJ,
tab_stoc(i).lot,
tab_stoc(i).adata_expirare,
tab_stoc(i).id_rul_aux,
tab_stoc(i).ID_LUCRARE_REZ,
(case
when rownum = 2 and pack_facturare.ntip in (23, 25) and
pack_facturare.v_date_gestiune.cont = '357' then
pack_facturare.nid_part_rez
else
tab_stoc(i).ID_PART_REZ
end)
FROM dual
CONNECT BY level <= 2;
IF pack_facturare.ntip = 27 THEN
MERGE INTO VANZARI_DETALII_TEMP A
USING DUAL B
ON (A.ID_ARTICOL = detalii_articol.id_articol AND A.ID_POL = detalii_articol.id_pol AND A.PRET = detalii_articol.pret AND A.PRET_CU_TVA = detalii_articol.pret_cu_tva AND A.PROC_TVAV = detalii_articol.proc_tvav AND A.DISCOUNT_UNITAR = detalii_articol.discount_unitar AND A.ID_GESTIUNE = detalii_articol.id_gestiune AND NVL(A.CONT, 'XXXX') = NVL(detalii_articol.cont, 'XXX') AND NVL(A.ID_VALUTA, -1) = NVL(detalii_articol.id_valuta, -1) AND NVL(A.MULTIPLICATOR, 1) = NVL(detalii_articol.multiplicator, 1) AND NVL(A.CURS, 1) = NVL(detalii_articol.curs, 1) AND A.ID_JTVA_COLOANA = detalii_articol.id_jtva_coloana AND A.IN_STOC = detalii_articol.in_stoc AND NVL(A.ID_GESTIUNE_DEST, -99) = NVL(detalii_articol.id_gestiune_dest, -99) AND NVL(A.ID_UTIL, 0) = NVL(detalii_articol.id_util, 0) AND A.PRET_ACHIZITIE = V_PRET AND NVL(A.ID_VANZARE_SET, -99) = NVL(detalii_articol.id_vanzare_set, -99) AND NVL(A.PRETD, 0) = NVL(tab_stoc(i).pretd, 0) AND NVL(A.ID_VALUTAD, -99) = NVL(tab_stoc(i).id_valuta, -99))
WHEN MATCHED THEN
UPDATE SET CANTITATE = CANTITATE + V_CANTITATE
WHEN NOT MATCHED THEN
INSERT
(ID_ARTICOL,
ID_POL,
PRET,
PRET_CU_TVA,
PROC_TVAV,
CANTITATE,
DISCOUNT_UNITAR,
ID_GESTIUNE,
CONT,
ID_VALUTA,
CURS,
MULTIPLICATOR,
ID_JTVA_COLOANA,
IN_STOC,
ID_GESTIUNE_DEST,
ID_COMANDA,
ID_UTIL,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
ID_VANZARE_SET,
ID_LUCRARE_REZ,
ID_PART_REZ,
NUMAR_ACT,
ID_TEMP)
VALUES
(detalii_articol.id_articol,
detalii_articol.id_pol,
detalii_articol.pret,
detalii_articol.pret_cu_tva,
detalii_articol.proc_tvav,
V_CANTITATE,
detalii_articol.discount_unitar,
detalii_articol.id_gestiune,
detalii_articol.cont,
detalii_articol.id_valuta,
detalii_articol.curs,
detalii_articol.multiplicator,
detalii_articol.id_jtva_coloana,
detalii_articol.in_stoc,
detalii_articol.id_gestiune_dest,
detalii_articol.id_comanda,
detalii_articol.id_util,
V_PRET,
tab_stoc (i).pretd,
tab_stoc (i).id_valuta,
detalii_articol.id_vanzare_set,
detalii_articol.id_lucrare_rez,
detalii_articol.id_part_rez,
pack_facturare.nnumar_act,
detalii_articol.id_temp);
END IF;
END LOOP;
END transfera_articol;
-------------------------------------------------------------------
FUNCTION scrie_nota(V_CANTITATE IN NUMBER,
V_PRET IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_CURS IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_CTR IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_SCD IN VARCHAR2,
V_ASCD IN VARCHAR2,
V_SCC IN VARCHAR2,
V_ASCC IN VARCHAR2,
V_ID_GESTIN IN NUMBER,
V_ID_GESTOUT IN NUMBER,
V_ID_SET IN NUMBER,
V_CU_TVA IN NUMBER, -- 0 DACA SE SCRIE SI NOTA DE TVA
V_PTVA IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL,
V_PAYMENTCODE IN NUMBER DEFAULT NULL) RETURN NUMBER IS
V_INCASAT_CALCUL ACT_TEMP.SUMA%TYPE := 0;
V_SUMA ACT_TEMP.SUMA%TYPE;
V_SUMA_FARA_TVA ACT_TEMP.SUMA%TYPE;
V_SUMA_TVA ACT_TEMP.SUMA%TYPE;
V_SUMA_CU_TVA ACT_TEMP.SUMA%TYPE := 0;
V_SUMA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0;
V_SUMA_FARA_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0;
V_SUMA_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0;
V_SUMA_CU_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0;
V_PROCENT_TVA ACT_TEMP.PROC_TVA%TYPE;
V_ID_FACT ACT_TEMP.ID_FACT%TYPE := -1;
V_ZECIMALE_PRET NUMBER(2);
V_ZECIMALE_SUMA NUMBER(2);
V_SEMN NUMBER(1) := 1; -- V_SEMN = -1 DACA AM 667 = 4111 (INTRU CU SUMA NEGATIVA SI O PUN POZITIVA, O LAS NEGATIVA LA SCRIE_TVA)
BEGIN
V_PROCENT_TVA := (V_PTVA + 100) / 100;
IF NVL(V_ID_GESTIN, 0) <> 0 OR NVL(V_ID_GESTOUT, 0) <> 0 THEN
V_ZECIMALE_PRET := pack_sesiune.nzecimale_preta;
V_ZECIMALE_SUMA := pack_sesiune.nzecimale_sumaa;
ELSE
V_ZECIMALE_PRET := pack_sesiune.nzecimale_pretv;
V_ZECIMALE_SUMA := pack_sesiune.nzecimale_sumav;
END IF;
pack_facturare.calculeaza_sume(V_PRET,
V_DISCOUNT_UNITAR,
V_ZECIMALE_PRET,
V_ZECIMALE_SUMA,
V_CANTITATE,
V_CURS,
V_ID_VALUTA,
V_PROCENT_TVA,
V_PRET_ARE_TVA,
V_SUMA_FARA_TVA,
V_SUMA_TVA,
V_SUMA_CU_TVA);
IF V_IN_VALUTA = 1 THEN
pack_facturare.calculeaza_sume(V_PRET,
V_DISCOUNT_UNITAR,
pack_sesiune.nzecimale_pretvval,
pack_sesiune.nzecimale_sumaval,
V_CANTITATE,
1,
V_ID_VALUTA,
V_PROCENT_TVA,
V_PRET_ARE_TVA,
V_SUMA_FARA_TVA_VAL,
V_SUMA_TVA_VAL,
V_SUMA_CU_TVA_VAL);
END IF;
IF V_SCD in ('667', '267', '2678', '709') AND
((pack_facturare.ntip <= 20 AND pack_facturare.ntip <> 7) or
pack_facturare.ntip in
(pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
pack_facturare.nTipNotaPlata)) THEN
-- FACTURA DISCOUNT ( in afara de credit note )
V_SEMN := -1;
END IF;
IF V_SCD NOT IN ('5311', '5314', '5125', '5121', '5124', '5126') THEN
IF V_CU_TVA = 0 THEN
V_INCASAT_CALCUL := V_INCASAT_CALCUL + V_SUMA_FARA_TVA;
ELSE
V_INCASAT_CALCUL := V_INCASAT_CALCUL + V_SUMA_CU_TVA;
END IF;
END IF;
IF pack_facturare.ntip = 4 AND pack_facturare.nfactavizcust = 0 THEN
V_SUMA := V_SUMA_CU_TVA;
V_SUMA_VAL := V_SUMA_CU_TVA_VAL;
ELSE
V_SUMA := V_SUMA_FARA_TVA;
V_SUMA_VAL := V_SUMA_FARA_TVA_VAL;
END IF;
/* IF V_SUMA IS NULL THEN
RAISE_APPLICATION_ERROR(-20000,
V_CANTITATE || ' ; ' || V_PRET || ' ; ' ||
V_DISCOUNT_UNITAR || ' ; ' || V_PRET_ARE_TVA ||
' ; ' || V_ID_VALUTA || ' ; ' || V_IN_VALUTA ||
' ; ' || V_CURS || ' ; ' || V_ID_VENCHELT ||
' ; ' || V_ID_SECTIE || ' ; ' || V_EXPLICATIE ||
' ; ' || V_SCD || ' ; ' || V_ASCD || ' ; ' ||
V_SCC || ' ; ' || V_ASCC || ' ; ' ||
V_ID_GESTIN || ' ; ' || V_ID_GESTOUT || ' ; ' ||
V_ID_SET || ' ; ' || V_CU_TVA || ' ; ' ||
V_PTVA || ' ; ' || V_ID_JTVA_COLOANA);
END IF;*/
-- cursul il completez in cumuleaza_note_act
pack_facturare.nid_act := pack_facturare.nid_act + 1;
INSERT INTO ACT_TEMP
(ID_ACT,
NRACT,
SERIE_ACT,
DATAIREG,
DATAACT,
DATASCAD,
ID_VALUTA,
ID_VENCHELT,
ID_LUCRARE,
ID_SECTIE,
ID_SET,
EXPLICATIA,
SCD,
ASCD,
SCC,
ASCC,
SUMA,
SUMA_VAL,
CURS,
PROC_TVA,
ID_FDOC,
ID_PARTD,
ID_GESTIN,
ID_GESTOUT,
NNIR,
ID_CTR,
ID_FACT,
PERECHEC,
ID_FACTC,
ID_PARTC,
ID_JTVA_COLOANA,
EXPLICATIA4,
ID_RESPONSABIL,
TAXCODE,
PAYMENTCODE)
VALUES
(pack_facturare.nid_act,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
pack_facturare.ddata_ireg,
pack_facturare.ddata_act,
pack_facturare.ddata_scadenta,
DECODE(V_IN_VALUTA,
1,
V_ID_VALUTA,
pack_facturare.nid_moneda_nationala),
V_ID_VENCHELT,
NVL(pack_Facturare.nid_lucrare, 0),
NVL(V_ID_SECTIE, 0),
V_ID_SET,
V_EXPLICATIE,
V_SCD,
V_ASCD,
V_SCC,
V_ASCC,
V_SEMN * V_SUMA,
DECODE(V_IN_VALUTA, 1, V_SEMN * V_SUMA_VAL, 0),
DECODE(V_IN_VALUTA, 1, V_CURS, 0),
V_PROCENT_TVA,
pack_facturare.nid_fdoc,
(CASE WHEN
V_SCD LIKE '41%' OR V_SCD LIKE '46%' OR V_SCD LIKE '45%' OR
(V_SCD = '357' AND pack_facturare.ntip in (42, 47)) OR
(pack_facturare.ntip = 24 and pack_facturare.nfactavizcust = 1) THEN
pack_facturare.nid_part WHEN V_SCD = '357' THEN
pack_facturare.nid_part_rez ELSE 0 END),
V_ID_GESTIN,
V_ID_GESTOUT,
pack_facturare.nnumar_bon,
V_ID_CTR,
V_ID_FACT,
pack_facturare.nperechec,
pack_facturare.nid_factc,
DECODE(V_SCC,
'419',
pack_facturare.nid_part,
'4111',
pack_facturare.nid_part,
'357',
pack_facturare.nid_part,
pack_facturare.nid_partc),
V_ID_JTVA_COLOANA,
pack_facturare.cexplicatia4,
NVL(pack_facturare.nid_responsabil, 0),
V_TAXCODE,
V_PAYMENTCODE);
IF V_CU_TVA = 1 THEN
IF pack_facturare.nproc_tva_max < V_PTVA THEN
pack_facturare.nproc_tva_max := V_PTVA;
pack_facturare.nid_jtva_coloana := V_ID_JTVA_COLOANA;
pack_facturare.nTaxCode := V_TAXCODE;
END IF;
pack_facturare.scrie_tva(V_SUMA_TVA,
V_SUMA_TVA_VAL,
V_ID_VALUTA,
V_IN_VALUTA,
V_SCD,
V_ASCD,
V_CURS,
V_ID_VENCHELT,
V_ID_SECTIE,
V_ID_CTR,
V_EXPLICATIE,
V_PROCENT_TVA,
V_ID_FACT,
V_ID_JTVA_COLOANA);
END IF;
RETURN V_INCASAT_CALCUL;
END scrie_nota;
-------------------------------------------------------------------
PROCEDURE scrie_tva(V_SUMA IN NUMBER,
V_SUMA_VAL IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_CONT IN VARCHAR2,
V_ACONT IN VARCHAR2,
V_CURS IN NUMBER,
V_ID_VENCHELT IN NUMBER,
V_ID_SECTIE IN NUMBER,
V_ID_CTR IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_PTVA IN NUMBER,
V_ID_FACT IN NUMBER,
V_ID_JTVA_COLOANA IN NUMBER) IS
V_EXPLICATIA ACT_TEMP.EXPLICATIA%TYPE;
V_SCD ACT_TEMP.SCD%TYPE;
V_ASCD ACT_TEMP.ASCD%TYPE;
V_SCC ACT_TEMP.SCC%TYPE;
V_ID_PARTD ACT_TEMP.ID_PARTD%TYPE;
V_ID_TVA ACT_TEMP.ID_JTVA_COLOANA%TYPE;
lnAn ACT_TEMP.AN%TYPE;
lnLuna ACT_TEMP.LUNA%TYPE;
lnTaxCode ACT_TEMP.TAXCODE%TYPE;
BEGIN
CASE
-- 30.10.2009
-- 26.08.2009
-- WHEN V_CONT = '667' AND pack_facturare.ntip <= 20 THEN
WHEN V_CONT in ('667', '267', '2678', '709') AND
(pack_facturare.ntip <= 20 or
pack_facturare.ntip in (pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
pack_facturare.nTipNotaPlata,
pack_facturare.nTipVanzareRetail,
48,
49,51,52)) THEN
-- 26.08.2009 ^
-- 30.10.2009 ^
-- FACTURA DISCOUNT
V_SCD := '4111';
V_ASCD := NULL;
V_SCC := '4427';
V_ID_PARTD := pack_facturare.nid_part;
WHEN pack_facturare.ntip = 4 AND pack_facturare.nfactavizcust = 0 THEN
-- factura din aviz
V_SCD := '4428';
V_ASCD := NULL;
V_SCC := '4427';
V_ID_PARTD := 0;
-- 30.10.2009
-- 26.08.2009
-- WHEN pack_facturare.ntip <= 20 OR pack_facturare.ntip in (28, 29) THEN
WHEN pack_facturare.ntip <= 20 OR
pack_facturare.ntip in (28,
29,
pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
pack_facturare.nTipNotaPlata,
pack_facturare.nTipVanzareRetail,
48,
49,51,52) THEN
-- 26.08.2009 ^
-- 30.10.2009 ^
-- factura
V_SCD := V_CONT;
V_ASCD := V_ACONT;
V_SCC := '4427';
V_ID_PARTD := pack_facturare.nid_part;
ELSE
-- aviz
V_SCD := '418';
V_ASCD := V_ACONT;
V_SCC := '4428';
V_ID_PARTD := pack_facturare.nid_part;
END CASE;
BEGIN
SELECT ID_TVA
INTO V_ID_TVA
FROM JTVA_COLOANE
WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_TVA := NULL;
END;
lnAn := pack_sesiune.getan();
lnLuna := pack_sesiune.getluna();
lnTaxCode := PACK_SAFT.GetTaxCode(lnAn,
lnLuna,
pack_facturare.ddata_act,
V_ID_TVA);
-- V_EXPLICATIA := 'TVA ' || V_EXPLICATIE;
pack_facturare.nid_act := pack_facturare.nid_act + 1;
INSERT INTO ACT_TEMP
(ID_ACT,
NRACT,
SERIE_ACT,
DATAIREG,
DATAACT,
DATASCAD,
ID_VALUTA,
ID_VENCHELT,
ID_LUCRARE,
ID_SECTIE,
ID_SET,
EXPLICATIA,
SCD,
ASCD,
SCC,
SUMA,
SUMA_VAL,
CURS,
PROC_TVA,
ID_CTR,
ID_FDOC,
ID_PARTD,
ID_FACT,
ID_JTVA_COLOANA,
EXPLICATIA4,
ID_RESPONSABIL,
TAXCODE)
VALUES
(pack_facturare.nid_act,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
pack_facturare.ddata_ireg,
pack_facturare.ddata_act,
pack_facturare.ddata_scadenta,
DECODE(V_IN_VALUTA,
1,
V_ID_VALUTA,
pack_facturare.nid_moneda_nationala),
V_ID_VENCHELT,
nvl(pack_facturare.nid_lucrare, 0),
V_ID_SECTIE,
pack_facturare.nid_set,
V_EXPLICATIA,
V_SCD,
V_ASCD,
V_SCC,
V_SUMA,
DECODE(V_IN_VALUTA, 1, V_SUMA_VAL, 0),
DECODE(V_IN_VALUTA, 1, V_CURS, 0),
V_PTVA,
V_ID_CTR,
pack_facturare.nid_fdoc,
V_ID_PARTD,
V_ID_FACT,
V_ID_TVA,
pack_facturare.cexplicatia4,
NVL(pack_facturare.nid_responsabil, 0),
lnTaxCode);
END;
-------------------------------------------------------------------
PROCEDURE scrie_descarcare_k(V_COEFICIENT_K IN NUMBER) IS
V_ANALITICCUST ACT.ASCC%TYPE;
V_INCASAT ACT.SUMA%TYPE;
BEGIN
for grup in (SELECT SUM(pack_facturare.calculeaza_total_fara_tva(pret,
diferenta,
curs,
0,
0,
cantitate,
pret_cu_tva,
proc_tvav)) as totalfaratvafaradisc,
SUM(pack_facturare.calculeaza_total_fara_tva(pret,
diferenta,
curs,
discount_unitar,
pack_facturare.ndiscount_evidentiat,
cantitate,
pret_cu_tva,
proc_tvav)) as totalfaratva,
SUM(pack_facturare.calculeaza_total_tva(pret,
diferenta,
curs,
discount_unitar,
pack_facturare.ndiscount_evidentiat,
cantitate,
pret_cu_tva,
proc_tvav)) as totaltva,
proc_tvav
FROM VANZARI_DETALII_TEMP
GROUP BY PROC_TVAV) loop
V_ANALITICCUST := pack_facturare.getAnaliticK(grup.proc_tvav);
-- 371-357
V_INCASAT := pack_facturare.scrie_nota(1,
grup.totalfaratva +
grup.totaltva,
0,
0,
pack_def.getidmonedanationala(),
0,
1,
0,
0,
NULL,
'DESCARCARE CU K',
'371',
V_ANALITICCUST,
'357',
NULL,
0,
0,
pack_facturare.nid_set,
0,
0,
NULL);
IF pack_facturare.ntip = 48 THEN
pack_facturare.ncoeficient_k := V_COEFICIENT_K;
-- 607-371
V_INCASAT := pack_facturare.scrie_nota(1,
ROUND(grup.totalfaratvafaradisc *
pack_facturare.ncoeficient_k / 100,
pack_sesiune.nzecimale_sumav),
0,
0,
pack_def.getidmonedanationala(),
0,
1,
pack_facturare.nid_venchelt,
0,
NULL,
'DESCARCARE CU K',
'607',
NULL,
'371',
V_ANALITICCUST,
0,
0,
pack_facturare.nid_set,
0,
0,
NULL);
-- 378-371
V_INCASAT := pack_facturare.scrie_nota(1,
grup.totalfaratva -
ROUND(grup.totalfaratvafaradisc *
pack_facturare.ncoeficient_k / 100,
pack_sesiune.nzecimale_sumav),
0,
0,
pack_def.getidmonedanationala(),
0,
1,
0,
0,
NULL,
'DESCARCARE CU K',
'378',
V_ANALITICCUST,
'371',
V_ANALITICCUST,
0,
0,
pack_facturare.nid_set,
0,
0,
NULL);
-- 4428-371
V_INCASAT := pack_facturare.scrie_nota(1,
grup.totaltva,
0,
0,
pack_def.getidmonedanationala(),
0,
1,
0,
0,
NULL,
'DESCARCARE CU K',
'4428',
V_ANALITICCUST,
'371',
V_ANALITICCUST,
0,
0,
pack_facturare.nid_set,
0,
0,
NULL);
END IF;
end loop;
END scrie_descarcare_k;
-------------------------------------------------------------------
FUNCTION scrie_discount(V_CANTITATE IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_IN_VALUTA IN NUMBER,
V_ASCC IN VARCHAR2,
V_ID_SECTIE IN NUMBER,
V_ID_CTR IN NUMBER,
V_CURS IN NUMBER,
V_PROC_TVAV IN NUMBER,
V_PRET_CU_TVA IN NUMBER,
V_CU_TVA IN NUMBER, -- daca se scrie si nota pentru TVA
V_ID_JTVA_COLOANA IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL)
RETURN NUMBER IS
V_EXPLICATIA ACT.EXPLICATIA%TYPE;
V_SCD ACT.SCD%TYPE;
V_ASCD ACT.ASCD%TYPE;
V_SCC ACT.SCC%TYPE;
V_ID_PARTD ACT.ID_PARTD%TYPE := 0;
V_ID_FACT ACT.ID_FACT%TYPE := -1;
V_DATA_SCADENTA ACT.DATASCAD%TYPE;
V_ID_SET ACT.ID_SET%TYPE;
V_SUMA_DISCOUNT ACT.SUMA%TYPE;
V_SUMA_TVA_DISCOUNT ACT.SUMA%TYPE;
V_DISCOUNT_TOTAL_FARA_TVA ACT.SUMA%TYPE := 0;
V_DISCOUNT_TOTAL_TVA ACT.SUMA%TYPE := 0;
V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0;
V_SUMA_DISCOUNT_VAL ACT.SUMA_VAL%TYPE;
V_SUMA_TVA_DISCOUNT_VAL ACT.SUMA_VAL%TYPE;
V_DISCOUNT_TOTAL_FARA_TVA_VAL ACT.SUMA_VAL%TYPE := 0;
V_DISCOUNT_TOTAL_TVA_VAL ACT.SUMA_VAL%TYPE := 0;
V_DISCOUNT_TOTAL_CU_TVA_VAL ACT.SUMA_VAL%TYPE := 0;
BEGIN
V_EXPLICATIA := 'DISCOUNT';
V_ID_SET := pack_facturare.nid_set;
V_DATA_SCADENTA := pack_facturare.ddata_scadenta;
pack_facturare.ddata_scadenta := NULL;
pack_facturare.nid_set := pack_facturare.nid_set + 5;
pack_facturare.calculeaza_sume(V_DISCOUNT_UNITAR,
0,
pack_sesiune.nzecimale_pretv,
pack_sesiune.nzecimale_sumav,
V_CANTITATE,
V_CURS,
V_ID_VALUTA,
V_PROC_TVAV,
V_PRET_CU_TVA,
V_DISCOUNT_TOTAL_FARA_TVA,
V_DISCOUNT_TOTAL_TVA,
V_DISCOUNT_TOTAL_CU_TVA);
IF V_IN_VALUTA = 1 THEN
pack_facturare.calculeaza_sume(V_DISCOUNT_UNITAR,
0,
pack_sesiune.nzecimale_pretvval,
pack_sesiune.nzecimale_sumaval,
V_CANTITATE,
1,
V_ID_VALUTA,
V_PROC_TVAV,
V_PRET_CU_TVA,
V_DISCOUNT_TOTAL_FARA_TVA_VAL,
V_DISCOUNT_TOTAL_TVA_VAL,
V_DISCOUNT_TOTAL_CU_TVA_VAL);
END IF;
CASE
WHEN pack_facturare.ntip = 4 THEN
-- facturare din aviz
V_SCD := '4111';
V_ASCD := V_ASCC;
V_SCC := '418';
V_SUMA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_CU_TVA;
V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA;
V_SUMA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_CU_TVA_VAL;
V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL;
V_ID_PARTD := pack_facturare.nid_part;
WHEN pack_facturare.ntip <= 20 OR
pack_facturare.nTip in
(pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
pack_facturare.nTipNotaPlata,
pack_facturare.nTipVanzareRetail,
48,49,51,52) THEN
-- factura
V_SCD := '667';
V_ASCD := NULL;
V_SCC := '4111';
V_SUMA_DISCOUNT := V_DISCOUNT_TOTAL_FARA_TVA;
V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA;
V_SUMA_DISCOUNT_VAL := V_DISCOUNT_TOTAL_FARA_TVA_VAL;
V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL;
ELSE
-- aviz
V_SCD := '667';
V_ASCD := NULL;
V_SCC := '418';
V_SUMA_DISCOUNT := V_DISCOUNT_TOTAL_FARA_TVA;
V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA;
V_SUMA_DISCOUNT_VAL := V_DISCOUNT_TOTAL_FARA_TVA_VAL;
V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL;
END CASE;
pack_facturare.nid_act := pack_facturare.nid_act + 1;
INSERT INTO ACT_TEMP
(ID_ACT,
NRACT,
SERIE_ACT,
DATAIREG,
DATAACT,
DATASCAD,
EXPLICATIA,
SCD,
ASCD,
SCC,
ASCC,
SUMA,
SUMA_VAL,
CURS,
ID_SECTIE,
ID_LUCRARE,
ID_CTR,
ID_SET,
ID_FDOC,
ID_PARTD,
ID_PARTC,
ID_FACT,
ID_VALUTA,
PROC_TVA,
PERECHEC,
ID_FACTC,
ID_JTVA_COLOANA,
EXPLICATIA4,
ID_RESPONSABIL,
TAXCODE)
VALUES
(pack_facturare.nid_act,
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
pack_facturare.ddata_ireg,
pack_facturare.ddata_act,
pack_facturare.ddata_scadenta,
V_EXPLICATIA,
V_SCD,
V_ASCD,
V_SCC,
V_ASCC,
V_SUMA_DISCOUNT,
DECODE(V_IN_VALUTA, 1, V_SUMA_DISCOUNT_VAL, 0),
DECODE(V_IN_VALUTA, 1, V_CURS, 0),
NVL(V_ID_SECTIE, 0),
NVL(pack_facturare.nid_lucrare, 0),
V_ID_CTR,
pack_facturare.nid_set,
pack_facturare.nid_fdoc,
V_ID_PARTD,
pack_facturare.nid_part,
V_ID_FACT,
DECODE(V_IN_VALUTA,
1,
V_ID_VALUTA,
pack_facturare.nid_moneda_nationala),
V_PROC_TVAV,
pack_facturare.nperechec,
pack_facturare.nid_factc,
V_ID_JTVA_COLOANA,
pack_facturare.cexplicatia4,
NVL(pack_facturare.nid_responsabil, 0),
V_TAXCODE);
IF V_CU_TVA = 1 THEN
pack_facturare.scrie_tva(V_SUMA_TVA_DISCOUNT,
V_SUMA_TVA_DISCOUNT_VAL,
V_ID_VALUTA,
V_IN_VALUTA,
V_SCC,
V_ASCC,
V_CURS, -- V_CURS,
0, -- V_ID_VENCHELT,
V_ID_SECTIE,
V_ID_CTR,
V_EXPLICATIA,
V_PROC_TVAV,
V_ID_FACT,
V_ID_JTVA_COLOANA);
END IF;
pack_facturare.nid_set := V_ID_SET;
pack_facturare.ddata_scadenta := V_DATA_SCADENTA;
RETURN V_DISCOUNT_TOTAL_CU_TVA;
END;
-------------------------------------------------------------------
PROCEDURE scrie_avans(V_SUMA IN NUMBER) IS
/* V_EXPLICATIA ACT.EXPLICATIA%TYPE;
V_SCD ACT.SCD%TYPE := '4111';
V_SCC ACT.SCC%TYPE := '419';
V_SUMA_AVANS ACT.SUMA%TYPE := 0;*/
BEGIN
DBMS_OUTPUT.PUT_LINE('Explicatie TVA pentru stornare avans!');
/* V_EXPLICATIA := 'STORNARE AVANS';
IF V_SUMA <> 0 THEN
V_SUMA_AVANS := pack_facturare.scrie_nota(1,
V_SUMA,
1, -- PRET CU TVA
pack_facturare.v_id_moneda_nationala, -- ID_VALUTA,
0, -- CURS,
0, -- ID_VENCHELT
NULL, -- ID_SECTIE
V_EXPLICATIA,
V_SCD,
'',
V_SCC,
'',
0,
0,
V_ID_CONTRACT,
pack_facturare.v_id_set,
1,
pack_facturare.v_proc_tva_max,
V_ID_JTVA_COLOANA);
END IF;*/
END;
-------------------------------------------------------------------
Procedure scrie_incasari(V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_LISTA_INCASARE IN VARCHAR2,
V_ID_CTR IN NUMBER) is
V_INCASAT ACT.SUMA%TYPE := 0;
V_TIP NUMBER(10);
V_ID_BANCASA ACT.ID_PARTD%TYPE;
V_ASCC ACT.ASCC%TYPE;
V_SCD ACT.SCD%TYPE;
V_ASCD ACT.ASCD%TYPE;
begin
pack_facturare.cserie_act_incasare := V_SERIE_ACT_INCASARE;
pack_facturare.nnumar_act_incasare := V_NUMAR_ACT_INCASARE;
pack_facturare.ntip_doc_incasare := pack_facturare.nTipIncasareChitanta;
pack_facturare.nsuma_incasare := 0;
-- daca se incaseaza factura in valuta : trebuie sa trimit si cursul, suma in valuta, id_valuta
-- V_LISTA_INCASARE : tip|valoare|id_bancasa|ascc|scd|ascd
-- daca ascc, scd, ascd sunt nule primesc 'xxxx' pentru ca getwordnume nu considera cuvant valoarea NULL si sare peste ea, decaland restul valorilor
FOR R_INCASARE IN (SELECT X as LINIE_INCASARE
FROM table(charc2collection(V_LISTA_INCASARE, ';'))) LOOP
V_TIP := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE,
1,
'|'));
V_INCASAT := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE,
2,
'|'));
V_ID_BANCASA := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE,
3,
'|'));
V_ASCC := getwordnum(R_INCASARE.LINIE_INCASARE, 4, '|');
-- 11.08.2010
V_SCD := getwordnum(R_INCASARE.LINIE_INCASARE, 5, '|');
V_ASCD := getwordnum(R_INCASARE.LINIE_INCASARE, 6, '|');
IF lower(V_ASCC) = 'xxxx' THEN
V_ASCC := NULL;
END IF;
IF lower(V_SCD) = 'xxxx' THEN
V_SCD := NULL;
END IF;
IF lower(V_ASCD) = 'xxxx' THEN
V_ASCD := NULL;
END IF;
pack_facturare.nsuma_incasare := pack_facturare.nsuma_incasare +
V_INCASAT;
IF V_INCASAT <> 0 THEN
pack_facturare.ntip_doc_incasare := V_TIP;
if V_TIP not in (pack_facturare.nTipIncasareChitanta,
pack_facturare.nTipIncasareCardBancar,
pack_facturare.nTipIncasareBonFiscal) then
pack_facturare.ntip_doc_incasare := pack_facturare.nTipIncasareBonFiscal;
end if;
pack_facturare.scrie_incasare2(V_TIP,
V_SERIE_ACT_INCASARE,
V_NUMAR_ACT_INCASARE,
V_ID_CTR,
V_ID_BANCASA,
V_INCASAT,
V_ASCC,
V_SCD,
V_ASCD);
END IF;
-- 11.08.2010 ^
END LOOP;
end scrie_incasari;
-------------------------------------------------------------------
PROCEDURE scrie_incasare2(V_TIP IN NUMBER,
V_SERIE_ACT_INCASARE IN VARCHAR2,
V_NUMAR_ACT_INCASARE IN NUMBER,
V_ID_CTR IN NUMBER,
V_ID_BANCASA IN NUMBER,
V_SUMA IN NUMBER,
V_ASCC IN ACT.ASCC%TYPE DEFAULT NULL,
V_PSCD IN ACT.SCD%TYPE DEFAULT NULL,
V_ASCD IN ACT.ASCD%TYPE DEFAULT NULL) IS
V_EXPLICATIA VARCHAR2(100);
V_SCD VARCHAR2(4);
V_FDOC VARCHAR2(20);
V_PAYMENTCODE ACT_TEMP.PAYMENTCODE%TYPE;
lcMesaj varchar2(1000);
lnD406 number;
BEGIN
lnD406 := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('D406'), '0'));
-- 11.08.2010
V_PAYMENTCODE := case lnD406
when 1 then
nSaftPaymentCodeNumerar
else
NULL
end;
V_SCD := V_PSCD;
CASE
WHEN V_TIP = nTipIncasareBonFiscal THEN
V_EXPLICATIA := 'INCASARE NUMERAR';
V_FDOC := 'ID_FDOC_BONFISCAL';
IF V_SCD IS NULL THEN
V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_BONFISCAL');
END IF;
IF V_SCD IS NULL THEN
V_SCD := '5311';
END IF;
WHEN V_TIP = nTipIncasareCardBancar THEN
V_EXPLICATIA := 'INCASARE CARD BANCAR';
V_FDOC := 'ID_FDOC_CARD';
IF V_SCD IS NULL THEN
V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_CARDBANCAR');
END IF;
IF V_SCD IS NULL THEN
V_SCD := '5125';
END IF;
V_PAYMENTCODE := case lnD406
when 1 then
nSaftPaymentCodeCard
else
NULL
end;
WHEN V_TIP = nTipIncasareTichete THEN
V_EXPLICATIA := 'INCASARE TICHETE';
V_FDOC := 'ID_FDOC_BONFISCAL';
IF V_SCD IS NULL THEN
V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_TICHETE');
END IF;
IF V_SCD IS NULL THEN
V_SCD := '5323';
END IF;
WHEN V_TIP = nTipIncasareChitanta THEN
V_EXPLICATIA := 'INCASARE NUMERAR';
V_FDOC := 'ID_FDOC_CHITANTA';
IF V_SCD IS NULL THEN
V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_CHITANTA');
END IF;
IF V_SCD IS NULL THEN
V_SCD := '5311';
END IF;
END CASE;
-- 11.08.2010 ^
-- select pack_sesiune.getoptiunefirma(user, 'ID_FDOC_BONFISCAL') into lcMesaj from dual;
/* pinfo('V_FDOC: ' || V_FDOC || ' VALOARE: ' || V_SUMA,'SCRIE_INCASARE2');*/
pack_facturare.nid_act := pack_facturare.nid_act + 1;
INSERT INTO ACT_TEMP
(ID_ACT,
SERIE_ACT,
NRACT,
DATAIREG,
DATAACT,
EXPLICATIA,
PERECHEC,
SCD,
ASCD,
SCC,
ASCC,
SUMA,
ID_CTR,
ID_LUCRARE,
ID_FDOC,
ID_PARTC,
ID_PARTD,
ID_SECTIE,
ID_VENCHELT,
ID_RESPONSABIL,
PAYMENTCODE)
SELECT pack_facturare.nid_act as ID_ACT,
V_SERIE_ACT_INCASARE as serie_act,
V_NUMAR_ACT_INCASARE as nract,
pack_facturare.ddata_ireg as dataireg,
pack_facturare.ddata_act as dataact,
V_EXPLICATIA as explicatia,
pack_facturare.nnumar_act as perechec,
V_SCD as scd,
V_ASCD as ascd, -- 11.08.2010
SCD as scc,
CASE
WHEN V_ASCC IS NULL THEN
max(ASCD)
ELSE
V_ASCC
END as ascc, -- 03.09.2009 -- 18.05.2010
V_SUMA as suma,
V_ID_CTR,
NVL(pack_facturare.nid_lucrare, 0) as id_lucrare,
TO_NUMBER(pack_sesiune.getoptiunefirma(user, V_FDOC)) as id_fdoc,
pack_facturare.nid_part as id_partc,
V_ID_BANCASA as id_partd,
MAX(ID_SECTIE) as id_sectie,
MAX(ID_VENCHELT) as id_venchelt,
NVL(pack_facturare.nid_responsabil, 0),
V_PAYMENTCODE
FROM ACT_TEMP
WHERE SCD = '4111'
GROUP BY SCD;
/* IF pack_facturare.ntva_incasare = 1 THEN
INSERT INTO ACT_TEMP(ID_ACT,
NRACT,
SERIE_ACT,
DATAIREG,
DATAACT,
ID_VALUTA,
ID_VENCHELT,
ID_LUCRARE,
ID_SECTIE,
ID_SET,
EXPLICATIA,
SCD,
ASCD,
SCC,
ASCC,
SUMA,
SUMA_VAL,
CURS,
PROC_TVA,
ID_FDOC,
NNIR,
ID_CTR,
PERECHEC,
ID_FACT,
ID_JTVA_COLOANA,
EXPLICATIA4)
SELECT pack_facturare.nid_act as ID_ACT,
V_NUMAR_ACT_INCASARE as nract,
V_SERIE_ACT_INCASARE as serie_act,
pack_facturare.ddata_ireg as dataireg,
pack_facturare.ddata_act as dataact,
ID_VALUTA, -- ??
ID_VENCHELT, -- ??
NVL(pack_facturare.nid_lucrare, 0) as ID_LUCRARE,
ID_SECTIE, -- ??
ID_SET, -- ??
V_EXPLICATIA as explicatia,
SCD, -- ??
ASCD, -- ??
SCC, -- ??
ASCC, -- ??
SUMA, -- ??
SUMA_VAL, -- ??
CURS, -- ??
PROC_TVA, -- ??
TO_NUMBER(pack_sesiune.getoptiunefirma(user, V_FDOC)) as ID_FDOC,
NNIR, -- ??
V_ID_CTR as ID_CTR,
pack_facturare.nnumar_act as perechec,
-5 AS ID_FACT,
ID_JTVA_COLOANA,
EXPLICATIA4
END IF;*/
END scrie_incasare2;
-------------------------------------------------------------------
PROCEDURE scrie_note_banca_compensari IS
V_ID_BANCA NOM_PARTENERI.ID_PART%TYPE := 0;
V_NUME_BANCA NOM_PARTENERI.DENUMIRE%TYPE := NULL;
V_ID_FDOC_COMP NOM_FDOC.ID_FDOC%TYPE := 0;
V_NUME_FDOC NOM_FDOC.FEL_DOCUMENT%TYPE := NULL;
BEGIN
pack_facturare.citeste_setari_document(0, V_ID_FDOC_COMP, V_NUME_FDOC);
pack_facturare.citeste_setari_partener(0, V_ID_BANCA, V_NUME_BANCA);
-- compensare aviz retur
INSERT INTO ACT_TEMP
(ID_ACT,
NRACT,
SERIE_ACT,
DATAIREG,
DATAACT,
ID_VALUTA,
ID_SET,
EXPLICATIA,
SCD,
SCC,
SUMA,
PROC_TVA,
ID_JTVA_COLOANA,
ID_FDOC,
ID_PARTD,
PERECHEC,
ID_PARTC)
SELECT 9998 as ID_ACT,
pack_facturare.nnumar_act AS NRACT,
pack_facturare.cserie_act,
DATAIREG,
DATAACT,
ID_VALUTA,
MIN(ID_SET) AS ID_SET,
'COMPENSARE AVIZ ' || pack_facturare.nnumar_act AS EXPLICATIA,
'5121' AS SCD,
'418' AS SCC,
SUM(CASE
WHEN SCD in ('667', '267', '2678', '709') THEN
(-1) * SUMA
ELSE
SUMA
END) AS SUMA,
PROC_TVA,
MAX(CASE
WHEN SCC = '4428' THEN
0
ELSE
ID_JTVA_COLOANA
END) AS ID_JTVA_COLOANA,
V_ID_FDOC_COMP AS ID_FDOC,
V_ID_BANCA AS ID_PARTD,
pack_facturare.nnumar_act AS PERECHEC,
pack_facturare.nid_part ID_PARTC
FROM ACT_TEMP
WHERE SCD = '418'
OR (SCD in ('667', '267', '2678', '709') AND SCC = '418')
GROUP BY DATAIREG, DATAACT, ID_VALUTA, PROC_TVA;
-- compensari avize - aici
INSERT INTO ACT_TEMP
(ID_ACT,
NRACT,
SERIE_ACT,
DATAIREG,
DATAACT,
ID_VALUTA,
ID_VENCHELT,
ID_SET,
EXPLICATIA,
SCD,
SCC,
SUMA,
PROC_TVA,
ID_JTVA_COLOANA,
ID_FDOC,
ID_PARTD,
PERECHEC,
ID_FACTC,
ID_PARTC)
SELECT 9999 as ID_ACT,
pack_facturare.nnumar_act AS NRACT,
pack_facturare.cserie_act,
to_date(to_char(pack_facturare.ddata_ireg, 'YYYYMMDD'),
'YYYYMMDD') AS DATAIREG,
to_date(to_char(pack_facturare.ddata_act, 'YYYYMMDD'),
'YYYYMMDD') AS DATAACT,
ID_VALUTA,
ID_VENCHELT,
pack_Facturare.nid_set AS ID_SET,
'COMPENSARE AVIZ ' || NRACT AS EXPLICATIA,
'5121' AS SCD,
'418' AS SCC,
debit + precdeb - credit - preccred AS SUMA,
PROC_TVA,
ID_JTVA_COLOANA,
V_ID_FDOC_COMP AS ID_FDOC,
V_ID_BANCA AS ID_PARTD,
NRACT AS PERECHEC,
ID_FACT AS ID_FACTC,
ID_PART AS ID_PARTC
FROM IREG_PARTENERI
WHERE CONT = '418'
AND COD IN
(SELECT COD
FROM VANZARI
WHERE ID_VANZARE IN
(SELECT X AS ID_VANZARE
FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid,
',') AS num_tab))))
AND AN = pack_facturare.nan
AND LUNA = pack_facturare.nluna
AND debit + precdeb - credit - preccred > 0;
END scrie_note_banca_compensari;
-------------------------------------------------------------------
/* PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_ID_VANZARE OUT NUMBER) is
lnIdFacturare NUMBER(10) := null;
lnListareDetaliata NUMBER(1) := 0;
begin
pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
lnIdFacturare,
lnListareDetaliata,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_ID_VANZARE);
end;*/
-------------------------------------------------------------------
PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_ID_VANZARE OUT NUMBER) IS
V_DATAORA DATE := SYSDATE;
V_FACTURAT VANZARI.FACTURAT%TYPE := 0;
lnDiscountTVA VANZARI.DISCOUNT_TVA%TYPE;
lnValoareAchizitie VANZARI.VALOARE_ACHIZITIE%TYPE;
lnSerieIncasat ACT.SERIE_ACT%TYPE;
lnNrIncasat ACT.NRACT%TYPE;
lnSumaIncasat ACT.SUMA%TYPE;
lnTipIncasat NUMBER(2);
lnTotalFaraTVA VANZARI.TOTAL_FARA_TVA%TYPE;
lnTotalTVA VANZARI.TOTAL_TVA%TYPE;
lnTotalCuTVA VANZARI.TOTAL_CU_TVA%TYPE;
lnIdGestiune VANZARI.ID_GESTIUNE%TYPE;
lnIdValuta VANZARI.Id_Valuta%TYPE;
lnCurs VANZARI.CURS%TYPE;
lnMultiplicator VANZARI.MULTIPLICATOR%TYPE;
lnIdCtr VANZARI.ID_CTR%TYPE;
lnValVal VANZARI.VALVAL%TYPE;
lnTVAVal VANZARI.TVAVAL%TYPE;
lnTotVal VANZARI.TOTVAL%TYPE;
lnPrecizieCalcul NUMBER(2) := pack_sesiune.getOptiuneFirma('PC');
lnPreciziePretV NUMBER(2) := pack_sesiune.getOptiuneFirma('PPRETV');
BEGIN
-- 1 - 20 facturi, 51 factura ACN
-- 21 - 42, 47 avize
-- -6 retur transfer din gestiune valorica (ROAGEST)
-- -7 retur aviz ( valoric ) ( ROAGEST )
-- -8 retur factura ( valorica ) ( ROAGEST )
-- -13 retur marfa din custodie ( valoric ) ( ROAFACTURARE )
IF pack_facturare.ntip between 1 and 20 OR
pack_facturare.ntip in (-8,
pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
-12,
48,
49,
51,
52) THEN
V_FACTURAT := 1;
ELSE
V_FACTURAT := 0;
END IF;
IF pack_facturare.ntip in (2,6,52) THEN
SELECT NVL(MAX(AFISARE_SCADENTA), 1)
INTO pack_facturare.nafisare_scadenta
FROM VCONTRACTE
WHERE ID_CTR IN (SELECT DISTINCT ID_CTR FROM VANZARI_DETALII_TEMP);
ELSE
pack_facturare.nafisare_scadenta := 1;
END IF;
-- 23,25,27,30 ROAFACTURARE aviz transfer catre subunitati
-- 41 = ROAFACTURARE retur transfer catre subunitati;
-- 6 = ROAGEST retur de la gestiune valorica
if pack_facturare.ntip in (23, 25, 27, 30, 41) then
lnIdGestiune := pack_facturare.v_date_gestiune.id_gestiune;
elsif pack_facturare.ntip = -6 then
lnIdGestiune := pack_facturare.nid_gestiune_sursa;
end if;
if (lnIdGestiune is null and pack_facturare.ntip in (41, -6)) then
select min(id_gestiune) into lnIdGestiune from vanzari_detalii_temp;
end if;
-- completez vanzari.id_ctr, ca sa nu mai caut in vanzari_detalii
SELECT MAX(ID_CTR) INTO lnIdCtr FROM VANZARI_DETALII_TEMP;
-- nu stiu de ce nu se completa id_valuta, curs, multiplicator mai jos
-- il selectez direct din vanzari_detalii_temp, in loc de vanzari_cursuri
SELECT max(ID_VALUTA), max(CURS), max(MULTIPLICATOR)
INTO lnIdValuta, lnCurs, lnMultiplicator
FROM (SELECT DISTINCT ID_VALUTA, CURS, MULTIPLICATOR
FROM VANZARI_DETALII_TEMP
WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala)
WHERE ROWNUM = 1;
INSERT INTO VANZARI
(id_util,
dataora,
id_part,
numar_act,
serie_act,
facturat,
data_facturat,
id_utilfact,
id_lucrare,
id_comanda,
tip,
id_gestiune,
cod,
id_delegat,
id_masina,
id_facturare,
listare_detaliata,
dataora_exp,
data_act,
discount,
discount_evidentiat,
id_agent,
text_aditional,
in_valuta,
id_sucursala,
id_sectie,
diftotftva,
diftottva,
afisare_scadenta,
coeficient_k,
id_ordl,
tva_incasare,
data_scad,
id_ctr,
tip_factura,
id_beneficiar,
tip_saft)
VALUES
(pack_facturare.nid_util,
V_DATAORA,
DECODE(pack_facturare.ntip,
23,
NULL,
25,
NULL,
41,
NULL,
-6,
NULL,
pack_facturare.nid_part),
pack_facturare.nnumar_act,
pack_facturare.cserie_act,
V_FACTURAT,
(CASE WHEN
pack_facturare.ntip < 20 OR
pack_facturare.ntip in (pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
-12,
48,
49,51,52) THEN V_DATAORA ELSE NULL END),
(CASE WHEN
pack_facturare.ntip < 20 OR
pack_facturare.ntip in (pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
-12,
48,
49,51,52) THEN pack_facturare.nid_util ELSE NULL END),
pack_facturare.nid_lucrare,
pack_facturare.nid_comanda,
pack_facturare.ntip,
lnIdGestiune,
pack_contafin.get_cod(),
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
pack_facturare.ddata_act,
V_DISCOUNT_FACTURA,
pack_facturare.ndiscount_evidentiat,
V_ID_AGENT,
REPLACE(V_TEXT_ADITIONAL, CHR(170), CHR(13) || CHR(10)),
pack_facturare.nin_valuta,
pack_facturare.nid_sucursala,
pack_facturare.nid_sectie_stoc,
pack_facturare.ndifftva,
pack_facturare.ndiftva,
pack_facturare.nafisare_scadenta,
pack_facturare.ncoeficient_k,
pack_facturare.nid_ordl,
pack_facturare.ntva_incasare,
pack_facturare.ddata_scadenta,
lnIdCtr,
pack_facturare.ntip_factura,
pack_facturare.nid_beneficiar,
pack_facturare.ntip_saft)
RETURNING ID_VANZARE INTO V_ID_VANZARE;
pack_facturare.scrie_cursuri(V_ID_VANZARE);
pack_facturare.scrie_seturi;
INSERT /*+ APPEND */
INTO VANZARI_DETALII
(ID_VANZARE,
ID_ARTICOL,
LOT,
SERIE,
ID_RATA,
ID_POL,
CANTITATE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
PRET,
PROC_TVAV,
ID_JTVA_COLOANA,
ID_JTVA_COLOANA_EX,
DISCOUNT_UNITAR,
ID_GESTIUNE,
ID_VALUTA,
CONT,
EXPLICATIE,
PRET_CU_TVA,
DIFERENTA,
CUSTODIE,
ID_VANZARE_SET,
ID_CTR,
TAXCODE)
SELECT V_ID_VANZARE as ID_VANZARE,
ID_ARTICOL,
LOT,
SERIE,
ID_RATA,
ID_POL,
CANTITATE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
PRET,
PROC_TVAV,
ID_JTVA_COLOANA,
ID_JTVA_COLOANA_EX,
DISCOUNT_UNITAR,
ID_GESTIUNE,
ID_VALUTA,
CONT,
EXPLICATIA,
PRET_CU_TVA,
DIFERENTA,
CUSTODIE,
DECODE(ID_VANZARE_SET, 0, NULL, ID_VANZARE_SET),
ID_CTR,
TAXCODE
FROM VANZARI_DETALII_TEMP;
-- Completare totaluri in vanzari din vanzari_detalii pentru a usura selectiile din fact_vfacturi
begin
select DISC_TVA_VAL AS DISCOUNT_TVA,
VALOARE_ACHIZITIE,
a.suma_fara_tva_ron - a.disc_fara_tva_ron as TOTAL_FARA_TVA,
a.suma_tva_ron - a.disc_tva_ron as TOTAL_TVA,
a.suma_fara_tva_ron - a.disc_fara_tva_ron + a.suma_tva_ron -
a.disc_tva_ron as TOTAL_CU_TVA,
a.suma_fara_tva_val - a.disc_fara_tva_val as VALVAL,
a.suma_tva_val - a.disc_tva_val as TVAVAL,
a.suma_fara_tva_val - a.disc_fara_tva_val + a.suma_tva_val -
a.disc_tva_val as TOTVAL,
id_valuta,
curs,
multiplicator,
pack_facturare.cserie_act_incasare as SERIE_INCASAT,
pack_facturare.nnumar_act_incasare as NR_INCASAT,
pack_facturare.nsuma_incasare AS SUMA_INCASAT,
pack_facturare.ntip_doc_incasare as TIP_INCASAT
INTO lnDiscountTVA,
lnValoareAchizitie,
lnTotalFaraTVA,
lnTotalTVA,
lnTotalCuTVA,
lnValVal,
lnTVAVal,
lnTotVal,
lnIdValuta,
lnCurs,
lnMultiplicator,
lnSerieIncasat,
lnNrIncasat,
lnSumaIncasat,
lnTipIncasat
FROM (select MAX(decode(pack_facturare.nin_valuta,
1,
ROUND(a1.curs * NVL(V_DISCOUNT_FACTURA, 0) /
a1.multiplicator,
lnPreciziePretV),
NVL(V_DISCOUNT_FACTURA, 0))) as DISC_FARA_TVA_RON,
NVL(V_DISCOUNT_FACTURA, 0) as DISC_FARA_TVA_VAL,
pack_facturare.nin_valuta AS IN_VALUTA,
MAX(ROUND(decode(pack_facturare.nin_valuta,
1,
ROUND(a1.curs *
NVL(V_DISCOUNT_FACTURA, 0) /
a1.multiplicator,
lnPreciziePretV),
NVL(V_DISCOUNT_FACTURA, 0)) *
(a1.proc_tvav - 1),
lnPreciziePretV)) as DISC_TVA_RON,
MAX(ROUND(NVL(V_DISCOUNT_FACTURA, 0) *
(a1.proc_tvav - 1),
lnPreciziePretV)) as DISC_TVA_VAL,
sum(pack_facturare.calculeaza_total_fara_tva_fact(a1.pret_ron,
0,
1,
NVL(a1.discount_unitar_ron,
0),
pack_facturare.ndiscount_evidentiat,
a1.cantitate,
a1.pret_cu_tva,
a1.proc_tvav)) AS SUMA_FARA_TVA_RON,
sum(pack_facturare.calculeaza_total_tva_fact(a1.pret_ron,
0,
1,
NVL(a1.discount_unitar_ron,
0),
pack_facturare.ndiscount_evidentiat,
a1.cantitate,
a1.pret_cu_tva,
a1.proc_tvav)) as SUMA_TVA_RON,
sum(pack_facturare.calculeaza_total_fara_tva_fact(a1.pret_val,
0,
1,
NVL(a1.discount_unitar_val,
0),
pack_facturare.ndiscount_evidentiat,
a1.cantitate,
a1.pret_cu_tva,
a1.proc_tvav)) AS SUMA_FARA_TVA_VAL,
sum(pack_facturare.calculeaza_total_tva_fact(a1.pret_val,
0,
1,
NVL(a1.discount_unitar_val,
0),
pack_facturare.ndiscount_evidentiat,
a1.cantitate,
a1.pret_cu_tva,
a1.proc_tvav)) as SUMA_TVA_VAL,
sum(round(a1.cantitate * a1.pret_achizitie,
lnPrecizieCalcul)) AS VALOARE_ACHIZITIE,
max(a1.id_valuta) as id_valuta,
max(a1.curs) as curs,
max(a1.multiplicator) as multiplicator
from (select vd.id_vanzare_set,
(case
when (pack_facturare.nin_valuta = 1 or
vd.id_valuta <>
pack_def.GetIdMonedaNationala()) then
ROUND(vc.curs * vd.pret / vc.multiplicator,
lnPreciziePretV)
else
vd.pret
end) as pret_ron,
vd.pret as pret_val,
vd.proc_tvav,
vd.cantitate,
vd.diferenta,
(case
when (pack_facturare.nin_valuta = 1 or
vd.id_valuta <>
pack_def.GetIdMonedaNationala()) then
ROUND(vc.curs * vd.discount_unitar /
vc.multiplicator,
lnPreciziePretV)
else
vd.discount_unitar
end) as discount_unitar_ron,
vd.discount_unitar as discount_unitar_val,
vd.id_valuta,
vd.pret_cu_tva,
vd.pret_achizitie,
vc.curs,
vc.multiplicator
from (select a.id_vanzare_set,
a.pret,
a.proc_tvav,
a.cantitate,
a.diferenta,
a.discount_unitar,
a.id_valuta,
a.pret_cu_tva,
a.pret_achizitie
from VANZARI_DETALII_TEMP a
where nvl(a.id_vanzare_set, 0) = 0
union all
select b.id_vanzare_set,
b.pret,
max(c.proc_tvav) as proc_tvav,
b.cantitate,
0 as diferenta,
b.discount_unitar,
decode(pack_facturare.nin_valuta,
0,
pack_def.GetIdMonedaNationala(),
c.id_valuta) as id_valuta,
b.pret_cu_tva,
sum(decode(b.cantitate,
0,
0,
c.pret_achizitie * c.cantitate /
b.cantitate)) as pret_achizitie
from vanzari_detalii_temp c
left join vanzari_seturi b
on b.id_vanzare_set = c.id_vanzare_set
where nvl(c.id_vanzare_set, 0) <> 0
and nvl(pack_facturare.nin_valuta, -1) > -1
group by b.id_vanzare_set,
b.pret,
b.cantitate,
b.discount_unitar,
b.pret_cu_tva,
decode(pack_facturare.nin_valuta,
0,
pack_def.GetIdMonedaNationala(),
c.id_valuta)) vd
left join vanzari_cursuri vc
on vc.id_vanzare = V_ID_VANZARE
and vd.id_valuta = vc.id_valuta) a1) a;
update vanzari
set discount_tva = lnDiscountTVA,
valoare_achizitie = lnValoareAchizitie,
total_fara_tva = lnTotalFaraTVA,
total_tva = lnTotalTVA,
total_cu_tva = lnTotalCuTVA,
valval = lnValVal,
tvaval = lnTVAVal,
totval = lnTotVal,
id_valuta = lnIdValuta,
curs = lnCurs,
multiplicator = lnMultiplicator,
serie_incasat = lnSerieIncasat,
nr_incasat = lnNrIncasat,
suma_incasat = lnSumaIncasat,
tip_incasat = lnTipIncasat
where id_vanzare = V_ID_VANZARE;
exception
when NO_DATA_FOUND then
null;
end;
END scrie_in_vanzari;
-------------------------------------------------------------------
PROCEDURE scrie_atasamente_factura(V_ID_VANZARE IN NUMBER,
V_NUME_FRX IN NUMBER,
V_WDOCUMENT IN BLOB,
V_ID_UTIL IN NUMBER) IS
V_TIP NUMBER(2) := 0;
V_FORMAT ATASAMENTE_VANZARI.FORMAT%TYPE;
begin
CASE
WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'FACTURA_VAL' THEN
V_TIP := 2;
WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'FACTURA%' THEN
V_TIP := 1;
WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'INVOICE%' THEN
V_TIP := 3;
WHEN UPPER(TRIM(V_NUME_FRX)) = 'RECAPITULATIE' THEN
V_TIP := 4;
WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'AVIZ%' THEN
V_TIP := 5;
END CASE;
IF UPPER(TRIM(V_NUME_FRX)) LIKE '%_A5' THEN
V_FORMAT := 'A5';
ELSE
V_FORMAT := 'A4';
END IF;
IF V_WDOCUMENT IS NOT NULL THEN
INSERT INTO ATASAMENTE_VANZARI
(ID_VANZARE, TIP, FORMAT, DOCUMENT)
VALUES
(V_ID_VANZARE, V_TIP, V_FORMAT, V_WDOCUMENT);
END IF;
end scrie_atasamente_factura;
-------------------------------------------------------------------
PROCEDURE scrie_seturi is
cursor crs is
SELECT * FROM VANZARI_SETURI_TEMP;
linie_crs crs%ROWTYPE;
V_ID VANZARI_SETURI.ID_VANZARE_SET%TYPE;
begin
open crs;
loop
fetch crs
into linie_crs;
exit when crs%NOTFOUND;
INSERT INTO VANZARI_SETURI
(DENUMIRE,
EXPLICATIE,
CANTITATE,
UM,
SERIE,
PRET,
DISCOUNT_UNITAR,
PRET_CU_TVA)
VALUES
(linie_crs.denumire,
linie_crs.explicatie,
linie_crs.cantitate,
linie_crs.um,
linie_crs.serie,
linie_crs.pret,
linie_crs.discount_unitar,
linie_crs.pret_cu_tva)
RETURNING ID_VANZARE_SET INTO V_ID;
UPDATE VANZARI_DETALII_TEMP
SET ID_VANZARE_SET = V_ID
WHERE ID_VANZARE_SET = linie_crs.id_vanzare_set;
end loop;
close crs;
end scrie_seturi;
-------------------------------------------------------------------
PROCEDURE scrie_seturi_proforma is
cursor crs is
SELECT * FROM VANZARI_SETURI_TEMP;
linie_crs crs%ROWTYPE;
V_ID NUMBER(10);
begin
open crs;
loop
fetch crs
into linie_crs;
exit when crs%NOTFOUND;
INSERT INTO PROFORME_SETURI
(DENUMIRE,
EXPLICATIE,
CANTITATE,
UM,
SERIE,
PRET,
DISCOUNT_UNITAR,
PRET_CU_TVA)
VALUES
(linie_crs.denumire,
linie_crs.explicatie,
linie_crs.cantitate,
linie_crs.um,
linie_crs.serie,
linie_crs.pret,
linie_crs.discount_unitar,
linie_crs.pret_cu_tva)
RETURNING ID_PROFORMA_SET INTO V_ID;
UPDATE VANZARI_DETALII_TEMP
SET ID_VANZARE_SET = V_ID
WHERE ID_VANZARE_SET = linie_crs.id_vanzare_set;
end loop;
close crs;
end scrie_seturi_proforma;
-------------------------------------------------------------------
PROCEDURE initializeaza_part_rez(V_ID_PART IN NUMBER) IS
BEGIN
pack_facturare.nid_part_rez := V_ID_PART;
END initializeaza_part_rez;
-------------------------------------------------------------------
PROCEDURE cumuleaza_note_act IS
lnInregSumaNot0 NUMBER(10) := 0;
BEGIN
-- era apelata la sfarsitul procedurii
pack_contafin.completeaza_parteneri_gestiuni();
--IF pack_facturare.ntip = 27 THEN
pack_contafin.completeaza_analitice();
--END IF;
UPDATE ACT_TEMP
SET STERS = 1, TVA_INCASARE = pack_facturare.ntva_incasare;
-- verific daca am vreo inregistrare cu suma <> 0
-- sterg inregistrarile cu suma 0 doar daca am inregistrari cu suma <> 0
-- altfel nu se inregistreaza nimic in Reg. Jurnal ACT, doar in RUL si VANZARI/VANZARI_DETALII
SELECT COUNT(*) INTO lnInregSumaNot0 from ACT_TEMP where SUMA <> 0;
if lnInregSumaNot0 > 0 then
DELETE FROM ACT_TEMP
WHERE SUMA = 0
AND NOT ((SCD LIKE '4%' OR SCC LIKE '4%') AND SCC NOT LIKE '4427')
AND ID_SET <> 32003;
end if;
pack_facturare.cumuleaza_note_act_temp();
if pack_facturare.ntip <> pack_facturare.nTipNotaPlata then
pack_facturare.verifica_total_document();
end if;
pack_contafin.sterge_analitice_gresite();
if pack_facturare.ntip in
(pack_facturare.nTipFacturaRestaurant, pack_facturare.nTipNotaPlata) then
pack_contafin.completeaza_analitice_rul();
pack_contafin.sterge_analitice_gresite_rul();
end if;
pack_facturare.adauga_note_tva_incasare();
END cumuleaza_note_act;
-----------------------------------------------------------
PROCEDURE cumuleaza_note_act_temp IS
lcMesaj xmltype;
BEGIN
/* SELECT DBMS_XMLGEN.GETXMLTYPE('SELECT * FROM ACT_TEMP') INTO lcMesaj FROM DUAL;
PINFO(lcMesaj.getClobVal(), 'cumuleaza_note_act_temp');*/
UPDATE ACT_TEMP SET STERS = 1, ID_ACT = ROWNUM;
INSERT INTO ACT_TEMP
(ID_ACT,
LUNA,
AN,
COD,
DATAIREG,
NRACT,
SERIE_ACT,
DATAACT,
EXPLICATIA,
SCD,
ASCD,
SCC,
ASCC,
SUMA,
SUMA_VAL,
CURS,
PERECHED,
PERECHEC,
DATASCAD,
NEIMPOZAB,
NNIR,
ID_RESPONSABIL,
ID_VENCHELT,
ID_SECTIE,
ID_SET,
ID_FACT,
ID_PARTD,
ID_PARTC,
ID_SUCURSALA,
ID_FDOC,
EXPLICATIA4,
EXPLICATIA5,
ID_LUCRARE,
ID_GESTIN,
ID_GESTOUT,
ID_VALUTA,
PROC_TVA,
ID_FACTD,
ID_FACTC,
ID_CTR,
ID_JTVA_COLOANA,
TVA_INCASARE,
TAXCODE,
PAYMENTCODE)
SELECT ROW_NUMBER() OVER(ORDER BY A.ID_SET, A.ID_ACT) AS ID_ACT,
A.LUNA,
A.AN,
A.COD,
A.DATAIREG,
A.NRACT,
A.SERIE_ACT,
A.DATAACT,
A.EXPLICATIA,
A.SCD,
A.ASCD,
A.SCC,
A.ASCC,
(CASE
WHEN pack_facturare.nin_valuta = 1 AND
A.ID_VALUTA NOT IN
(0, pack_facturare.nid_moneda_nationala) THEN
ROUND(A.SUMA_VAL * A.CURS, pack_sesiune.nzecimale_sumav)
ELSE
A.SUMA
END) AS SUMA,
A.SUMA_VAL,
A.CURS,
A.PERECHED,
A.PERECHEC,
A.DATASCAD,
A.NEIMPOZAB,
A.NNIR,
A.ID_RESPONSABIL,
A.ID_VENCHELT,
A.ID_SECTIE,
pack_facturare.nid_set AS ID_SET,
A.ID_FACT,
A.ID_PARTD,
A.ID_PARTC,
A.ID_SUCURSALA,
A.ID_FDOC,
A.EXPLICATIA4,
A.EXPLICATIA5,
A.ID_LUCRARE,
A.ID_GESTIN,
A.ID_GESTOUT,
A.ID_VALUTA,
A.PROC_TVA,
A.ID_FACTD,
A.ID_FACTC,
A.ID_CTR,
A.ID_JTVA_COLOANA,
pack_facturare.ntva_incasare as TVA_INCASARE,
A.TAXCODE,
A.PAYMENTCODE
FROM (SELECT MIN(A11.ID_ACT) AS ID_ACT,
A11.ID_SET,
A11.LUNA,
A11.AN,
A11.COD,
A11.DATAIREG,
A11.NRACT,
A11.SERIE_ACT,
A11.DATAACT,
A11.EXPLICATIA,
A11.SCD,
A11.ASCD,
A11.SCC,
A11.ASCC,
SUM(A11.SUMA) AS SUMA,
SUM(A11.SUMA_VAL) AS SUMA_VAL,
A11.CURS,
A11.PERECHED,
A11.PERECHEC,
A11.DATASCAD,
A11.NEIMPOZAB,
A11.NNIR,
DECODE(pack_facturare.ntip,
2,
NVL(A12.ID_RESPONSABIL, A11.ID_RESPONSABIL),
A11.ID_RESPONSABIL) AS ID_RESPONSABIL,
A11.ID_VENCHELT,
A11.ID_SECTIE,
A11.ID_FACT,
A11.ID_PARTD,
A11.ID_PARTC,
A11.ID_SUCURSALA,
A11.ID_FDOC,
A11.EXPLICATIA4,
A11.EXPLICATIA5,
A11.ID_LUCRARE,
A11.ID_GESTIN,
A11.ID_GESTOUT,
A11.ID_VALUTA,
(CASE
WHEN A11.ID_JTVA_COLOANA IS NOT NULL THEN
A11.PROC_TVA
ELSE
0
END) AS PROC_TVA,
A11.ID_FACTD,
A11.ID_FACTC,
A11.ID_CTR,
A11.ID_JTVA_COLOANA,
A11.TAXCODE,
A11.PAYMENTCODE
FROM ACT_TEMP A11
LEFT JOIN CONTRACTE A12
ON A11.ID_CTR = A12.ID_CTR
GROUP BY A11.LUNA,
A11.AN,
A11.COD,
A11.DATAIREG,
A11.SERIE_ACT,
A11.NRACT,
A11.DATAACT,
A11.EXPLICATIA,
A11.SCD,
A11.ASCD,
A11.SCC,
A11.ASCC,
A11.PERECHED,
A11.PERECHEC,
A11.DATASCAD,
A11.NEIMPOZAB,
A11.NNIR,
A11.ID_SET,
DECODE(pack_facturare.ntip,
2,
NVL(A12.ID_RESPONSABIL, A11.ID_RESPONSABIL),
A11.ID_RESPONSABIL),
A11.ID_VENCHELT,
A11.ID_SECTIE,
A11.ID_SET,
A11.ID_FACT,
A11.ID_PARTD,
A11.ID_PARTC,
A11.ID_SUCURSALA,
A11.ID_FDOC,
A11.EXPLICATIA4,
A11.EXPLICATIA5,
A11.ID_LUCRARE,
A11.ID_GESTIN,
A11.ID_GESTOUT,
A11.ID_VALUTA,
A11.CURS,
A11.PROC_TVA,
A11.ID_FACTD,
A11.ID_FACTC,
A11.ID_CTR,
A11.ID_JTVA_COLOANA,
A11.TAXCODE,
A11.PAYMENTCODE) A;
/* SELECT DBMS_XMLGEN.GETXMLTYPE('SELECT * FROM ACT_TEMP') INTO lcMesaj FROM DUAL;
PINFO(lcMesaj.getClobVal(), 'cumuleaza_note_act_temp');
*/
DELETE FROM ACT_TEMP WHERE STERS = 1;
END cumuleaza_note_act_temp;
-------------------------------------------------------------------
PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS
BEGIN
OPEN V_CURSOR_VERIFICARE FOR
SELECT A.ID_ACT,
A.LUNA,
A.AN,
A.DATAIREG as datairegt,
A.NRACT,
A.SERIE_ACT,
A.DATAACT as dataactt,
A.suma,
A.EXPLICATIA,
A.SCD,
A.ASCD,
A.ASCD as ascd1,
A.SCC,
A.ASCC,
A.ASCC as ascc1,
A.PERECHED,
A.PERECHEC,
A.SUMA_VAL,
A.EXPLICATIA4,
A.EXPLICATIA5,
A.CURS,
A.DATASCAD as datascadt,
A.NEIMPOZAB,
A.NNIR,
A.ID_UTIL,
UTIL2.UTILIZATOR AS UTIL,
A.DATAORA,
A.ID_UTILS,
UTIL1.UTILIZATOR AS UTILS,
A.DATAORAS,
A.ID_RESPONSABIL,
RESP.DENUMIRE AS NRESP,
A.ID_VENCHELT,
VENCHELT.EXPLICATIE AS DST_CHLT,
A.ID_LUCRARE,
LUCR.NRORD,
A.ID_CTR,
CTR.CONTRACT,
A.ID_SECTIE,
SECTII.SECTIE,
A.PROC_TVA,
A.ID_SET,
A.ID_FACT,
A.ID_FACTD,
A.ID_FACTC,
A.ID_PARTD,
A.ID_PARTD AS ID_PARTD1,
PART1.NUME AS PARTD,
A.ID_PARTC,
A.ID_PARTC AS ID_PARTC1,
PART.NUME AS PARTC,
A.ID_SUCURSALA,
S.FIRMA AS SUCURSALA,
A.ID_FDOC,
FDOC.FEL_DOCUMENT AS FDOC,
A.ID_GESTIN,
A.ID_JTVA_COLOANA,
jtva.denumire as explicatie_tva,
G1.NUME_GESTIUNE AS GESTIN,
A.ID_GESTOUT,
G2.NUME_GESTIUNE AS GESTOUT,
A.ID_VALUTA,
V.NUME_VAL,
0000000000 as id_pol,
lpad(' ', 30, ' ') as nume_lista_preturi,
A.TVA_INCASARE,
a.taxcode,
st.descriere as saft_descriere,
st.procent_taxa as saft_procent,
st.taxname,
a.paymentcode,
sp.methodcode,
sp.name as paymentmechanism,
sp.methodname as paymentmethod,
sp.paymentname
FROM ACT_TEMP A
LEFT JOIN NOM_FDOC FDOC
ON A.ID_FDOC = FDOC.ID_FDOC
LEFT JOIN SYN_NOM_FIRME S
ON A.ID_SUCURSALA = S.ID_FIRMA
LEFT JOIN NOM_PARTENERI PART
ON A.ID_PARTC = PART.ID_PART
LEFT JOIN NOM_PARTENERI PART1
ON A.ID_PARTD = PART1.ID_PART
LEFT JOIN VNOM_VENCHEL VENCHELT
ON A.ID_VENCHELT = VENCHELT.ID_VENCHELT
LEFT JOIN NOM_PARTENERI RESP
ON A.ID_RESPONSABIL = RESP.ID_PART
LEFT JOIN SYN_UTILIZATORI UTIL1
ON A.ID_UTILS = UTIL1.ID_UTIL
LEFT JOIN SYN_UTILIZATORI UTIL2
ON A.ID_UTIL = UTIL2.ID_UTIL
LEFT JOIN VNOM_LUCRARI LUCR
ON A.ID_LUCRARE = LUCR.ID_LUCRARE
LEFT JOIN VCONTRACTE CTR
ON A.ID_CTR = CTR.ID_CTR
LEFT JOIN NOM_GESTIUNI G1
ON A.ID_GESTIN = G1.ID_GESTIUNE
LEFT JOIN NOM_GESTIUNI G2
ON A.ID_GESTOUT = G2.ID_GESTIUNE
LEFT JOIN NOM_VALUTE V
ON A.ID_VALUTA = V.ID_VALUTA
LEFT JOIN NOM_SECTII SECTII
ON A.ID_SECTIE = SECTII.ID_SECTIE
LEFT JOIN jtva_coloane jtva
ON a.id_jtva_coloana = jtva.id_jtva_coloana
left join vsaft_taxtable st
on a.taxcode = st.taxcode
left join vsaft_mecanisme_plati sp
on a.paymentcode = sp.mechanismcode
WHERE A.STERS = 0;
END cursor_verificare;
-------------------------------------------------------------------
-- MODIFICA NUMAR, DATA, DATA_SCAD si in restul tabelelor
-------------------------------------------------------------------
PROCEDURE modifica_date_factura(V_ID_VANZARE IN NUMBER,
V_ID_RUTA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_AGENT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_FACTURARE IN VANZARI.ID_FACTURARE%TYPE,
V_LISTARE_DETALIATA IN VANZARI.LISTARE_DETALIATA%TYPE,
V_TEXT_ADITIONAL IN VANZARI.TEXT_ADITIONAL%TYPE,
V_TIP_SAFT IN VANZARI.TIP_SAFT%TYPE DEFAULT NULL,
V_EFACTURA IN VANZARI.EFACTURA%TYPE DEFAULT NULL,
V_DATA_ACT IN VANZARI.DATA_ACT%TYPE DEFAULT NULL,
V_DATA_SCAD IN VANZARI.DATA_SCAD%TYPE DEFAULT NULL,
V_NUMAR_ACT IN VANZARI.NUMAR_ACT%TYPE DEFAULT NULL,
V_SERIE_ACT IN VANZARI.SERIE_ACT%TYPE DEFAULT NULL) IS
lnIdFact VANZARI.ID_FACT%TYPE;
lnNrAct VANZARI.NUMAR_ACT%TYPE;
ldDataAct VANZARI.DATA_ACT%TYPE;
ldDataScad VANZARI.DATA_SCAD%TYPE;
lcSerieAct VANZARI.SERIE_ACT%TYPE;
BEGIN
UPDATE VANZARI
SET ID_RUTA = V_ID_RUTA,
ID_DELEGAT = V_ID_DELEGAT,
ID_AGENT = V_ID_AGENT,
ID_MASINA = V_ID_MASINA,
DATAORA_EXP = V_DATAORA_EXP,
ID_FACTURARE = V_ID_FACTURARE,
LISTARE_DETALIATA = NVL(V_LISTARE_DETALIATA, 0),
TEXT_ADITIONAL = V_TEXT_ADITIONAL,
TIP_SAFT = V_TIP_SAFT,
EFACTURA = V_EFACTURA
WHERE ID_VANZARE = V_ID_VANZARE;
select id_fact, numar_act, data_act, data_scad, serie_act into lnIdFact, lnNrAct, ldDataAct, ldDataScad, lcSerieAct from vanzari where ID_VANZARE = V_ID_VANZARE;
IF V_SERIE_ACT IS NOT NULL AND V_SERIE_ACT <> NVL(lcSerieAct, '') THEN
UPDATE VANZARI SET SERIE_ACT = V_SERIE_ACT WHERE ID_VANZARE = V_ID_VANZARE;
UPDATE DOCUMENTE SET SERIE_ACT = V_SERIE_ACT WHERE ID_DOC = lnIdFact;
UPDATE ACT SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact;
UPDATE IREG_PARTENERI SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact;
UPDATE JV2007 SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact;
UPDATE RUL SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact;
END IF;
IF V_NUMAR_ACT IS NOT NULL AND V_NUMAR_ACT <> NVL(lnNrAct, 0) THEN
UPDATE VANZARI SET NUMAR_ACT = V_NUMAR_ACT WHERE ID_VANZARE = V_ID_VANZARE;
UPDATE DOCUMENTE SET NRACT = V_NUMAR_ACT WHERE ID_DOC = lnIdFact;
UPDATE ACT SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact;
UPDATE IREG_PARTENERI SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact;
UPDATE JV2007 SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact;
UPDATE RUL SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact;
END IF;
IF V_DATA_ACT IS NOT NULL and V_DATA_ACT <> NVL(ldDataAct, SYSDATE) THEN
UPDATE VANZARI SET DATA_ACT = V_DATA_ACT WHERE ID_VANZARE = V_ID_VANZARE;
UPDATE DOCUMENTE SET DATAACT = V_DATA_ACT WHERE ID_DOC = lnIdFact;
UPDATE ACT SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact;
UPDATE IREG_PARTENERI SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact;
UPDATE JV2007 SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact;
UPDATE RUL SET DATAACT = V_DATA_ACT, DATAOUT = V_DATA_ACT WHERE ID_FACT = lnIdFact;
END IF;
IF V_DATA_SCAD IS NOT NULL and V_DATA_SCAD <> NVL(ldDataScad, sysdate) THEN
UPDATE VANZARI SET DATA_SCAD = V_DATA_SCAD WHERE ID_VANZARE = V_ID_VANZARE;
UPDATE ACT SET DATASCAD = V_DATA_SCAD WHERE ID_FACT = lnIdFact;
UPDATE IREG_PARTENERI SET DATASCAD = V_DATA_SCAD WHERE ID_FACT = lnIdFact;
END IF;
END modifica_date_factura;
-------------------------------------------------------------------
PROCEDURE modifica_explicatie_articol(V_ID_VANZARE_DET IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL) is
BEGIN
UPDATE VANZARI_DETALII
SET EXPLICATIE = V_EXPLICATIE, TAXCODE = V_TAXCODE
WHERE ID_VANZARE_DET = V_ID_VANZARE_DET;
END modifica_explicatie_articol;
-------------------------------------------------------------------
PROCEDURE initializeaza_moneda_nationala IS
BEGIN
pack_facturare.nid_moneda_nationala := pack_def.GetIdMonedaNationala();
END initializeaza_moneda_nationala;
-------------------------------------------------------------------
PROCEDURE scrie_cursuri_proforma(V_ID_PROFORMA IN NUMBER) IS
BEGIN
INSERT INTO PROFORME_CURSURI
(ID_PROFORMA, ID_VALUTA, CURS, MULTIPLICATOR)
SELECT DISTINCT V_ID_PROFORMA AS ID_PROFORMA,
ID_VALUTA,
CURS,
MULTIPLICATOR
FROM VANZARI_DETALII_TEMP
WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala;
END scrie_cursuri_proforma;
-------------------------------------------------------------------
PROCEDURE scrie_cursuri(V_ID_VANZARE IN NUMBER) IS
BEGIN
INSERT INTO VANZARI_CURSURI
(ID_VANZARE, ID_VALUTA, CURS, MULTIPLICATOR)
SELECT DISTINCT V_ID_VANZARE AS ID_VANZARE,
ID_VALUTA,
CURS,
MULTIPLICATOR
FROM VANZARI_DETALII_TEMP
WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala;
END scrie_cursuri;
-------------------------------------------------------------------
PROCEDURE scrie_rate_factura(V_DATAORA IN DATE) IS
BEGIN
INSERT INTO CTR_RATE_FACTURI
(ID_RATA,
ID_FACT,
VALVALUTA,
VALVALUTACTVA,
PROCTVA,
ID_VALUTA,
CURS,
ID_UTIL,
DATAORA)
SELECT A.ID_RATA,
B.ID_FACT,
pack_facturare.calculeaza_total_fara_tva(A.PRET,
A.DIFERENTA,
1,
A.DISCOUNT_UNITAR,
pack_facturare.ndiscount_evidentiat,
A.CANTITATE,
A.PRET_CU_TVA,
A.PROC_TVAV,
pack_sesiune.nzecimale_pretvval,
pack_sesiune.nzecimale_sumaval) as VALVALUTA,
pack_facturare.calculeaza_total_cu_tva(A.PRET,
A.DIFERENTA,
1,
A.DISCOUNT_UNITAR,
pack_facturare.ndiscount_evidentiat,
A.CANTITATE,
A.PRET_CU_TVA,
A.PROC_TVAV,
pack_sesiune.nzecimale_pretvval,
pack_sesiune.nzecimale_sumaval) as VALVALUTACTVA,
(A.PROC_TVAV - 1) * 100 AS PROC_TVAV,
A.ID_VALUTA,
A.CURS / NVL(A.MULTIPLICATOR, 1) AS CURS,
pack_facturare.nid_util as ID_UTIL,
V_DATAORA as DATAORA
FROM VANZARI_DETALII_TEMP A
LEFT JOIN (SELECT DISTINCT ID_FACT, ID_CTR
FROM ACT_TEMP
WHERE STERS = 0
AND SCD LIKE '4%') B
ON A.ID_CTR = B.ID_CTR
WHERE A.ID_RATA IS NOT NULL;
END scrie_rate_factura;
-------------------------------------------------------------------
FUNCTION calculeaza_k RETURN NUMBER IS
BEGIN
RETURN 0;
END calculeaza_k;
-------------------------------------------------------------------
PROCEDURE calculeaza_pret(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,
V_PRET_FARA_TVA OUT NUMBER,
V_PRET_TVA OUT NUMBER,
V_PRET_CU_TVA OUT NUMBER) IS
BEGIN
V_PRET_FARA_TVA := pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip);
V_PRET_TVA := pack_sesiune.calculeaza_pret_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip);
V_PRET_CU_TVA := pack_sesiune.calculeaza_pret_cu_tva(v_pret_unitar,
v_curs,
v_id_valuta,
v_proc_tva,
v_pret_are_tva,
v_tip);
END calculeaza_pret;
-------------------------------------------------------------------
/* 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
BEGIN
return pack_sesiune.calculeaza_pret_fara_tva(V_PRET_UNITAR,
V_CURS,
V_ID_VALUTA,
V_PROC_TVA,
V_PRET_ARE_TVA, V_TIP);
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;
BEGIN
return pack_sesiune.calculeaza_pret_TVA(V_PRET_UNITAR,
V_CURS,
V_ID_VALUTA,
V_PROC_TVA,
V_PRET_ARE_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) RETURN NUMBER IS
BEGIN
return pack_sesiune.calculeaza_pret_cu_tva(V_PRET_UNITAR,
V_CURS,
V_ID_VALUTA,
V_PROC_TVA,
V_PRET_ARE_TVA);
END calculeaza_pret_cu_tva;*/
-------------------------------------------------------------------
PROCEDURE calculeaza_sume(V_PRET_UNITAR IN NUMBER,
V_DISCOUNT_UNITAR IN NUMBER,
V_ZECIMALE_PRET IN NUMBER,
V_ZECIMALE_SUMA IN NUMBER,
V_CANTITATE IN NUMBER,
V_CURS IN NUMBER,
V_ID_VALUTA IN NUMBER,
V_PROC_TVA IN NUMBER,
V_PRET_ARE_TVA IN NUMBER,
V_SUMA_FARA_TVA OUT NUMBER,
V_SUMA_TVA OUT NUMBER,
V_SUMA_CU_TVA OUT NUMBER) IS
V_CURS_NOU NUMBER;
BEGIN
IF NVL(V_CURS, 0) = 0 THEN
V_CURS_NOU := 1;
ELSE
V_CURS_NOU := V_CURS;
END IF;
V_SUMA_FARA_TVA := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRET_UNITAR,
V_AJUSTARE => 0,
V_CURS => V_CURS_NOU,
V_DISCOUNT_UNITAR => (CASE
pack_facturare.ndiscount_evidentiat
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
0
END),
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVA,
V_ZECIMALE_PRET => V_ZECIMALE_PRET,
V_ZECIMALE_SUMA => V_ZECIMALE_SUMA);
V_SUMA_TVA := pack_facturare.calculeaza_total_tva(V_PRET => V_PRET_UNITAR,
V_AJUSTARE => 0,
V_CURS => V_CURS_NOU,
V_DISCOUNT_UNITAR => (CASE
pack_facturare.ndiscount_evidentiat
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
0
END),
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVA,
V_ZECIMALE_PRET => V_ZECIMALE_PRET,
V_ZECIMALE_SUMA => V_ZECIMALE_SUMA);
V_SUMA_CU_TVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => V_PRET_UNITAR,
V_AJUSTARE => 0,
V_CURS => V_CURS_NOU,
V_DISCOUNT_UNITAR => (CASE
pack_facturare.ndiscount_evidentiat
WHEN 0 THEN
V_DISCOUNT_UNITAR
ELSE
0
END),
V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_ARE_TVA,
V_PROC_TVAV => V_PROC_TVA,
V_ZECIMALE_PRET => V_ZECIMALE_PRET,
V_ZECIMALE_SUMA => V_ZECIMALE_SUMA);
END calculeaza_sume;
-------------------------------------------------------------------
/* PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER) IS
lnIdFacturare NUMBER(10) := null;
lnListareDetaliata NUMBER(1) := 0;
begin
pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
lnIdFacturare,
lnListareDetaliata,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_PARAMETRU_ADITIONAL);
end;
*/
-------------------------------------------------------------------
PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_PARAMETRU_ADITIONAL IN NUMBER) IS
V_DATAORA DATE := SYSDATE;
lnIdFact vanzari.id_fact%type;
lnIdFact2 vanzari.id_fact%type;
BEGIN
pack_facturare.nid_vanzare := NULL;
pack_facturare.initializeaza_scriere_actrul(V_DATAORA);
pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
pack_facturare.nid_vanzare);
pack_facturare.finalizeaza_scriere_actrul();
-- completez id_fact dupa generarea id_fact la scrierea in contabilitate
-- daca este factura cu incasare, pack_contafin.id_fact este id_fact-ul documentului de incasare, nu id_fact-ul facturii
lnIdFact := pack_contafin.get_idFact();
select min(id_fact)
into lnIdFact2
from act
where cod in (select cod
from act
where id_fact = lnIdFact
and sters = 0)
and scd not like '5%';
if lnIdFact <> lnIdFact2 then
lnIdFact := lnIdFact2;
end if;
update vanzari
set id_fact = lnIdFact
where id_vanzare = pack_facturare.nid_vanzare;
CASE
WHEN V_PARAMETRU_ADITIONAL = 1 AND
pack_facturare.ntip IN (3, 21, 25, 28, 42, 47) THEN
-- daca e comanda, atunci V_PARAMETRU_ADITIONAL este V_INCHIDERE_COMANDA
pack_facturare.inchide_comanda();
WHEN pack_facturare.ntip = 4 THEN
-- daca e facturare din aviz, atunci V_PARAMETRU_ADITIONAL este V_VERIFICARE_FACTURAT
pack_facturare.scrie_cantitati_vanzari_avize;
pack_facturare.scrie_corespondente_vanzari(1);
pack_facturare.marcheaza_facturat(V_PARAMETRU_ADITIONAL);
WHEN pack_facturare.ntip = 24 THEN
-- daca e aviz de retur, atunci V_PARAMETRU_ADITIONAL este V_VERIFICARE_FACTURAT ( = 0 )
pack_facturare.scrie_corespondente_vanzari(2);
pack_facturare.marcheaza_facturat(V_PARAMETRU_ADITIONAL);
WHEN pack_facturare.ntip in ( 2, 6, 52) THEN
pack_facturare.scrie_rate_factura(V_DATAORA);
WHEN pack_facturare.ntip in (8, 9) THEN
-- daca e factura de retur
pack_facturare.scrie_corespondente_vanzari(3);
ELSE
dbms_output.put_line('---');
END CASE;
IF pack_facturare.nid_set =
25000 + pack_facturare.nTipFacturaRestaurant - 1 +
pack_facturare.nscadere_stoc * 10 AND
to_number(pack_sesiune.getoptiunefirma('DESCARCAREGESTZ')) = 1 THEN
pack_grestaurant.descarcare_automata_zi(pack_facturare.ddata_act,
pack_facturare.nid_vanzare,
NULL,
NULL,
pack_facturare.nid_sucursala,
pack_facturare.nid_util);
END IF;
END finalizeaza_factura;
-------------------------------------------------------------------
PROCEDURE finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER) IS
V_DATAORA DATE := SYSDATE;
V_ID_DELEGAT VANZARI.ID_DELEGAT%TYPE;
V_ID_MASINA VANZARI.ID_MASINA%TYPE;
V_ID_AGENT VANZARI.ID_AGENT%TYPE;
V_ID_RUTA VANZARI.ID_RUTA%TYPE;
V_COD VANZARI.COD%TYPE;
i NUMBER(10);
V_NUME_GESTIUNE NOM_GESTIUNI.NUME_GESTIUNE%TYPE;
TYPE tab_vanzari_type IS TABLE OF vanzari_temp%ROWTYPE;
tab_vanz tab_vanzari_type;
lnDiscountTVA VANZARI.DISCOUNT_TVA%TYPE;
lnValoareAchizitie VANZARI.VALOARE_ACHIZITIE%TYPE;
lnSerieIncasat ACT.SERIE_ACT%TYPE;
lnNrIncasat ACT.NRACT%TYPE;
lnSumaIncasat ACT.SUMA%TYPE;
lnTipIncasat NUMBER(2);
lnTotalFaraTVA VANZARI.TOTAL_FARA_TVA%TYPE;
lnTotalTVA VANZARI.TOTAL_TVA%TYPE;
lnTotalCuTVA VANZARI.TOTAL_CU_TVA%TYPE;
lnIdGestiune VANZARI.ID_GESTIUNE%TYPE;
lnIdValuta VANZARI.Id_Valuta%TYPE;
lnCurs VANZARI.CURS%TYPE;
lnMultiplicator VANZARI.MULTIPLICATOR%TYPE;
BEGIN
pack_facturare.nid_vanzare := NULL;
-- nu se mai genereaza codul la initializare, trebuie sa-l generez la fiecare document
-- pana acum aveam conditia sa-l genereze doar de la i > 1
pack_facturare.initializeaza_scriere_actrul(V_DATAORA, 0);
SELECT * BULK COLLECT INTO tab_vanz FROM VANZARI_TEMP;
FOR I IN tab_vanz.first .. tab_vanz.last LOOP
V_COD := pack_contafin.GENEREAZA_COD(user);
BEGIN
SELECT ID_DELEGAT, ID_MASINA, ID_AGENT, ID_RUTA
INTO V_ID_DELEGAT, V_ID_MASINA, V_ID_AGENT, V_ID_RUTA
FROM FACT_NOM_RUTE
WHERE ID_RUTA IN (SELECT ID_RUTA
FROM FACT_NOM_RUTEGEST
WHERE ID_GESTIUNE = tab_vanz(i).id_gestiune_dest
AND STERS = 0)
AND STERS = 0;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
SELECT NUME_GESTIUNE
INTO V_NUME_GESTIUNE
FROM NOM_GESTIUNI
WHERE ID_GESTIUNE = tab_vanz(i).id_gestiune_dest;
RAISE_APPLICATION_ERROR(-20000,
'Pentru gestiunea ' || V_NUME_GESTIUNE ||
' aveti configurate mai multe rute! (FACT-023)');
WHEN NO_DATA_FOUND THEN
V_ID_DELEGAT := NULL;
V_ID_MASINA := NULL;
V_ID_AGENT := NULL;
V_ID_RUTA := NULL;
END;
INSERT INTO VANZARI
(id_util,
dataora,
numar_act,
serie_act,
id_lucrare,
id_comanda,
tip,
id_gestiune,
cod,
data_act,
discount,
discount_evidentiat,
id_delegat,
id_masina,
id_agent,
id_ruta,
id_sucursala,
id_sectie)
VALUES
(pack_facturare.nid_util,
V_DATAORA,
tab_vanz (i).numar_act,
pack_facturare.cserie_act,
tab_vanz (i).id_lucrare,
tab_vanz (i).id_comanda,
pack_facturare.ntip,
tab_vanz (i).id_gestiune_dest,
V_COD,
pack_facturare.ddata_act,
V_DISCOUNT_FACTURA,
pack_facturare.ndiscount_evidentiat,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_AGENT,
V_ID_RUTA,
pack_facturare.nid_sucursala,
pack_facturare.nid_sectie_stoc)
RETURNING ID_VANZARE INTO pack_facturare.nid_vanzare;
pack_facturare.scrie_cursuri(pack_facturare.nid_vanzare);
INSERT /*+ APPEND */
INTO VANZARI_DETALII
(ID_VANZARE,
ID_ARTICOL,
SERIE,
ID_POL,
CANTITATE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
PRET,
PROC_TVAV,
DISCOUNT_UNITAR,
ID_GESTIUNE,
ID_VALUTA,
CONT,
PRET_CU_TVA,
ID_JTVA_COLOANA)
SELECT pack_facturare.nid_vanzare as ID_VANZARE,
ID_ARTICOL,
SERIE,
ID_POL,
CANTITATE,
PRET_ACHIZITIE,
PRETD,
ID_VALUTAD,
PRET,
PROC_TVAV,
DISCOUNT_UNITAR,
ID_GESTIUNE,
ID_VALUTA,
CONT,
PRET_CU_TVA,
ID_JTVA_COLOANA
FROM VANZARI_DETALII_TEMP
WHERE ID_COMANDA = tab_vanz(i).id_comanda
AND NUMAR_ACT = tab_vanz(i).numar_act
ORDER BY ID_TEMP;
UPDATE RUL_TEMP SET COD = V_COD WHERE nract = tab_vanz(i).numar_act;
UPDATE ACT_TEMP SET COD = V_COD WHERE nract = tab_vanz(i).numar_act;
-- Completare totaluri in vanzari din vanzari_detalii pentru a usura selectiile din fact_vfacturi
begin
select DISC_TVA AS DISCOUNT_TVA,
VALOARE_ACHIZITIE,
decode(a.in_valuta,
1,
ROUND(a.curs * (a.suma_fara_tva - a.disc_fara_tva) /
a.multiplicator,
pack_sesiune.getOptiuneFirma('PC')),
a.suma_fara_tva - a.disc_fara_tva) as TOTAL_FARA_TVA,
decode(a.in_valuta,
1,
ROUND(a.curs * (a.suma_tva - a.disc_tva) /
a.multiplicator,
pack_sesiune.getOptiuneFirma('PC')),
a.suma_tva - a.disc_tva) as TOTAL_TVA,
decode(a.in_valuta,
1,
ROUND(a.curs * (a.suma_fara_tva - a.disc_fara_tva) /
a.multiplicator,
pack_sesiune.getOptiuneFirma('PC')),
a.suma_fara_tva - a.disc_fara_tva) +
decode(a.in_valuta,
1,
ROUND(a.curs * (a.suma_tva - a.disc_tva) /
a.multiplicator,
pack_sesiune.getOptiuneFirma('PC')),
a.suma_tva - a.disc_tva) as TOTAL_CU_TVA,
pack_facturare.cserie_act_incasare as SERIE_INCASAT,
pack_facturare.nnumar_act_incasare as NR_INCASAT,
pack_facturare.nsuma_incasare AS SUMA_INCASAT,
pack_facturare.ntip_doc_incasare as TIP_INCASAT,
a.id_valuta,
a.curs,
a.multiplicator
INTO lnDiscountTVA,
lnValoareAchizitie,
lnTotalFaraTVA,
lnTotalTVA,
lnTotalCuTVA,
lnSerieIncasat,
lnNrIncasat,
lnSumaIncasat,
lnTipIncasat,
lnIdValuta,
lnCurs,
lnMultiplicator
FROM (select NVL(V_DISCOUNT_FACTURA, 0) as DISC_FARA_TVA,
pack_facturare.nin_valuta AS IN_VALUTA,
ROUND(NVL(V_DISCOUNT_FACTURA, 0) *
max(vd.proc_tvav - 1),
pack_sesiune.getOptiuneFirma('PPRETV')) as DISC_TVA,
sum(pack_facturare.calculeaza_total_fara_tva_fact(vd.pret /
decode(pack_facturare.nin_valuta,
1,
1,
NVL(vc.multiplicator,
1)),
decode(pack_facturare.nin_valuta,
1,
0,
vd.diferenta),
decode(pack_facturare.nin_valuta,
1,
1,
NVL(vc.curs,
1)),
NVL(vd.discount_unitar,
0) /
decode(pack_facturare.nin_valuta,
1,
1,
NVL(vc.multiplicator,
1)),
pack_facturare.ndiscount_evidentiat,
vd.cantitate,
vd.pret_cu_tva,
vd.proc_tvav)) AS SUMA_FARA_TVA,
sum(pack_facturare.calculeaza_total_tva_fact(vd.pret /
decode(pack_facturare.nin_valuta,
1,
1,
NVL(vc.multiplicator,
1)),
decode(pack_facturare.nin_valuta,
1,
0,
vd.diferenta),
decode(pack_facturare.nin_valuta,
1,
1,
NVL(vc.curs,
1)),
NVL(vd.discount_unitar,
0) /
decode(pack_facturare.nin_valuta,
1,
1,
NVL(vc.multiplicator,
1)),
pack_facturare.ndiscount_evidentiat,
vd.cantitate,
vd.pret_cu_tva,
vd.proc_tvav)) as SUMA_TVA,
sum(round(vd.cantitate * vd.pret_achizitie,
pack_sesiune.getOptiuneFirma('PC'))) AS VALOARE_ACHIZITIE,
max(decode(pack_facturare.nin_valuta,
1,
vc.id_valuta,
0)) as id_valuta,
max(decode(pack_facturare.nin_valuta, 1, vc.curs, 1)) as curs,
max(decode(pack_facturare.nin_valuta,
1,
vc.multiplicator,
1)) as multiplicator
from (select a.id_vanzare_set,
a.pret,
a.proc_tvav,
a.cantitate,
a.diferenta,
a.discount_unitar,
a.id_valuta,
a.pret_cu_tva,
a.pret_achizitie
FROM VANZARI_DETALII_TEMP a
WHERE a.ID_COMANDA = tab_vanz(i).id_comanda
AND a.NUMAR_ACT = tab_vanz(i).numar_act
and nvl(a.id_vanzare_set, 0) = 0
union all
select b.id_vanzare_set,
b.pret,
max(c.proc_tvav) as proc_tvav,
b.cantitate,
0 as diferenta,
b.discount_unitar,
decode(pack_facturare.nin_valuta,
0,
pack_def.GetIdMonedaNationala(),
c.id_valuta) as id_valuta,
b.pret_cu_tva,
sum(decode(b.cantitate,
0,
0,
c.pret_achizitie * c.cantitate /
b.cantitate)) as pret_achizitie
from vanzari_detalii_temp c
left join vanzari_seturi b
on b.id_vanzare_set = c.id_vanzare_set
WHERE nvl(c.id_vanzare_set, 0) <> 0
and c.ID_COMANDA = tab_vanz(i).id_comanda
AND c.NUMAR_ACT = tab_vanz(i).numar_act
and nvl(pack_facturare.nin_valuta, -1) > -1
group by b.id_vanzare_set,
b.pret,
b.cantitate,
b.discount_unitar,
b.pret_cu_tva,
decode(pack_facturare.nin_valuta,
0,
pack_def.GetIdMonedaNationala(),
c.id_valuta)) vd
left join vanzari_cursuri vc
on vc.id_vanzare = pack_facturare.nid_vanzare
and vd.id_valuta = vc.id_valuta) a;
update vanzari
set discount_tva = lnDiscountTVA,
valoare_achizitie = lnValoareAchizitie,
total_fara_tva = lnTotalFaraTVA,
total_tva = lnTotalTVA,
total_cu_tva = lnTotalCuTVA,
serie_incasat = lnSerieIncasat,
nr_incasat = lnNrIncasat,
suma_incasat = lnSumaIncasat,
tip_incasat = lnTipIncasat,
id_valuta = lnIdValuta,
curs = lnCurs,
multiplicator = lnMultiplicator
where id_vanzare = pack_facturare.nid_vanzare;
exception
when NO_DATA_FOUND then
null;
end;
---------------------------------------------
END LOOP;
pack_facturare.finalizeaza_scriere_actrul();
END finalizeaza_avize_lucrare;
-------------------------------------------------------------------
/* PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER) is
lnIdFacturare NUMBER(10) := null;
lnListareDetaliata NUMBER(1) := 0;
begin
pack_facturare.finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
lnIdFacturare,
lnListareDetaliata,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_SIR_MODIFICARI_ACONT,
V_SIR_MODIFICARI_PART,
V_PARAMETRU_ADITIONAL,
V_ID_VANZARE);
end;*/
-------------------------------------------------------------------
PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER) IS
V_ID_FACTURARE NUMBER(20) := NULL;
V_LISTARE_DETALIATA NUMBER(20) := NULL;
BEGIN
finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_SIR_MODIFICARI_ACONT,
V_SIR_MODIFICARI_PART,
V_PARAMETRU_ADITIONAL,
V_ID_VANZARE);
END;
PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER,
V_ID_DELEGAT IN NUMBER,
V_ID_MASINA IN NUMBER,
V_ID_FACTURARE IN NUMBER,
V_LISTARE_DETALIATA IN NUMBER,
V_DATAORA_EXP IN DATE,
V_ID_AGENT IN NUMBER,
V_TEXT_ADITIONAL IN VARCHAR2,
V_SIR_MODIFICARI_ACONT IN VARCHAR2,
V_SIR_MODIFICARI_PART IN VARCHAR,
V_PARAMETRU_ADITIONAL IN NUMBER,
V_ID_VANZARE OUT NUMBER) IS
V_SEPARATOR_LINIE VARCHAR2(5) := ';';
V_SEPARATOR VARCHAR2(5) := '|';
BEGIN
IF V_SIR_MODIFICARI_ACONT IS NOT NULL THEN
MERGE INTO ACT_TEMP A
USING (select to_number(substr(lista || V_SEPARATOR,
1,
instr(lista, V_SEPARATOR) - 1)) as id_act,
substr(lista || V_SEPARATOR || V_SEPARATOR,
instr(lista || V_SEPARATOR || V_SEPARATOR,
V_SEPARATOR) + 1,
instr(lista || V_SEPARATOR || V_SEPARATOR,
V_SEPARATOR,
1,
2) -
instr(lista || V_SEPARATOR || V_SEPARATOR,
V_SEPARATOR) - 1) as ascd,
rtrim(substr(lista || V_SEPARATOR || V_SEPARATOR,
instr(lista || V_SEPARATOR || V_SEPARATOR,
V_SEPARATOR,
1,
2) + 1),
V_SEPARATOR) as ascc
from (SELECT X as LISTA
FROM table(charc2collection(V_SIR_MODIFICARI_ACONT,
V_SEPARATOR_LINIE))
)) B
ON (A.ID_ACT = B.ID_ACT)
WHEN MATCHED THEN
UPDATE SET ASCD = B.ASCD, ASCC = B.ASCC;
END IF;
IF V_SIR_MODIFICARI_PART IS NOT NULL THEN
MERGE INTO ACT_TEMP A
USING (select to_number(substr(lista || V_SEPARATOR,
1,
instr(lista, V_SEPARATOR) - 1)) as id_act,
nvl(to_number(substr(lista || V_SEPARATOR || V_SEPARATOR,
instr(lista || V_SEPARATOR ||
V_SEPARATOR,
V_SEPARATOR) + 1,
instr(lista || V_SEPARATOR ||
V_SEPARATOR,
V_SEPARATOR,
1,
2) -
instr(lista || V_SEPARATOR ||
V_SEPARATOR,
V_SEPARATOR) - 1)),
0) as id_partd,
nvl(to_number(rtrim(substr(lista || V_SEPARATOR ||
V_SEPARATOR,
instr(lista || V_SEPARATOR ||
V_SEPARATOR,
V_SEPARATOR,
1,
2) + 1),
V_SEPARATOR)),
0) as id_partc
from (SELECT X as LISTA
FROM table(charc2collection(V_SIR_MODIFICARI_PART,
V_SEPARATOR_LINIE)))) B
ON (A.ID_ACT = B.ID_ACT)
WHEN MATCHED THEN
UPDATE SET ID_PARTD = B.ID_PARTD, ID_PARTC = B.ID_PARTC;
END IF;
IF pack_facturare.ntip = 27 THEN
pack_facturare.finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA);
V_ID_VANZARE := NULL;
ELSE
pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA,
V_ID_DELEGAT,
V_ID_MASINA,
V_ID_FACTURARE,
V_LISTARE_DETALIATA,
V_DATAORA_EXP,
V_ID_AGENT,
V_TEXT_ADITIONAL,
V_PARAMETRU_ADITIONAL);
V_ID_VANZARE := pack_facturare.nid_vanzare;
END IF;
END finalizeaza_scriere_verificare;
-------------------------------------------------------------------
Procedure initializeaza_scriere_actrul(tdDataOra IN DATE,
tnSuprascriereCod IN NUMBER DEFAULT 1) IS
BEGIN
pack_contafin.initializeaza_scriere_act_rul(pack_facturare.nid_util,
tdDataOra,
pack_facturare.nan,
pack_facturare.nluna,
tnSuprascriereCod,
1, -- tnSuprascriereAnLuna
0, -- tnScrie_Sterge: 0 = scriere, 1 = refacere, 2 = stergere
pack_facturare.nid_sucursala);
END initializeaza_scriere_actrul;
-------------------------------------------------------------------
PROCEDURE finalizeaza_scriere_actrul IS
BEGIN
pack_contafin.finalizeaza_scriere_act_rul();
END finalizeaza_scriere_actrul;
-------------------------------------------------------------------
PROCEDURE marcheaza_facturat(V_VERIFICARE IN NUMBER) IS
BEGIN
IF V_VERIFICARE = 0 THEN
UPDATE VANZARI
SET FACTURAT = 1, ID_UTILFACT = pack_facturare.nid_util
WHERE ID_VANZARE IN
(SELECT id_vanzare_aviz as id_vanzare
FROM vanzari_coresp
WHERE id_vanzare_Fact = pack_facturare.nid_vanzare
AND sters = 0
AND tip <> 3) -- modificare v 2.0.56 : tip <> 3
AND FACTURAT = 0;
ELSE
UPDATE VANZARI
SET FACTURAT = 1, ID_UTILFACT = pack_facturare.nid_util
WHERE ID_VANZARE IN
(select id_vanzare
from (select a.id_vanzare,
sum(a.cantitate - NVL(b.cantitate, 0)) as ramas
from vanzari_detalii a
left join (select sum(cantitate) as cantitate,
id_vanzare_det_aviz as id_vanzare_det
from vanzari_cantitati
where sters = 0
group by id_vanzare_det_aviz) b
on a.id_vanzare_det = b.id_vanzare_det
where a.id_vanzare in
(select id_vanzare_aviz as id_vanzare
from vanzari_coresp
where id_vanzare_Fact =
pack_facturare.nid_vanzare
and sters = 0
and tip <> 3) -- modificare v 2.0.56 : sters = 0 and tip <> 3
group by a.id_vanzare)
where ramas = 0);
END IF;
END marcheaza_facturat;
-------------------------------------------------------------------
PROCEDURE scrie_cantitati_vanzari_avize IS
V_SEPARATOR VARCHAR2(10) := ',';
V_LISTA VARCHAR2(3000) := '';
BEGIN
V_LISTA := pack_facturare.clistaid_avize || V_SEPARATOR ||
pack_facturare.nid_vanzare || V_SEPARATOR;
INSERT INTO VANZARI_CANTITATI
(ID_VANZARE_DET, ID_VANZARE_DET_AVIZ, CANTITATE)
SELECT A.MAX_IDT AS ID_VANZARE_DET,
A.ID_VANZARE_DET AS ID_VANZARE_DET_AVIZ,
(CASE
WHEN A.TOTAL >= 0 THEN
A.CANTITATE
ELSE
A.CANTITATE + A.TOTAL
END) AS CANTITATE
FROM (SELECT MAX(A.ID_VANZARE) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT) AS MAX_ID,
MAX(A.ID_VANZARE_DET) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT) AS MAX_IDT,
SUM(DECODE(A.ID_VANZARE,
pack_facturare.nid_vanzare,
A.CANTITATE,
(-1) * A.CANTITATE)) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT ORDER BY DECODE(A.ID_VANZARE, pack_facturare.nid_vanzare, 0, A.ID_VANZARE_DET)) AS TOTAL,
A.ID_VANZARE,
DECODE(A.ID_VANZARE,
pack_facturare.nid_vanzare,
0,
A.ID_VANZARE_DET) AS ID_VANZARE_DET,
DECODE(A.ID_VANZARE,
pack_facturare.nid_vanzare,
0,
A.CANTITATE) AS CANTITATE,
A.ID_ARTICOL,
A.SERIE,
A.DISCOUNT_UNITAR,
A.ID_POL,
A.ID_VALUTA,
A.PRET,
A.ID_GESTIUNE,
A.CONT
FROM VANZARI_DETALII A
WHERE A.ID_VANZARE IN
(SELECT X as ID_VANZARE
FROM table(charn2collection(V_LISTA, V_SEPARATOR)))
AND A.STERS = 0
ORDER BY A.ID_ARTICOL,
A.SERIE,
A.DISCOUNT_UNITAR,
A.ID_POL,
A.ID_VALUTA,
A.PRET,
A.ID_GESTIUNE,
A.CONT,
A.ID_VANZARE_DET DESC) A
WHERE A.MAX_ID = pack_facturare.nid_vanzare
AND A.ID_VANZARE_DET <> 0
AND A.CANTITATE + A.TOTAL > 0
ORDER BY A.MAX_IDT, A.ID_VANZARE_DET;
END scrie_cantitati_vanzari_avize;
-------------------------------------------------------------------
PROCEDURE scrie_corespondente_vanzari(V_TIP IN NUMBER) IS
V_LISTAID VARCHAR2(2000);
V_SEPARATOR VARCHAR2(1) := ',';
BEGIN
IF V_TIP = 1 THEN
-- facturare din aviz:
V_LISTAID := SUBSTR(pack_facturare.clistaid_avize,
1,
LENGTH(pack_facturare.clistaid_avize) - 1);
ELSE
V_LISTAID := pack_facturare.clistaid;
END IF;
INSERT INTO VANZARI_CORESP
(ID_VANZARE_FACT, ID_VANZARE_AVIZ, TIP)
SELECT pack_facturare.nid_vanzare as ID_VANZARE_FACT,
ID_VANZARE as ID_VANZARE_AVIZ,
V_TIP as TIP
FROM VANZARI
WHERE ID_VANZARE IN
(SELECT X as ID_VANZARE
FROM table(charn2collection(V_LISTAID, V_SEPARATOR))
);
-- Completez VANZARI.AVIZE redundant, pentru a nu face mai rapid fact_vfacturi (selecta din fact_vdetalii_avize)
UPDATE VANZARI
SET AVIZE =
SUBSTR((select stringagg(nvl(a2.serie_act, '') || CHR(32) ||
a2.numar_act) as nr_avize
from vanzari_coresp a1
join vanzari a2
on a1.id_vanzare_aviz = a2.id_vanzare
where a1.id_vanzare_fact = pack_facturare.nid_vanzare),1,1000);
END scrie_corespondente_vanzari;
-------------------------------------------------------------------
PROCEDURE cauta_date_ultima_factura(V_ID_PART IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_DELEGAT OUT NUMBER,
V_NUME_DELEGAT OUT VARCHAR2,
V_SERIE_BI OUT VARCHAR2,
V_CNP OUT VARCHAR2,
V_ID_MASINA OUT NUMBER,
V_NRINMAT OUT VARCHAR2) IS
BEGIN
BEGIN
SELECT A.ID_DELEGAT,
B.DENUMIRE,
B.REG_COMERT,
B.COD_FISCAL,
A.ID_MASINA,
C.NRINMAT
INTO V_ID_DELEGAT,
V_NUME_DELEGAT,
V_SERIE_BI,
V_CNP,
V_ID_MASINA,
V_NRINMAT
FROM (SELECT ID_DELEGAT,
ID_MASINA,
ROW_NUMBER() OVER(ORDER BY DATA_ACT DESC) AS NRCRT
FROM VANZARI
WHERE STERS = 0
AND ID_PART = V_ID_PART
AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A
LEFT JOIN NOM_PARTENERI B
ON A.ID_DELEGAT = B.ID_PART
AND B.STERS = 0
AND B.INACTIV = 0
LEFT JOIN NOM_MASINI C
ON A.ID_MASINA = C.ID_MASINA
AND C.STERS = 0
AND C.INACTIV = 0
WHERE A.NRCRT = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
-- daca nu am gasit datele de pe ultima factura, iar id_part corespunde unei persoane fizice,
-- atunci iau datele acesteia
SELECT ID_PART, DENUMIRE, REG_COMERT, COD_FISCAL
INTO V_ID_DELEGAT, V_NUME_DELEGAT, V_SERIE_BI, V_CNP
FROM NOM_PARTENERI
WHERE ID_PART = V_ID_PART
AND TIP_PERSOANA = 2;
MERGE INTO CORESP_TIP_PART
USING DUAL
ON (ID_TIP_PART = pack_sesiune.getoptiunefirma(USER, 'IDTIPDELEGATI') AND ID_PART = V_ID_PART)
WHEN NOT MATCHED THEN
INSERT
(ID_TIP_PART, ID_PART)
VALUES
(pack_sesiune.getoptiunefirma(USER, 'IDTIPDELEGATI'),
V_ID_PART);
MERGE INTO CORESP_DELEGATI_PART
USING DUAL
ON (ID_DELEGAT = V_ID_PART AND ID_PART = V_ID_PART)
WHEN NOT MATCHED THEN
INSERT (ID_DELEGAT, ID_PART) VALUES (V_ID_PART, V_ID_PART);
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_DELEGAT := NULL;
V_NUME_DELEGAT := '';
V_SERIE_BI := '';
V_CNP := '';
END;
V_ID_MASINA := NULL;
V_NRINMAT := '';
END;
END cauta_date_ultima_factura;
--------------------------------------------------------------------------------------------------------------
-- caut datele ultimei facturi dupa tip (pentru avize de transfer intre subunitati, nu am client)
PROCEDURE cauta_date_ultima_factura_tip(V_TIP IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_ID_DELEGAT OUT NUMBER,
V_NUME_DELEGAT OUT VARCHAR2,
V_SERIE_BI OUT VARCHAR2,
V_CNP OUT VARCHAR2,
V_ID_MASINA OUT NUMBER,
V_NRINMAT OUT VARCHAR2) IS
BEGIN
BEGIN
SELECT A.ID_DELEGAT,
B.DENUMIRE,
B.REG_COMERT,
B.COD_FISCAL,
A.ID_MASINA,
C.NRINMAT
INTO V_ID_DELEGAT,
V_NUME_DELEGAT,
V_SERIE_BI,
V_CNP,
V_ID_MASINA,
V_NRINMAT
FROM (SELECT ID_DELEGAT,
ID_MASINA,
ROW_NUMBER() OVER(ORDER BY ID_VANZARE DESC) AS NRCRT
FROM VANZARI
WHERE STERS = 0
AND TIP = V_TIP
AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A
LEFT JOIN NOM_PARTENERI B
ON A.ID_DELEGAT = B.ID_PART
AND B.STERS = 0
AND B.INACTIV = 0
LEFT JOIN NOM_MASINI C
ON A.ID_MASINA = C.ID_MASINA
AND C.STERS = 0
AND C.INACTIV = 0
WHERE A.NRCRT = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ID_DELEGAT := NULL;
V_NUME_DELEGAT := '';
V_SERIE_BI := '';
V_CNP := '';
V_ID_MASINA := NULL;
V_NRINMAT := '';
END;
END cauta_date_ultima_factura_tip;
----------------------------------------------------------------------------
PROCEDURE cauta_date_comanda(V_ID_CLIENT IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_DATA_FACTURA IN DATE,
V_LISTAID OUT VARCHAR2,
V_DESCRIERE OUT VARCHAR2) is
BEGIN
BEGIN
SELECT TO_CHAR(ID_COMANDA), NR_COMANDA
INTO V_LISTAID, V_DESCRIERE
FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATA_LIVRARE) AS NR_CRT,
ID_COMANDA,
NR_COMANDA
FROM VCOMENZI
WHERE FACTURAT = 0
AND INTERNA = 2
AND ID_PART = V_ID_CLIENT
AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)
AND TRUNC(DATA_LIVRARE) = TRUNC(V_DATA_FACTURA))
WHERE NR_CRT = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_LISTAID := NULL;
V_DESCRIERE := NULL;
END;
END cauta_date_comanda;
----------------------------------------------------------------------------
PROCEDURE cauta_date_comanda_gest(V_ID_GESTIUNE IN NUMBER,
V_ID_SUCURSALA IN NUMBER,
V_DATA_FACTURA IN DATE,
V_LISTAID OUT VARCHAR2,
V_DESCRIERE OUT VARCHAR2) is
BEGIN
BEGIN
SELECT TO_CHAR(ID_COMANDA), NR_COMANDA
INTO V_LISTAID, V_DESCRIERE
FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATA_LIVRARE) AS NR_CRT,
ID_COMANDA,
NR_COMANDA
FROM VCOMENZI
WHERE FACTURAT = 0
AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)
AND INTERNA = 3
AND ID_GESTIUNE = V_ID_GESTIUNE
AND TRUNC(DATA_LIVRARE) = TRUNC(V_DATA_FACTURA))
WHERE NR_CRT = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_LISTAID := NULL;
V_DESCRIERE := NULL;
END;
END cauta_date_comanda_gest;
----------------------------------------------------------------------------
-- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact )
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)
RETURN NUMBER IS
BEGIN
-- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0
RETURN pack_sesiune.calculeaza_total_cu_tva(V_PRET => V_PRET,
V_AJUSTARE => V_AJUSTARE,
V_CURS => V_CURS,
V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_CU_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => NULL,
V_ZECIMALE_SUMA => NULL);
END calculeaza_total_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
BEGIN
RETURN 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_ZECIMALE_PRET,
V_ZECIMALE_SUMA);
END calculeaza_total_cu_tva;
-------------------------------------------------------------------
-- e folosita in view-ul fact_vrap_centralizator_fact
FUNCTION calculeaza_total_cu_tva_fact(V_PRET IN NUMBER,
V_DIFERENTA 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)
RETURN NUMBER IS
V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC');
V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV');
V_SUMA_CU_TVA ACT.SUMA%TYPE;
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_ZECIMALE_PRETV) -
ROUND(V_DIFERENTA * V_PROC_TVAV,
V_ZECIMALE_PRETV)) * V_CANTITATE,
V_ZECIMALE_SUMA) -
ROUND(ROUND(NVL(V_CURS, 1) *
NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALE_PRETV) * V_CANTITATE,
V_ZECIMALE_SUMA);
ELSE
V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) *
ROUND(V_PRET, V_ZECIMALE_PRETV),
V_ZECIMALE_PRETV) -
ROUND(NVL(V_CURS, 1) *
ROUND(NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALE_PRETV) -
ROUND(V_DIFERENTA * V_PROC_TVAV,
V_ZECIMALE_PRETV),
V_ZECIMALE_PRETV)) * V_CANTITATE,
V_ZECIMALE_SUMA);
END IF;
ELSE
V_SUMA_CU_TVA := pack_facturare.calculeaza_total_fara_tva_fact(V_PRET,
V_DIFERENTA,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV) +
pack_facturare.calculeaza_total_tva_fact(V_PRET,
V_DIFERENTA,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV);
END IF;
RETURN V_SUMA_CU_TVA;
END calculeaza_total_cu_tva_fact;
-------------------------------------------------------------------
-- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact )
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)
RETURN NUMBER IS
BEGIN
-- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0
RETURN pack_sesiune.calculeaza_total_fara_tva(V_PRET => V_PRET,
V_AJUSTARE => V_AJUSTARE,
V_CURS => V_CURS,
V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_CU_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => NULL,
V_ZECIMALE_SUMA => NULL);
END calculeaza_total_fara_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
BEGIN
RETURN 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_ZECIMALE_PRET,
V_ZECIMALE_SUMA);
END calculeaza_total_fara_tva;
-------------------------------------------------------------------
-- e folosita in view-ul fact_vrap_centralizator_fact
FUNCTION calculeaza_total_fara_tva_fact(V_PRET IN NUMBER,
V_DIFERENTA 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)
RETURN NUMBER IS
V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC');
V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV');
V_SUMA_FARA_TVA ACT.SUMA%TYPE;
BEGIN
IF V_PRET_CU_TVA = 1 THEN
V_SUMA_FARA_TVA := pack_facturare.calculeaza_total_cu_tva_fact(V_PRET,
V_DIFERENTA,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV) -
pack_facturare.calculeaza_total_tva_fact(V_PRET,
V_DIFERENTA,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV);
ELSE
IF V_DISCOUNT_EVIDENTIAT = 1 THEN
V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET,
V_ZECIMALE_PRETV) - V_DIFERENTA) *
V_CANTITATE,
V_ZECIMALE_SUMA) -
ROUND(ROUND(NVL(V_CURS, 1) *
NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALE_PRETV) * V_CANTITATE,
V_ZECIMALE_SUMA);
ELSE
V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) *
ROUND(V_PRET, V_ZECIMALE_PRETV),
V_ZECIMALE_PRETV) -
ROUND(NVL(V_CURS, 1) *
ROUND(NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALE_PRETV),
V_ZECIMALE_PRETV) - V_DIFERENTA) *
V_CANTITATE,
V_ZECIMALE_SUMA);
END IF;
END IF;
RETURN V_SUMA_FARA_TVA;
END calculeaza_total_fara_tva_fact;
-------------------------------------------------------------------
-- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact )
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)
RETURN NUMBER IS
BEGIN
-- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0
Return pack_sesiune.calculeaza_total_tva(V_PRET => V_PRET,
V_AJUSTARE => V_AJUSTARE,
V_CURS => V_CURS,
V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT,
V_CANTITATE => V_CANTITATE,
V_PRET_CU_TVA => V_PRET_CU_TVA,
V_PROC_TVAV => V_PROC_TVAV,
V_ZECIMALE_PRET => NULL,
V_ZECIMALE_SUMA => NULL);
END calculeaza_total_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
BEGIN
RETURN 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_ZECIMALE_PRET,
V_ZECIMALE_SUMA);
END calculeaza_total_tva;
----------------------------------------------------------------------------------------
-- e folosita in view-ul fact_vrap_centralizator_fact
FUNCTION calculeaza_total_tva_fact(V_PRET IN NUMBER,
V_DIFERENTA 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)
RETURN NUMBER IS
V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC');
V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV');
V_SUMA_TVA ACT.SUMA%TYPE;
BEGIN
IF V_PRET_CU_TVA = 1 THEN
V_SUMA_TVA := ROUND(pack_facturare.calculeaza_total_cu_tva_fact(V_PRET,
V_DIFERENTA,
V_CURS,
V_DISCOUNT_UNITAR,
V_DISCOUNT_EVIDENTIAT,
V_CANTITATE,
V_PRET_CU_TVA,
V_PROC_TVAV) *
(V_PROC_TVAV - 1) / V_PROC_TVAV,
V_ZECIMALE_SUMA);
ELSE
IF V_DISCOUNT_EVIDENTIAT = 1 THEN
V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * V_PRET,
V_ZECIMALE_PRETV) - V_DIFERENTA) *
V_CANTITATE,
V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1),
V_ZECIMALE_SUMA) -
ROUND(ROUND(ROUND(NVL(V_CURS, 1) *
NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALE_PRETV) * V_CANTITATE,
V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1),
V_ZECIMALE_SUMA);
ELSE
V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) *
ROUND(V_PRET, V_ZECIMALE_PRETV),
V_ZECIMALE_PRETV) -
ROUND(NVL(V_CURS, 1) *
ROUND(NVL(V_DISCOUNT_UNITAR, 0),
V_ZECIMALE_PRETV),
V_ZECIMALE_PRETV) - V_DIFERENTA) *
V_CANTITATE,
V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1),
V_ZECIMALE_SUMA);
END IF;
END IF;
RETURN V_SUMA_TVA;
END calculeaza_total_tva_fact;
-------------------------------------------------------------------
PROCEDURE actualizeaza_vanzari(V_COD_VECHI IN NUMBER,
V_COD_NOU IN NUMBER) is
BEGIN
-- de modificat in caz ca il las sa stearga manual inregistrari din VANZARI_DETALII
-- acum se marcheaza cu STERS = 1 doar cand se sterge toata factura
UPDATE VANZARI_DETALII
SET STERS = 0
WHERE ID_VANZARE IN
(SELECT ID_VANZARE FROM VANZARI WHERE COD = V_COD_VECHI);
UPDATE VANZARI SET COD = V_COD_NOU, STERS = 0 WHERE COD = V_COD_VECHI;
END actualizeaza_vanzari;
-------------------------------------------------------------------
PROCEDURE sterge_din_vanzari(V_COD IN NUMBER,
V_AN IN NUMBER,
V_LUNA IN NUMBER,
V_ID_UTIL IN NUMBER) is
V_ID_VANZARE VANZARI.ID_VANZARE%TYPE;
BEGIN
BEGIN
SELECT ID_VANZARE INTO V_ID_VANZARE FROM VANZARI WHERE COD = V_COD;
pack_facturare.sterge_factura(V_ID_VANZARE, V_LUNA, V_AN, V_ID_UTIL);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Aceasta factura nu a fost inregistrata in ROAFACTURARE! (FACT-017 : ' ||
V_COD || ')');
END;
END sterge_din_vanzari;
-------------------------------------------------------------------
PROCEDURE verifica_cursuri_valute(V_DATA_CURS IN DATE,
V_ID_UTIL IN NUMBER) IS
V_NUME_VALUTE VARCHAR2(100);
BEGIN
-- verificare ca exista cursul pentru valutele din FACT_VPRETURI_UTILIZATOR
SELECT STRINGAGG(B.NUME_VAL)
INTO V_NUME_VALUTE
FROM (SELECT A.ID_VALUTA, B.CURS
FROM (SELECT DISTINCT ID_VALUTA
FROM FACT_VPRETURI_UTILIZATOR
WHERE ID_UTIL = V_ID_UTIL) A
LEFT JOIN CURS B
ON A.ID_VALUTA = B.ID_VALUTA
AND B.STERS = 0
AND B.DATA <= V_DATA_CURS
AND B.DATA2 >= V_DATA_CURS) A
LEFT JOIN NOM_VALUTE B
ON A.ID_VALUTA = B.ID_VALUTA
WHERE A.CURS IS NULL
AND A.ID_VALUTA <> pack_facturare.nid_moneda_nationala;
IF V_NUME_VALUTE IS NOT NULL THEN
RAISE_APPLICATION_ERROR(-20005,
'Nu este setat cursul din data de ' ||
to_char(V_DATA_CURS, 'DD/MM/YYYY') ||
' pentru ' || V_NUME_VALUTE || '!');
END IF;
END verifica_cursuri_valute;
-------------------------------------------------------------------
PROCEDURE verifica_total_document IS
V_TOTFTVA_VER ACT.SUMA%TYPE;
V_ID_TOTFTVA ACT.SUMA%TYPE;
V_TOTTVA_VER ACT.SUMA%TYPE;
V_ID_TOTTVA ACT.SUMA%TYPE;
BEGIN
IF pack_facturare.ntip < 20 or
pack_facturare.ntip in (pack_facturare.nTipFacturaHotel,
pack_facturare.nTipFacturaRestaurant,
48,
49,51,52) THEN
SELECT SUM(CASE
WHEN SCD in ('667', '267', '2678', '709') THEN
(-1) * SUMA
WHEN SCC <> '4427' THEN
SUMA
ELSE
0
END),
SUM(CASE
WHEN SCC = '4427' THEN
SUMA
ELSE
0
END),
MIN(CASE
WHEN SCC <> '4427' AND
SCD not in ('667', '267', '2678', '709') THEN
ID_ACT
ELSE
9999999
END),
MIN(CASE
WHEN SCC = '4427' THEN
ID_ACT
ELSE
9999999
END)
INTO V_TOTFTVA_VER, V_TOTTVA_VER, V_ID_TOTFTVA, V_ID_TOTTVA
FROM ACT_TEMP
WHERE (SCD = '4111' OR (SCC = '4111' AND SCD not in ('5311','5314','5121','5125','5126')));
ELSE
SELECT SUM(CASE
WHEN SCD in ('667', '267', '2678', '709') THEN
(-1) * SUMA
WHEN SCC <> '4428' THEN
SUMA
ELSE
0
END),
SUM(CASE
WHEN SCC = '4428' THEN
SUMA
ELSE
0
END),
MIN(CASE
WHEN SCC <> '4428' AND
SCD not in ('667', '267', '2678', '709') THEN
ID_ACT
ELSE
9999999
END),
MIN(CASE
WHEN SCC = '4428' THEN
ID_ACT
ELSE
9999999
END)
INTO V_TOTFTVA_VER, V_TOTTVA_VER, V_ID_TOTFTVA, V_ID_TOTTVA
FROM ACT_TEMP
WHERE (SCD = '418' OR SCC = '418');
END IF;
IF NVL(pack_facturare.ntotftva, 0) <> 0 and
NVL(pack_facturare.ntotftva, 0) <> V_TOTFTVA_VER THEN
pack_facturare.ndifftva := pack_facturare.ntotftva - V_TOTFTVA_VER;
insert into act_temp
(id_act,
luna,
an,
cod,
dataireg,
nract,
dataact,
explicatia,
scd,
ascd,
scc,
ascc,
suma,
pereched,
perechec,
suma_val,
curs,
datascad,
neimpozab,
nnir,
id_util,
dataora,
id_utils,
dataoras,
id_responsabil,
id_venchelt,
id_sectie,
id_set,
id_fact,
id_partd,
id_partc,
id_sucursala,
id_fdoc,
explicatia4,
explicatia5,
id_lucrare,
id_gestin,
id_gestout,
id_valuta,
proc_tva,
sters,
id_factd,
id_factc,
id_ctr,
id_jtva_coloana,
serie_act,
tva_incasare,
validat,
id_utilv,
dataorav,
taxcode)
select b.id_act,
a.luna,
a.an,
a.cod,
a.dataireg,
a.nract,
a.dataact,
a.explicatia,
a.scd,
a.ascd,
a.scc,
a.ascc,
pack_facturare.ndifftva as suma,
a.pereched,
a.perechec,
0 as suma_val,
a.curs,
a.datascad,
a.neimpozab,
a.nnir,
a.id_util,
a.dataora,
a.id_utils,
a.dataoras,
a.id_responsabil,
a.id_venchelt,
a.id_sectie,
a.id_set,
a.id_fact,
a.id_partd,
a.id_partc,
a.id_sucursala,
a.id_fdoc,
a.explicatia4,
a.explicatia5,
a.id_lucrare,
a.id_gestin,
a.id_gestout,
a.id_valuta,
a.proc_tva,
a.sters,
a.id_factd,
a.id_factc,
a.id_ctr,
a.id_jtva_coloana,
a.serie_act,
pack_facturare.ntva_incasare,
a.validat,
a.id_utilv,
a.dataorav,
a.taxcode
from act_temp a
left join (select max(id_act) + 1 as id_act, 0 as sters
from act_temp) b
on a.sters = b.sters
where a.id_act = V_ID_TOTFTVA;
END IF;
IF NVL(pack_facturare.ntottva, 0) <> 0 and
NVL(pack_facturare.ntottva, 0) <> V_TOTTVA_VER THEN
pack_facturare.ndiftva := pack_facturare.ntottva - V_TOTTVA_VER;
insert into act_temp
(id_act,
luna,
an,
cod,
dataireg,
nract,
dataact,
explicatia,
scd,
ascd,
scc,
ascc,
suma,
pereched,
perechec,
suma_val,
curs,
datascad,
neimpozab,
nnir,
id_util,
dataora,
id_utils,
dataoras,
id_responsabil,
id_venchelt,
id_sectie,
id_set,
id_fact,
id_partd,
id_partc,
id_sucursala,
id_fdoc,
explicatia4,
explicatia5,
id_lucrare,
id_gestin,
id_gestout,
id_valuta,
proc_tva,
sters,
id_factd,
id_factc,
id_ctr,
id_jtva_coloana,
serie_act,
tva_incasare,
validat,
id_utilv,
dataorav,
taxcode)
select b.id_act,
a.luna,
a.an,
a.cod,
a.dataireg,
a.nract,
a.dataact,
a.explicatia,
a.scd,
a.ascd,
a.scc,
a.ascc,
pack_facturare.ndiftva as suma,
a.pereched,
a.perechec,
0 as suma_val,
a.curs,
a.datascad,
a.neimpozab,
a.nnir,
a.id_util,
a.dataora,
a.id_utils,
a.dataoras,
a.id_responsabil,
a.id_venchelt,
a.id_sectie,
a.id_set,
a.id_fact,
a.id_partd,
a.id_partc,
a.id_sucursala,
a.id_fdoc,
a.explicatia4,
a.explicatia5,
a.id_lucrare,
a.id_gestin,
a.id_gestout,
a.id_valuta,
a.proc_tva,
a.sters,
a.id_factd,
a.id_factc,
a.id_ctr,
a.id_jtva_coloana,
a.serie_act,
pack_facturare.ntva_incasare,
a.validat,
a.id_utilv,
a.dataorav,
a.taxcode
from act_temp a
left join (select max(id_act) + 1 as id_act, 0 as sters
from act_temp) b
on a.sters = b.sters
where a.id_act = V_ID_TOTTVA;
END IF;
IF pack_facturare.ntip in (48, 49) AND
((NVL(pack_facturare.ntottva, 0) <> 0 and
NVL(pack_facturare.ntottva, 0) <> V_TOTTVA_VER) OR
(NVL(pack_facturare.ntotftva, 0) <> 0 and
NVL(pack_facturare.ntotftva, 0) <> V_TOTFTVA_VER)) THEN
insert into act_temp
(id_act,
luna,
an,
cod,
dataireg,
nract,
dataact,
explicatia,
scd,
ascd,
scc,
ascc,
suma,
pereched,
perechec,
suma_val,
curs,
datascad,
neimpozab,
nnir,
id_util,
dataora,
id_utils,
dataoras,
id_responsabil,
id_venchelt,
id_sectie,
id_set,
id_fact,
id_partd,
id_partc,
id_sucursala,
id_fdoc,
explicatia4,
explicatia5,
id_lucrare,
id_gestin,
id_gestout,
id_valuta,
proc_tva,
sters,
id_factd,
id_factc,
id_ctr,
id_jtva_coloana,
serie_act,
tva_incasare,
validat,
id_utilv,
dataorav)
select b.id_act,
a.luna,
a.an,
a.cod,
a.dataireg,
a.nract,
a.dataact,
a.explicatia,
a.scd,
a.ascd,
a.scc,
a.ascc,
pack_facturare.ndifftva + pack_facturare.ndiftva as suma,
a.pereched,
a.perechec,
0 as suma_val,
a.curs,
a.datascad,
a.neimpozab,
a.nnir,
a.id_util,
a.dataora,
a.id_utils,
a.dataoras,
a.id_responsabil,
a.id_venchelt,
a.id_sectie,
a.id_set,
a.id_fact,
a.id_partd,
a.id_partc,
a.id_sucursala,
a.id_fdoc,
a.explicatia4,
a.explicatia5,
a.id_lucrare,
a.id_gestin,
a.id_gestout,
a.id_valuta,
a.proc_tva,
a.sters,
a.id_factd,
a.id_factc,
a.id_ctr,
a.id_jtva_coloana,
a.serie_act,
pack_facturare.ntva_incasare,
a.validat,
a.id_utilv,
a.dataorav
from act_temp a
left join (select max(id_act) + 1 as id_act, 0 as sters
from act_temp) b
on a.sters = b.sters
where a.scc = '357';
END IF;
END verifica_total_document;
-------------------------------------------------------------------
PROCEDURE verifica_analitice378 is
BEGIN
SELECT DECODE(X, 0, 0, 1)
INTO PACK_FACTURARE.NANALITICE_378
FROM (SELECT COUNT(*) AS X
FROM plcont
WHERE CONT = '378'
AND AN = PACK_FACTURARE.nan
AND TIP_CONT = 1
AND INACTIV = 0);
END verifica_analitice378;
-------------------------------------------------------------------
function GetAnaliticByGrupUtilizatori(tnIdUtilizator ACT.ID_UTIL%TYPE,
tcCont ACT.SCD%TYPE)
return ACT.ASCD%TYPE IS
lcAcont ACT.ASCD%TYPE;
BEGIN
BEGIN
select ga.acont
into lcAcont
from config_gruputil_analitice ga
join utilizatori_rol_intern u
on ga.id_grup = u.id_grup
where u.id_util = tnIdUtilizator
and ga.cont = tcCont
and u.sters = 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
return lcAcont;
end GetAnaliticByGrupUtilizatori;
-------------------------------------------------------------------
-- intoarce analiticul unui cont (371,607,378 etc.)
-- pe baza configurarilor din config_analitice si a GESTIUNII/ARTICOLULUI
FUNCTION GetAnaliticByArticol(tcCont RUL.CONT%TYPE,
tnIdGestiune RUL.ID_GESTIUNE%TYPE DEFAULT NULL,
tnIdArticol RUL.ID_ARTICOL%TYPE DEFAULT NULL)
return RUL.ACONT%TYPE IS
crs_linie config_analitice%rowtype;
lcSelect VARCHAR2(10000);
lcAnalitic VARCHAR2(1000);
lcColoanaP VARCHAR2(100);
lcColoanaS VARCHAR2(100);
lcNumeColoanaP VARCHAR2(1000);
lcNumeColoanaS VARCHAR2(1000);
lcAcont RUL.ACONT%TYPE;
lcParametruP VARCHAR2(100);
lcParametruS VARCHAR2(100);
BEGIN
begin
select *
into crs_linie
from config_analitice a
where a.cont = tcCont;
exception
when NO_DATA_FOUND then
return lcAcont;
end;
lcAnalitic := '';
lcColoanaP := '';
lcColoanaS := '';
if crs_linie.tabel_prefix is not null then
lcColoanaP := 'A.' || crs_linie.camp_leg_prefix;
lcNumeColoanaP := crs_linie.camp_leg_prefix;
lcAnalitic := 'substr(a.' || crs_linie.col_prefix || ',' ||
crs_linie.poz_start_prefix || ',' ||
crs_linie.nr_return_prefix || ')';
end if;
if crs_linie.tabel_sufix is not null then
lcColoanaS := 'B.' || crs_linie.camp_leg_sufix;
lcNumeColoanaS := crs_linie.camp_leg_prefix;
lcAnalitic := lcAnalitic || '||substr(b.' || crs_linie.col_sufix || ',' ||
crs_linie.poz_start_sufix || ',' ||
crs_linie.nr_return_sufix || ')';
end if;
lcParametruP := CASE UPPER(lcNumeColoanaP)
WHEN 'ID_GESTIUNE' THEN
'tnIdGestiune'
WHEN 'ID_ARTICOL' THEN
'tnIdArticol'
ELSE
''
END;
lcParametruS := CASE UPPER(lcNumeColoanaS)
WHEN 'ID_GESTIUNE' THEN
'tnIdGestiune'
WHEN 'ID_ARTICOL' THEN
'tnIdArticol'
ELSE
''
END;
if lcParametruP is not null then
lcSelect := 'SELECT ' || lcAnalitic || ' AS ACONT
FROM ' || crs_linie.tabel_prefix ||
' A ' || (CASE
WHEN lcColoanaS IS NULL THEN
''
ELSE
'LEFT JOIN ' || crs_linie.tabel_sufix ||
' B ON 1=1 AND A.STERS = 0 AND B.STERS = 0 '
END) || 'WHERE ' || CASE UPPER(lcNumeColoanaP)
WHEN 'ID_GESTIUNE' THEN
tnIdGestiune
WHEN 'ID_ARTICOL' THEN
tnIdArticol
END || ' = ' || lcNumeColoanaP || ' ' || (CASE
WHEN lcColoanaS IS NULL or lcParametruS IS NULL THEN
''
ELSE
'AND ' || CASE UPPER(lcNumeColoanaS)
WHEN 'ID_GESTIUNE' THEN
'tnIdGestiune'
WHEN 'ID_ARTICOL' THEN
'tnIdArticol'
END || ' = ' || lcNumeColoanaS
END);
EXECUTE IMMEDIATE lcSelect
into lcAcont;
END IF; -- lcParametruP
return lcAcont;
END GetAnaliticByArticol;
-----------------------------------------------------------------------------------------------
Procedure citeste_vanzari_seturi(V_COD IN NUMBER,
V_CURSOR OUT cursor_facturare) is
begin
OPEN V_CURSOR FOR
select b2.id_vanzare_set,
cast(a2.id_vanzare_det as number(10)) as id_vanzare_det,
b2.denumire,
b2.explicatie,
b2.cantitate,
b2.um,
b2.serie,
cast(decode(a2.in_valuta,
1,
round(b2.pret * a2.curs / a2.multiplicator,
pack_sesiune.nzecimale_pretv),
b2.pret) as number(14, 4)) as pret,
cast(decode(a2.in_valuta, 1, b2.pret, 0) as number(14, 4)) as pret_val,
a2.id_valuta,
a2.in_valuta as tip_valuta,
c2.nume_val,
decode(a2.in_valuta,
1,
round(Nvl(b2.discount_unitar, 0) * a2.curs /
a2.multiplicator,
pack_sesiune.nzecimale_pretv),
Nvl(b2.discount_unitar, 0)) as discount_unitar,
decode(a2.in_valuta, 1, Nvl(b2.discount_unitar, 0), 0) as discount_unitar_val,
b2.pret_cu_tva as pret_cu_tva,
a2.curs,
a2.multiplicator,
cast(0 as number(18)) as id_ctr, -- a2.id_ctr,
cast(null as varchar2(100)) as numar_contract, -- c2.numar_contract,
cast(a2.proc_tvav as number(8, 4)) as proc_Tvav,
cast(a2.id_jtva_coloana as number(10)) as id_jtva_coloana,
cast(a2.gestionabil as number(1)) as gestionabil,
cast(null as varchar2(100)) as codmat,
cast(null as varchar2(100)) as codmatf,
cast(null as varchar2(100)) as codbare,
cast(0 as number(14, 4)) as pret_achizitie,
cast(null as number(10)) as id_gestiune
from (select b.id_vanzare_set,
a.in_valuta,
-- b.id_ctr,
max(b.proc_tvav) as proc_tvav,
max(nvl2(b.id_gestiune, 1, 0)) as gestionabil,
min(b.id_jtva_coloana) as id_jtva_coloana,
min(b.id_vanzare_det) as id_vanzare_det,
c.curs,
c.multiplicator,
decode(a.in_valuta,
1,
c.id_valuta,
pack_def.getidmonedanationala()) as id_valuta
from (select id_vanzare, in_valuta
from vanzari
where cod = V_COD
and sters = 0) a
left join vanzari_detalii b
on a.id_vanzare = b.id_vanzare
and b.sters = 0
left join vanzari_cursuri c
on decode(a.in_valuta, 1, b.id_valuta, -10000) =
decode(a.in_valuta, 1, c.id_valuta, -9999)
and a.id_vanzare = c.id_vanzare
where b.id_vanzare_set is not null
group by b.id_vanzare_set,
a.in_valuta,
b.id_ctr,
c.curs,
c.multiplicator,
decode(a.in_valuta,
1,
c.id_valuta,
pack_def.getidmonedanationala())) a2
left join vanzari_seturi b2
on a2.id_vanzare_set = b2.id_vanzare_set
left join nom_valute c2
on a2.id_valuta = c2.id_valuta;
end citeste_vanzari_seturi;
-----------------------------------------------------------------------------------------------
Procedure citeste_proforme_seturi(V_ID_PROFORMA IN NUMBER,
V_CURSOR OUT cursor_facturare) is
begin
OPEN V_CURSOR FOR
select b2.id_proforma_set as id_vanzare_set,
cast(a2.id_proforma_det as number(10)) as id_vanzare_det,
b2.denumire,
b2.explicatie,
b2.cantitate,
b2.um,
b2.serie,
cast(round(decode(a2.in_valuta,
1,
round(b2.pret * a2.curs / a2.multiplicator,
pack_sesiune.nzecimale_pretv),
b2.pret),
pack_sesiune.nzecimale_pretv) as number(14, 4)) as pret,
cast(round(decode(a2.in_valuta, 1, b2.pret, 0),
pack_sesiune.nzecimale_pretvval) as number(14, 4)) as pret_val,
a2.id_valuta,
a2.in_valuta as tip_valuta,
c2.nume_val,
decode(a2.in_valuta,
1,
round(Nvl(b2.discount_unitar, 0) * a2.curs /
a2.multiplicator,
pack_sesiune.nzecimale_pretv),
Nvl(b2.discount_unitar, 0)) as discount_unitar,
decode(a2.in_valuta, 1, Nvl(b2.discount_unitar, 0), 0) as discount_unitar_val,
b2.pret_cu_tva as pret_cu_tva,
a2.curs,
a2.multiplicator,
cast(0 as number(18)) as id_ctr, -- a2.id_ctr,
cast(null as varchar2(100)) as numar_contract, -- c2.numar_contract,
cast(a2.proc_tvav as number(8, 4)) as proc_Tvav,
cast(a2.id_jtva_coloana as number(10)) as id_jtva_coloana,
cast(a2.gestionabil as number(1)) as gestionabil,
cast(null as varchar2(100)) as codmat,
cast(null as varchar2(100)) as codmatf,
cast(null as varchar2(100)) as codbare,
cast(0 as number(14, 4)) as pret_achizitie,
cast(null as number(10)) as id_gestiune
from (select b.id_proforma_set,
a.in_valuta,
-- b.id_ctr,
max(b.proc_tvav) as proc_tvav,
max(nvl2(b.id_gestiune, 1, 0)) as gestionabil,
min(b.id_jtva_coloana) as id_jtva_coloana,
min(b.id_proforma_det) as id_proforma_det,
c.curs,
c.multiplicator,
decode(a.in_valuta,
1,
c.id_valuta,
pack_def.getidmonedanationala()) as id_valuta
from (select id_proforma, in_valuta
from proforme
where id_proforma = V_ID_PROFORMA
and sters = 0) a
left join proforme_detalii b
on a.id_proforma = b.id_proforma
and b.sters = 0
left join proforme_cursuri c
on decode(a.in_valuta, 1, b.id_valuta, -10000) =
decode(a.in_valuta, 1, c.id_valuta, -9999)
and a.id_proforma = c.id_proforma
where b.id_proforma_set is not null
group by b.id_proforma_set,
a.in_valuta,
b.id_ctr,
c.curs,
c.multiplicator,
decode(a.in_valuta,
1,
c.id_valuta,
pack_def.getidmonedanationala())) a2
left join proforme_seturi b2
on a2.id_proforma_set = b2.id_proforma_set
left join nom_valute c2
on a2.id_valuta = c2.id_valuta;
end citeste_proforme_seturi;
-----------------------------------------------------------------------------------------------
procedure adauga_note_tva_incasare is
begin
UPDATE ACT_TEMP
SET SCC = '4428'
WHERE SCC = '4427'
AND TVA_INCASARE = 1
AND ID_JTVA_COLOANA IN
(SELECT ID_TVA
FROM JTVA_COLOANE
WHERE ID_JTVA_COLOANA IN (SELECT ID_JTVA_NEEX
FROM JTVA_COLOANE
WHERE STERS = 0
AND JV = 1));
INSERT INTO ACT_TEMP
(ID_ACT,
SERIE_ACT,
NRACT,
DATAIREG,
DATAACT,
PERECHEC,
SCD,
ASCD,
SCC,
ASCC,
SUMA,
ID_JTVA_COLOANA,
PROC_TVA,
ID_CTR,
ID_LUCRARE,
ID_FDOC,
ID_SECTIE,
ID_VENCHELT,
ID_FACT,
TVA_INCASARE,
ID_SET)
SELECT pack_facturare.nid_act + rownum as ID_ACT,
pack_facturare.cserie_act_incasare as serie_act,
pack_facturare.nnumar_act_incasare as nract,
pack_facturare.ddata_ireg as dataireg,
pack_facturare.ddata_act as dataact,
pack_facturare.nnumar_act as perechec,
'4428' as scd,
A1.ACONT as ascd,
'4427' as scc,
'' as ascc,
ROUND((CASE
WHEN A1.DIF <= 0 THEN
A1.totctva
ELSE
A1.totctva - A1.DIF
END) / A1.proc_tva * (A1.proc_tva - 1),
pack_sesiune.getoptiunefirma('PC')) as suma,
A3.ID_TVA AS ID_JTVA_COLOANA,
A1.PROC_TVA,
Null as id_ctr,
NVL(pack_facturare.nid_lucrare, 0) as id_lucrare,
A1.ID_FDOC,
A1.ID_SECTIE,
A1.ID_VENCHELT,
-5 AS id_fact,
pack_facturare.ntva_incasare,
pack_facturare.nid_set as id_set
FROM (select MAX(ID_FDOC) OVER() as id_fdoc,
acont,
proc_tva,
id_jtva_coloana,
baza,
tva,
totctva,
id_sectie,
id_venchelt,
SUM(totctva) OVER(ORDER BY PROC_TVA DESC, ACONT) as DIF
from (SELECT MAX(ID_FDOC) AS ID_FDOC,
NULL AS ACONT,
2 AS PROC_TVA,
0 as baza,
0 as tva,
(-1) * sum(suma) AS totctva,
NULL AS ID_JTVA_COLOANA,
NULL AS ID_SECTIE,
NULL AS ID_VENCHELT
FROM act_temp
WHERE scc = '4111'
and id_jtva_coloana is null
UNION ALL
select null as id_fdoc,
a.ascc as acont,
a.proc_tva,
c.baza,
a.tva,
c.baza + a.tva as totctva,
a.id_jtva_coloana,
a.id_sectie,
a.id_venchelt
from (select ascc,
proc_tva,
sum(suma) as tva,
id_jtva_coloana,
max(id_sectie) as id_sectie,
max(id_venchelt) as id_venchelt
from act_temp
where id_jtva_coloana in
(SELECT ID_TVA
FROM VJTVA_COLOANE
WHERE ID_JTVA_EX IS NOT NULL)
group by proc_tva, id_jtva_coloana, ascc) a
left join jtva_coloane b
on a.id_jtva_coloana = b.id_tva
left join (select sum(decode(scc, '4111', -1, 1) * suma) as baza,
id_jtva_coloana
from act_temp
where id_jtva_coloana in
(SELECT ID_JTVA_COLOANA
FROM VJTVA_COLOANE
WHERE ID_JTVA_EX IS NOT NULL)
group by id_jtva_coloana) c
on b.id_jtva_coloana = c.id_jtva_coloana)) A1
LEFT JOIN VJTVA_COLOANE A2
ON A1.ID_JTVA_COLOANA = A2.ID_TVA
LEFT JOIN VJTVA_COLOANE A3
ON A2.ID_JTVA_EX = A3.ID_JTVA_COLOANA
WHERE A1.ID_JTVA_COLOANA IS NOT NULL
AND A1.totctva > A1.DIF;
end adauga_note_tva_incasare;
-----------------------------------------------------------------------------------------------
function citeste_lungcampexplart return NUMBER is
V_LUNGIME NUMBER(10);
begin
select data_length
into V_LUNGIME
from user_tab_columns
where column_name = 'EXPLICATIE'
and table_name = 'VANZARI_DETALII';
return V_LUNGIME;
end citeste_lungcampexplart;
-----------------------------------------------------------------------------------------------
function getAnaliticK(tnProcTvaV IN NUMBER) return VARCHAR2 is
V_ANALITICCUST ACT.ASCC%TYPE;
lnProcTVA number(2);
begin
if tnProcTvaV between 1 and 2 then
lnProcTVA := round((tnProcTvaV - 1) * 100, 0);
else
lnProcTVA := tnProcTvaV;
end if;
-- analiticele tip nou 371,378,4428 pentru descarcarea K
-- tnProcTvaV = 5/9/19/20/24 sau 1.05/1.09/1.19/1.20/1.24
-- optiuni de tipul FACTANALITICCUSTK_5/FACTANALITICCUSTK_9/FACTANALITICCUSTK_19...
V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK_' ||
lnProcTVA);
if V_ANALITICCUST is null then
-- daca nu gasesc analitice cu optiuni de tip nou, caut optiunile vechi pentru cota standard si cota redusa 5%
if tnProcTvaV in (1.24, 1.20, 1.19) then
V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK2');
else
V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK');
end if;
end if;
return V_ANALITICCUST;
end getAnaliticK;
----------------------------
-- Obtine sold client 4111 + 461 -419 din balanta_parteneri sau din ireg_parteneri pana la numarul facturii
-- Pentru afisarea in raportul factura
procedure getSoldClient(tnAn IN NUMBER,
tnLuna IN NUMBER,
tnIdPart IN NUMBER,
tnIdFact IN NUMBER default 0,
V_CURSOR OUT cursor_facturare) is
begin
IF nvl(tnIdFact, 0) = 0 then
OPEN V_CURSOR FOR
SELECT SUM(semn * (precdeb + debit - preccred - credit)) as sold_lei,
SUM(semn * (precvaldeb + valdebit - precvalcred - valcredit)) as sold_valuta
from (select 1 as semn,
precdeb,
debit,
preccred,
credit,
precvaldeb,
valdebit,
precvalcred,
valcredit
from balanta_parteneri
WHERE an = tnAn
AND luna = tnLuna
and id_part = tnIdPart
AND cont in ('4111', '461'));
ELSE
OPEN V_CURSOR FOR
SELECT SUM(semn * (precdeb + debit - preccred - credit)) as sold_lei,
SUM(semn * (precvaldeb + valdebit - precvalcred - valcredit)) as sold_valuta
from (select 1 as semn,
precdeb,
debit,
preccred,
credit,
precvaldeb,
valdebit,
precvalcred,
valcredit
from ireg_parteneri
WHERE an = tnAn
AND luna = tnLuna
and id_part = tnIdPart
AND cont in ('4111', '461')
and (dataact < (select max(dataact)
from ireg_parteneri
where an = tnAn
and luna = tnLuna
and id_part = tnIdPart
and id_fact = tnIdFact) or
nract <= (select max(nract)
from ireg_parteneri
where an = tnAn
and luna = tnLuna
and id_part = tnIdPart
and id_fact = tnIdFact)));
END IF;
end getSoldClient;
end PACK_FACTURARE;
/