-
x${item.quantity || 0}
-
${item.price != null ? Number(item.price).toFixed(2) : '-'} lei
-
${esc(codmat)}
-
${statusLabel}
+ mobileContainer.innerHTML = '
' + items.map((item, idx) => {
+ const codmatList = item.codmat_details?.length
+ ? item.codmat_details.map(d => `
${esc(d.codmat)}`).join(' ')
+ : `
${esc(item.codmat || '–')}`;
+ const valoare = (Number(item.price || 0) * Number(item.quantity || 0)).toFixed(2);
+ return `
+
+ ${esc(item.sku)}
+ ${codmatList}
+
+
+ ${esc(item.product_name || '–')}
+ x${item.quantity || 0}
+ ${valoare} lei
`;
- }).join('');
+ }).join('') + '
';
}
document.getElementById('detailItemsBody').innerHTML = items.map(item => {
- let statusBadge;
- switch (item.mapping_status) {
- case 'mapped': statusBadge = '
Mapat'; break;
- case 'direct': statusBadge = '
Direct'; break;
- case 'missing': statusBadge = '
Lipsa'; break;
- default: statusBadge = '
?';
- }
-
- const action = item.mapping_status === 'missing'
- ? `
`
- : '';
-
+ const valoare = (Number(item.price || 0) * Number(item.quantity || 0)).toFixed(2);
+ const codmatCell = `
${renderCodmatCell(item)}`;
return `
${esc(item.sku)} |
${esc(item.product_name || '-')} |
+ ${codmatCell} |
${item.quantity || 0} |
${item.price != null ? Number(item.price).toFixed(2) : '-'} |
- ${item.vat != null ? Number(item.vat).toFixed(2) : '-'} |
- ${renderCodmatCell(item)} |
- ${statusBadge} |
- ${action} |
+ ${valoare} |
`;
}).join('');
} catch (err) {
diff --git a/api/app/static/js/settings.js b/api/app/static/js/settings.js
new file mode 100644
index 0000000..9219d39
--- /dev/null
+++ b/api/app/static/js/settings.js
@@ -0,0 +1,101 @@
+let settAcTimeout = null;
+
+document.addEventListener('DOMContentLoaded', () => {
+ loadSettings();
+ wireAutocomplete('settTransportCodmat', 'settTransportAc');
+ wireAutocomplete('settDiscountCodmat', 'settDiscountAc');
+});
+
+async function loadSettings() {
+ try {
+ const res = await fetch('/api/settings');
+ const data = await res.json();
+ const el = (id) => document.getElementById(id);
+ if (el('settTransportCodmat')) el('settTransportCodmat').value = data.transport_codmat || '';
+ if (el('settTransportVat')) el('settTransportVat').value = data.transport_vat || '21';
+ if (el('settTransportIdPol')) el('settTransportIdPol').value = data.transport_id_pol || '';
+ if (el('settDiscountCodmat')) el('settDiscountCodmat').value = data.discount_codmat || '';
+ if (el('settDiscountVat')) el('settDiscountVat').value = data.discount_vat || '19';
+ if (el('settDiscountIdPol')) el('settDiscountIdPol').value = data.discount_id_pol || '';
+ if (el('settIdPol')) el('settIdPol').value = data.id_pol || '';
+ if (el('settIdSectie')) el('settIdSectie').value = data.id_sectie || '';
+ } catch (err) {
+ console.error('loadSettings error:', err);
+ }
+}
+
+async function saveSettings() {
+ const el = (id) => document.getElementById(id);
+ const payload = {
+ transport_codmat: el('settTransportCodmat')?.value?.trim() || '',
+ transport_vat: el('settTransportVat')?.value || '21',
+ transport_id_pol: el('settTransportIdPol')?.value?.trim() || '',
+ discount_codmat: el('settDiscountCodmat')?.value?.trim() || '',
+ discount_vat: el('settDiscountVat')?.value || '19',
+ discount_id_pol: el('settDiscountIdPol')?.value?.trim() || '',
+ id_pol: el('settIdPol')?.value?.trim() || '',
+ id_sectie: el('settIdSectie')?.value?.trim() || '',
+ };
+ try {
+ const res = await fetch('/api/settings', {
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(payload)
+ });
+ const data = await res.json();
+ const resultEl = document.getElementById('settSaveResult');
+ if (data.success) {
+ if (resultEl) { resultEl.textContent = 'Salvat!'; resultEl.style.color = '#16a34a'; }
+ setTimeout(() => { if (resultEl) resultEl.textContent = ''; }, 3000);
+ } else {
+ if (resultEl) { resultEl.textContent = 'Eroare: ' + JSON.stringify(data); resultEl.style.color = '#dc2626'; }
+ }
+ } catch (err) {
+ const resultEl = document.getElementById('settSaveResult');
+ if (resultEl) { resultEl.textContent = 'Eroare: ' + err.message; resultEl.style.color = '#dc2626'; }
+ }
+}
+
+function wireAutocomplete(inputId, dropdownId) {
+ const input = document.getElementById(inputId);
+ const dropdown = document.getElementById(dropdownId);
+ if (!input || !dropdown) return;
+
+ input.addEventListener('input', () => {
+ clearTimeout(settAcTimeout);
+ settAcTimeout = setTimeout(async () => {
+ const q = input.value.trim();
+ if (q.length < 2) { dropdown.classList.add('d-none'); return; }
+ try {
+ const res = await fetch(`/api/articles/search?q=${encodeURIComponent(q)}`);
+ const data = await res.json();
+ if (!data.results || data.results.length === 0) { dropdown.classList.add('d-none'); return; }
+ dropdown.innerHTML = data.results.map(r =>
+ `
+ ${escHtml(r.codmat)} — ${escHtml(r.denumire)}
+
`
+ ).join('');
+ dropdown.classList.remove('d-none');
+ } catch { dropdown.classList.add('d-none'); }
+ }, 250);
+ });
+
+ input.addEventListener('blur', () => {
+ setTimeout(() => dropdown.classList.add('d-none'), 200);
+ });
+}
+
+function settSelectArticle(inputId, dropdownId, codmat) {
+ document.getElementById(inputId).value = codmat;
+ document.getElementById(dropdownId).classList.add('d-none');
+}
+
+function escHtml(s) {
+ if (s == null) return '';
+ return String(s)
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
+}
diff --git a/api/database-scripts/08_PACK_FACTURARE.pck b/api/database-scripts/08_PACK_FACTURARE.pck
new file mode 100644
index 0000000..7b2a9dd
--- /dev/null
+++ b/api/database-scripts/08_PACK_FACTURARE.pck
@@ -0,0 +1,16928 @@
+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;
+
+ <
>
+ 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;
+/
diff --git a/deploy.ps1 b/deploy.ps1
new file mode 100644
index 0000000..c6ebfcf
--- /dev/null
+++ b/deploy.ps1
@@ -0,0 +1,528 @@
+#Requires -RunAsAdministrator
+<#
+.SYNOPSIS
+ Deploy / update GoMag Import Manager pe Windows Server cu IIS.
+
+.DESCRIPTION
+ - Prima rulare: clone repo, setup venv, genereaza start.bat, configureaza IIS
+ - Rulari ulterioare: git pull, reinstaleaza deps, restarteaza serviciul
+
+.PARAMETER RepoPath
+ Calea locala unde se cloneaza repo-ul. Default: C:\gomag-vending
+
+.PARAMETER Port
+ Portul pe care ruleaza FastAPI. Default: 5003
+
+.PARAMETER IisSiteName
+ Numele site-ului IIS parinte. Default: "Default Web Site"
+
+.PARAMETER SkipIIS
+ Sarit configurarea IIS (util daca nu ai ARR/URLRewrite instalate inca)
+
+.EXAMPLE
+ .\deploy.ps1
+ .\deploy.ps1 -RepoPath "D:\apps\gomag-vending" -Port 5003
+ .\deploy.ps1 -SkipIIS
+#>
+
+param(
+ [string]$RepoPath = "C:\gomag-vending",
+ [int] $Port = 5003,
+ [string]$IisSiteName = "Default Web Site",
+ [switch]$SkipIIS
+)
+
+Set-StrictMode -Version Latest
+$ErrorActionPreference = "Stop"
+
+# ─────────────────────────────────────────────────────────────────────────────
+# Helpers
+# ─────────────────────────────────────────────────────────────────────────────
+function Write-Step { param([string]$msg) Write-Host "`n==> $msg" -ForegroundColor Cyan }
+function Write-OK { param([string]$msg) Write-Host " [OK] $msg" -ForegroundColor Green }
+function Write-Warn { param([string]$msg) Write-Host " [WARN] $msg" -ForegroundColor Yellow }
+function Write-Fail { param([string]$msg) Write-Host " [FAIL] $msg" -ForegroundColor Red }
+function Write-Info { param([string]$msg) Write-Host " $msg" -ForegroundColor Gray }
+
+$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 1. Citire token Gitea
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Citire token Gitea"
+
+$TokenFile = Join-Path $ScriptDir ".gittoken"
+$GitToken = ""
+
+if (Test-Path $TokenFile) {
+ $GitToken = (Get-Content $TokenFile -Raw).Trim()
+ Write-OK "Token citit din $TokenFile"
+} else {
+ Write-Warn ".gittoken nu exista langa deploy.ps1"
+ Write-Info "Creeaza fisierul $TokenFile cu token-ul tau Gitea (fara newline)"
+ Write-Info "Ex: echo -n 'ghp_xxxx' > .gittoken"
+ Write-Info ""
+ Write-Info "Continui fara token (merge doar daca repo-ul e public sau deja clonat)"
+}
+
+$RepoUrl = if ($GitToken) {
+ "https://$GitToken@gitea.romfast.ro/romfast/gomag-vending.git"
+} else {
+ "https://gitea.romfast.ro/romfast/gomag-vending.git"
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 2. Git clone / pull
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Git clone / pull"
+
+# Verifica git instalat
+if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
+ Write-Fail "Git nu este instalat!"
+ Write-Info "Descarca Git for Windows de la: https://git-scm.com/download/win"
+ exit 1
+}
+
+if (Test-Path (Join-Path $RepoPath ".git")) {
+ Write-Info "Repo exista, fac git pull..."
+ Push-Location $RepoPath
+ try {
+ # Update remote URL cu tokenul curent (in caz ca s-a schimbat)
+ if ($GitToken) {
+ git remote set-url origin $RepoUrl 2>$null
+ }
+ git pull --ff-only
+ Write-OK "git pull OK"
+ } finally {
+ Pop-Location
+ }
+} else {
+ Write-Info "Clonez in $RepoPath ..."
+ $ParentDir = Split-Path -Parent $RepoPath
+ if (-not (Test-Path $ParentDir)) {
+ New-Item -ItemType Directory -Path $ParentDir -Force | Out-Null
+ }
+ git clone $RepoUrl $RepoPath
+ Write-OK "git clone OK"
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 3. Verificare Python
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Verificare Python"
+
+$PythonCmd = $null
+foreach ($candidate in @("python", "python3", "py")) {
+ try {
+ $ver = & $candidate --version 2>&1
+ if ($ver -match "Python 3\.(\d+)") {
+ $minor = [int]$Matches[1]
+ if ($minor -ge 11) {
+ $PythonCmd = $candidate
+ Write-OK "Python gasit: $ver ($candidate)"
+ break
+ } else {
+ Write-Warn "Python $ver prea vechi (necesar 3.11+)"
+ }
+ }
+ } catch { }
+}
+
+if (-not $PythonCmd) {
+ Write-Fail "Python 3.11+ nu este instalat sau nu e in PATH!"
+ Write-Info "Descarca de la: https://www.python.org/downloads/"
+ Write-Info "IMPORTANT: Bifeaza 'Add Python to PATH' la instalare"
+ exit 1
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 4. Creare venv si instalare dependinte
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Virtual environment + dependinte"
+
+$VenvDir = Join-Path $RepoPath "venv"
+$VenvPip = Join-Path $VenvDir "Scripts\pip.exe"
+$VenvPy = Join-Path $VenvDir "Scripts\python.exe"
+$ReqFile = Join-Path $RepoPath "api\requirements.txt"
+$DepsFlag = Join-Path $VenvDir ".deps_installed"
+
+if (-not (Test-Path $VenvDir)) {
+ Write-Info "Creez venv..."
+ & $PythonCmd -m venv $VenvDir
+ Write-OK "venv creat"
+}
+
+# Reinstaleaza daca requirements.txt e mai nou decat flag-ul
+$needInstall = $true
+if (Test-Path $DepsFlag) {
+ $reqTime = (Get-Item $ReqFile).LastWriteTime
+ $flagTime = (Get-Item $DepsFlag).LastWriteTime
+ if ($flagTime -ge $reqTime) { $needInstall = $false }
+}
+
+if ($needInstall) {
+ Write-Info "Instalez dependinte din requirements.txt..."
+ & $VenvPip install --upgrade pip --quiet
+ & $VenvPip install -r $ReqFile
+ New-Item -ItemType File -Path $DepsFlag -Force | Out-Null
+ Write-OK "Dependinte instalate"
+} else {
+ Write-OK "Dependinte deja up-to-date"
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 5. Detectare Oracle Home → sugestie INSTANTCLIENTPATH
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Detectare Oracle"
+
+$OracleHome = $env:ORACLE_HOME
+$OracleBinPath = ""
+
+if ($OracleHome -and (Test-Path $OracleHome)) {
+ $OracleBinPath = Join-Path $OracleHome "bin"
+ Write-OK "ORACLE_HOME detectat: $OracleHome"
+ Write-Info "Seteaza in api\.env: INSTANTCLIENTPATH=$OracleBinPath"
+} else {
+ # Cauta Oracle in locatii comune
+ $commonPaths = @(
+ "C:\oracle\product\19c\dbhome_1\bin",
+ "C:\oracle\product\21c\dbhome_1\bin",
+ "C:\app\oracle\product\19.0.0\dbhome_1\bin",
+ "C:\oracle\instantclient_19_15",
+ "C:\oracle\instantclient_21_3"
+ )
+ foreach ($p in $commonPaths) {
+ if (Test-Path "$p\oci.dll") {
+ $OracleBinPath = $p
+ Write-OK "Oracle gasit la: $p"
+ Write-Info "Seteaza in api\.env: INSTANTCLIENTPATH=$p"
+ break
+ }
+ }
+ if (-not $OracleBinPath) {
+ Write-Warn "Oracle Instant Client nu a fost gasit automat"
+ Write-Info "Optiuni:"
+ Write-Info " 1. Thick mode: seteaza INSTANTCLIENTPATH= in api\.env"
+ Write-Info " 2. Thin mode: seteaza FORCE_THIN_MODE=true in api\.env"
+ }
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 6. Creare .env din template daca lipseste
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Fisier configurare api\.env"
+
+$EnvFile = Join-Path $RepoPath "api\.env"
+$EnvExample = Join-Path $RepoPath "api\.env.example"
+
+if (-not (Test-Path $EnvFile)) {
+ if (Test-Path $EnvExample) {
+ Copy-Item $EnvExample $EnvFile
+ Write-OK "api\.env creat din .env.example"
+
+ # Actualizeaza TNS_ADMIN cu calea reala
+ $ApiDir = Join-Path $RepoPath "api"
+ (Get-Content $EnvFile) -replace "TNS_ADMIN=.*", "TNS_ADMIN=$ApiDir" |
+ Set-Content $EnvFile
+
+ # Seteaza INSTANTCLIENTPATH daca am gasit Oracle
+ if ($OracleBinPath) {
+ (Get-Content $EnvFile) -replace "INSTANTCLIENTPATH=.*", "INSTANTCLIENTPATH=$OracleBinPath" |
+ Set-Content $EnvFile
+ }
+
+ Write-Warn "IMPORTANT: Editeaza $EnvFile cu credentialele Oracle si GoMag API!"
+ Write-Info " ORACLE_USER, ORACLE_PASSWORD, ORACLE_DSN"
+ Write-Info " GOMAG_API_KEY, GOMAG_API_SHOP"
+ } else {
+ Write-Warn ".env.example nu exista, sari pasul"
+ }
+} else {
+ Write-OK "api\.env exista deja"
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 7. Creare directoare necesare
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Directoare date"
+
+foreach ($dir in @("data", "output", "logs")) {
+ $fullPath = Join-Path $RepoPath $dir
+ if (-not (Test-Path $fullPath)) {
+ New-Item -ItemType Directory -Path $fullPath -Force | Out-Null
+ Write-OK "Creat: $dir\"
+ } else {
+ Write-OK "Exista: $dir\"
+ }
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 8. Generare start.bat
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Generare start.bat"
+
+$StartBat = Join-Path $RepoPath "start.bat"
+
+# Citeste TNS_ADMIN si INSTANTCLIENTPATH din .env daca exista
+$TnsAdmin = Join-Path $RepoPath "api"
+$InstantClient = ""
+if (Test-Path $EnvFile) {
+ Get-Content $EnvFile | ForEach-Object {
+ if ($_ -match "^TNS_ADMIN=(.+)") {
+ $TnsAdmin = $Matches[1].Trim()
+ }
+ if ($_ -match "^INSTANTCLIENTPATH=(.+)" -and $_ -notmatch "^#") {
+ $InstantClient = $Matches[1].Trim()
+ }
+ }
+}
+
+$OraclePathLine = ""
+if ($InstantClient) {
+ $OraclePathLine = "set PATH=$InstantClient;%PATH%"
+}
+
+$StartBatContent = @"
+@echo off
+:: GoMag Import Manager - Windows Launcher
+:: Generat de deploy.ps1 - nu edita manual, ruleaza deploy.ps1 din nou
+
+cd /d "$RepoPath"
+set TNS_ADMIN=$TnsAdmin
+$OraclePathLine
+
+echo Starting GoMag Import Manager on http://0.0.0.0:$Port (prefix /gomag)
+"$VenvPy" -m uvicorn app.main:app --host 0.0.0.0 --port $Port --root-path /gomag --app-dir api
+"@
+
+Set-Content -Path $StartBat -Value $StartBatContent -Encoding UTF8
+Write-OK "start.bat generat: $StartBat"
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 9. IIS — Verificare ARR + URL Rewrite
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Verificare module IIS"
+
+if ($SkipIIS) {
+ Write-Warn "SkipIIS activ — configurare IIS sarita"
+} else {
+ $ArrPath = "$env:SystemRoot\System32\inetsrv\arr.dll"
+ $UrlRewritePath = "$env:SystemRoot\System32\inetsrv\rewrite.dll"
+
+ $ArrOk = Test-Path $ArrPath
+ $UrlRwOk = Test-Path $UrlRewritePath
+
+ if ($ArrOk) {
+ Write-OK "Application Request Routing (ARR) instalat"
+ } else {
+ Write-Warn "ARR 3.0 NU este instalat"
+ Write-Info "Descarca: https://www.iis.net/downloads/microsoft/application-request-routing"
+ Write-Info "Sau: winget install Microsoft.ARR"
+ }
+
+ if ($UrlRwOk) {
+ Write-OK "URL Rewrite 2.1 instalat"
+ } else {
+ Write-Warn "URL Rewrite 2.1 NU este instalat"
+ Write-Info "Descarca: https://www.iis.net/downloads/microsoft/url-rewrite"
+ Write-Info "Sau: winget install Microsoft.URLRewrite"
+ }
+
+ # ─────────────────────────────────────────────────────────────────────────
+ # 10. Configurare IIS — copiere web.config
+ # ─────────────────────────────────────────────────────────────────────────
+ if ($ArrOk -and $UrlRwOk) {
+ Write-Step "Configurare IIS reverse proxy"
+
+ # Activeaza proxy in ARR (necesar o singura data)
+ try {
+ Import-Module WebAdministration -ErrorAction SilentlyContinue
+ $proxyEnabled = (Get-WebConfigurationProperty `
+ -pspath "MACHINE/WEBROOT/APPHOST" `
+ -filter "system.webServer/proxy" `
+ -name "enabled" `
+ -ErrorAction SilentlyContinue).Value
+ if (-not $proxyEnabled) {
+ Set-WebConfigurationProperty `
+ -pspath "MACHINE/WEBROOT/APPHOST" `
+ -filter "system.webServer/proxy" `
+ -name "enabled" `
+ -value $true
+ Write-OK "ARR proxy activat global"
+ } else {
+ Write-OK "ARR proxy deja activ"
+ }
+ } catch {
+ Write-Warn "Nu am putut activa ARR proxy automat: $($_.Exception.Message)"
+ Write-Info "Activeaza manual din IIS Manager → server root → Application Request Routing Cache → Enable Proxy"
+ }
+
+ # Determina wwwroot site-ului IIS
+ $IisRootPath = $null
+ try {
+ Import-Module WebAdministration -ErrorAction SilentlyContinue
+ $site = Get-Website -Name $IisSiteName -ErrorAction SilentlyContinue
+ if ($site) {
+ $IisRootPath = [System.Environment]::ExpandEnvironmentVariables($site.PhysicalPath)
+ Write-OK "Site IIS '$IisSiteName' gasit: $IisRootPath"
+ } else {
+ Write-Warn "Site IIS '$IisSiteName' nu a fost gasit"
+ }
+ } catch {
+ # Fallback la locatia standard
+ $IisRootPath = "$env:SystemDrive\inetpub\wwwroot"
+ Write-Warn "WebAdministration unavailable, folosesc fallback: $IisRootPath"
+ }
+
+ if ($IisRootPath) {
+ $SourceWebConfig = Join-Path $RepoPath "iis-web.config"
+ $DestWebConfig = Join-Path $IisRootPath "web.config"
+
+ if (Test-Path $SourceWebConfig) {
+ # Inlocuieste portul in web.config cu cel configurat
+ $wcContent = Get-Content $SourceWebConfig -Raw
+ $wcContent = $wcContent -replace "localhost:5003", "localhost:$Port"
+
+ if (Test-Path $DestWebConfig) {
+ # Backup web.config existent
+ $backup = "$DestWebConfig.bak_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
+ Copy-Item $DestWebConfig $backup
+ Write-Info "Backup web.config: $backup"
+ }
+
+ Set-Content -Path $DestWebConfig -Value $wcContent -Encoding UTF8
+ Write-OK "web.config copiat in $IisRootPath"
+ } else {
+ Write-Warn "iis-web.config nu exista in repo, sarit"
+ }
+
+ # Restart IIS
+ try {
+ iisreset /noforce 2>&1 | Out-Null
+ Write-OK "IIS restartat"
+ } catch {
+ Write-Warn "IIS restart esuat: $($_.Exception.Message)"
+ Write-Info "Ruleaza manual: iisreset"
+ }
+ }
+ } else {
+ Write-Warn "IIS nu e configurat complet — instaleaza ARR si URL Rewrite, apoi ruleaza deploy.ps1 din nou"
+ }
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# 11. Serviciu Windows (NSSM sau Task Scheduler)
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Step "Serviciu Windows"
+
+$ServiceName = "GoMagVending"
+$NssmExe = ""
+
+# Cauta NSSM
+foreach ($p in @("nssm", "C:\nssm\win64\nssm.exe", "C:\tools\nssm\nssm.exe")) {
+ if (Get-Command $p -ErrorAction SilentlyContinue) {
+ $NssmExe = $p
+ break
+ }
+}
+
+if ($NssmExe) {
+ Write-Info "NSSM gasit: $NssmExe"
+
+ $existingService = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
+
+ if ($existingService) {
+ Write-Info "Serviciu existent, restarteaza..."
+ & $NssmExe restart $ServiceName
+ Write-OK "Serviciu $ServiceName restartat"
+ } else {
+ Write-Info "Instalez serviciu $ServiceName cu NSSM..."
+ & $NssmExe install $ServiceName (Join-Path $RepoPath "start.bat")
+ & $NssmExe set $ServiceName AppDirectory $RepoPath
+ & $NssmExe set $ServiceName DisplayName "GoMag Vending Import Manager"
+ & $NssmExe set $ServiceName Description "Import comenzi web GoMag -> ROA Oracle"
+ & $NssmExe set $ServiceName Start SERVICE_AUTO_START
+ & $NssmExe set $ServiceName AppStdout (Join-Path $RepoPath "logs\service_stdout.log")
+ & $NssmExe set $ServiceName AppStderr (Join-Path $RepoPath "logs\service_stderr.log")
+ & $NssmExe set $ServiceName AppRotateFiles 1
+ & $NssmExe set $ServiceName AppRotateOnline 1
+ & $NssmExe set $ServiceName AppRotateBytes 10485760
+ & $NssmExe start $ServiceName
+ Write-OK "Serviciu $ServiceName instalat si pornit"
+ }
+
+} else {
+ # Fallback: Task Scheduler
+ Write-Warn "NSSM nu este instalat"
+ Write-Info "Optiuni:"
+ Write-Info " 1. Descarca NSSM: https://nssm.cc/download si pune nssm.exe in PATH"
+ Write-Info " 2. Sau foloseste Task Scheduler (creat mai jos)"
+
+ # Verifica daca task-ul exista deja
+ $taskExists = Get-ScheduledTask -TaskName $ServiceName -ErrorAction SilentlyContinue
+
+ if (-not $taskExists) {
+ Write-Info "Creez Task Scheduler task '$ServiceName'..."
+ try {
+ $action = New-ScheduledTaskAction -Execute (Join-Path $RepoPath "start.bat")
+ $trigger = New-ScheduledTaskTrigger -AtStartup
+ $settings = New-ScheduledTaskSettingsSet `
+ -ExecutionTimeLimit (New-TimeSpan -Days 365) `
+ -RestartCount 3 `
+ -RestartInterval (New-TimeSpan -Minutes 1)
+ $principal = New-ScheduledTaskPrincipal `
+ -UserId "SYSTEM" `
+ -LogonType ServiceAccount `
+ -RunLevel Highest
+
+ Register-ScheduledTask `
+ -TaskName $ServiceName `
+ -Action $action `
+ -Trigger $trigger `
+ -Settings $settings `
+ -Principal $principal `
+ -Description "GoMag Vending Import Manager" `
+ -Force | Out-Null
+
+ Start-ScheduledTask -TaskName $ServiceName
+ Write-OK "Task Scheduler '$ServiceName' creat si pornit"
+ } catch {
+ Write-Warn "Task Scheduler esuat: $($_.Exception.Message)"
+ Write-Info "Porneste manual: .\start.bat"
+ }
+ } else {
+ # Restart task
+ Stop-ScheduledTask -TaskName $ServiceName -ErrorAction SilentlyContinue
+ Start-ScheduledTask -TaskName $ServiceName
+ Write-OK "Task '$ServiceName' restartat"
+ }
+}
+
+# ─────────────────────────────────────────────────────────────────────────────
+# Sumar final
+# ─────────────────────────────────────────────────────────────────────────────
+Write-Host ""
+Write-Host "══════════════════════════════════════════════════════" -ForegroundColor Cyan
+Write-Host " GoMag Vending Deploy — Sumar" -ForegroundColor Cyan
+Write-Host "══════════════════════════════════════════════════════" -ForegroundColor Cyan
+Write-Host ""
+Write-Host " Repo: $RepoPath" -ForegroundColor White
+Write-Host " FastAPI: http://localhost:$Port/gomag" -ForegroundColor White
+Write-Host " start.bat generat" -ForegroundColor White
+Write-Host ""
+
+if (-not (Test-Path $EnvFile)) {
+ Write-Host " [!] api\.env lipseste — configureaza inainte de start!" -ForegroundColor Red
+} else {
+ Write-Host " api\.env: OK" -ForegroundColor Green
+ # Verifica daca mai are valori placeholder
+ $envContent = Get-Content $EnvFile -Raw
+ if ($envContent -match "your_api_key_here|USER_ORACLE|parola_oracle|TNS_ALIAS") {
+ Write-Host " [!] api\.env contine valori placeholder — editeaza!" -ForegroundColor Yellow
+ }
+}
+
+Write-Host ""
+Write-Host " Acces app: http://SERVER/gomag" -ForegroundColor Cyan
+Write-Host " Test local: http://localhost:$Port/gomag/health" -ForegroundColor Cyan
+Write-Host ""
diff --git a/iis-web.config b/iis-web.config
new file mode 100644
index 0000000..7277f88
--- /dev/null
+++ b/iis-web.config
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+