Files
comun/Programe/proceduri_acnpro.prg
Marius Mutu 69c5290a8d Calcul tranzit: coeficient distanta rotunjit la 3 zecimale + protectie impartire la 0
Pentru distante scurte (ex. 0.2 km) coeficientul de distanta rotunjit la 2
zecimale iesea 0, deci valoarea facturata era 0. Rotunjire la 3 zecimale in
do_executa si in afisarea "mod de calcul". Protectie la impartirea cu 0 la
valoarea finala cand valoarea convoiului calculat este 0.

Adauga docs/fluxuri_calcul_facturare.md (lant facturare end-to-end pe tipuri)
si referinta in CLAUDE.md. Changelog 2.0.5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:45:20 +03:00

6091 lines
224 KiB
Plaintext

#Define TIP_TRANZIT 'TRANZIT'
#Define TIP_CHEIAJ 'CHEIAJ'
#Define TIP_APA 'APA'
#Define TIP_CHIRII 'CHIRII'
#Define TIP_PILOTAJ 'PILOTAJ'
#Define TIP_ALTE 'ALTE'
#Define TIP_PENALITATI 'PENALITATI'
#Define TIP_DIVERSE 'DIVERSE'
#Define NTIP_TRANZIT 0
#Define NTIP_CHEIAJ 1
#Define NTIP_APA 2
#Define NTIP_CHIRII 3
#Define NTIP_PILOTAJ 4
#Define NTIP_ALTE 5
#Define NTIP_PENALITATI 6
#Define NTIP_DIVERSE 9
*!* 29.10.2019
*!* marius.mutu
*!* factura_salvare_db - initializeaza_date_factura(tip_factura, id_beneficiar)
*!* 08.01.2020
*!* marius.mutu
*!* vizualizare_tarife_contracte - se salveaza ctr_articole.valoare
*!* 08.01.2020
*!* marius.mutu
*!* STERG_CHEIAJ - corectare eroare la stergere din IPS_BERTHING_DETAILS_VANZARI - se stergeau toate inregistrarile
*!* vizualizare_tranzit, calcul_cheiaj, salvare_cheiaj, listeaza_recapitulatie_cheiaj - completare ips_voyages_vanzari.document
*!* 09.01.2020
*!* marius.mutu
*!* make_cheiaj_prestatii + id_locatia, locatia
*!* GetObiectTVA - + tnIdJtvaColoana
*!* make_factura_penalitati - explicatia tva Neimpozabil (id_jtva_coloana = 12)
*!* completeaza_actactan - completez partener pentru contul 419 (4111 = 419)
*!* 03.02.2020
*!* completeaza_regdoc_tranzit, vizualizare_tranzit_nave se tine cont ca ips_voyage_locks (ecluzarile) este acum defalcat pe membrii convoi, nu doar pe convoi
*!* 19.03.2020
*!* salvare_cheiaj - se salveaza numele navei suprascris de utilizator daca difera de numele din ips_vessels
*!* pentru facturarea convoiului generic "FARA" DECLARATIE
*!* calcul_penalitati2 - s-a inclus vanzari.tip
*!* + completeaza_regdoc_penalitati - defalcare cregdoc penalitati pe locatii si articole pentru inregistrarea in contabilitate
*!* make_factura_penalitati - se completeaza data referinta in denumirea articolului
*!* 13.04.2020
*!* marius.mutu
*!* + CopyDeclCdtPdf - copiere declaratii comandant pdf in directorul cu facturi
*!* 01.06.2020
*!* completeaza_actactan - centralizare note tva pe cote tva. pentru ca la defalcarea facturilor de tranzit pe camere/sasuri se generau tva-uri individuale cu aceeasi cota, am centralizat sumele tva pe cote
*!* 17.06.2020
*!* completeaza_actactan - am corectat id_jtva_coloana pentru notele de TVA. Au ramas gresit Livrare in loc de TVA livrare de la modificarea din 01.06.2020
*!* 06.07.2020
*!* marius.mutu
*!* completeaza_regdoc_cheiaj - in cRegdoc se salva doar ultimul voiaj, in cazul incare era o factura pentru mai multe istorice de cheiaj
*!* 22.09.2020
*!* calcul_tranzit: am calculat tarifele la capacitatea totala a convoiului, nu numai la capacitatea navelor alese pentru factura curenta
*!* listeaza_recapitulatie_tranzit:
*!* Selectez capacitatea totala a convoiului, nu numai a navelor de pe factura curenta.
*!* Este posibil sa fac facturi catre clienti diferiti pe un singur convoi.
*!* 09.10.2020
*!* listeaza_recapitulatie_tranzit:
*!* Am luat capacitatea totala de pe toate facturile de pe un convoi, dar distinct nave.
*!* Era posibil sa am si facturi de stornare si facturi refacute pe acelasi convoi si se duplica capacitatea
*!* 09.02.2020
*!* calcul_penalitati2 - afisez si facturile cu sold < 0
*!* cerere Lacramioara Guta
*!* 28.04.2021
*!* listeaza_recapitulatie_tranzit
*!* calcul total capacitate convoi. tratare caz in care o factura este stornata si refacturata cu barje cu corectie de TCAP
*!* 09.06.2021
*!* calcul_penalitati_linie, calcul_penalitati2
*!* corectie calcul zile penalitati pentru contractele cu perioada de gratie
*!* recalculare databaza pentru contractele cu perioada de gratie astfel incat, in luna in care se incheie perioada de gratie sa se factureze penalitati si pentru perioada de gratie
*!* 01.10.2021
*!* calcul_penalitati2
*!* s-au inclus incasarile din toata baza de date in loc de luna curenta, daca calculul este facut fata de data scadenta in loc de luna anterioara
*!* 27.03.2022
*!* completare TaxCode SAFT in factura_salvare (crsFactura), factura_salvare_bd (vanzari_detalii), completeaza_actactan (actactan)
*!* 10.01.2023
*!* vizualizare_regdoc (registru documente pe locatii) + document2 (numarul istoric de stationare)
*!* 22.01.2024
*!* make_factura - pentru pret negativ, se face cantitate negativa si pret pozitiv, pentru eFactura
*!* 09.04.2024
*!* salvare_tranzit - salvare ips_voyage_members_vanzari.marfa_country_id
*!* 21.10.2024
*!* factura_salvare_db - INITIALIZARE_dATE_FACTURA TIP_SAFT
*!* 23.07.2025
*!* factura_salvare_db - tratare taxcode = NULL
Procedure vizualizare_regdoc
Private poRegdoc
poRegdoc = Null
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
Text To lcSchema Noshow
id N(20), id_vanzare N(20), tip N(3), cTip C(50), id_articol N(12), articol C(100), id_locatia N(12), locatia C(50), id_valuta N(12), valuta C(20), id_client N(12), client C(70), id_contract N(12), contract C(50), pret N(18,4), curs N(12,4), cantitate N(18,4), valval N(18,4), valftva N(18,4), um C(20), document C(30), data D, document2 C(30), numar_act N(14), data_act D, ctdebitor C(10), ctaideb C(10), ctaedeb C(10), ctcreditor C(10), ctaicred C(10), ctaecred C(10), ctpideb C(10), ctapideb C(10), ctpicred C(10), ctapicred C(10)
Endtext
lcOrder = [data, id]
lcFiltru = [extract(year from data) * 12 + extract(month from data) = ?gnAn*12+?gnLuna]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Noshow
select id,
id_vanzare,
tip,
ctip,
id_articol,
articol,
id_locatia,
locatia,
id_valuta,
valuta,
id_client,
client,
id_contract,
contract,
pret,
curs,
cantitate,
valval,
valftva,
um,
document,
data,
document2,
numar_act,
data_act,
ctdebitor,
ctaideb,
ctaedeb,
ctcreditor,
ctaicred,
ctaecred,
ctpideb,
ctapideb,
ctpicred,
ctapicred
from ips_vregdoc
Endtext
gencursor('poRegDoc', 'crsRegdoc', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poRegdoc.ca_baza1.afisare()
loFrmRegdoc = Createobject("frm_registru") && oacnpro.vcx
loFrmRegdoc.Show(1)
Endproc && vizualizare_regdoc
******************************************
*** Vizualizare convoaie si date facturi
******************************************
Procedure vizualizare_tranzit_facturi
Lparameters tnTip
* tnTip: 0 = TRANZIT, 1 = CHEIAJ
Private poConvoaie
poConvoaie = Null
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
lcSchema = []
lcOrder = [data_act, numar_act]
lcFiltru = [1=2]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = Iif(Pcount() = 0, [], [(tip IS NULL OR ] + Iif(Empty(m.tnTip), [tip=0], [tip=1]) + [)])
Text To lcSelect Noshow
select 0 as ales,
vv_id,
vz_id,
vye_id,
convoy_nam,
declaratio,
document,
generation,
origin,
destinatio,
indicativ,
client,
client_id,
contract_client,
beneficiar,
beneficiar_id,
total_fara_tva,
total_tva,
total_cu_tva,
numar_act,
serie_act,
data_act,
ctip_factura
from ips_vvanzari_voyages
Endtext
gencursor('poConvoaie', 'crsConvoaie', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poConvoaie.ca_baza1.afisare()
loFrmConvoaie = Createobject("frm_tranzit_facturi", m.tnTip) && oacnpro.vcx
loFrmConvoaie.Show(1)
Endproc && vizualizare_tranzit_facturi
******************************************
*** Vizualizare convoaie, nave, date facturare
******************************************
Procedure vizualizare_tranzit_nave
Lparameters tnTip
* tnTip: 1 = selectie din ips_vanzari_voyage_members, 2 = selectie din ips_vanzari_voyage_members_n
* 1 = nu calculeaza valori pe sasn/cameran
* 2 = calculeaza valori pe sasn/cameran, nu se mai foloseste, doar pentru verificari 01/2020-05/2020
Private poConvoaie
poConvoaie = Null
Local lnTip
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
lnTip = Iif(Empty(m.tnTip), 1, m.tnTip)
lcSchema = []
lcOrder = [data_act, numar_act, rn, indicativ]
lcFiltru = [1=2]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Textmerge Noshow
select vmv_id,
vv_id,
client_id,
client,
contract_client,
client_ctr_id,
beneficiar_id,
tiprecap,
beneficiar,
intern,
vz_id,
serie_act,
numar_act,
data_act,
cuplat,
arm_id,
armator,
kmi,
kmf,
rte_id,
ruta,
convoy_nam,
declaratio,
generation,
vye_id,
aviz,
data_aviz,
origin,
destinatio,
vms_id,
vsl_id,
ctt_id,
dirty_tank,
rstart_id,
rfin_id,
distanta,
distanta_cdmn,
distanta_pamn,
contact,
indicativ,
nava_country,
nava_country_id,
lbd,
trn,
hp,
tcap,
tcap_conv,
procdiv,
vtp_id,
tip_nava,
vgrp_id,
grupa_nava,
marfa,
cant_marfa,
um_marfa,
gds_id,
grp_id,
grupa_marfa,
periculos,
corect,
procdist,
id_valuta,
valuta,
tarif,
cant,
um,
marfa_country,
marfa_country_id,
valval,
tvaval,
totval,
valftva,
valtva,
valctva,
curs,
agigea,
cernavoda,
navodari,
ovidiu,
agigea_data,
cernavoda_data,
navodari_data,
ovidiu_data,
agigea_sas1,
agigea_sas2,
agigea_sasn,
cernavoda_sas1,
cernavoda_sas2,
cernavoda_sasn,
ovidiu_c1,
ovidiu_c2,
ovidiu_cn,
navodari_c1,
navodari_c2,
navodari_cn,
agigea1_valoare,
agigea2_valoare,
agigean_valoare,
cernavoda1_valoare,
cernavoda2_valoare,
cernavodan_valoare,
ovidiu1_valoare,
ovidiu2_valoare,
ovidiun_valoare,
navodari1_valoare,
navodari2_valoare,
navodarin_valoare,
senal_cdmn1_valoare,
senal_pam1_valoare,
agigea_valoare,
cernavoda_valoare,
ovidiu_valoare,
navodari_valoare,
senal_cdmn_valoare,
senal_pam_valoare,
rn,
pvalftva
from <<IIF(m.lnTip = 1, 'ips_vanzari_voyage_members', 'ips_vanzari_voyage_members_n')>>
Endtext
gencursor('poConvoaie', 'crsConvoaie', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poConvoaie.ca_baza1.afisare()
loFrmConvoaie = Createobject("frm_tranzit_nave") && oacnpro.vcx
loFrmConvoaie.Show(1)
Endproc && vizualizare_tranzit_nave
******************************************
*** Registru Cheiaj Nave. Vizualizare convoaie, nave, date facturare
******************************************
Procedure vizualizare_cheiaj_nave
Private poCheiaje
poCheiaje = Null
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
lcSchema = []
lcOrder = [an,luna,data_act,numar_act,client,contract]
lcFiltru = [1=2]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Textmerge Noshow
select an,
luna,
serie_act,
data_act,
numar_act,
client,
contract,
beneficiar,
total_fara_tva,
port,
declaratie,
document,
vas,
tip_vas,
grupa_vas,
dana,
ctip,
cant,
um,
tarif,
articol,
datai,
datap,
durata,
valftva,
valtva,
valctva,
nume_val,
curs,
valval,
tvaval,
totval,
cap,
trn,
lung,
cp,
lbd,
zi,
cap_val,
trn_val,
lung_val,
cp_val,
lbd_val,
zi_val
from ips_vanzari_cheiaje_members
Endtext
gencursor('poCheiaje', 'crsCheiaje', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poCheiaje.ca_baza1.afisare()
loFrmCheiaje = Createobject("frm_cheiaje_nave") && oacnpro.vcx
loFrmCheiaje.Show(1)
Endproc && vizualizare_cheiaj_nave
******************************************
*** Vizualizare convoaie si selectie unul sau mai multe in scopul facturarii
*** Se apeleaza din factura
******************************************
Procedure vizualizare_tranzit
Lparameters tnTip
* tnTip: 0 = TRANZIT, 1 = CHEIAJ
Private poConvoaie
poConvoaie = Null
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
lcSchema = []
lcOrder = [declaratio]
lcFiltru = [1=2]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Noshow
select 0 as ales,
id,
vye_id,
generation,
vms_id,
convoy_nam,
declaratio,
notificati,
data_avizare,
notificat2,
avizare,
origin,
destinatio,
mtr_name,
state,
indicativ,
cast('' as Varchar2(50)) as document
from ips_vvoyages
Endtext
gencursor('poConvoaie', 'crsConvoaie', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poConvoaie.ca_baza1.afisare()
loFrmConvoaie = Createobject("frm_tranzit", m.tnTip) && oacnpro.vcx
loFrmConvoaie.Show(1)
llSucces = (m.gnButon = 1)
Return m.llSucces
Endproc && vizualizare_tranzit
******************************************
*** Vizualizare contracte si selectie unul sau mai multe in scopul facturarii
*** Se apeleaza din factura
*** De fapt primeste din factura id_ctr si lanseaza direct calcul_contract
******************************************
Procedure vizualizare_contract
Lparameters tnIdCtr
Local llSucces
llSucces = calcul_contract(m.tnIdCtr)
Return m.llSucces
Endproc && vizualizare_contract
Procedure vizualizare_penalitati
Lparameters tnTipCalcul, tnCalculZile
* tnTipCalcul: 1 (default) = incasari si sold; 2 = incasari; 3 = sold; 4 = evaluare
* tnCalculZile: 1 (default) = calcul zile fata de luna precedenta; 2 = fata de data scadenta
Private pdDataReferinta, pnCalculZile, pnTipCalcul, pl4118, plFacturate, plSterse
Local loPenalitati As "frm_penalitati"
Local loRec
Local lnZileProcent1, lnZileProcent2, lnPenalitati
pdDataReferinta = Gomonth(Date(m.gnAn, m.gnLuna, 1), 1) - 1
pnTipCalcul = Iif(Empty(m.tnTipCalcul), 1, m.tnTipCalcul)
pnCalculZile = Iif(Empty(m.tnCalculZile), 1, m.tnCalculZile)
pl4118 = .F.
plFacturate = .F. && se includ documentele (facturi, incasari) deja facturate? ex: daca se doreste stornarea si refacturarea penalitatilor
plSterse = .F. && se includ documentele sterse de utilizator
Private pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru
Store "" To pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru
Do make_contracte && crsContracte
Do make_valute && crsValute
Use In (Select('crsCalculPenalitati'))
Use In (Select('crsClientiPenalitati'))
make_cCalculPenalitati()
make_cClientiPenalitati()
Select crsCalculPenalitati
loPenalitati = Createobject("frm_penalitati")
loPenalitati.lEvaluare = .T.
loPenalitati.dDataReferinta = m.pdDataReferinta
If m.pnTipCalcul = 3 && evaluare
loPenalitati.lb_titlu_alb_b121.Caption = 'Penalitati - evaluare la ' + Dtoc(m.pdDataReferinta)
loPenalitati.grdPenalitati.cNrDoc.Visible = .F.
loPenalitati.grdPenalitati.cSuma.Header1.Caption = 'Sold restant'
loPenalitati.grdPenalitati.cDataDoc.Header1.Caption = 'Data referinta'
loPenalitati.cmd_Executa1.Visible = .F.
Endif
loPenalitati.Show(1)
Use In (Select('crsCalculPenalitati'))
Use In (Select('crsClientiPenalitati'))
Return (m.gnButon = 1)
Endproc && vizualizare_penalitati
Procedure configurare_articole_conturi
Local loFrmConturi As "frm_configurare_articole_conturi"
Local lcSelectV, lcSql, lcSqlDelete, lcSqlInsert, lcSqlUpdate, llScris, llSucces, llSucces2
Local lnModificat, lnRec
Private poRec
*:Global gnButon
lcSelectV = Select()
Do make_locatii && crsLocatii
lcSql = [select id_articol, codmat, denumire, descriere, um, id_grupa, grupa, id_subgrupa, subgrupa, tip from vnom_articole where inactiv = 0 and tip = 1 order by denumire]
llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticole')
If m.llSucces
Select crsArticole
Index On denumire Tag denumire
lcSql = [select id, id_articol, articol, id_locatia, locatia, ctdebitor, ctcreditor, ctaideb, ctaedeb, ctaicred, ctaecred, ctpideb, ctapideb, ctpicred, ctapicred, 0 as modificat from ips_vprestatii_locatii order by articol, locatia]
llSucces = goExecutor.oExecuta(m.lcSql, 'crsConturi')
Endif
If m.llSucces
Select crsArticole
loFrmConturi = Createobject("frm_configurare_articole_conturi") && oacnpro.vcx
loFrmConturi.Show(1)
Else
gnButon = 2
Endif
lcSqlDelete = [DELETE from ips_prestatii_locatii WHERE id = ?poRec.Id]
Text To lcSqlInsert Noshow
INSERT INTO ips_prestatii_locatii
(id_articol,
id_locatia,
ctdebitor,
ctcreditor,
ctaideb,
ctaedeb,
ctaicred,
ctaecred,
ctpideb,
ctapideb,
ctpicred,
ctapicred)
values
(?poRec.id_articol,
?poRec.id_locatia,
?poRec.ctdebitor,
?poRec.ctcreditor,
?poRec.ctaideb,
?poRec.ctaedeb,
?poRec.ctaicred,
?poRec.ctaecred,
?poRec.ctpideb,
?poRec.ctapideb,
?poRec.ctpicred,
?poRec.ctapicred)
Endtext
Text To lcSqlUpdate Noshow
UPDATE ips_prestatii_locatii
set id_articol = ?poRec.id_articol,
id_locatia = ?poRec.id_locatia,
ctdebitor = ?poRec.ctdebitor,
ctcreditor = ?poRec.ctcreditor,
ctaideb = ?poRec.ctaideb,
ctaedeb = ?poRec.ctaedeb,
ctaicred = ?poRec.ctaicred,
ctaecred = ?poRec.ctaecred,
ctpideb = ?poRec.ctpideb,
ctapideb = ?poRec.ctapideb,
ctpicred = ?poRec.ctpicred,
ctapicred = ?poRec.ctapicred
where id = ?poRec.id
Endtext
* Am apasat (Terminat) sau (Renunt si am sters un articol si trebuie sa sterg si conturile asociate)
Set Deleted Off
Select Id From crsConturi Where !Empty(Id) And modificat = 2 And Deleted() Into Cursor cConturiSterse
Set Deleted On
If (m.gnButon = 2 And Reccount('cConturiSterse') > 0)
Select cConturiSterse
Scan
Scatter Name poRec
llSucces = goExecutor.oExecuta(m.lcSqlDelete)
If !m.llSucces
Exit
Endif
Endscan
Endif
Use In (Select('cConturiSterse'))
If m.gnButon = 1
Select crsConturi
Set Filter To
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
If m.llSucces && transactions
*** SELECTEZ IREG STERSE
Set Deleted Off
Select Id From crsConturi Where Deleted() Into Cursor cConturiSterse
Set Deleted On
Select cConturiSterse
Scan
Scatter Name poRec
llSucces = goExecutor.oExecuta(m.lcSqlDelete)
If !m.llSucces
Exit
Endif
Endscan
Use In (Select('cConturiSterse'))
*** STERG IN IPS_PRESTATII_LOCATII IREG STERSE
If m.llSucces
*** MODIFIC IN ips_prestatii_locatii IREG MODIFICATE IN TEMPORAR
Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1 In crsConturi
lnRec = 0
Select crsConturi
Scan For Nvl(modificat, 0) = 1
Scatter Name poRec Memo
lnRec = m.lnRec + 1
Wait Window 'Configurare noua/modificata ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait
If Empty(Nvl(poRec.Id, 0))
llSucces = goExecutor.oExecuta(m.lcSqlInsert)
Else
llSucces = goExecutor.oExecuta(m.lcSqlUpdate)
Endif
If !m.llSucces
Exit
Endif
Endscan
Endif && llSucces
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
Endif && gnButon
If m.llSucces
amessagebox('Configurare articole/conturi modificate cu succes!', 0 + 64, _Screen.Caption)
Else
amessagebox('Articole/conturi nu s-au modificat!', 0 + 64, _Screen.Caption)
Endif
Endif && gnButon
Use In (Select('crsLocatii'))
Use In (Select('crsArticole'))
Use In (Select('crsConturi'))
Select (m.lcSelectV)
Return m.llSucces
Endproc && configurare_articole_conturi
**************************************************************************************************************************
Procedure calcul_tranzit
Lparameters tcVyeIds
Private poVoyage, pcVyeIds, pcVyeId, pnVVId
Local lcEcluzari, lcVoyageLocksText, lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelectV, lcSql, lcTitlu, lcSelect
Local llAfiseaza, llModParam, llSucces, loFrmTranzit
Local lcDeclaratie, lcEcluzari2, lcIndicativ, lcVmsId, lnEclDif
poVoyage = Null
pnVVId = 0
llSucces = .F.
If Empty(Nvl(m.tcVyeIds, ''))
Return m.llSucces
Else
pcVyeIds = m.tcVyeIds
Endif
lcSelect = Select()
Do make_grupe_vase && crsGrupeVase
Do make_grupe_marfa && crsGrupeMarfa
* Do make_contracte With "1=2" && crsContracte
Do make_contacts && crsContacts
Do make_vessel_types && crsVesselTypes
Do make_routes && crsRoutes
Do make_vas_echivalent && crsVasEchivalent
Do make_vas_um && crsVasUM
Do make_grup_tip_nave && crsGrupTipNave
* Creez cursorul crsVoyage
Select Id, vye_id, generation, vms_id, convoy_nam, declaratio, notificati, data_avizare, notificat2, avizare, origin, destinatio, mtr_name, state, indicativ, Document, ;
Cast(Null As I) As vv_id, Cast(Null As I) As client_id, Cast(Null As I) As client_ctr_id, 0 As eagent, Cast(Null As I) As beneficiar_id, 0 As tiprecap, 0 As intern, 0 As tip ;
From crsConvoaie ;
Where At(['] + Alltrim(vye_id) + ['], m.pcVyeIds) > 0 ;
Into Cursor crsVoyage Readwrite
llSucces = (Reccount('crsVoyage') > 0)
If m.llSucces
* pun 0 la vmv_id sa inserez de fiecare data, in loc sa suprascriu voiajul, in ips_vvoyage_members_vanzari, in salvare tranzit
Text To lcSelectV Noshow
select 0 as ales,
vv_id,
vmv_id,
tiprecap,
cuplat,
arm_id,
armator,
kmi,
kmf,
rte_id,
ruta,
convoy_nam,
declaratio,
generation,
vms_id,
vye_id,
vsl_id,
ctt_id,
dirty_tank,
rstart_id,
rfin_id,
distanta,
distanta_cdmn,
aviz,
contact,
indicativ,
lbd,
trn,
hp,
tcap,
procdiv,
vtp_id,
tip_nava,
vgrp_id,
grupa_nava,
felcargo,
cargo,
gds_id,
gdsg_id,
marfa_country_id,
marfa_country,
grupa_marfa,
periculos,
corect,
procdist,
id_valuta,
valuta,
tarif,
cant,
um,
valval,
valftva,
valtva,
valctva,
CAST(null as varchar2(200)) as ecluzari,
0 AS elcdif
from ips_vvoyage_members_calcul
Endtext
lcSchema = [ALES N(1), VV_ID N(20), VMV_ID N(20), TIPRECAP N(1), CUPLAT N(1), ] + ;
[ARM_ID C(36), ARMATOR C(100), KMI N(7,2), KMF N(7,2), RTE_ID N(10), RUTA C(100), CONVOY_NAM C(100), DECLARATIO C(10), GENERATION T, ] + ;
[VMS_ID C(36), VYE_ID C(36), VSL_ID C(36), CTT_ID C(36), DIRTY_TANK N(1), ] + ;
[RSTART_ID C(36), RFIN_ID C(36), DISTANTA N(12,2), DISTANTA_CDMN N(12,2), AVIZ C(20), CONTACT C(100), INDICATIV C(240), ] + ;
[LBD N(10,2), TRN N(10,2), HP N(10,2), TCAP N(10,2), PROCDIV N(8,3), VTP_ID C(36), TIP_NAVA C(100), VGRP_ID C(36), GRUPA_NAVA C(100), ] + ;
[FELCARGO C(100), CARGO N(10,2), GDS_ID C(36), GDSG_ID N(10), MARFA_COUNTRY_ID C(36) NULL, MARFA_COUNTRY C(100) NULL, GRUPA_MARFA C(240), PERICULOS N(1), CORECT N(6,3), PROCDIST N(6,3), ] + ;
[ID_VALUTA N(10), VALUTA C(20), TARIF N(20,4), CANT N(10,2), UM C(10), VALVAL N(20,4), VALFTVA N(20,4), VALTVA N(20,4), VALCTVA N(20,4), ECLUZARI V(200), ECLDIF N(1)]
lcOrder = []
lcFiltru = []
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = [vye_id in (] + m.pcVyeIds + [)]
gencursor('poVoyage', 'crsVoyages', m.lcSelectV, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poVoyage.ca_baza1.afisare()
llSucces = Used('crsVoyages')
Endif && llSucces
If m.llSucces
lcTitlu = 'CALCUL TRANZIT DECLARATIE: '
lcEcluzari = 'ECLUZARI: '
Sele crsVoyage
Scan
* Titlu
lcDeclaratie = Alltrim(Nvl(declaratio, ''))
lcIndicativ = Alltrim(Nvl(convoy_nam, ''))
lcTitlu = lcTitlu + m.lcDeclaratie + ' - CONVOI: ' + m.lcIndicativ + Iif(Recno() <= Reccount(), '; ', '')
pcVyeId = Alltrim(vye_id)
* Selectez ecluzari pe convoi
Text To lcSql Noshow
select stringagg(trim(replace(upper(lock_name), 'ECLUZA', '')) || ' (' ||
TO_CHAR(ldata, 'dd.mm.yyyy hh24:mi') || ')') as ecluzari
from (select lock_name, MIN("date") as ldata
from ips_vvoyage_locks
where vye_id = ?pcVyeId
group by lock_name
order by 2)
Endtext
lcVoyageLocksText = ''
llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @lcVoyageLocksText)
If m.llSucces
lcEcluzari = m.lcEcluzari + m.lcDeclaratie + ' ' + Alltrim(Nvl(lcVoyageLocksText, '')) + ' '
Else
Exit
Endif
* Selectez camera ecluzare pe fiecare nava si completez in vrsVoyages
* atentie = 1 daca eluzarile unei nave nu sunt egale cu ecluzarile convoiului
Text To lcSql Noshow
select l1.vms_id,
l1.ecluzari,
decode(l1.lock_name, l2.lock_name, 0, 1) as ecldif
from (with lx as (select vm.id as vms_id, "date" as ldata,
vl.lock_name,
(case
when vl.chamber_name is not null then
trim(replace(upper(vl.lock_name), 'ECLUZA', '')) || '-' ||
vl.chamber_name || ' (' ||
TO_CHAR("date", 'dd.mm.yyyy hh24:mi') || ')'
else
''
end) as ecluza
from ips_voyage_members vm
left join ips_voyage_locks vl
on vm.id = vl.vms_id
where vm.vye_id = ?pcVyeId
order by vms_id, "date")
select vms_id,
concatenate_list(CURSOR(select lock_name from lx lx1 where lx1.lock_name is not null and lx1.vms_id = lx2.vms_id order by ldata)) as lock_name,
concatenate_list(CURSOR(select ecluza from lx lx1 where lx1.lock_name is not null and lx1.vms_id = lx2.vms_id order by ldata)) as ecluzari
from lx lx2
group by vms_id) l1,
(select concatenate_list(cursor(select lock_name from (select lock_name, min("date") as ldata
from ips_voyage_locks
where vye_id = ?pcVyeId
group by lock_name) order by ldata)) as lock_name from dual) l2
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'crsVoyageLocksTemp')
If m.llSucces
Select crsVoyageLocksTemp
Scan
lcVmsId = vms_id
lcEcluzari2 = Alltrim(ecluzari)
lnEclDif = ecldif
Select crsVoyages
Locate For vms_id = m.lcVmsId
If Found()
Replace ecluzari With m.lcEcluzari2, ecldif With m.lnEclDif
Endif
Endscan
Use In (Select('crsVoyageLocksTemp'))
Endif
Endscan
Endif && llSucces
If m.llSucces
Select crsVoyages
loFrmTranzit = Crea("frm_calcul_tranzit", m.lcTitlu, m.lcEcluzari)
loFrmTranzit.Show(1)
llSucces = (m.gnButon = 1)
Endif
Use In (Select('crsGrupeVase'))
Use In (Select('crsGrupeMarfa'))
Use In (Select('crsContacts'))
Use In (Select('crsVesselTypes'))
Use In (Select('crsRoutes'))
Use In (Select('crsVasEchivalent'))
Use In (Select('crsVasUM'))
Use In (Select('crsGrupTipNave'))
Use In (Select('crsVoyage'))
Use In (Select('crsVoyages'))
Select (m.lcSelect)
Return m.llSucces
Endproc && calcul_tranzit
**************************************************************************************************************************
Procedure calcul_cheiaj
Lparameters tcVyeIds
Private pcVyeIds, poBerthings, poBerthingDetails
Local lcEcluzari, lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelectV, lcSql, lcTitlu
Local llAfiseaza, llModParam, llSucces, loFrmTranzit, lcSelect
poBerthings = Null
poBerthingDetails = Null
llSucces = .F.
If Empty(Nvl(m.tcVyeIds, ''))
Return m.llSucces
Else
pcVyeIds = m.tcVyeIds
Endif
lcSelect = Select()
* Do make_contracte With "1=2" && crsContracte
Do make_aramis_tip_nave && crsAramisTipNave
Do make_locatii && crsLocatii
Do make_dane && crsDane
Do make_articole && crsArticole
Do make_valute && crsValute
Do make_cheiaj_prestati && crsCheiajPrestatii
* Creez cursorul crsVoyage
Select Id, vye_id, generation, vms_id, convoy_nam, declaratio, notificati, data_avizare, notificat2, avizare, origin, destinatio, mtr_name, state, indicativ, Document, ;
Cast(Null As I) As client_id, Cast(Null As I) As client_ctr_id, 0 As eagent, Cast(Null As I) As beneficiar_id, 0 As tiprecap, 0 As intern, 1 As tip, ;
Cast(Null As I) As vv_id, Cast(Null As I) As bv_id ;
From crsConvoaie ;
Where At(['] + Alltrim(vye_id) + ['], m.pcVyeIds) > 0 ;
Into Cursor crsVoyage Readwrite
llSucces = (Reccount('crsVoyage') > 0)
*** Import din berthings dupa vye_id
If m.llSucces
Text To lcSelectV Noshow
select 0 as ales,
id,
CAST(null as NUMBER(20)) as bv_id,
vye_id,
declaratio,
ves_id,
nava,
nava as vs_name,
tipn_id,
tipn,
NVL(lbd, 0) as lbd,
NVL(trn, 0) as trn,
NVL(hp, 0) as trn,
NVL(cap, 0) as cap,
NVL(lung, 0) as cap,
CAST(null as NUMBER(12)) as id_locatia,
TIP AS dana_id,
CTIP AS cdana,
rpt_id,
rpt_name,
datai,
datap
from ips_vberthings
Endtext
* vs_name este pentru facturarea unei declaratii generice "FARA" si trebuie completat numele navei
Text To lcSchema Noshow
ales N(1), id C(36), bv_id N(20), vye_id C(36), declaratio C(36), ves_id C(36), nava C(240), vs_name C(240), tipn_id N(7), tipn C(100), lbd N(12,2), trn N(12,2), hp N(12,2), cap N(12,2), lung N(12,2), id_locatia N(12), dana_id N(3), cdana C(20), rpt_id C(36), rpt_name C(100), datai T(8), datap T(8)
Endtext
lcOrder = [datai desc,declaratio,nava]
lcFiltru = []
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = [vye_id in (] + m.pcVyeIds + [)]
gencursor('poBerthings', 'crsBerthings', m.lcSelectV, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poBerthings.ca_baza1.afisare()
llSucces = Used('crsBerthings')
If m.llSucces
Select crsBerthings
Scan
lcRptName = Upper(Alltrim(rpt_name))
If Seek(m.lcRptName, 'crsLocatii', 'denumire')
Replace crsBerthings.id_locatia With crsLocatii.Id
Endif
Endscan
Go Top
Endif
Endif && llSucces
*** Creez cursor gol berthings_detalii_vanzari pentru completare
If m.llSucces
Text To lcSelectV Noshow
select id,
bts_id,
ves_id,
indicativ,
datai,
datap,
id_valuta,
valuta,
id_articol,
tarif,
cant,
durata,
um,
valval,
tvaval,
totval,
valftva,
valtva,
valctva,
curs
from ips_vberthing_details_vanzari
Endtext
Text To lcSchema Noshow
id N(20), bts_id C(36), ves_id C(36), nava C(100), datai T(8), datap T(8), id_valuta N(7), valuta C(20), id_articol N(10), tarif N(18,4), cant N(12,2), durata N(10,3), um C(10), valval N(18,4), tvaval N(18,4), totval N(18,4), valftva N(18,4), valtva N(18,4), valctva N(18,4), curs N(14,6)
Endtext
lcOrder = []
lcFiltru = [1=2]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
gencursor('poBerthingDetails', 'crsBerthingDetails', m.lcSelectV, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poBerthingDetails.ca_baza1.afisare()
llSucces = Used('crsBerthingDetails')
Endif && llSucces
If m.llSucces
Sele crsVoyage
Go Top
lcTitlu = 'CALCUL CHEIAJ DECLARATIE: ' + Alltrim(Nvl(declaratio, '')) + ' - CONVOI: ' + Alltrim(Nvl(convoy_nam, ''))
Select crsVoyage
* Do Form frm_calcul_cheiaj Name loFrmTranzit With m.lcTitlu
loFrmTranzit = Crea("frm_calcul_cheiaj", m.lcTitlu)
loFrmTranzit.Show(1)
llSucces = (m.gnButon = 1)
Endif
Use In (Select('crsGrupeVase'))
Use In (Select('crsGrupeMarfa'))
Use In (Select('crsContacts'))
Use In (Select('crsVesselTypes'))
Use In (Select('crsRoutes'))
Use In (Select('crsVasEchivalent'))
Use In (Select('crsVasUM'))
Use In (Select('crsGrupTipNave'))
Use In (Select('crsVoyage'))
Use In (Select('crsVoyages'))
Select (m.lcSelect)
Return m.llSucces
Endproc && calcul_cheiaj
**************************************************************************************************************************
Procedure calcul_contract
Lparameters tnIdCtr
Local lcSql, lcTitlu, llSucces, loFrmContract, lcSelect
Private pnIdCtr
llSucces = .F.
lcSelect = Select()
pnIdCtr = Iif(!Empty(Nvl(m.tnIdCtr, 0)), m.tnIdCtr, 0)
Use In (Select('crsArticoleContract'))
Text To lcSql Textmerge Noshow
select id_part, client, contract_client, id_ctr, id_articol, articol, CAST(' ' as Varchar2(100)) as perioada, um, pret_unitar as pret, cant as cantitate, ROUND(valoare, ?gnPC) as valval, id_valuta, valuta, id_locatia, locatia, proc_tvav
from vctr_articole2
where id_ctr = <<m.pnIdCtr>>
order by locatia, articol
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticoleContract')
If m.llSucces
Sele crsArticoleContract
Go Top
lcTitlu = 'CALCUL CONTRACT: ' + Alltrim(Nvl(contract_client, '')) + ' - ' + Alltrim(Nvl(client, ''))
loFrmContract = Crea("frm_calcul_contract", m.lcTitlu)
loFrmContract.Show(1)
llSucces = (m.gnButon = 1)
Endif
Use In (Select('crsArticoleContract'))
Select (m.lcSelect)
Return m.llSucces
Endproc && calcul_contract
*******************
*** Este veche si nu se mai foloseste. Se foloseste calcul_penalitati2
*******************
Procedure calcul_penalitati
* pnTipCalcul: 1 (default) = incasari si sold; 2 = incasari; 3 = sold; 4 = evaluare
* pnCalculZile: 1 (default) = calcul zile fata de luna precedenta; 2 = fata de data scadenta
Private pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru
Store "" To pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru
* 1. Se calculeaza penalitatile pentru incasari
* 2. Se calculeaza penalitatile pentru soldul facturilor
If Inlist(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari
* INCASARILE DIN LUNA INCASATE DUPA DATA SCADENTA + DATELE DE FACTURARE
Text To lcSql Textmerge Noshow
Select v.id_fact, v.id_part as clie_id, v.id_ctr, v.id_beneficiar, p2.denumire as beneficiar, v.numar_act as nrfact, v.data_act as datafact, v.data_scad as datascad, v.total_cu_tva as valctva, v.totval, v.Curs, v.id_Valuta, vl.nume_val as valuta,
'' as explicatia, v.id_ctr, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract,
p1.denumire As nume, i.id_doc, i.nract, i.dataact, i.suma, i.suma_val As sumaval, i.pereche, i.id_fact,
c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie,
i.dataact - v.data_scad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati,
v.data_scad As databaza, i.dataact as dataref, i.Cont
From vanzari v JOIN nom_parteneri p1 ON v.id_part = p1.id_part
left join nom_parteneri p2 ON v.id_beneficiar = p2.id_part
left join vnom_valute vl on v.id_valuta = vl.id_valuta
left join contracte c on v.id_ctr = c.id_ctr
Join (Select id_fact as id_doc, nract, dataact, id_partc as id_part, partc as nume, perechec as pereche, id_factc as id_fact, scc As cont, Sum(suma) As suma, Sum(suma_val) As suma_val
From vact Where an = <<m.gnAn>> and luna = <<m.gnLuna>> and scc in ('4111', '461'<<IIF(m.pl4118, [, '4118'], [])>>) And scd <> '4118'
Group By id_fact, nract, dataact, id_partc, partc, perechec, id_factc, scc) i On i.id_fact = v.id_fact
Where v.tip_factura <> 6 and i.dataact > v.data_scad And i.dataact < TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD')
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, "cFiordIncasari")
&& nu facturez incasarile pe care utilizatorul le-a facturat deja sau incasarile pe care le-a sters manual
Text To lcSql Noshow
SELECT p.id_doc_incasare, p.id_fact FROM penalitati p join vanzari v on p.id_fact_pen = v.id_fact WHERE p.sters = 0 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = ?m.gnAn * 12 + ?m.gnLuna
union
SELECT p.id_doc_incasare, p.id_fact FROM penalitati p WHERE p.sters = 1 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = ?m.gnAn * 12 + ?m.gnLuna
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'cPenalitatiFactSters')
If m.llSucces
Select cPenalitatiFactSters
Scan
Scatter Name loRec
Delete From cFiordIncasari Where id_fact = loRec.id_fact And id_doc = loRec.id_doc_incasare
Endscan
Endif && llSucces
Use In (Select('cPenalitatiFactSters'))
Select * From cFiordIncasari Into Cursor cFiordTemp NOFILTER Readwrite
Use In (Select('cFiordIncasari'))
Endif && INLIST(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari
If Inlist(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare
*** SELECTEZ FACTURILE DIN FACTURARE (EMISE DE COMERCIAL) DAR CU SOLD IN VANZLUN SI DEBLUN IN LUNA CURENTA
Text To lcSql Textmerge Noshow
Select v.id_fact, v.id_part as clie_id, v.id_ctr, v.id_beneficiar, p2.denumire as beneficiar, v.numar_act as nrfact, v.data_act as datafact, v.data_scad as datascad, v.total_cu_tva as valctva, v.totval, v.Curs, v.id_Valuta, vl.nume_val as valuta,
'' as EXPLICATIA, v.id_ctr, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract,
p2.denumire As nume, 0 as id_doc, 0 As nract, TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD') As dataact, i.sold As suma, i.soldval As sumaval, 0 As PERECHE, 0 as id_fact,
c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie,
TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD') - v.data_scad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati,
v.data_scad As databaza, TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD') As dataref, i.Cont
From vanzari v join nom_parteneri p1 ON v.id_part = p1.id_part
left join vnom_valute vl on v.id_valuta = vl.id_valuta
left join nom_parteneri p2 ON v.id_beneficiar = p2.id_part
left join contracte c on v.id_ctr = c.id_ctr
Join (Select id_fact, nract, dataact, precdeb+debit-preccred-credit as sold, precvaldeb+valdebit-precvalcred-credit as soldval, Cont
From ireg_parteneri
WHERE an = <<m.gnAn>> and luna = <<m.gnLuna>> and cont in ('4111', '461'<<IIF(m.pl4118, [, '4118'], [])>>)) i On v.id_fact = i.id_fact
Where v.tip_factura <> 6 and i.sold > 0 And v.data_scad < TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD')
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, "cFiordSold")
If Used('cFiordTemp')
Select cFiordTemp
Append From Dbf('cFiordSold')
Else
Select * From cFiordSold Into Cursor cFiordTemp NOFILTER Readwrite
Endif
Use In (Select('cFiordSold'))
Endif && INLIST(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare
Select * From cFiordTemp Order By nume, contract, datafact, nrfact Into Cursor crsCalculPenalitatiTemp
Use In (Select('cFiordTemp'))
Select crsCalculPenalitati
Delete All
Append From Dbf('crsCalculPenalitatiTemp')
Use In (Select('crsCalculPenalitatiTemp'))
If m.pnCalculZile = 1 && calcul zile fata de luna precedenta, 2 = fata de data scadenta
Update crsCalculPenalitati Set databaza = Max(datascad, Date(m.gnAn, m.gnLuna, 1) - 1)
Else
Update crsCalculPenalitati Set databaza = datascad
Endif
Update crsCalculPenalitati Set dataref = Min(dataref, m.pdDataReferinta)
*** nu calculez zile de penalitati daca numarul de zile este mai mic decat numarul de zile de gratie
Update crsCalculPenalitati Set nr_zile = Iif(dataref - databaza <= zilegratie, 0, dataref - databaza)
Update crsCalculPenalitati Set penalitati = Round(Round(ppenzi / 100 * suma, m.gnZ) * nr_zile, m.gnZ)
* Recalculez penalitatile pentru contractele cu 2 cote de penalitati
* Poate fi folosita si pentru contractele cu o singura cota de penalitati, dar in perioada de testare verific doar contractele cu doua cote
Select crsCalculPenalitati
Scan For ppenzi2 <> 0
lnPenalitati = penalitati
lnZileProcent1 = nr_zile
lnZileProcent2 = 0
lnPenalitati = CalculeazaPenalitati(ppenzi, ppenzi2, penzile, penzile2, datascad, databaza, dataref, zilegratie, suma, @lnZileProcent1, @lnZileProcent2)
Replace penalitati With lnPenalitati, nr_zile1 With m.lnZileProcent1, nr_zile2 With m.lnZileProcent2
Endscan
Go Top In crsCalculPenalitati
Endproc && calcul_penalitati
****************************************
*** TEMPORAR!!! FOLOSESC DOAR IREG_PARTENERI, FARA VANZARI, PANA IMPORT VANZARILE!!!!!!
****************************************
Procedure calcul_penalitati2
Lparameters tnIdClient
* pnTipCalcul: 1 (default) = incasari si sold; 2 = incasari; 3 = sold; 4 = evaluare
* pnCalculZile: 1 (default) = calcul zile fata de luna precedenta; 2 = fata de data scadenta
*!!! De facut: facturile cu sold <> 0 in loc de sold > 0; initializare explicatie TVA; seria AVN; EXPLICATIE TVA ID_JTVA_COLOANA = 12 OPERATIUNI NEIMPOZABILE
Local lcFiltruAIdPart, lcFiltruVIdPart, lcSql, lcSql1, lcSql2, llSucces, lnPenalitati
Local lnZileProcent1, lnZileProcent2, loRec
make_cCalculPenalitati()
make_cClientiPenalitati()
lcFiltruVIdPart = Iif(!Empty(m.tnIdClient), [ and v.id_part = ] + Alltrim(Str(m.tnIdClient)), [])
lcFiltruAIdPart = Iif(!Empty(m.tnIdClient), [ and id_partc = ] + Alltrim(Str(m.tnIdClient)), [])
Private pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru
Store "" To pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru
* 1. Se calculeaza penalitatile pentru incasari
* 2. Se calculeaza penalitatile pentru soldul facturilor
If Inlist(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari
* INCASARILE DIN LUNA INCASATE DUPA DATA SCADENTA + DATELE DE FACTURARE
* DACA CALCULUL ESTE FATA DE LUNA PRECEDENTA, INCASARILE LE IAU DIN LUNA CURENTA SI APOI SA FAC FILTRUL SA FIE DATA INCASARII > DATA SCADENTA
* DACA CALCULUL ESTE FATA DE DATA SCADENTA, INCASARILE LE IAU DIN TOATA BAZA DE DATE SI APOI SA FAC FILTRUL SA FIE DATA INCASARII > DATA SCADENTA
*** SERIE_ACT = AVN - FACTURI DE PENALITATI, DACA IAU DIN VANZARI.TIP_FACTURA <> 6
*** la facturile 4118 id_fact nu mai corespunde cu id_fact 4111 original si nu mai gasesc factura originala. caut id_Fact original dupa nrfact
Text To lcSql Textmerge Noshow
Select <<IIF(m.pl4118, [NVL(vz1.id_fact, vz2.id_fact)], [NVL(vz1.id_fact,0)])>> as id_fact, v.id_part as clie_id, v.id_ctr, 0 as id_beneficiar, '' as beneficiar, v.nract as nrfact, v.dataact as datafact, v.datascad as datascad, (v.precdeb + v.debit) as valctva, (v.precvaldeb + v.valdebit) as totval, v.Curs, v.id_Valuta, vl.nume_val as valuta,
'' as explicatia, v.id_ctr, c.numar, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract,
p1.denumire As nume, i.id_doc, i.nract, i.dataact, i.suma, i.suma_val As sumaval, i.pereche, i.id_fact,
c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie,
i.dataact - v.datascad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati,
v.datascad As databaza, i.dataact as dataref, <<IIF(m.pl4118, [NVL(vz1.tip_factura, NVL(vz2.tip_factura,0))], [NVL(vz1.tip_factura,0)])>> as tip
From ireg_parteneri v JOIN nom_parteneri p1 ON v.id_part = p1.id_part
left join vanzari vz1 on v.cont <> '4118' and v.id_fact = vz1.id_fact and vz1.sters = 0
<<IIF(m.pl4118, [left join vanzari vz2 on v.cont = '4118' and v.nract = vz2.numar_act and v.dataact = vz2.data_act and v.id_part = vz2.id_part and vz2.sters = 0], [])>>
left join vnom_valute vl on v.id_valuta = vl.id_valuta
left join contracte c on v.id_ctr = c.id_ctr
Join (Select id_fact as id_doc, nract, dataact, id_partc as id_part, partc as nume, perechec as pereche, id_factc as id_fact, scc As cont, Sum(suma) As suma, Sum(suma_val) As suma_val
From vact Where <<IIF(m.pnCalculZile = 1, [ an = ] + ALLTRIM(STR(m.gnAn)) + [ and luna = ] + ALLTRIM(STR(m.gnLuna)), '1=1')>> <<m.lcFiltruAIdPart>> and scc in ('4111', '461'<<IIF(m.pl4118, [, '4118'], [])>>) And scd <> '4118'
Group By id_fact, nract, dataact, id_partc, partc, perechec, id_factc, scc) i On i.id_fact = v.id_fact
Where v.an = <<m.gnAn>> and v.luna = <<m.gnLuna>> <<m.lcFiltruVIdPart>> and v.cont in ('4111', '461'<<IIF(m.pl4118, [, '4118'], [])>>) and i.dataact > v.datascad And i.dataact <= TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD')
and <<IIF(m.pl4118, [NVL(vz1.tip_factura, NVL(vz2.tip_factura,0))], [NVL(vz1.tip_factura,0)])>> <> 6
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, "cFiordIncasari")
*!* && nu facturez incasarile pe care utilizatorul le-a facturat deja pe o factura de penalitati sau incasarile pe care le-a sters manual
*!* Text To lcSql TEXTMERGE Noshow
*!* SELECT p.id_doc_incasare, p.id_fact FROM penalitati p join ireg_parteneri v on p.id_fact_pen = v.id_fact WHERE p.sters = 0 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <<m.gnAn * 12 + m.gnLuna>> AND v.an = <<m.gnAn>> and v.luna = <<m.gnLuna>> <<m.lcFiltruVIdPart>> and v.cont in ('4111', '461'<<IIF(m.pl4118, [, '4118'], [])>>)
*!* union
*!* SELECT p.id_doc_incasare, p.id_fact FROM penalitati p WHERE p.sters = 2 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <<m.gnAn * 12 + m.gnLuna>>
*!* Endtext
*!* llSucces = goExecutor.oExecuta(m.lcSql, 'cPenalitatiFactSters')
*!* If m.llSucces
*!* Select cPenalitatiFactSters
*!* Scan
*!* Scatter Name loRec
*!* Delete From cFiordIncasari Where id_fact = loRec.id_fact And id_doc = loRec.id_doc_incasare
*!* Endscan
*!* Endif && llSucces
Select .F. as facturate, .F. as sterse, i.* From cFiordIncasari i Into Cursor cFiordTemp NOFILTER Readwrite
Use In (Select('cFiordIncasari'))
Endif && INLIST(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari
If Inlist(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare
*** SELECTEZ FACTURILE DIN FACTURARE (EMISE DE COMERCIAL) DAR CU SOLD IN VANZLUN SI DEBLUN IN LUNA CURENTA
*** SERIE_ACT = AVN - FACTURI DE PENALITATI, DACA IAU DIN VANZARI.TIP_FACTURA <> 6
Text To lcSql Textmerge Noshow
Select <<IIF(m.pl4118, [NVL(vz1.id_fact, vz2.id_fact)], [NVL(vz1.id_fact,0)])>> as id_fact, v.id_part as clie_id, v.id_ctr, 0 as id_beneficiar, '' as beneficiar, v.nract as nrfact, v.dataact as datafact, v.datascad as datascad, (v.precdeb + v.debit) as valctva, (v.precvaldeb + v.valdebit) as totval, v.Curs, v.id_Valuta, vl.nume_val as valuta,
'' as EXPLICATIA, v.id_ctr, c.numar, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract,
p1.denumire As nume, 0 as id_doc, 0 As nract, TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD') As dataact, (v.precdeb+v.debit-v.preccred-v.credit) as suma, (v.precvaldeb+v.valdebit-v.precvalcred-v.valcredit) As sumaval, 0 As PERECHE, 0 as id_fact,
c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie,
TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD') - v.datascad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati,
v.datascad As databaza, TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD') As dataref, <<IIF(m.pl4118, [NVL(vz1.tip_factura, NVL(vz2.tip_factura,0))], [NVL(vz1.tip_factura,0)])>> as tip
From ireg_parteneri v join nom_parteneri p1 ON v.id_part = p1.id_part
left join vanzari vz1 on v.cont <> '4118' and v.id_fact = vz1.id_fact and vz1.sters = 0
<<IIF(m.pl4118, [left join vanzari vz2 on v.cont = '4118' and v.nract = vz2.numar_act and v.dataact = vz2.data_act and v.id_part = vz2.id_part and vz2.sters = 0], [])>>
left join vnom_valute vl on v.id_valuta = vl.id_valuta
left join contracte c on v.id_ctr = c.id_ctr
Where v.an = <<m.gnAn>> and v.luna = <<m.gnLuna>> <<m.lcFiltruVIdPart>> and v.cont in ('4111', '461'<<IIF(m.pl4118, [, '4118'], [])>>) and (v.precdeb+v.debit-v.preccred-v.credit) <> 0 And v.datascad <= TO_DATE('<<DTOS(pdDataReferinta)>>','YYYYMMDD')
and <<IIF(m.pl4118, [NVL(vz1.tip_factura, NVL(vz2.tip_factura,0))], [NVL(vz1.tip_factura,0)])>> <> 6
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, "cFiordSold")
If Used('cFiordTemp')
Select cFiordTemp
Append From Dbf('cFiordSold')
Else
Select .F. as facturate, .F. as sterse, s.* From cFiordSold s Into Cursor cFiordTemp NOFILTER Readwrite
Endif
Use In (Select('cFiordSold'))
Endif && INLIST(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare
********************************
* Nu includ facturile si incasarile pe care utilizatorul le-a facturat deja pe o factura de penalitati sau facturile si incasarile pe care le-a sters manual
* Daca le includ (plFacturate, plSterse), le marchez si colorez corespunzator
********************************
Text To lcSql Textmerge Noshow
SELECT 1 as facturate, 0 as sterse, p.id_doc_incasare, p.id_fact FROM penalitati p join ireg_parteneri v on p.id_fact_pen = v.id_fact WHERE p.sters = 0 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <<m.gnAn * 12 + m.gnLuna>> AND v.an = <<m.gnAn>> and v.luna = <<m.gnLuna>> <<m.lcFiltruVIdPart>> and v.cont in ('4111', '461'<<IIF(m.pl4118, [, '4118'], [])>>)
UNION
SELECT 0 as facturate, 1 as sterse, p.id_doc_incasare, p.id_fact FROM penalitati p WHERE p.sters = 2 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <<m.gnAn * 12 + m.gnLuna>>
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'cPenalitatiFactSters')
If m.llSucces
Select cPenalitatiFactSters
Scan
Scatter Name loRec
WITH loRec
DO CASE
CASE m.plFacturate AND .facturate = 1
UPDATE cFiordTemp SET facturate = .T. Where id_fact = .id_fact And Nvl(id_doc, 0) = Nvl(.id_doc_incasare, 0)
CASE m.plSterse AND .sterse = 1
UPDATE cFiordTemp SET sterse = .T. Where id_fact = .id_fact And Nvl(id_doc, 0) = Nvl(.id_doc_incasare, 0)
OTHERWISE
Delete From cFiordTemp Where id_fact = .id_fact And Nvl(id_doc, 0) = Nvl(.id_doc_incasare, 0)
ENDCASE
ENDWITH
Endscan
Endif && llSucces
Use In (Select('cPenalitatiFactSters'))
********************************
Select * From cFiordTemp Order By nume, contract, datafact, nrfact, dataact, nract Into Cursor crsCalculPenalitatiTemp
Use In (Select('cFiordTemp'))
Select crsCalculPenalitati
Delete All
Append From Dbf('crsCalculPenalitatiTemp')
Use In (Select('crsCalculPenalitatiTemp'))
*!* If m.pnCalculZile = 1 && calcul zile fata de luna precedenta, 2 = fata de data scadenta
*!* Update crsCalculPenalitati Set databaza = Max(datascad, Date(m.gnAn, m.gnLuna, 1) - 1)
*!* Else
*!* Update crsCalculPenalitati Set databaza = datascad
*!* Endif
*!* Update crsCalculPenalitati Set dataref = Min(dataref, m.pdDataReferinta)
Select crsCalculPenalitati
Scan
calcul_penalitati_linie(m.pnCalculZile, m.pdDataReferinta)
Endscan
Go Top In crsCalculPenalitati
Use In (Select('crsClientiPenalitati'))
Create Cursor crsClientiPenalitati (nume C(100), clie_id N(12) )
Select Distinct nume, clie_id From crsCalculPenalitati Order By nume Into Cursor cClientiTemp
If _Tally > 1 && daca vreau facturile pentru toti client nu mai adaug <TOTI> pentru filtrarea facturilor
Insert Into crsClientiPenalitati (nume, clie_id) Values ('Alegeti clientul...', 0)
Endif
Select crsClientiPenalitati
Append From Dbf('cClientiTemp')
Use In (Select('cClientiTemp'))
Endproc && calcul_penalitati2
***********************************************
* calculeaza numarul de zile si valoarea penalitatilor pentru documentul curent din crsCalculPenalitati
* in functie de cotele de penalitati pe perioade
* se apeleaza initial in calcul_penalitati2 si apoi la modificari din frm_penalitati
***********************************************
Procedure calcul_penalitati_linie
LPARAMETERS tnCalculZile, tdDataReferinta, m.tdDataBaza
* tnCalculZile: 1 = calcul zile fata de luna precedenta, 2 = fata de data scadenta
* tdDataReferinta: data referinta a calculului de penalitati
* tdDataBaza: optional, daca se apeleaza din frm_penalitati si se modifica de utilizator databaza
Select crsCalculPenalitati
ldDataScad = IIF(!EMPTY(datascad), datascad, GOMONTH(dataact,1))
ldDataRef = MIN(dataref, m.tdDataReferinta) && daca sunt incasari, data de referinta pentru incasari este data incasarii, daca este mai mica decat data de referinta
* Calculez data baza
DO CASE
CASE !EMPTY(m.tdDataBaza)
ldDataBaza = m.tdDataBaza
CASE m.tnCalculZile = 1
* tnCalculZile = 1 : fata de luna precedenta
* Data de baza este ultima zi din luna precedenta sau data scadenta, care este mai mare
ldDataBaza = Max(m.ldDataScad, Date(m.gnAn, m.gnLuna, 1) - 1)
* Data de gratie este ultima zi in care nu se calculeaza penalitati (data scadenta + zile gratie)
ldDataGratie = m.ldDataScad + zilegratie
* Daca data referinta > data de gratie si data gratie este in luna de referinta
* sunt in luna in care s-a sfarsit perioada de gratie si calculez penalitati inclusiv pana la data scadenta
* in loc de pana la ultima zi a lunii anterioare
IF m.tdDataReferinta > m.ldDataGratie AND YEAR(m.ldDataGratie) = year(m.tdDataReferinta) AND MONTH(m.ldDataGratie) = MONTH(m.tdDataReferinta)
ldDataBaza = m.ldDataScad
ENDIF
OTHERWISE
* tnCalculZile = 2 : fata de data scadenta
ldDataBaza = m.ldDataScad
ENDCASE
* Recalculez penalitatile pentru contractele cu 2 cote de penalitati
* Poate fi folosita si pentru contractele cu o singura cota de penalitati, dar in perioada de testare verific doar contractele cu doua cote
Replace ppenzi With Nvl(ppenzi, 0), ppenzi2 With Nvl(ppenzi2, 0), penzile With Nvl(penzile, 0), penzile2 With Nvl(penzile2, 0), ;
nr_zile With Nvl(nr_zile, 0), nr_zile1 With Nvl(nr_zile1, 0), nr_zile2 With Nvl(nr_zile2, 0), ;
zilegratie With Nvl(zilegratie, 0), penalitati With Nvl(penalitati, 0), dataref WITH m.ldDataRef, databaza WITH m.ldDataBaza
If id_ctr = 0
Replace id_ctr With Null
Endif
If .T. && ppenzi2 <> 0
lnPenalitati = penalitati
lnZileProcent1 = 0
lnZileProcent2 = 0
lnZilePenalitati = 0
lnPenalitati = CalculeazaPenalitati(ppenzi, ppenzi2, penzile, penzile2, datascad, databaza, dataref, zilegratie, suma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2)
Replace penalitati With lnPenalitati, nr_zile1 With m.lnZileProcent1, nr_zile2 With m.lnZileProcent2, nr_zile WITH m.lnZilePenalitati
Endif
Endproc && calcul_penalitati_linie
*********************************************************************
*** lucreaza cu 2 procente de penalitati. un procent in primele x zile de restanta, un procent pentru restul zilelor de restanta
*********************************************************************
Function CalculeazaPenalitati
Lparameters tnProcentPenalitatiZi1, tnProcentPenalitatiZi2, tnPerioadaPenalitati1, tnPerioadaPenalitati2, tdDataScadenta, tdDataBaza, tdDataReferinta, tnZileGratie, tnSuma, lnZilePenalitati, lnZileProcent1, lnZileProcent2
* tnProcentPenalitatiZi1: procent penalitati pentru zilele de restanta <= tnPerioadaPenalitati2-tnPerioadaPenalitati1
* tnProcentPenalitatiZi2: procent penalitati pentru zilele de restanta > tnPerioadaPenalitati2-tnPerioadaPenalitati1
* tnPerioadaPenalitati1: dupa cate zile fata de emiterea facturii se aplica primul procent de penalitati (egal cu zile de scadenta)
* tnPerioadaPenalitati2: dupa cate zile fata de emiterea facturii se aplica al doilea procent de penalitati
* tdDataScadenta: data scadenta a facturii
* tdDataBaza: max(sfarsitul lunii precedente, data scadenta)
* tdDataReferinta: data de referinta cand se face calculul penalitatilor = min(data incasare data de referinta pentru calculul penalitati)
* tnSuma: suma la care se calculeaza penalitati (incasare sau sold)
* tnZileGratie: zile restante pentru care NU se calculeaza penalitati
Local lnPenalitati, lnZileProcent, lnZileRestante, lnZileProcent1, lnZileProcent2
lnZileProcent = m.tnPerioadaPenalitati2 - m.tnPerioadaPenalitati1 && dupa cate zile de la scadenta se schimba procentul de penalitati
lnZileRestante = m.tdDataReferinta - m.tdDataScadenta
* nu calculez zile de penalitati in perioada de gratie (numarul de zile restante fata de data scadenta mai mic decat numarul de zile de gratie)
lnZilePenalitati = Iif(m.lnZileRestante <= m.tnZileGratie, 0, m.tdDataReferinta - m.tdDataBaza)
* pentru cate zile de restanta se foloseste tnProcentPenalitatiZi2
lnZileProcent2 = Iif(m.lnZileRestante <= m.tnZileGratie, 0, IIF(m.tnPerioadaPenalitati2 = 0, 0, Iif(m.lnZileRestante > m.lnZileProcent, Min(m.lnZilePenalitati, m.lnZileRestante - m.lnZileProcent), 0)))
* pentru cate zile de restanta se foloseste tnProcentPenalitatiZi1
lnZileProcent1 = Iif(m.lnZileRestante <= m.tnZileGratie, 0, Iif(m.lnZilePenalitati > m.lnZileProcent2, m.lnZilePenalitati - m.lnZileProcent2, 0))
lnPenalitati = Round(Round(m.tnProcentPenalitatiZi1 / 100 * tnSuma, m.gnZ) * m.lnZileProcent1, m.gnZ) + Round(Round(m.tnProcentPenalitatiZi2 / 100 * m.tnSuma, m.gnZ) * m.lnZileProcent2, m.gnZ)
Return m.lnPenalitati
Endfunc && CalculeazaPenalitati
Function TestCalculeazaPenalitati
gnZ = 2
lnZilePenalitati = 0
lnPenalitati = 0
lnZileProcent1 = 0
lnZileProcent2 = 0
lnppenzi = 0.15
lnppenzi2 = 0.10
lnpenzile = 30
lnpenzile2 = 60
lnsuma = 100
lnzilegratie = 0
ldDataScad = Date(2019, 2, 21)
* februarie
lddatabaza = Date(2019, 2, 21)
lddataref = Date(2019, 2, 28)
lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2)
Messagebox('Penalitati Februarie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 1.05)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2))
* martie
lddatabaza = Date(2019, 2, 28)
lddataref = Date(2019, 3, 31)
lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2)
Messagebox('Penalitati Martie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 4.25)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2))
* aprilie
lddatabaza = Date(2019, 3, 31)
lddataref = Date(2019, 4, 30)
lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2)
Messagebox('Penalitati Aprilie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 3.00)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2))
* data scadenta 05.01.2020, data referinta 31.01.2020, zile restanta = 26, valoare penalitati 1.56
lnPenalitati = 0
lnZileProcent1 = 0
lnZileProcent2 = 0
lnppenzi = 0.06
lnppenzi2 = 0.10
lnpenzile = 30
lnpenzile2 = 60
lnsuma = 100
lnzilegratie = 0
ldDataScad = Date(2020, 1, 5)
lddatabaza = Date(2020, 1, 5)
lddataref = Date(2020, 1, 31)
lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2)
Messagebox('Penalitati ianuarie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 1.56)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2))
Endfunc && TestCalculeazaPenalitati
****************************************************************************************************************************
*** Salveaza datele calculate pentru o factura din cheiaj
****************************************************************************************************************************
Procedure salvare_cheiaj
Private poVoyage, poRec, poRecD, pnVVId
Local lcSql, lcSqlBDDel, lcSqlBDIns, lcSqlBVIns, lcSqlVVIns, llScris, llSucces, llSucces2
Local lcVVIds
lcVVIds = ''
* Completez IPS_VOYAGES_VANZARI
Text To lcSqlVVIns Noshow
INSERT INTO IPS_VOYAGES_VANZARI(vye_id,client_id,client_ctr_id,eagent,beneficiar_id,tiprecap,intern,tip,document)
VALUES (?poVoyage.vye_id,?poVoyage.client_id,?poVoyage.client_ctr_id,?poVoyage.eagent,?poVoyage.beneficiar_id,?poVoyage.tiprecap,?poVoyage.intern,?poVoyage.tip,?poVoyage.document)
RETURNING id into ?@pnVVId
Endtext
Text To lcSqlBVIns Noshow
insert into ips_berthings_vanzari
(vv_id,
vye_id,
bts_id,
rpt_id,
ves_id,
vs_name,
cap,
lbd,
trn,
hp,
lung,
datai,
datap,
id_locatia,
dana_id)
values
(?m.pnVVId,
?poRec.vye_id,
?poRec.id,
?poRec.rpt_id,
?poRec.ves_id,
?poRec.nava,
?poRec.cap,
?poRec.lbd,
?poRec.trn,
?poRec.hp,
?poRec.lung,
?poRec.datai,
?poRec.datap,
?poRec.id_locatia,
?poRec.dana_id)
RETURNING id into ?@poRec.bv_id
Endtext
* COMPLETEZ IPS_BERTHING_DETAILS_VANZARI
lcSqlBDDel = [delete from ips_berthing_details_vanzari where bv_id = ?poRec.bv_id]
Text To lcSqlBDIns Noshow
insert into ips_berthing_details_vanzari
(bv_id,
datai,
datap,
cant,
tarif,
um,
id_valuta,
curs,
valval,
tvaval,
totval,
valftva,
valtva,
valctva,
durata,
id_articol)
values
(?poRec.bv_id,
?poRecD.datai,
?poRecD.datap,
?poRecD.cant,
?poRecD.tarif,
?poRecD.um,
?poRecD.id_valuta,
?poRecD.curs,
?poRecD.valval,
?poRecD.tvaval,
?poRecD.totval,
?poRecD.valftva,
?poRecD.valtva,
?poRecD.valctva,
?poRecD.durata,
?poRecD.id_articol)
Endtext
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
Select crsVoyage
Scan
If !m.llSucces
Exit
Endif
Scatter Name poVoyage
poVoyage.tip = NTIP_CHEIAJ && CHEIAJ
poVoyage.client_ctr_id = Iif(!Empty(Nvl(poVoyage.client_ctr_id, 0)), poVoyage.client_ctr_id, Null) && nu exista contract cu id=0 si nu se valideaza constrangerea
poVoyage.beneficiar_id = Iif(!Empty(Nvl(poVoyage.beneficiar_id, 0)), poVoyage.beneficiar_id, Null)
poVoyage.Document = Alltrim(poVoyage.Document)
poVoyage.vye_id = Alltrim(poVoyage.vye_id)
* Completez IPS_VOYAGES_VANZARI
* Se adauga o inreigstrare in IPS_VOYAGES_VANZARI la fiecare factura, nu se suprascrie inregistrarea curenta!
pnVVId = 0 && Nvl(poVoyage.vv_id, 0)
llSucces = goExecutor.oExecuta(m.lcSqlVVIns)
* COMPLETEZ IPS_BERTHINGS_VANZARI
If m.llSucces
Replace vv_id With m.pnVVId In crsVoyage
lcVVIds = m.lcVVIds + ',' + Alltrim(Str(Int(m.pnVVId)))
* Actualizez ips_berthings_vanzari
Select crsBerthings
Scan For ales = 1 And vye_id = poVoyage.vye_id
Scatter Name poRec
poRec.vye_id = Alltrim(poRec.vye_id)
poRec.Id = Alltrim(poRec.Id)
poRec.rpt_id = Alltrim(poRec.rpt_id)
poRec.ves_id = Alltrim(poRec.ves_id)
* completez ips_berthings_vanzari.vs_name doar daca este diferit de cel al navei din IPS_VESSELS
* in cazul facturarii unui convoi generic declcdt = "FARA"
* Sunt situatii cand nu exista convoiul in RORIS
poRec.nava = Iif(Alltrim(Nvl(poRec.nava, '')) <> Alltrim(Nvl(poRec.vs_name, '')), Alltrim(Nvl(poRec.nava, '')), '')
llSucces = goExecutor.oExecuta(m.lcSqlBVIns)
If !m.llSucces
Exit
Endif
Select crsBerthings
Replace bv_id With poRec.bv_id
* Sterg detaliile vechi
llSucces = goExecutor.oExecuta(m.lcSqlBDDel)
* Introduc detaliile noi
Select crsBerthingDetails
Scan For bts_id = poRec.Id And ves_id = poRec.ves_id
Scatter Name poRecD
llSucces = goExecutor.oExecuta(m.lcSqlBDIns)
If !m.llSucces
Exit
Endif
Select crsBerthingDetails
Replace Id With poRecD.Id
Endscan && crsBerthingDetails
Endscan && crsBerthings
Endif && llSucces
Endscan && crsVoyage
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
If !Empty(m.lcVVIds)
lcVVIds = Substr(m.lcVVIds, 2)
Endif
poDate.uuid = m.lcVVIds
Return m.lcVVIds
Endproc && salvare_cheiaj
****************************************************************************************************************************
*** Salveaza datele calculate pentru factura din tranzit
*** Intoarce o lista de ips_voyage_vazari.id, corespunzatoare fiecarui convoi ales
****************************************************************************************************************************
Procedure salvare_tranzit
Private poVoyage, poRec, pnVVId
lcVVIds = ''
* Completez IPS_VOYAGES_VANZARI
* Se adauga o inreigstrare in IPS_VOYAGES_VANZARI la fiecare factura, nu se suprascrie inregistrarea curenta!
* Nu are rost ramura cu Update, dar pana la stabilizarea aplicatiei, ramane
Text To lcSqlVIns Noshow
INSERT INTO IPS_VOYAGES_VANZARI(vye_id,client_id,client_ctr_id,eagent,beneficiar_id,tiprecap,intern,tip)
VALUES (?poVoyage.vye_id,?poVoyage.client_id,?poVoyage.client_ctr_id,?poVoyage.eagent,?poVoyage.beneficiar_id,?poVoyage.tiprecap,?poVoyage.intern,?poVoyage.tip)
RETURNING id into ?@pnVVId
Endtext
Text To lcSqlVMIns Noshow
insert into ips_voyage_members_vanzari
(vv_id,
vye_id,
vms_id,
rte_id,
kmi,
kmf,
cuplat,
corect,
periculos,
procdist,
tcap,
lbd,
trn,
hp,
distanta,
distanta_cdmn,
tarif,
um,
cant,
id_valuta,
valval,
vtp_id,
procdiv,
gds_id,
quantity,
marfa_country_id)
values
(?poRec.vv_id,
?poRec.vye_id,
?poRec.vms_id,
?poRec.rte_id,
?NVL(poRec.kmi,0),
?NVL(poRec.kmf,0),
?poRec.cuplat,
?poRec.corect,
?poRec.periculos,
?poRec.procdist,
?NVL(poRec.tcap,0),
?NVL(poRec.lbd,0),
?NVL(poRec.trn,0),
?NVL(poRec.hp,0),
?NVL(poRec.distanta,0),
?NVL(poRec.distanta_cdmn,0),
?NVL(poRec.tarif,0),
?TRIM(poRec.um),
?NVL(poRec.cant,0),
?poRec.id_valuta,
?poRec.valval,
?poRec.vtp_id,
?poRec.procdiv,
?poRec.gds_id,
?poRec.cargo,
?poRec.marfa_country_id)
RETURNING id into ?@poRec.vmv_id
Endtext
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
Select crsVoyage
Scan
If !m.llSucces
Exit
Endif
Scatter Name poVoyage
poVoyage.tip = NTIP_TRANZIT
poVoyage.client_ctr_id = Iif(!Empty(Nvl(poVoyage.client_ctr_id, 0)), poVoyage.client_ctr_id, Null) && nu exista contract cu id=0 si nu se valideaza constrangerea
poVoyage.beneficiar_id = Iif(!Empty(Nvl(poVoyage.beneficiar_id, 0)), poVoyage.beneficiar_id, Null)
pnVVId = 0 && Nvl(poVoyage.vv_id, 0)
llSucces = goExecutor.oExecuta(m.lcSqlVIns)
If !m.llSucces
Exit
Endif
Replace vv_id With m.pnVVId In crsVoyage
lcVVIds = m.lcVVIds + ',' + Alltrim(Str(Int(m.pnVVId)))
* COMPLETEZ IPS_VOYAGE_MEMBERS_VANZARI
Select crsVoyages
Scan For ales = 1 And vye_id = poVoyage.vye_id
Scatter Name poRec
poRec.vv_id = m.pnVVId
llSucces = goExecutor.oExecuta(m.lcSqlVMIns)
If !m.llSucces
Exit
Endif
Select crsVoyages
Replace vmv_id With poRec.vmv_id
Endscan && crsVoyages
Endscan && crsVoyage
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
If !Empty(m.lcVVIds)
lcVVIds = Substr(m.lcVVIds, 2)
Endif
poDate.uuid = m.lcVVIds
Return m.lcVVIds
Endproc && salvare_tranzit
****************************************************************************************************************************
*** Salveaza datele calculate pentru factura din contract
*** Intoarce o lista de ips_regdoc.id, corespunzatoare fiecarei inregistrari adaugate
****************************************************************************************************************************
Procedure salvare_contract
Local lcRgdIds, ldData, lcDocument, lcSqlIns, lcSelect
Private poRec
lcRgdIds = ''
lcSelect = Select()
Text To lcSqlIns Noshow
insert into ips_regdoc
(tip,
id_articol,
id_locatia,
id_valuta,
id_client,
id_contract,
pret,
cantitate,
valval,
proc_tvav,
document,
data,
perioada)
values
(?poRec.tip,
?poRec.id_articol,
?poRec.id_locatia,
?poRec.id_valuta,
?poRec.id_client,
?poRec.id_contract,
?poRec.pret,
?poRec.cantitate,
?poRec.valval,
?poRec.proc_tvav,
?poRec.document,
?poRec.data,
?poRec.perioada)
RETURNING id into ?@poRec.id
Endtext
ldData = crsCapFactura.dataact
lcDocument = Substr(Sys(2015), 2)
Select Cast(0 As N(20, 0)) As Id, poDate.nTipFactura As tip, m.ldData As Data, m.lcDocument As Document, id_articol, id_locatia, id_valuta, id_part As id_client, id_ctr As id_contract, Pret, cantitate, valval, proc_tvav, perioada ;
From crsArticoleContract ;
With (Buffering = .T.) ;
Into Cursor crsRegDocTemp
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
Select crsRegDocTemp
Scan
Scatter Name poRec
poRec.perioada = Alltrim(Nvl(poRec.perioada, ''))
llSucces = goExecutor.oExecuta(m.lcSqlIns)
If !m.llSucces
Exit
Endif
lcRgdIds = m.lcRgdIds + ',' + Alltrim(Str(Int(m.poRec.Id)))
Endscan && crsRegDocTemp
Use In (Select('crsRegDocTemp'))
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
If !Empty(m.lcRgdIds)
lcRgdIds = Substr(m.lcRgdIds, 2)
Endif
poDate.uuid = m.lcRgdIds
Select (m.lcSelect)
Return m.lcRgdIds
Endproc && salvare_contract
****************************************************************************************************************************
*** Deocamdata nu salveaza nimic in baza de date. Salvarea recapitulatiei se face la salvarea facturii
****************************************************************************************************************************
Procedure salvare_penalitati
Local lcSelect, lcDel
lcSelect = Select()
Use In (Select('crsCalculPenalitatiAles'))
lcDel = Set("Deleted")
Set Deleted Off
* Selectez inregistrarile alese si pe cele sterse, sa le marchez sterse si in penalitati
* penalitati.sters = 2 (sters explicit de utilizator, nu sters automat la stergerea unei facturi de penalitati)
Select * From crsCalculPenalitati ;
With (Buffering = .T.) ;
Where ales Or sters = 2 ;
Into Cursor crsCalculPenalitatiAles Readwrite
Set Deleted &lcDel
Select (m.lcSelect)
Return '0'
Endproc && salvare_penalitati
*****************************************
*** Sterg din IPS_REGDOC inregistrarile adaugate pentru CONTRACTE (CHIRII, APA), daca dau renunt la factura
*****************************************
Procedure STERG_CONTRACT_REGDOC
Local lcRgdIds, lcSql, llSucces
lcRgdIds = poDate.uuid
llSucces = .T.
If !Empty(m.lcRgdIds)
lcSql = [DELETE FROM IPS_REGDOC WHERE ID IN (] + m.lcRgdIds + [)]
llSucces = goExecutor.oExecuta(m.lcSql)
Endif
Return m.llSucces
Endproc && STERG_CONTRACT_REGDOC
*****************************************
*** Sterg din IPS_VOYAGES_VANZARI inregistrarile adaugate, daca dau renunt la factura
*****************************************
Procedure STERG_TRANZIT
Local lcRgdIds, lcSql, llSucces
lcVVIds = poDate.uuid
llSucces = .T.
If !Empty(m.lcVVIds)
Text To lcSql Textmerge Noshow
BEGIN
DELETE FROM ips_voyage_members_vanzari WHERE VV_ID IN (<<m.lcVVIds>>);
DELETE FROM IPS_VOYAGES_VANZARI WHERE ID IN (<<m.lcVVIds>>);
END;
Endtext
llSucces = goExecutor.oExecuta(m.lcSql)
Endif && lcVVIds
Return m.llSucces
Endproc && STERG_TRANZIT
*****************************************
*** Sterg din IPS_VOYAGES_VANZARI inregistrarile adaugate, daca dau renunt la factura
*****************************************
Procedure STERG_CHEIAJ
Local lcRgdIds, lcSql, llSucces
lcVVIds = poDate.uuid
llSucces = .T.
If !Empty(m.lcVVIds)
Text To lcSql Textmerge Noshow
BEGIN
DELETE FROM ips_berthing_details_vanzari where bv_id IN (SELECT ID FROM IPS_BERTHINGS_VANZARI WHERE VV_ID IN (<<m.lcVVIds>>));
DELETE FROM ips_berthings_vanzari WHERE VV_ID IN (<<m.lcVVIds>>);
DELETE FROM IPS_VOYAGES_VANZARI WHERE ID IN (<<m.lcVVIds>>);
END;
Endtext
llSucces = goExecutor.oExecuta(m.lcSql)
Endif && lcVVIds
Return m.llSucces
Endproc && STERG_CHEIAJ
*******************************************************************************************
*** completez cursul valutar si valorile in lei pe barje, dupa factura, in scopul calcularii valorilor defalcate pe ecluze, senal
*******************************************************************************************
Procedure update_tranzit
Lparameters tcVVIds
Local lcSql, llScris, llSucces, llSucces2
Private pnVVId, pnCurs, pnIdValuta, pnProcTva
Text To lcSql Textmerge Noshow
update ips_voyage_members_vanzari set curs = ?pnCurs,
tvaval = ROUND(valval * ?pnProcTVA, ?gnPVal),
totval = valval + ROUND(valval * ?pnProcTVA, ?gnPVal),
valftva = ROUND(valval * ?pnCurs, ?gnPC),
valtva = ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC),
valctva = ROUND(valval * ?pnCurs, ?gnPC) + ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC)
where vv_id in (<<m.tcVVIds>>) and id_valuta = ?pnIdValuta
Endtext
Select Distinct Curs, id_valuta, proc_tva From crsFactura Into Cursor cValuteTemp
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
If m.llSucces
Select cValuteTemp
Scan
pnCurs = Curs
pnIdValuta = id_valuta
pnProcTva = (proc_tva - 1)
llSucces = goExecutor.oExecuta(m.lcSql)
If !m.llSucces
Exit
Endif
Endscan
Endif && llSucces
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
Use In (Select('cValuteTemp'))
Return m.llSucces
Endproc && update_tranzit
*******************************************************************************************
*** completez in ips_berthing_details_vanzari: cursul valutar si valorile in lei pe barje, dupa factura, in scopul calcularii valorilor defalcate pe ecluze, senal
*******************************************************************************************
Procedure update_cheiaj
Lparameters tcVVIds
Local lcSql, llScris, llSucces, llSucces2
Private pnVVId, pnCurs, pnIdValuta, pnProcTva
Text To lcSql Textmerge Noshow
update ips_berthing_details_vanzari set curs = ?pnCurs,
tvaval = ROUND(valval * ?pnProcTVA, ?gnPVal),
totval = valval + ROUND(valval * ?pnProcTVA, ?gnPVal),
valftva = ROUND(valval * ?pnCurs, ?gnPC),
valtva = ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC),
valctva = ROUND(valval * ?pnCurs, ?gnPC) + ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC)
where id_valuta = ?pnIdValuta and bv_id in (select id from ips_berthings_vanzari where vv_id in (<<m.tcVVIds>>))
Endtext
Select Distinct Curs, id_valuta, proc_tva From crsFactura Into Cursor cValuteTemp
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
If m.llSucces
Select cValuteTemp
Scan
pnCurs = Curs
pnIdValuta = id_valuta
pnProcTva = (proc_tva - 1)
llSucces = goExecutor.oExecuta(m.lcSql)
If !m.llSucces
Exit
Endif
Endscan
Endif && llSucces
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
Use In (Select('cValuteTemp'))
Return m.llSucces
Endproc && update_cheiaj
*******************************************************************************************
*** completez in ips_regdoc: cursul valutar si valorile in lei
*******************************************************************************************
Procedure update_contracte
Lparameters tcRgdIds
Local lcSql, llScris, llSucces, llSucces2, lcSqlValuta
Private pnVVId, pnCurs, pnIdValuta, pnProcTva, pnProcTVAV
* Folosesc 4 zecimale la rotunjire, pentru ca in recapitulatie sa apara cu 4 zecimale, iar in factura adun toate liniile intr-una singura si rotunjesc suma totala la 2 zecimale
Text To lcSql Textmerge Noshow
update ips_regdoc set curs = ?pnCurs,
tvaval = ROUND(valval * ?pnProcTVA, ?gnPval),
totval = valval + ROUND(valval * ?pnProcTVA, ?gnPval),
valftva = ROUND(valval * ?pnCurs, ?gnPC),
valtva = ROUND(ROUND(valval * ?pnCurs, ?gnPval) * ?pnProcTVA , ?gnPC),
valctva = ROUND(valval * ?pnCurs, ?gnPval) + ROUND(ROUND(valval * ?pnCurs, ?gnPval) * ?pnProcTVA , ?gnPc)
where id_valuta = ?pnIdValuta and proc_tvav = ?pnProcTVAV and id in (<<m.tcRgdIds>>)
Endtext
* In crsFactura este o singura linie cu id_valuta = LEI pentru INTERN sau id_valuta distinct pentru EXTERN
* Trebuie sa iau id_valuta din IPS_REGDOC, nu din crsFactura
Text To lcSqlValuta Textmerge Noshow
SELECT distinct id_valuta, proc_tvav FROM ips_regdoc WHERE id in (<<m.tcRgdIds>>)
Endtext
llSucces = goExecutor.oExecuta(m.lcSqlValuta, 'cValuteRgd')
If m.llSucces
Select r.id_valuta, r.proc_tvav As proc_tva, C.Curs From cValuteRgd r Left Join crsCursuri C On r.id_valuta = C.id_valuta Into Cursor cValuteTemp
Endif
Use In (Select('cValuteRgd'))
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
If m.llSucces
Select cValuteTemp
Scan
pnCurs = Nvl(Curs, 1) && CURS LEI = 1
pnIdValuta = id_valuta
pnProcTva = (proc_tva - 1)
pnProcTVAV = proc_tva
llSucces = goExecutor.oExecuta(m.lcSql)
If !m.llSucces
Exit
Endif
Endscan
Endif && llSucces
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
Use In (Select('cValuteTemp'))
Return m.llSucces
Endproc && update_contracte
********************************************************************************************
*** defalc valoarea pe ecluze si senale navigabile pentru fiecare nava din convoiul facturat pentru inregistrare in Reg. documente si apoi in contabilitate
*** Completez cursorul cRegDoc cu valori defalcate pe ecluze, senal pentru salvarea in Reg. Doc si in ontabilitate
********************************************************************************************
Procedure completeaza_regdoc_tranzit
Lparameters tcVVIds
* tnVVId: ips_voyages_vanzari.id
Private pnVVId, pcVyeId
Private pnIPSTranzitProcAG, pnIPSTranzitProcCV, pnIPSTranzitProcOV, pnIPSTranzitProcNV
Local lcSql, llSucces
Local lcEclC, lcEclP, lcLockName, llShowError, lnEcluzariCdmn, lnEcluzariPamn, lnProcent, lnTotValC
Local lnTotValP, lnTranzitProcCDMN, lnTranzitProcPAMN, lnTvaValC, lnTvaValP, lnValctvaC, lnValctvaP
Local lnValfftvaC, lnValfftvaP, lnValtvaC, lnValtvaP, lnValvalC, lnValvalP, loArticol, loRec, lcDeclCdt
pnVVId = 0
pcVyeId = ''
lcDeclCdt = ''
llSucces = .T.
Create Cursor cVoyageMembersV (vv_id I, vye_id C(36), DECLCDT C(100), vms_id C(36), ;
valftva N(18, 2), valtva N(18, 2), valctva N(18, 2), valval N(18, 2), TVAVAL N(18, 2), totval N(18, 2), id_valuta N(5), procentCDMN N(18, 4), ;
valftvaCDMN N(18, 2), valtvaCDMN N(18, 2), valctvaCDMN N(18, 2), valvalCDMN N(18, 2), tvavalCDMN N(18, 2), totvalCDMN N(18, 2), ;
valftvaPAMN N(18, 2), valtvaPAMN N(18, 2), valctvaPAMN N(18, 2), valvalPAMN N(18, 2), tvavalPAMN N(18, 2), totvalPAMN N(18, 2), ;
valftvaAG1 N(18, 2), valtvaAG1 N(18, 2), valctvaAG1 N(18, 2), valvalAG1 N(18, 2), tvavalAG1 N(18, 2), totvalAG1 N(18, 2), ;
valftvaAG2 N(18, 2), valtvaAG2 N(18, 2), valctvaAG2 N(18, 2), valvalAG2 N(18, 2), tvavalAG2 N(18, 2), totvalAG2 N(18, 2), ;
valftvaCV1 N(18, 2), valtvaCV1 N(18, 2), valctvaCV1 N(18, 2), valvalCV1 N(18, 2), tvavalCV1 N(18, 2), totvalCV1 N(18, 2), ;
valftvaCV2 N(18, 2), valtvaCV2 N(18, 2), valctvaCV2 N(18, 2), valvalCV2 N(18, 2), tvavalCV2 N(18, 2), totvalCV2 N(18, 2), ;
valftvaOV1 N(18, 2), valtvaOV1 N(18, 2), valctvaOV1 N(18, 2), valvalOV1 N(18, 2), tvavalOV1 N(18, 2), totvalOV1 N(18, 2), ;
valftvaOV2 N(18, 2), valtvaOV2 N(18, 2), valctvaOV2 N(18, 2), valvalOV2 N(18, 2), tvavalOV2 N(18, 2), totvalOV2 N(18, 2), ;
valftvaNV1 N(18, 2), valtvaNV1 N(18, 2), valctvaNV1 N(18, 2), valvalNV1 N(18, 2), tvavalNV1 N(18, 2), totvalNV1 N(18, 2), ;
valftvaNV2 N(18, 2), valtvaNV2 N(18, 2), valctvaNV2 N(18, 2), valvalNV2 N(18, 2), tvavalNV2 N(18, 2), totvalNV2 N(18, 2), ;
valftvaCDMNS N(18, 2), valtvaCDMNS N(18, 2), valctvaCDMNS N(18, 2), valvalCDMNS N(18, 2), tvavalCDMNS N(18, 2), totvalCDMNS N(18, 2), ;
valftvaPAMNS N(18, 2), valtvaPAMNS N(18, 2), valctvaPAMNS N(18, 2), valvalPAMNS N(18, 2), tvavalPAMNS N(18, 2), totvalPAMNS N(18, 2))
pnIPSTranzitProcAG = Iif(Type('gnIPSTranzitProcAG') = 'N', m.gnIPSTranzitProcAG, 0)
pnIPSTranzitProcCV = Iif(Type('gnIPSTranzitProcCV') = 'N', m.gnIPSTranzitProcCV, 0)
pnIPSTranzitProcOV = Iif(Type('gnIPSTranzitProcOV') = 'N', m.gnIPSTranzitProcOV, 0)
pnIPSTranzitProcNV = Iif(Type('gnIPSTranzitProcNV') = 'N', m.gnIPSTranzitProcNV, 0)
* Pentru fiecare voiaj ales selectez ecluzarile
llSucces = goExecutor.oExecuta([select distinct vv_id, vye_id, declaratio FROM ips_vvoyages_vanzari where vv_id in (] + m.tcVVIds + [)], "cVVTemp")
If !m.llSucces
Create Cursor cVVTemp (vye_id I, declaratio C(20))
Endif
Select cVVTemp
Scan
pcVyeId = cVVTemp.vye_id
pnVVId = cVVTemp.vv_id
lcDeclCdt = Alltrim(Nvl(cVVTemp.declaratio, ''))
* Selectez ecluzele AGIGEA, CERNAVODA, OVIDIU, NAVODARI prin care a ecluzat convoiul.
* In IPS_VVOYAGE_LOCKS ecluzarile sunt defalcate pe membrii convoiului si pe camerele ecluzei, nu pe convoi si pe ecluze
* De aceea selectez distinct id_lock
* 26.05.2020 selectez si dupa vms_id (membru convoi) pentru ca inregistrez veniturile pe ecluze la nivel de camere de ecluzare
* o nava poate sa treaca printr-o camera de ecluzare, alta nava prin alta camera sau deloc prin ecluza
Text To lcSql Textmerge Noshow
Select vms_id, id_lock,
CAST(CASE WHEN UPPER(LOCK_NAME) LIKE '%AGIGEA%' THEN 'AGIGEA'
WHEN UPPER(LOCK_NAME) LIKE '%CERNAVODA%' THEN 'CERNAVODA'
WHEN UPPER(LOCK_NAME) LIKE '%OVIDIU%' THEN 'OVIDIU'
WHEN UPPER(LOCK_NAME) LIKE '%NAVODARI%' THEN 'NAVODARI'
ELSE '' END AS VARCHAR2(20)) AS lock_name,
chamber_name,
CAST(CASE WHEN UPPER(LOCK_NAME) LIKE '%AGIGEA%' THEN ?pnIPSTranzitProcAG
WHEN UPPER(LOCK_NAME) LIKE '%CERNAVODA%' THEN ?pnIPSTranzitProcCV
WHEN UPPER(LOCK_NAME) LIKE '%OVIDIU%' THEN ?pnIPSTranzitProcOV
WHEN UPPER(LOCK_NAME) LIKE '%NAVODARI%' THEN ?pnIPSTranzitProcNV
ELSE 0 END AS NUMBER(6,2)) AS PROCENT
FROM IPS_VVOYAGE_LOCKS
WHERE vye_id = ?pcVyeId
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'cVoyageLocksX')
If m.llSucces
lcSql = [Select VV_ID, VYE_ID,VMS_ID,VALFTVA,VALTVA,VALCTVA,VALVAL,TVAVAL,TOTVAL,ID_VALUTA,Round(DISTANTA_CDMN / DISTANTA, 4) As procentCDMN From IPS_VOYAGE_MEMBERS_VANZARI Where VV_ID = ?pnVVId]
llSucces = goExecutor.oExecuta(m.lcSql, 'cVoyageMembersX')
If m.llSucces
Select cVoyageMembersV
Append From Dbf('cVoyageMembersX')
Use In (Select('cVoyageMembersX'))
Endif
Endif && m.llSucces
If m.llSucces
Select cVoyageMembersV
Scan For vv_id = m.pnVVId
lnVmsId = vms_id
Replace DECLCDT With m.lcDeclCdt
*** Daca este o singura ecluzare, se calculeaza valoarea senalului ca procent fix, iar diferenta trece pe ecluza
*** Daca sunt mai multe ecluzari, se calculeaza valoare senalului ca diferenta dintre valoarea parcursa pe canal - valoare ecluzari
********************************
*** Valori totale pe CDMN si PAMN in functie de procentul de distanta parcurs de fiecare nava pe canalul CDMN
********************************
* CDMN
Replace valftvaCDMN With Round(valftva * procentCDMN, 2), valctvaCDMN With Round(valctva * procentCDMN, 2)
Replace valtvaCDMN With valctvaCDMN - valftvaCDMN
Replace valvalCDMN With Round(valval * procentCDMN, 2), totvalCDMN With Round(totval * procentCDMN, 2)
Replace tvavalCDMN With totvalCDMN - valvalCDMN
* PAMN
Replace valftvaPAMN With valftva - valftvaCDMN, valctvaPAMN With valctva - valctvaCDMN
Replace valtvaPAMN With valtva - valtvaCDMN
Replace valvalPAMN With valval - valvalCDMN, totvalPAMN With totval - totvalCDMN
Replace tvavalPAMN With TVAVAL - tvavalCDMN
*****************************************
* Calculez valorile pe senale navigabile
*****************************************
lnTranzitProcCDMN = (100 - (m.pnIPSTranzitProcAG + m.pnIPSTranzitProcCV)) / 100
lnTranzitProcPAMN = (100 - (m.pnIPSTranzitProcOV + m.pnIPSTranzitProcNV)) / 100
Select cVoyageMembersV
* Senal CDMN = valoarea CDMN * procent senal CDMN
Replace valftvaCDMNS With Round(valftvaCDMN * m.lnTranzitProcCDMN, 2), valctvaCDMNS With Round(valctvaCDMN * lnTranzitProcCDMN, 2)
Replace valtvaCDMNS With valctvaCDMNS - valftvaCDMNS
Replace valvalCDMNS With Round(valvalCDMN * m.lnTranzitProcCDMN, 2), totvalCDMNS With Round(totvalCDMN * m.lnTranzitProcCDMN, 2)
Replace tvavalCDMNS With totvalCDMNS - valvalCDMNS
* Senal PAMN WITH valoarea PAMN * procent senal PAMN
Replace valftvaPAMNS With Round(valftvaPAMN * m.lnTranzitProcPAMN, 2), valctvaPAMNS With Round(valctvaPAMN * lnTranzitProcPAMN, 2)
Replace valtvaPAMNS With valctvaPAMNS - valftvaPAMNS
Replace valvalPAMNS With Round(valvalPAMN * m.lnTranzitProcPAMN, 2), totvalPAMNS With Round(totvalPAMN * m.lnTranzitProcPAMN, 2)
Replace tvavalPAMNS With totvalPAMNS - valvalPAMNS
lnEcluzariCdmn = 0
lnEcluzariPamn = 0
lcEclC = ""
lcEclP = ""
lcChamberC = ""
lcChamberP = ""
* Ecluze
Select cVoyageLocksX
Scan For vms_id = m.lnVmsId
lnProcent = procent / 100
lcLockName = Alltrim(lock_name)
lcChamberName = Alltrim(chamber_name)
Select cVoyageMembersV
Do Case
Case m.lcLockName = 'AGIGEA' And m.lcChamberName = 'SAS1'
Replace valftvaAG1 With Round(valftvaCDMN * lnProcent, 2), valctvaAG1 With Round(valctvaCDMN * lnProcent, 2)
Replace valtvaAG1 With valctvaAG1 - valftvaAG1
Replace valvalAG1 With Round(valvalCDMN * lnProcent, 2), totvalAG1 With Round(totvalCDMN * lnProcent, 2)
Replace tvavalAG1 With totvalAG1 - valvalAG1
lnEcluzariCdmn = lnEcluzariCdmn + 1
lcEclC = m.lcLockName
lcChamberC = m.lcChamberName
Case m.lcLockName = 'AGIGEA' And m.lcChamberName = 'SAS2'
Replace valftvaAG2 With Round(valftvaCDMN * lnProcent, 2), valctvaAG2 With Round(valctvaCDMN * lnProcent, 2)
Replace valtvaAG2 With valctvaAG2 - valftvaAG2
Replace valvalAG2 With Round(valvalCDMN * lnProcent, 2), totvalAG2 With Round(totvalCDMN * lnProcent, 2)
Replace tvavalAG2 With totvalAG2 - valvalAG2
lnEcluzariCdmn = lnEcluzariCdmn + 1
lcEclC = m.lcLockName
lcChamberC = m.lcChamberName
Case m.lcLockName = 'CERNAVODA' And m.lcChamberName = 'SAS1'
Replace valftvaCV1 With Round(valftvaCDMN * lnProcent, 2), valctvaCV1 With Round(valctvaCDMN * lnProcent, 2)
Replace valtvaCV1 With valctvaCV1 - valftvaCV1
Replace valvalCV1 With Round(valvalCDMN * lnProcent, 2), totvalCV1 With Round(totvalCDMN * lnProcent, 2)
Replace tvavalCV1 With totvalCV1 - valvalCV1
lcEclC = m.lcLockName
lnEcluzariCdmn = lnEcluzariCdmn + 1
lcChamberC = m.lcChamberName
Case m.lcLockName = 'CERNAVODA' And m.lcChamberName = 'SAS2'
Replace valftvaCV2 With Round(valftvaCDMN * lnProcent, 2), valctvaCV2 With Round(valctvaCDMN * lnProcent, 2)
Replace valtvaCV2 With valctvaCV2 - valftvaCV2
Replace valvalCV2 With Round(valvalCDMN * lnProcent, 2), totvalCV2 With Round(totvalCDMN * lnProcent, 2)
Replace tvavalCV2 With totvalCV2 - valvalCV2
lcEclC = m.lcLockName
lnEcluzariCdmn = lnEcluzariCdmn + 1
lcChamberC = m.lcChamberName
Case m.lcLockName = 'OVIDIU' And m.lcChamberName = 'C1'
Replace valftvaOV1 With Round(valftvaPAMN * lnProcent, 2), valctvaOV1 With Round(valctvaPAMN * lnProcent, 2)
Replace valtvaOV1 With valctvaOV1 - valftvaOV1
Replace valvalOV1 With Round(valvalPAMN * lnProcent, 2), totvalOV1 With Round(totvalPAMN * lnProcent, 2)
Replace tvavalOV1 With totvalOV1 - valvalOV1
lcEclP = m.lcLockName
lnEcluzariPamn = lnEcluzariPamn + 1
lcChamberP = m.lcChamberName
Case m.lcLockName = 'OVIDIU' And m.lcChamberName = 'C2'
Replace valftvaOV2 With Round(valftvaPAMN * lnProcent, 2), valctvaOV2 With Round(valctvaPAMN * lnProcent, 2)
Replace valtvaOV2 With valctvaOV2 - valftvaOV2
Replace valvalOV2 With Round(valvalPAMN * lnProcent, 2), totvalOV2 With Round(totvalPAMN * lnProcent, 2)
Replace tvavalOV2 With totvalOV2 - valvalOV2
lcEclP = m.lcLockName
lnEcluzariPamn = lnEcluzariPamn + 1
lcChamberP = m.lcChamberName
Case m.lcLockName = 'NAVODARI' And m.lcChamberName = 'C1'
Replace valftvaNV1 With Round(valftvaPAMN * lnProcent, 2), valctvaNV1 With Round(valctvaPAMN * lnProcent, 2)
Replace valtvaNV1 With valctvaNV1 - valftvaNV1
Replace valvalNV1 With Round(valvalPAMN * lnProcent, 2), totvalNV1 With Round(totvalPAMN * lnProcent, 2)
Replace tvavalNV1 With totvalNV1 - valvalNV1
lcEclP = m.lcLockName
lnEcluzariPamn = lnEcluzariPamn + 1
lcChamberP = m.lcChamberName
Case m.lcLockName = 'NAVODARI' And m.lcChamberName = 'C2'
Replace valftvaNV2 With Round(valftvaPAMN * lnProcent, 2), valctvaNV2 With Round(valctvaPAMN * lnProcent, 2)
Replace valtvaNV2 With valctvaNV2 - valftvaNV2
Replace valvalNV2 With Round(valvalPAMN * lnProcent, 2), totvalNV2 With Round(totvalPAMN * lnProcent, 2)
Replace tvavalNV2 With totvalNV2 - valvalNV2
lcEclP = m.lcLockName
lnEcluzariPamn = lnEcluzariPamn + 1
lcChamberP = m.lcChamberName
Endcase
Endscan && cVoyageLocksX
*** Diferenta (tranzit CDMN/PAMN - senal CDMN/PAMN - ecluzari (AG,CV/OV,NV) trece pe ecluzare pe fiecare canal, daca exista, altfel pe senal
Select cVoyageMembersV
lnValfftvaC = valftvaCDMN - (valftvaCDMNS + valftvaAG1 + valftvaCV1 + valftvaAG2 + valftvaCV2)
lnValctvaC = valctvaCDMN - (valctvaCDMNS + valctvaAG1 + valctvaCV1 + valctvaAG2 + valctvaCV2)
lnValtvaC = m.lnValctvaC - m.lnValfftvaC
lnValvalC = valvalCDMN - (valvalCDMNS + valvalAG1 + valvalCV1 + valvalAG2 + valvalCV2)
lnTotValC = totvalCDMN - (totvalCDMNS + totvalAG1 + totvalCV1 + totvalAG2 + totvalCV2)
lnTvaValC = m.lnTotValC - m.lnValvalC
lnValfftvaP = valftvaPAMN - (valftvaPAMNS + valftvaOV1 + valftvaNV1 + valftvaOV2 + valftvaNV2)
lnValctvaP = valctvaPAMN - (valctvaPAMNS + valctvaOV1 + valctvaNV1 + valctvaOV2 + valctvaNV2)
lnValtvaP = m.lnValctvaP - m.lnValfftvaP
lnValvalP = valvalPAMN - (valvalPAMNS + valvalOV1 + valvalNV1 + valvalOV2 + valvalNV2)
lnTotValP = totvalPAMN - (totvalPAMNS + totvalOV1 + totvalNV1 + totvalOV2 + totvalNV2)
lnTvaValP = m.lnTotValP - m.lnValvalP
Select cVoyageMembersV
If m.lnEcluzariCdmn = 0
* Senal CDMN = valoarea CDMN - (AG + CV)
Replace valftvaCDMNS With valftvaCDMNS + m.lnValfftvaC, valctvaCDMNS With valctvaCDMNS + m.lnValctvaC, valtvaCDMNS With valtvaCDMNS + lnValtvaC
Replace valvalCDMNS With valvalCDMNS + m.lnValvalC, totvalCDMNS With totvalCDMNS + m.lnTotValC, tvavalCDMNS With tvavalCDMNS + m.lnTvaValC
Else
Do Case
Case m.lcEclC = 'AGIGEA' And m.lcChamberC = 'SAS1' && pun diferenta pe ultima ecluza
Replace valftvaAG1 With valftvaAG1 + m.lnValfftvaC, valctvaAG1 With valctvaAG1 + m.lnValctvaC, valtvaAG1 With valtvaAG1 + m.lnValtvaC
Replace valvalAG1 With valvalAG1 + m.lnValvalC, totvalAG1 With totvalAG1 + m.lnTotValC, tvavalAG1 With tvavalAG1 + m.lnTvaValC
Case m.lcEclC = 'AGIGEA' And m.lcChamberC = 'SAS2' && pun diferenta pe ultima ecluza
Replace valftvaAG2 With valftvaAG2 + m.lnValfftvaC, valctvaAG2 With valctvaAG2 + m.lnValctvaC, valtvaAG2 With valtvaAG2 + m.lnValtvaC
Replace valvalAG2 With valvalAG2 + m.lnValvalC, totvalAG2 With totvalAG2 + m.lnTotValC, tvavalAG2 With tvavalAG2 + m.lnTvaValC
Case m.lcEclC = 'CERNAVODA' And m.lcChamberC = 'SAS1' && pun diferenta pe ultima ecluza
Replace valftvaCV1 With valftvaCV1 + m.lnValfftvaC, valctvaCV1 With valctvaCV1 + m.lnValctvaC, valtvaCV1 With valtvaCV1 + m.lnValtvaC
Replace valvalCV1 With valvalCV1 + m.lnValvalC, totvalCV1 With totvalCV1 + m.lnTotValC, tvavalCV1 With tvavalCV1 + m.lnTvaValC
Otherwise && CASE m.lcEclC = 'CERNAVODA' AND m.lcChamber = 'SAS2' && pun diferenta pe ultima ecluza
Replace valftvaCV2 With valftvaCV2 + m.lnValfftvaC, valctvaCV2 With valctvaCV2 + m.lnValctvaC, valtvaCV2 With valtvaCV2 + m.lnValtvaC
Replace valvalCV2 With valvalCV2 + m.lnValvalC, totvalCV2 With totvalCV2 + m.lnTotValC, tvavalCV2 With tvavalCV2 + m.lnTvaValC
Endcase
Endif
If m.lnEcluzariPamn = 0
* Senal PAMN = valoarea PAMN - (OV + NV)
Replace valftvaPAMNS With valftvaPAMNS + m.lnValfftvaP, valctvaPAMNS With valctvaPAMNS + m.lnValctvaP, valtvaPAMNS With valtvaPAMNS + lnValtvaP
Replace valvalPAMNS With valvalPAMNS + m.lnValvalP, totvalPAMNS With totvalPAMNS + m.lnTotValP, tvavalPAMNS With tvavalPAMNS + m.lnTvaValP
Else
Do Case
Case m.lcEclP = 'OVIDIU' And m.lcChamberP = 'C1' && pun diferenta pe ultima ecluza
Replace valftvaOV1 With valftvaOV1 + m.lnValfftvaP, valctvaOV1 With valctvaOV1 + m.lnValctvaP, valtvaOV1 With valtvaOV1 + m.lnValtvaP
Replace valvalOV1 With valvalOV1 + m.lnValvalP, totvalOV1 With totvalOV1 + m.lnTotValP, tvavalOV1 With tvavalOV1 + m.lnTvaValP
Case m.lcEclP = 'OVIDIU' And m.lcChamberP = 'C2' && pun diferenta pe ultima ecluza
Replace valftvaOV2 With valftvaOV2 + m.lnValfftvaP, valctvaOV2 With valctvaOV2 + m.lnValctvaP, valtvaOV2 With valtvaOV2 + m.lnValtvaP
Replace valvalOV2 With valvalOV2 + m.lnValvalP, totvalOV2 With totvalOV2 + m.lnTotValP, tvavalOV2 With tvavalOV2 + m.lnTvaValP
Case m.lcEclP = 'NAVODARI' And m.lcChamberP = 'C1' && pun diferenta pe ultima ecluza
Replace valftvaNV1 With valftvaNV1 + m.lnValfftvaP, valctvaNV1 With valctvaNV1 + m.lnValctvaP, valtvaNV1 With valtvaNV1 + m.lnValtvaP
Replace valvalNV1 With valvalNV1 + m.lnValvalP, totvalNV1 With totvalNV1 + m.lnTotValP, tvavalNV1 With tvavalNV1 + m.lnTvaValP
Otherwise && m.lcEclP = 'NAVODARI' AND m.lcChamber = 'C2'
Replace valftvaNV2 With valftvaNV2 + m.lnValfftvaP, valctvaNV2 With valctvaNV2 + m.lnValctvaP, valtvaNV2 With valtvaNV2 + m.lnValtvaP
Replace valvalNV2 With valvalNV2 + m.lnValvalP, totvalNV2 With totvalNV2 + m.lnTotValP, tvavalNV2 With tvavalNV2 + m.lnTvaValP
Endcase
Endif
Endscan && cVoyageMembersV
Endif && llSucces
Use In (Select('cVoyageLocksX'))
Endscan && cVVTemp
Use In (Select('cVVTemp'))
Select vye_id, DECLCDT, id_valuta, ;
Sum(valftvaAG1) As valftvaAG1, Sum(valtvaAG1) As valtvaAG1, Sum(valctvaAG1) As valctvaAG1, Sum(valvalAG1) As valvalAG1, Sum(tvavalAG1) As tvavalAG1, Sum(totvalAG1) As totvalAG1, ;
Sum(valftvaCV1) As valftvaCV1, Sum(valtvaCV1) As valtvaCV1, Sum(valctvaCV1) As valctvaCV1, Sum(valvalCV1) As valvalCV1, Sum(tvavalCV1) As tvavalCV1, Sum(totvalCV1) As totvalCV1, ;
Sum(valftvaOV1) As valftvaOV1, Sum(valtvaOV1) As valtvaOV1, Sum(valctvaOV1) As valctvaOV1, Sum(valvalOV1) As valvalOV1, Sum(tvavalOV1) As tvavalOV1, Sum(totvalOV1) As totvalOV1, ;
Sum(valftvaNV1) As valftvaNV1, Sum(valtvaNV1) As valtvaNV1, Sum(valctvaNV1) As valctvaNV1, Sum(valvalNV1) As valvalNV1, Sum(tvavalNV1) As tvavalNV1, Sum(totvalNV1) As totvalNV1, ;
Sum(valftvaAG2) As valftvaAG2, Sum(valtvaAG2) As valtvaAG2, Sum(valctvaAG2) As valctvaAG2, Sum(valvalAG2) As valvalAG2, Sum(tvavalAG2) As tvavalAG2, Sum(totvalAG2) As totvalAG2, ;
Sum(valftvaCV2) As valftvaCV2, Sum(valtvaCV2) As valtvaCV2, Sum(valctvaCV2) As valctvaCV2, Sum(valvalCV2) As valvalCV2, Sum(tvavalCV2) As tvavalCV2, Sum(totvalCV2) As totvalCV2, ;
Sum(valftvaOV2) As valftvaOV2, Sum(valtvaOV2) As valtvaOV2, Sum(valctvaOV2) As valctvaOV2, Sum(valvalOV2) As valvalOV2, Sum(tvavalOV2) As tvavalOV2, Sum(totvalOV2) As totvalOV2, ;
Sum(valftvaNV2) As valftvaNV2, Sum(valtvaNV2) As valtvaNV2, Sum(valctvaNV2) As valctvaNV2, Sum(valvalNV2) As valvalNV2, Sum(tvavalNV2) As tvavalNV2, Sum(totvalNV2) As totvalNV2, ;
Sum(valftvaCDMNS) As valftvaCDMNS, Sum(valtvaCDMNS) As valtvaCDMNS, Sum(valctvaCDMNS) As valctvaCDMNS, Sum(valvalCDMNS) As valvalCDMNS, Sum(tvavalCDMNS) As tvavalCDMNS, Sum(totvalCDMNS) As totvalCDMNS, ;
Sum(valftvaPAMNS) As valftvaPAMNS, Sum(valtvaPAMNS) As valtvaPAMNS, Sum(valctvaPAMNS) As valctvaPAMNS, Sum(valvalPAMNS) As valvalPAMNS, Sum(tvavalPAMNS) As tvavalPAMNS, Sum(totvalPAMNS) As totvalPAMNS ;
From cVoyageMembersV ;
Group By vye_id, DECLCDT, id_valuta ;
Into Cursor cVoyagesValori
Use In (Select('cVoyageMembersV'))
Delete From cRegDoc && curat cRegDoc
Select cVoyagesValori
Scan
Scatter Name loRec
lnCantitate = Iif(valctvaAG1 < 0 Or valctvaCV1 < 0 Or valctvaOV1 < 0 Or valctvaNV1 < 0 Or valctvaCDMNS < 0 Or valctvaPAMNS < 0 Or valctvaAG2 < 0 Or valctvaCV2 < 0 Or valctvaOV2 < 0 Or valctvaNV2 < 0, -1, 1)
With loRec
If .valftvaAG1 <> 0 Or .valtvaAG1 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'AGIGEA-SAS1', .valftvaAG1, .valtvaAG1, .valctvaAG1, .valvalAG1, .valvalAG1, .id_valuta, m.lnCantitate)
Endif
If .valftvaCV1 <> 0 Or .valtvaCV1 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'CERNAVODA-SAS1', .valftvaCV1, .valtvaCV1, .valctvaCV1, .valvalCV1, .valvalCV1, .id_valuta, m.lnCantitate)
Endif
If .valftvaOV1 <> 0 Or .valtvaOV1 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'OVIDIU-C1', .valftvaOV1, .valtvaOV1, .valctvaOV1, .valvalOV1, .valvalOV1, .id_valuta, m.lnCantitate)
Endif
If .valftvaNV1 <> 0 Or .valtvaNV1 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'NAVODARI-C1', .valftvaNV1, .valtvaNV1, .valctvaNV1, .valvalNV1, .valvalNV1, .id_valuta, m.lnCantitate)
Endif
If .valftvaAG2 <> 0 Or .valtvaAG2 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'AGIGEA-SAS2', .valftvaAG2, .valtvaAG2, .valctvaAG2, .valvalAG2, .valvalAG2, .id_valuta, m.lnCantitate)
Endif
If .valftvaCV2 <> 0 Or .valtvaCV2 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'CERNAVODA-SAS2', .valftvaCV2, .valtvaCV2, .valctvaCV2, .valvalCV2, .valvalCV2, .id_valuta, m.lnCantitate)
Endif
If .valftvaOV2 <> 0 Or .valtvaOV2 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'OVIDIU-C2', .valftvaOV2, .valtvaOV2, .valctvaOV2, .valvalOV2, .valvalOV2, .id_valuta, m.lnCantitate)
Endif
If .valftvaNV2 <> 0 Or .valtvaNV2 <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'NAVODARI-C2', .valftvaNV2, .valtvaNV2, .valctvaNV2, .valvalNV2, .valvalNV2, .id_valuta, m.lnCantitate)
Endif
If .valftvaCDMNS <> 0 Or .valtvaCDMNS <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'SENAL CDMN', .valftvaCDMNS, .valtvaCDMNS, .valctvaCDMNS, .valvalCDMNS, .valvalCDMNS, .id_valuta, m.lnCantitate)
Endif
If .valftvaPAMNS <> 0 Or .valtvaPAMNS <> 0
Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'SENAL PAM', .valftvaPAMNS, .valtvaPAMNS, .valctvaPAMNS, .valvalPAMNS, .valvalPAMNS, .id_valuta, m.lnCantitate)
Endif
Endwith
Endscan && cVoyagesValori
Use In (Select('cVoyagesValori'))
loArticol = GetPrestatieByTip(TIP_TRANZIT)
Update cRegDoc Set id_articol = GetIdPrestatieByArticol(GetPrestatieByTip(TIP_TRANZIT)), id_locatia = GetIdLocatieByName(Alltrim(locatia))
Return m.llSucces
Endproc && completeaza_regdoc_tranzit
********************************************************************************************
*** defalc valoarea pe locatii pentru fiecare nava din convoiul facturat pentru inregistrare in Reg. documente si apoi in contabilitate
*** Completez cursorul cRegDoc cu valori defalcate pe ecluze, senal pentru salvarea in Reg. Doc si in ontabilitate
********************************************************************************************
Procedure completeaza_regdoc_cheiaj
Lparameters tcVVIds
* tnVVId: ips_voyages_vanzari.id
Private pnVVId
Local lcSql, llSucces, lcDeclCdt
pnVVId = 0
llSucces = .T.
lcDeclCdt = ''
llSucces = goExecutor.oExecuta([select distinct vv_id, declaratio FROM ips_vvoyages_vanzari where vv_id in (] + m.tcVVIds + [)], "cVVTemp")
If !m.llSucces
Create Cursor cVVTemp (vye_id I, declaratio C(20))
Endif
Delete From cRegDoc && curat cRegdoc
Select cVVTemp
Scan
lcDeclCdt = Alltrim(Nvl(cVVTemp.declaratio, ''))
pnVVId = cVVTemp.vv_id
Text To lcSql Noshow
Select b.vv_id, b.id_locatia, bd.id_articol, bd.id_valuta, Sum(bd.valftva) As valftva, Sum(bd.valtva) As valtva, Sum(bd.valctva) As valctva, Sum(bd.valval) As valval, Sum(bd.valval) As Pret
From ips_berthing_details_vanzari bd Join ips_berthings_vanzari b On bd.bv_id = b.Id
where b.vv_id = ?pnVVId
Group By b.vv_id, b.id_locatia, bd.id_articol, bd.id_valuta
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'cCheiajValori')
If m.llSucces
Select cCheiajValori
Scan
Scatter Name loRec
AddProperty(loRec, 'articol', GetArticolById(loRec.id_articol))
AddProperty(loRec, 'locatia', GetLocatieById(loRec.id_locatia))
AddProperty(loRec, 'document', m.lcDeclCdt)
AddProperty(loRec, 'cantitate', Iif(loRec.valctva < 0, -1, 1))
With loRec
Insert Into cRegDoc(Document, id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.Document, .id_locatia, .locatia, .id_articol, .articol, .valftva, .valtva, .valctva, .valval, .valval, .id_valuta, .cantitate)
Endwith
Endscan
Endif && llSucces
Use In (Select('cCheiajValori'))
Endscan && cVVTemp
Use In (Select('cVVTemp'))
Return m.llSucces
Endproc && completeaza_regdoc_cheiaj
********************************************************************************************
*** completez cRegdoc pe locatii din ips_regdoc
********************************************************************************************
Procedure completeaza_regdoc_contracte
Lparameters tcRgdIds
Local llSucces, loRec, llIntern
Select crsCapFactura
Go Top
llIntern = (crsCapFactura.intern = 1)
Text To lcSql Textmerge Noshow
SELECT id, document, id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate, id_valuta, proc_tvav, CAST(0 as NUMBER(20)) as id_jtva_coloana, CAST(0 as NUMBER(20)) as id_jtva_coloana_ex FROM ips_vregdoc WHERE id in (<<m.tcRgdIds>>)
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'cContractValori')
If m.llSucces
* Completez id_jtva_coloana din crsFactura
Select id_valuta, proc_tva, id_jtva_coloana, id_jtva_coloana_ex From crsFactura Into Cursor cCoteFacturaTemp
Select cCoteFacturaTemp
Scan
Scatter Name loRec
* Factura intern are toate articolele modificate in LEI si nu mai corespund fata de regdoc
If m.llIntern
Update cContractValori Set id_jtva_coloana = loRec.id_jtva_coloana, id_jtva_coloana_ex = loRec.id_jtva_coloana_ex Where proc_tvav = loRec.proc_tva
Else
Update cContractValori Set id_jtva_coloana = loRec.id_jtva_coloana, id_jtva_coloana_ex = loRec.id_jtva_coloana_ex Where id_valuta = loRec.id_valuta And proc_tvav = loRec.proc_tva
Endif
Endscan
Use In (Select('cCoteFacturaTemp'))
Delete From cRegDoc && curat cRegDoc
Select cContractValori
Scan
Scatter Name loRec
With loRec
Insert Into cRegDoc(Id, id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate, id_jtva_coloana, id_jtva_coloana_ex) ;
Values (.Id, .id_locatia, .locatia, .id_articol, .articol, .valftva, .valtva, .valctva, .valval, .valval, .id_valuta, .cantitate, .id_jtva_coloana, .id_jtva_coloana_ex)
Endwith
Endscan
Endif && llSucces
Use In (Select('cContractValori'))
llSucces = .T.
Return m.llSucces
Endproc && completeaza_regdoc_contracte
********************************************************************************************
*** completez cRegdoc pe locatii din ips_regdoc
********************************************************************************************
Procedure completeaza_regdoc_penalitati
Lparameters tcRgdIds
Local lcSql, llSucces, lnCantitate, lnDiferenta, lnFactId, lnIdJtva, lnIdJtvaEx, lnIdMonedaNationala, loMonedaNationala
Local lnPrestatieIdCheiaj, lnPrestatieIdTranzit, lnProcTva, lnValTvaF, lnValTvaR, lnValctvaF, lnValctvaR, lnValftvaF, lnValftvaR
Local lcListaIdFact
Select * From crsCalculPenalitatiAles Where sters = 0 Into Cursor cFacturiPenalitati NOFILTER
*** REGDOC pentru facturile originale
Select Distinct id_fact From cFacturiPenalitati Into Cursor cFacturiTemp
lcListaIdFact = ''
Select cFacturiTemp
Scan
lcListaIdFact = lcListaIdFact + ',' + Alltrim(Str(id_fact))
Endscan
lcListaIdFact = Iif(!Empty(m.lcListaIdFact), Substr(m.lcListaIdFact, 2), '')
Use In (Select('cFacturiTemp'))
lcSql = [SELECT v.id_fact, r.id, r.id_locatia, r.id_articol, r.id_valuta, r.valftva, r.valval FROM ips_regdoc r join vanzari v on r.id_vanzare = v.id_vanzare WHERE v.id_fact in (] + m.lcListaIdFact + [)]
llSucces = goExecutor.oExecuta(m.lcSql, 'cRegdocPenalitati')
If !m.llSucces
Exit
Endif
*** selectez prestatiile facturate pentru tip 2,3,5,9 alte prestatii, chirii, livrare apa, facturi diverse
*** trebuie sa defalc suma de penalitati dupa cont, analitic pentru fiecare prestatie,
*** calculez suma totala facturata pe fiecare document din regdoc, pentru calcularea proportiilor fiecarei prestatii
Select id_fact, Sum(valftva) As valftva, Sum(valval) As valval ;
From cRegdocPenalitati ;
Group By id_fact ;
Into Cursor cRegDocFacturi
Select fp.id_fact, Cast(Nvl(r.id_articol, 0) As N(12)) As id_articol, Cast(Nvl(r.id_locatia, 0) As N(12)) As id_locatia, ;
Cast(Iif(fp.suma <> 0 And Nvl(r.valftva, 0) <> 0 And Nvl(rf.valftva, 0) <> 0, Round((r.valftva / rf.valftva) * fp.penalitati, m.gnPC), Iif(Empty(Nvl(rf.id_fact, 0)), fp.penalitati, 0.00)) As N(16, 2)) As suma, ;
fp.penalitati As psuma, Nvl(fp.tip, 0) As tip, fp.nrfact, fp.id_contract, fp.contract ;
From (Select id_fact, Max(id_ctr) As id_contract, Max(numar) As contract, Max(nrfact) As nrfact, Max(Nvl(tip, 0)) As tip, Sum(suma) As suma, Sum(sumaval) As sumaval, Sum(penalitati) As penalitati ;
From cFacturiPenalitati ;
Where Inlist(tip, NTIP_TRANZIT, NTIP_CHEIAJ, NTIP_APA, NTIP_CHIRII, NTIP_ALTE, NTIP_DIVERSE) ;
Group By id_fact) fp Left Join cRegdocPenalitati r On r.id_fact = fp.id_fact ;
Left Join cRegDocFacturi rf On rf.id_fact = fp.id_fact ;
Order By fp.id_fact, r.valftva Desc ;
Into Cursor cRegDocTemp Readwrite
* Completez prestatia pentru cheiaj, daca nu o are completata
lnPrestatieIdCheiaj = GetIdPrestatieByArticol(GetPrestatieByTip(TIP_CHEIAJ))
lnPrestatieIdTranzit = GetIdPrestatieByArticol(GetPrestatieByTip(TIP_TRANZIT))
Update cRegDocTemp Set id_articol = m.lnPrestatieIdCheiaj Where tip = NTIP_CHEIAJ And Empty(Nvl(id_articol, 0))
Update cRegDocTemp Set id_articol = m.lnPrestatieIdTranzit Where tip = NTIP_TRANZIT And Empty(Nvl(id_articol, 0))
Use In (Select('cFacturiPenalitati'))
Use In (Select('cRegDocFacturi'))
*** Completez diferentele de zecimale dintre suma globala de penalitati pe factura si sumele defalcate pe prestatii
Select id_fact, Sum(suma) As suma, Min(psuma) As psuma ;
From cRegDocTemp ;
Group By id_fact ;
Into Cursor cRegDocSume NOFILTER
Select cRegDocSume
Scan
lnFactId = id_fact
lnDiferenta = psuma - suma
If m.lnDiferenta <> 0
Select cRegDocTemp
Locate For id_fact = m.lnFactId
If Found()
Replace suma With suma + m.lnDiferenta
Endif
Endif
Endscan
Use In (Select('cRegDocSume'))
Select crsFactura
Go Top
lnIdJtva = id_jtva_coloana
lnIdJtvaEx = id_jtva_coloana_ex
lnCantitate = 1
lnProcTva = proc_tva && 1,00
loMonedaNationala = GetMonedaNationala()
lnIdMonedaNationala = loMonedaNationala.id_valuta
Delete From cRegDoc && curat cRegdoc la Facturi diverse
Insert Into cRegDoc(id_locatia, locatia, id_articol, articol, valftva, valval, Pret, id_valuta, id_jtva_coloana, id_jtva_coloana_ex, cantitate, Document, id_contract, contract) ;
Select id_locatia, GetLocatieById(id_locatia), id_articol, GetArticolById(id_articol), suma, suma, suma, m.lnIdMonedaNationala, m.lnIdJtva, m.lnIdJtvaEx, m.lnCantitate As cantitate, Alltrim(Str(nrfact)) As Document, id_contract, contract ;
From cRegDocTemp
Update cRegDoc Set valtva = Round(valftva * (m.lnProcTva - 1), m.gnPC), TVAVAL = Round(valval * (m.lnProcTva - 1), m.gnPC)
Update cRegDoc Set valctva = valftva + valtva, totval = valval + TVAVAL
* Ajustez diferenta dintre valoarea de pe factura si total valoare defalcata pe locatii si articole
Calculate Sum(valftva), Sum(valtva), Sum(valctva) To lnValftvaF, lnValTvaF, lnValctvaF In crsFactura
Calculate Sum(valftva), Sum(valtva), Sum(valctva) To lnValftvaR, lnValTvaR, lnValctvaR In cRegDoc
Select cRegDoc
Go Top
Replace valftva With valftva + (m.lnValftvaF - m.lnValftvaR), valtva With valtva + (lnValTvaF - m.lnValTvaR), valctva With (lnValctvaF - m.lnValctvaR)
Replace valval With valftva, TVAVAL With valtva, totval With valctva
Use In (Select('cRegDocTemp'))
llSucces = .T.
Return m.llSucces
Endproc && completeaza_regdoc_penalitati
********************************************************************************************
*** facturi diverse. se iau articolele direct din factura
*** scriu valoarea pe locatii pentru fiecare articol din factura pentru inregistrare in Reg. documente si apoi in contabilitate
********************************************************************************************
Procedure completeaza_regdoc_alte
Lparameters tuUid
* Nu folosesc tuUid, pentru ca nu se completeaza intr-un formular distinct.
* Apelez procedura la salvarea facturilor diverse si completez cRegdoc direct din crsFactura
Local llSucces
llSucces = .F.
Delete From cRegDoc && curat cRegdoc la Facturi diverse
Select crsFactura
Scan
Scatter Name loRec
AddProperty(loRec, 'document', '')
AddProperty(loRec, 'articol', GetArticolById(loRec.id_articol))
AddProperty(loRec, 'locatia', GetLocatieById(loRec.id_locatia))
With loRec
Insert Into cRegDoc(id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, id_jtva_coloana, id_jtva_coloana_ex, cantitate) ;
Values (.id_locatia, .locatia, .id_articol, .articol, .valftva, .valtva, .valctva, .valval, .pretval, .id_valuta, .id_jtva_coloana, .id_jtva_coloana_ex, .cantitate)
Endwith
Endscan
llSucces = .T.
Return m.llSucces
Endproc && completeaza_regdoc_alte
**************************************************
*** Completeaza cursul valutar in cRegdoc din crsFactura
**************************************************
Procedure completeaza_regdoc_curs
Local lcSelect, lnCurs, lnIdValuta, llSucces
llSucces = .T.
lcSelect = Select()
Select Distinct id_valuta, Curs From crsFactura Into Cursor cValuteTemp
Select cValuteTemp
Scan
lnCurs = Curs
lnIdValuta = id_valuta
Update cRegDoc Set Curs = m.lnCurs Where id_valuta = m.lnIdValuta
Endscan
Use In (Select('cValuteTemp'))
Select (m.lcSelect)
Return m.llSucces
Endproc && completeaza_regdoc_curs
************************************
*** Completeaza notele contabile in actactan pentru salvarea in contabilitate
************************************
Procedure completeaza_actactan
Lparameters tcTip
Local lcAscc, lcAscd, lcExplicatia, lcScc, lcScd, lcTip, llIntern, llPenalitati, llSucces, lnIdJTvaColoana, lcSelect
Local llTVAIncasare, lnIdArticol, lnIdLocatia, loFactura, loJTVA, loJtvaA, lnFacturaFaraTVA, lnFacturaTVA, lnFacturaFaraTVAVal, lnFacturaTVAVal, lnIdSet
Local lcContTva, lcAcontTva
Local llFurnizorRTVAI, lnActBaza, lnActBazaVal, lnActTVA, lnActTVAVal, lnDiferentaBaza
Local lnDiferentaBazaVal, lnDiferentaTVA, lnDiferentaTVAVal, lnIdJtva, lnTaxCode
lcTip = m.tcTip
lnIdSet = 50200
llSucces = .T.
lcSelect = Select()
Select crsCapFactura
Go Top
Scatter Name loFactura
Select crsFactura
Go Top
loJTVA = GeJtvaColoana(crsFactura.id_jtva_coloana, goCalendar.tva_incasare, "JV")
AddProperty(loFactura, "id_jtva_coloana", loJTVA.id_jtva_coloana)
AddProperty(loFactura, "id_tva", loJTVA.id_tva)
AddProperty(loFactura, "proc_tva", crsFactura.proc_tva)
llIntern = (loFactura.intern = 1)
llTVAIncasare = (goCalendar.tva_incasare = 1)
Select id_articol, id_locatia, Cast(Iif(m.llIntern, 0, id_valuta) As N(5)) As id_valuta, Cast(Iif(m.llIntern, 0, Curs) As N(12, 6)) As Curs, ;
Cast(0 As N(5, 2)) As proc_tva, id_jtva_coloana, Cast(0 As N(10)) As id_tva, CAST(null as N(9)) as taxcode, ;
Space(4) As scd, Space(4) As ascd, Space(4) As scc, Space(4) As ascc, Space(100) As explicatia, ;
Sum(valftva) As suma, Sum(valtva) As valtva, Sum(valctva) As valctva, ;
Sum(valval) As suma_val, Cast(0 As N(20, 4)) As TVAVAL, Cast(0 As N(20, 4)) As totval ;
From cRegDoc ;
Group By 1, 2, 3, 4, 5, 6, 7 ;
Into Cursor cActTemp Readwrite
*** Completez conturi si analitice in functie de locatie si articol
Sele cActTemp
Scan
llPenalitati = (m.lcTip = TIP_PENALITATI)
lcScd = ''
lcAscd = ''
lcScc = ''
lcAscc = ''
lcExplicatia = ''
lnIdArticol = id_articol
lnIdLocatia = id_locatia
lnIdJTvaColoana = Nvl(id_jtva_coloana, 0)
llSucces = GetCont(m.lcTip, m.lnIdLocatia, m.lnIdArticol, m.llIntern, m.llPenalitati, @m.lcScd, @m.lcAscd, @m.lcScc, @m.lcAscc, @m.lcExplicatia)
If !m.llSucces
If amessagebox('Doriti sa continuati fara conturi configurate?', 4 + 32, _Screen.Caption) = 6
llSucces = .T.
Else
Exit
Endif
Endif
If !Empty(m.lnIdJTvaColoana)
loJtvaA = GeJtvaColoana(m.lnIdJTvaColoana, goCalendar.tva_incasare, "JV")
Else
loJtvaA = loJTVA && Explicatie TVA din prima linie din factura
Endif
lnTaxCode = NULL
IF m.gl406
llFurnizorRTVAI = .F.
lnIdJtva = Nvl(loJtvaA.id_jtva_coloana, 0)
lnTaxCode = GetTaxCode(m.gnAn, m.gnLuna, loFactura.dataact, m.lnIdJtva, m.llFurnizorRTVAI)
ENDIF
Select cActTemp
Replace id_jtva_coloana With Nvl(loJtvaA.id_jtva_coloana, 0), id_tva With Nvl(loJtvaA.id_tva, 0), proc_tva With Round(1 + loJtvaA.cota_tva / 100, 2)
Replace scd With m.lcScd, ascd With m.lcAscd, scc With m.lcScc, ascc With m.lcAscc, TVAVAL With Round(suma_val * proc_tva / 100, m.gnPVal), totval With suma_val + Round(suma_val * proc_tva / 100, m.gnPVal)
REPLACE taxcode WITH m.lnTaxCode
Endscan && cActTemp
If m.llSucces
Select id_valuta, Curs, proc_tva, id_jtva_coloana, id_tva, taxcode, scd, ascd, scc, ascc, explicatia, ;
Sum(suma) As suma, Sum(valtva) As valtva, Sum(valctva) As valctva, ;
Sum(suma_val) As suma_val, Sum(TVAVAL) As TVAVAL, Sum(totval) As totval ;
From cActTemp ;
Group By 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ;
Into Cursor cAct Readwrite
* Calculez totalul de pe factura si corectez diferente de zecimale fata de selectia din REGDOC (mai multe randuri defalcate dupa locatii)
Calculate Sum(suma), Sum(valtva), Sum(suma_val), Sum(TVAVAL) To lnActBaza, lnActTVA, lnActBazaVal, lnActTVAVal In cAct
Calculate Sum(valftva), Sum(valtva), Sum(valval), Sum(TVAVAL) To lnFacturaFaraTVA, lnFacturaTVA, lnFacturaFaraTVAVal, lnFacturaTVAVal In crsFactura
lnDiferentaBaza = (m.lnFacturaFaraTVA - m.lnActBaza)
lnDiferentaTVA = (lnFacturaTVA - m.lnActTVA)
lnDiferentaBazaVal = (m.lnFacturaFaraTVAVal - m.lnActBazaVal)
lnDiferentaTVAVal = (lnFacturaTVAVal - m.lnActTVAVal)
* Completez diferenta fata de factura pe primul rand din notele contabile
Select cAct
Go Top
Replace suma With suma + m.lnDiferentaBaza, valtva With valtva + m.lnDiferentaTVA, valctva With m.lnDiferentaBaza + m.lnDiferentaTVA
Replace suma_val With suma_val + m.lnDiferentaBazaVal, TVAVAL With TVAVAL + m.lnDiferentaTVAVal, totval With m.lnDiferentaBazaVal + m.lnDiferentaTVAVal
Select actactan
Delete All
Append From Dbf('cAct')
*** TVA
* Totalizez sumele in cursorul cActTVA astfel incat sa am o singura linie de TVA 27.05.2020
*!* Select * From cAct Where valtva <> 0 Into Cursor cActTVA Readwrite
*!* Update cActTVA Set scc = Iif(m.llTVAIncasare, '4428', '4427'), ascc = '', suma = valtva, suma_val = TVAVAL, id_jtva_coloana = id_tva
lcContTva = Iif(m.llTVAIncasare, '4428', '4427')
lcAcontTva = ''
Select id_valuta, Curs, proc_tva, id_tva As id_jtva_coloana, id_tva, taxcode, scd, ascd, m.lcContTva As scc, m.lcAcontTva As ascc, explicatia, ;
Sum(valtva) As suma, ;
Sum(TVAVAL) As suma_val ;
From cAct ;
Group By 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ;
Into Cursor cActTVA Readwrite
Delete From cActTVA Where suma = 0
Use In (Select('cAct'))
Select actactan
Append From Dbf('cActTVA')
Use In (Select('cActTVA'))
Update actactan Set id_partd = loFactura.client_id, id_fdoc = loFactura.id_fdoc, id_ctr = loFactura.client_ctr_id, contract = loFactura.contract_client, ;
dataact = loFactura.dataact, datascad = loFactura.datascad, dataireg = loFactura.dataact, nract = loFactura.nract, serie_act = loFactura.serie_act, id_set = m.lnIdSet, ;
explicatia = m.lcTip
* Completez partener credit contul 472 venituri in avans (4111 = 472)
Update actactan Set id_partc = loFactura.client_id Where Inlist(Left(scc, 3), '472', '419', '411')
If m.llIntern
Update actactan Set suma_val = 0
Endif
Endif && llSucces
Use In (Select('cActTemp'))
Select (m.lcSelect)
Return m.llSucces
Endproc && completeaza_actactan
***********************************
*** Obiect cu date aditionale pentru initializarea facturii
***********************************
Define Class oDateFacturaACN As Custom
nIntern = 1
cDenumireClient = ''
nIdClient = Null
cContractClient = ''
nIdContractClient = Null
lImportFactura = .F. && daca se apeleaza importul la intrarea in factura
Enddefine && oDateFacturaACN
****************************************************************************************************************************
*** creeaza cursoarele si obiectele necesare pentru facturare
*** procedura de facturare se lanseaza din formularul frm_factura2, in loc sa se porneasca din tranzit, cheiaj, contracte
*** in formularul de facturare se importa date de tranzit, cheiaj, contracte
****************************************************************************************************************************
Procedure factura_acn
Lparameters tcTip, toDateAditionale
* tcTip: tranzit/cheiaj/chirii/apa/diverse/penalitati
* FACTURA TRANZIT, CHEIAJ, CHIRII, APA si PENALITATI genereaza o singura linie in crsFactura, prin import din formularele specifice de calcul
*** Nu se pot adauga linii suplimentare in factura
* FACTURA DIVERSE - se adauga liber linii in crsFactura
Private poDate
Private poGeneratorNumere As "oGeneratorNumere"
Local llSucces, llSuucces, lnIdJtva, lnIdJTVAExpl, lnIdSet, lnProcTva, lnTip, loTVAStandard
Local lcTip, lcSelect
If m.glLunaInchisa
amessagebox("Nu puteti emite documente, deoarece aceasta luna este inchisa!", 0 + 48, "Luna inchisa")
Return .F.
Endif
If Empty(m.tcTip)
Return .F.
Endif
lcTip = Upper(Alltrim(m.tcTip))
make_ccapfactura() && crsCapFactura
make_cfactura() && crsFactura
make_cregdoc() && cursor cRegDoc gol
make_actactan() && cursor actactan gol
make_jtva_explicatii() && crsJTVA
make_cote_tva() && crsCoteTVA
make_articole() && crsArticole
make_locatii() && crsLocatii
make_articole_locatii() && crsArticoleLocatii
make_valute() && crsValute
make_tipfactura() && crsTipFactura
make_um() && crsUM
Do make_contracte With "1=2" && crsContracte
loTVAStandard = GetTVAStandard() && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva
lnIdJTVAExpl = loTVAStandard.IdJtvaExpl
lnIdJtva = loTVAStandard.IdJtva
lnProcTva = loTVAStandard.ProcTva
lnTip = 51 && FACTURA ROAACNPRO
lnIdSet = 50200
If Type('poDate') <> 'O'
poDate = Createobject("oDateFactura", m.lnIdSet, m.lnTip)
Endif
If Type('poGeneratorNumere') <> 'O'
poGeneratorNumere = Createobject("oGeneratorNumere")
Endif
poDate.nIdTipDoc = 5 && FACTURA
poGeneratorNumere.ResetNumere()
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
AddProperty(poDate, 'IdJTVAExpl', m.lnIdJTVAExpl)
AddProperty(poDate, 'IdJTVA', m.lnIdJtva)
AddProperty(poDate, 'ProcTVA', m.lnProcTva)
AddProperty(poDate, 'uuid', '')
AddProperty(poDate, 'document', '') && documentul pentru cheiaj se completeaza in frm_calcul_cheiaj
AddProperty(poDate, 'cTip', m.lcTip)
poDate.nTipFactura = cTip2nTip(m.lcTip) && tip intern factura 0=TRANZIT,1=CHEIAJ, 2=APA, 3=CHIRII, 4=PILOTAJ, 5=ALTE, 6=PENALITATI, 9=DIVERSE
* AddProperty(poDate, 'nIdBeneficiar', NULL) && am adaugat in oDate
Select crsFactura
loFrmFactura = Createobject("frm_factura", toDateAditionale)
* DO FORM frm_factura NAME loFrmFactura LINKED NOSHOW
loFrmFactura.Show(1)
Release poDate, poGeneratorNumere
Use In (Select('crsJTVA'))
Use In (Select('crsCoteTVA'))
Use In (Select('crsArticole'))
Use In (Select('cRegDoc'))
Use In (Select('actactan'))
Use In (Select('crsLocatii'))
Use In (Select('crsArticoleLocatii'))
Use In (Select('crsValute'))
Use In (Select('crsTipFactura'))
Use In (Select('crsFactura'))
Use In (Select('crsCapFactura'))
Endproc && factura_acn
Procedure factura_import
Lparameters tlImportCalculat
* tlImportCalculat (optional, default .F.): daca s-au calculat deja datele pentru import intr-un formular de calcul si din formularul de calcul s-a lansat factura
Local lcTip, lcSelect, llSucces, lnIdCtr, lnIdClient
llSucces = .F.
lcTip = Upper(Alltrim(poDate.cTip))
lnIdCtr = crsCapFactura.client_ctr_id
lnIdClient = crsCapFactura.client_id
If Empty(m.lcTip) Or !Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ, TIP_CHIRII, TIP_APA, TIP_PENALITATI)
Return m.llSucces
Endif
* Nu mai intru in vizualizare daca este deja calculat
If m.tlImportCalculat
llSucces = .T.
Else
Do Case
Case m.lcTip = TIP_TRANZIT
* vizualizare tranzit (alegere convoi) > calcul tranzit , salvare tarife si completare poDate.uUId CU VYE_ID's)
llSucces = vizualizare_tranzit(NTIP_TRANZIT) && proceduri_acnpro.prg
Case m.lcTip = TIP_CHEIAJ
* vizualizare tranzit (alegere convoi) > calcul cheiaj , salvare tarife si completare poDate.uUId CU VYE_ID's)
llSucces = vizualizare_tranzit(NTIP_CHEIAJ) && proceduri_acnpro.prg
Case Inlist(m.lcTip, TIP_CHIRII, TIP_APA)
* vizualizare chirii, apa (calcul articole contract, salvare tarife si completare poDate.uUId cu IPS_REGDOC.ID's)
* adaug articolele din ctr_articole in ips_regdoc
llSucces = vizualizare_contract(m.lnIdCtr) && proceduri_acnpro.prg
Case m.lcTip = TIP_PENALITATI
* vizualizare calcul penalitati
* adaug articolele din ctr_articole in ips_regdoc
llSucces = vizualizare_penalitati() && proceduri_acnpro.prg
Otherwise
llSucces = .T.
Endcase
If !m.llSucces
Return m.llSucces
Endif
Endif && tlImportCalculat
* Completez crsCapFactura si crsFactura
llSucces = .F.
Do Case
Case m.lcTip = TIP_TRANZIT
* Completeaza crsCapFactura, crsFactura cu date din tranzit pentru poDate.uUid
llSucces = make_factura_tranzit()
Case m.lcTip = TIP_CHEIAJ
* Completeaza crsCapFactura, crsFactura cu date din tranzit pentru poDate.uUid
llSucces = make_factura_cheiaj()
Case m.lcTip = TIP_PENALITATI
llSucces = make_factura_penalitati(m.tlImportCalculat)
Case Inlist(m.lcTip, TIP_CHIRII, TIP_APA)
* Completeaza crsFactura cu date din contracte pentru contractul selectat. initializeaza poDate.uUid = crsCapFactura.ctr_id
llSucces = make_factura_contracte()
Otherwise
llSucces = .T.
Endcase
Return m.llSucces
Endproc && factura_import
Procedure factura_salvare
Local lcTip, llSucces, luId, loEx As Exception
llSucces = .F.
luId = poDate.uuid
lcTip = Upper(Alltrim(poDate.cTip))
If Empty(m.luId) And Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ, TIP_CHIRII, TIP_APA)
amessagebox(Iif(Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ), 'Alegeti convoiul', 'Adaugati prestatii') + '!', 0 + 48, _Screen.Caption)
Return m.llSucces
Endif
SET STEP ON
* Completex taxcode in crsFactura bazat pe id_jtva_coloana
IF m.gl406
SELECT crsFactura
llFurnizorRTVAI = .F.
SCAN
lnTaxCode = NULL
lnIdJtva = Nvl(crsFactura.id_jtva_coloana, 0)
lnTaxCode = GetTaxCode(m.gnAn, m.gnLuna, poDate.dataact, m.lnIdJtva, m.llFurnizorRTVAI)
SELECT crsFactura
REPLACE taxcode WITH m.lnTaxCode
ENDSCAN
ENDIF
Try
Do Case
Case m.lcTip = TIP_TRANZIT
llSucces = update_tranzit(m.luId) && completez data, nr, total cu tva pe convoi ips_voyages_vanzari, completez cursul valutar si valorile in lei pe barje ips_voyage_members_vanzari
If m.llSucces
llSucces = completeaza_regdoc_tranzit(m.luId) && completez cursorul cRegDoc cu valori defalcate pe ecluze, senale
Endif
Case m.lcTip = TIP_CHEIAJ
llSucces = update_cheiaj(m.luId) && completez data, nr, total cu tva pe convoi ips_voyages_vanzari, completez cursul valutar si valorile in lei pe barje ips_berthing_details_vanzari
If m.llSucces
llSucces = completeaza_regdoc_cheiaj(m.luId) && completez cursorul cRegDoc cu valori defalcate pe locatii
Endif
Case Inlist(m.lcTip, TIP_CHIRII, TIP_APA)
llSucces = update_contracte(m.luId) && completez curs, valftva in ips_regdoc
If m.llSucces
llSucces = completeaza_regdoc_contracte(m.luId) && nu completez cursorul cRegDoc. Este scris in ips_regdoc din salvare_contract
Endif
Case m.lcTip = TIP_PENALITATI
llSucces = completeaza_regdoc_penalitati(m.luId) && completez cursorul cRegDoc cu valori defalcate pe locatii direct din crsFactura
Otherwise && TIP_DIVERSE
llSucces = completeaza_regdoc_alte(m.luId) && completez cursorul cRegDoc cu valori defalcate pe locatii direct din crsFactura
Endcase && m.lcTip
If m.llSucces
llSucces = completeaza_regdoc_curs() && completez cursul valutar in cursorul cRegDoc
Endif
If m.llSucces
llSucces = completeaza_actactan(m.lcTip) && completez cursorul actactan din cRegDoc
Endif
If m.llSucces
llSucces = factura_salvare_db(m.lcTip) && salvez factura in contabilite, vanzari si regdoc folosind datele din cFactura (vanzari), cRegDoc , actactan
Endif
If m.llSucces
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
Else
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
Endif
Catch To loEx
goApp.ShowErrorEx(loEx)
llSucces = .F.
Endtry
Return m.llSucces
Endproc && factura_salvare
****************************************************************************************************************************
Procedure factura_salvare_db
Lparameters tcTip
*lcTip = poDate.cTip && TRANZIT/CHEIAJ/CHIRII/APA/DIVERSE/PENALITATI
Private pnCod, pnVVId, poRec, pnIdFact
poRec = Null
pnIdFact = 0
Local lcSql, lcTabelFisiere, lcTip, llScris, llSucces, llSucces2, lnIdJTvaColoana, lcCont
Local lnProcTvav, lnSucces, lnSucces2, loRec, ltDataOra, loMonedaNationala, lnIdMonedaNationala
pnCod = 0
pnVVId = 0
lcTip = m.tcTip
llScris = .F.
lnProcTvav = 0
lnIdJTvaColoana = Null
lcCont = ''
*********************
*** actactan
*********************
Use In (Select('crsvanztemp'))
ltDataOra = Get_Ora()
poDate.dataora_exp = ltDataOra
Create Cursor crsvanztemp(id_articol N(20), explicatie C(240), Pret N(20, 4), proc_tvav N(7, 3), id_jtva_coloana N(10), id_jtva_coloana_ex N(10) Null, cantitate N(20, 4), discount_unitar N(20, 4), ;
id_gestiune N(20), Cont C(4), pret_cu_tva N(1), serie C(100), id_valuta N(10), codmat C(50), Curs N(20, 6), multiplicator N(10), pret_achizitie N(20, 4), ;
pretd N(20, 4), id_valuta_d N(10), taxcode N(6) null)
Insert Into crsvanztemp(id_articol, explicatie, Pret, proc_tvav, id_jtva_coloana, id_jtva_coloana_ex, cantitate, discount_unitar, pret_cu_tva, ;
serie, codmat, id_valuta, Curs, multiplicator, pret_achizitie, pretd, id_valuta_d, taxcode) ;
Select id_articol, denumire As explicatie, pretval As Pret, proc_tva As proc_tvav, id_jtva_coloana, id_jtva_coloana_ex, cantitate, ;
0 As discount_unitar, Nvl(pret_cu_tva, 0) As pret_cu_tva, Space(100) As serie, Space(50) As codmat, ;
Cast(Nvl(id_valuta, 0) As N(5)) As id_valuta, Curs, 1 As multiplicator, 0 As pret_achizitie, 0 As pretd, Cast(0 As N(5)) As id_valuta_d, taxcode ;
From crsFactura
lnSucces = SQLSetprop(gnHandle, "Transactions", 2)
llSucces = (m.lnSucces >= 0)
If m.llSucces
* Generez pack_contafin.nCod
lcSql = [begin pack_facturare.initializeaza_scriere_actrul(NULL,1); end;]
llSucces = goExecutor.oExecuta(lcSql)
If m.llSucces
llSucces = goExecutor.oSelecteaza2Value([SELECT pack_contafin.get_cod() FROM dual], @pnCod)
If m.llSucces
Update actactan Set cod = m.pnCod
Endif
Endif
Endif
If m.llSucces
lcSql = [begin pack_facturare.initializeaza_date_factura(] + ;
[to_date('] + Alltrim(Dtoc(poDate.dataireg, 2)) + [','YYYYMMDD'),] + ;
Nvl(Alltrim(Str(poDate.id_fdoc)), [NULL]) + [,to_date('] + Alltrim(Dtoc(poDate.dataact, 2)) + [','YYYYMMDD'),] + ;
[to_date('] + Alltrim(Dtoc(poDate.datascad, 2)) + [','YYYYMMDD'),'] + Nvl(poDate.serie_act, []) + [',] + ;
Alltrim(Str(poDate.nract, 14, 0)) + [,] + ;
Iif(Isnull(poDate.id_client), [NULL], Alltrim(Str(poDate.id_client))) + [,] + ;
Iif(Isnull(poDate.id_lucrare), [NULL], Alltrim(Str(poDate.id_lucrare))) + [,] + ;
Iif(Isnull(poDate.id_sectie), [NULL], Alltrim(Str(poDate.id_sectie))) + [,] + ;
Iif(Isnull(poDate.id_venchelt), [NULL], Alltrim(Str(poDate.id_venchelt))) + [,] + ;
Iif(Isnull(poDate.id_responsabil), [NULL], Alltrim(Str(poDate.id_responsabil))) + [,] + ;
Iif(Empty(Nvl(poDate.explicatia4, [])), [NULL], ['] + Strtran(Alltrim(poDate.explicatia4), ['], ['']) + [']) + [,] + ; && modificare v 2.0.33
Iif(Empty(Nvl(poDate.id_ordl, 0)), [NULL], Alltrim(Str(poDate.id_ordl))) + [,NULL,] + ;
['] + Strtran(Alltrim(Nvl(poDate.descriere, [])), ['], ['']) + [',] + ;
Alltrim(Str(poDate.tip)) + [,] + Alltrim(Str(poDate.id_set)) + [,] + ;
[to_date('] + Dtoc(poDate.zi_curs, 2) + [','YYYYMMDD'),] + Alltrim(Str(poDate.id_valuta)) + [,] + ;
Alltrim(Str(poDate.in_valuta)) + [,] + ;
Alltrim(Str(poDate.tva_incasare)) + [,] + ; && modificare ROAAUTO v 2.1.0
Iif(Isnull(gnIdSucursala), [NULL], Alltrim(Str(gnIdSucursala))) + [,] + ;
Alltrim(Str(gnIdUtil)) + [,] + ;
Alltrim(Str(poDate.nTipFactura)) + [,] + ;
Iif(Isnull(poDate.nIdBeneficiar), [NULL], Alltrim(Str(poDate.nIdBeneficiar))) + [,] + ;
Iif(Isnull(poDate.tip_saft), [NULL], Alltrim(Str(poDate.tip_saft))) + [); end;]
llSucces = goExecutor.oExecuta(lcSql)
* Salvez articole
If m.llSucces
Private poArticol
Select crsvanztemp
Scan
Scatter Name poArticol
* Nu se completeaza articolul in factura pentru ca cumulez mai multe prestatii/locatii
* Completez contul articolului din ips_prestatii_locatii
IF EMPTY(NVL(poArticol.cont,''))
lcCont = ''
lcSql = [SELECT MAX(DECODE(CTDEBITOR, '4111', CTCREDITOR, '461', CTCREDITOR, '4118', CTCREDITOR, CTDEBITOR)) as cont FROM ips_vprestatii_locatii WHERE ID_ARTICOL = ?poArticol.id_articol]
llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @lcCont)
poArticol.cont = m.lcCont
ENDIF
lcSql = [begin pack_facturare.adauga_articol_factura_deviz(] + ;
Alltrim(Str(poArticol.id_articol)) + [,] + ;
['] + Strtran(Alltrim(Nvl(poArticol.explicatie, [])), ['], ['']) + [',] + ;
['] + Strtran(Alltrim(Nvl(poArticol.serie, [])), ['], ['']) + [',] + ;
Alltrim(Str(poArticol.pret_achizitie, 18, gnPPret)) + [,] + ;
Alltrim(Str(poArticol.pretd, 18, gnPVal)) + [,] + ;
Alltrim(Str(poArticol.id_valuta_d)) + [,] + ;
Alltrim(Str(poArticol.Pret, 18, gnPPretV)) + [,] + ;
Alltrim(Str(poArticol.id_valuta)) + [,] + ;
Alltrim(Str(poArticol.Curs, 18, 6)) + [,] + ;
Alltrim(Str(poArticol.multiplicator)) + [,] + ;
Alltrim(Str(poArticol.proc_tvav, 18, 2)) + [,] + ;
Alltrim(Str(poArticol.id_jtva_coloana)) + [,] + ;
Alltrim(Str(poArticol.cantitate, 18, gnPCant)) + [,] + ;
Alltrim(Str(poArticol.discount_unitar, 18, gnPPretV)) + [,] + ;
Alltrim(Str(poArticol.id_gestiune)) + [,] + ;
['] + Alltrim(Nvl(poArticol.Cont, '')) + [',] + ;
Alltrim(Str(poArticol.pret_cu_tva)) + [,] + ;
Alltrim(Str(poArticol.id_jtva_coloana_ex)) + [,] + ;
Iif(Empty(Nvl(poDate.listaId, 0)), 'NULL', Alltrim(Str(poDate.listaId))) + [,] + ;
Iif(Empty(Nvl(poArticol.taxcode, 0)), 'NULL', Alltrim(Str(poArticol.taxcode))) + [); end;]
llSucces = goExecutor.oExecuta(lcSql)
If !m.llSucces
Exit
Endif
Endscan
Endif && salvez articole
If m.llSucces
* Salvez Vanzari
lcSql = [begin pack_facturare.scrie_in_vanzari(0,] + ;
Iif(Isnull(poDate.id_delegat), [NULL], Alltrim(Str(poDate.id_delegat))) + [,] + ;
Iif(Isnull(poDate.id_masina), [NULL], Alltrim(Str(poDate.id_masina))) + [,] + ;
Iif(Isnull(poDate.id_facturare), [NULL], Alltrim(Str(poDate.id_facturare))) + [,] + ;
Iif(Isnull(poDate.nListareDetaliata), [0], Alltrim(Str(poDate.nListareDetaliata))) + [,] + ;
[?poDate.dataora_exp,] + ;
Iif(Isnull(poDate.id_agent), [NULL], Alltrim(Str(poDate.id_agent))) + [,] + ;
['] + Strtran(Alltrim(Nvl(poDate.text_aditional, [])), ['], ['']) + [',?@poDate.nid_vanzare); end;]
llSucces = goExecutor.oExecuta(lcSql)
Endif && salvez vanzari
* Salvez Reg. Doc.
If m.llSucces
Update cRegDoc Set id_vanzare = poDate.nid_vanzare, id_client = poDate.id_client, Data = poDate.dataact, tip = cTip2nTip(m.lcTip)
Update cRegDoc Set id_contract = poDate.listaId Where Empty(Nvl(id_contract, 0)) && de ex: la penalitati, contractul este completat pe fiecare factura din calcul penalitati si nu trebuie sa il suprascriu cu contractul din factura de penalitati
loMonedaNationala = GetMonedaNationala()
lnIdMonedaNationala = loMonedaNationala.id_valuta
lcSql = [begin pack_acn.salveaza_regdoc(?.id, ?.id_vanzare, ?.tip, ?.id_articol, ?.id_locatia, ?.id_valuta, ?.id_client, ?.id_contract, ?.pret, ?.curs, ?.cantitate, ?.valval, ?.tvaval, ?.totval, ?.valftva, ?.valtva, ?.valctva, ?.document, ?.data); end;]
Select cRegDoc
Scan
Scatter Name loRec
loRec.Document = Alltrim(Nvl(loRec.Document, ''))
loRec.id_valuta = Iif(Empty(loRec.id_valuta), m.lnIdMonedaNationala, loRec.id_valuta)
loRec.id_client = Iif(Empty(loRec.id_client), Null, loRec.id_client)
loRec.id_contract = Iif(Empty(loRec.id_contract), Null, loRec.id_contract)
With loRec
llSucces = goExecutor.oExecuta(m.lcSql)
If !m.llSucces
Exit
Endif
Endwith
Endscan
Endif && m.llSucces Reg Doc
If m.llSucces And Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ)
* completez ips_voyages_vanzari.vz_id
llSucces = goExecutor.oExecuta([UPDATE ips_voyages_vanzari SET vz_id = ?poDate.nid_vanzare WHERE id in (] + poDate.uuid + [)])
Endif
If m.llSucces
* Salvez contabilitate
If !Used('INFISIERE')
lcTabelFisiere = gcAppPath + [\COMUN\DATEMENU\infisiere.dbf]
Use (m.lcTabelFisiere) In 0 Alias INFISIERE
Endif
lnSucces = oscrie_in_fisiere(0, .F., .F., .T.) && nu suprascriu codul pentru ca l-am generat la inceput si l-am completat in VANZARI
llSucces = (m.lnSucces > 0)
Endif
* Completez VANZARI.ID_FACT DUPA SCRIEREA IN ACT
If m.llSucces
pnIdFact = 0
llSucces = goExecutor.oSelecteaza2Value ([select pack_contafin.get_idFact() from dual], @pnIdFact)
Endif
If m.llSucces
llSucces = goExecutor.oExecuta([update vanzari set id_fact = ?pnIdFact where id_vanzare = ?poDate.nid_vanzare])
Endif
* Salvez PENALITATI
If m.llSucces And m.lcTip = TIP_PENALITATI
Text To lcSql Noshow
insert into penalitati (id_ctr, id_part, id_fact_pen, id_fact, nrfact, datafact, datascad, valctva, id_doc_incasare, nract, dataact, suma, databaza, dataref, coef_penalitati, coef_penalitati2, nr_zile, nr_zile1, nr_zile2, nr_zile_gratie, penalitati, sters)
values (?poRec.id_ctr, ?poRec.clie_id, ?pnIdFact, ?poRec.id_fact, ?poRec.nrfact, ?poRec.datafact, ?poRec.datascad, ?poRec.valctva, ?poRec.id_doc, ?poRec.nract, ?poRec.dataact, ?poRec.suma, ?poRec.databaza, ?poRec.dataref, ?poRec.ppenzi, ?poRec.ppenzi2, ?poRec.nr_zile, ?poRec.nr_zile1, ?poRec.nr_zile2, ?poRec.zilegratie, ?poRec.penalitati, ?poRec.sters);
Endtext
Select crsCalculPenalitatiAles
Scan
Scatter Name poRec
llSucces = goExecutor.oExecuta(m.lcSql)
If !m.llSucces
Exit
Endif
Endscan
Endif && PENALITATI
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llSucces2 = goExecutor.oExecuta(lcSql)
lnSucces2 = SQLSetprop(gnHandle, "Transactions", 1)
If lnSucces2 < 0
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
Endif && tranzactie manuala
Use In (Select('crsvanztemp'))
Use In (Select('crsFacturaACN'))
*!* Use In (Select('crsfacturaX'))
Return m.llScris
Endproc && factura_salvare_db
****************************************************************************************************************************
*** Completez crsFactura cu valoarea tranzitului
****************************************************************************************************************************
Procedure make_factura_tranzit
* tnVVId: ips_voyage_vanzari.id
Private pcVVIds, pnVVId, pcConvoyName
Local loFrmFactura As "frm_factura"
Local lcSql, llSucces, lnCantitate, lnIdJtva, lnIdJTVAExpl, lnPret, lnProcTva, loArticol, loRec, loMonedaNationala, lnIdMonedaNationala
Local lcNumeConvoi, lcDataConvoi, lcContract, llExplicatieEN, lcDenumireArticol, lnIntern, loTVAStandard
pcVVIds = poDate.uuid
pnVVId = 0
llSucces = .T.
pcConvoyName = ''
If Empty(m.pcVVIds)
amessagebox('Alegeti un convoi!', 0 + 48, _Screen.Caption)
llSucces = .F.
Endif
If m.llSucces
lnIntern = crsCapFactura.intern
loTVAStandard = GetTVAStandard(m.lnIntern) && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva
lnIdJTVAExpl = loTVAStandard.IdJtvaExpl
lnIdJtva = loTVAStandard.IdJtva
lnProcTva = loTVAStandard.ProcTva
llExplicatieEN = (crsCapFactura.intern = 0)
loArticol = GetPrestatieByTip(TIP_TRANZIT, m.llExplicatieEN) && C/V TRANZITARE CDMN PENTRU CONVOIUL/BARJA [INDICATIV], DIN [DATA] CONFORM [CONTRACT] / TRANSIT FOR [INDICATIV], IN [DATA] ACCORDING TO THE [CONTRACT]
lcDenumireArticol = loArticol.denumire
loMonedaNationala = GetMonedaNationala()
lnIdMonedaNationala = loMonedaNationala.id_valuta
Text To lcSql Textmerge Noshow
select stringagg(convoy_nam) as convoy_nam
from ips_vvoyages v
join (SELECT distinct vye_id
FROM ips_voyage_members_vanzari
WHERE vv_id in (<<m.pcVVIds>>)) vm
on v.id = vm.vye_id
Endtext
llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pcConvoyName)
If m.llSucces
Text To lcSql Textmerge Noshow
SELECT vmv.id_valuta,
v.nume_val as valuta,
ROUND(SUM(vmv.valval), 2) as valval
FROM ips_voyage_members_vanzari vmv
JOIN vnom_valute v ON vmv.id_valuta = v.id_valuta
WHERE vmv.vv_id in (<<m.pcVVIds>>)
GROUP BY vmv.id_valuta, v.nume_val
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, "crsValoareTemp")
Endif
If m.llSucces
Select crsValoareTemp
Scan
Scatter Name loRec
lnCantitate = 1
lnPret = 0
loRec.valval = Round(loRec.valval, m.gnPC) && rotunjesc la 2 zecimale
If loRec.id_valuta = m.lnIdMonedaNationala
lnPret = loRec.valval
Endif
lcNumeConvoi = Alltrim(Nvl(pcConvoyName, ''))
lcDataConvoi = Dtoc(poDate.zi_curs) && Dtoc(Ttod(Nvl(generation, {//::})))
lcContract = Alltrim(Nvl(crsCapFactura.contract_client, ''))
loArticol.denumire = Strtran(m.lcDenumireArticol, '[INDICATIV]', m.lcNumeConvoi, 1, 10, 1)
loArticol.denumire = Strtran(loArticol.denumire, '[DATA]', m.lcDataConvoi, 1, 10, 1)
loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1)
* Daca am factura storno cu pret -, fac cantitatea - si pretul +
* La eFactura nu se valideaza cu pret -
IF m.lnPret < 0
lnCantitate = -m.lnCantitate
lnPret = -m.lnPret
loRec.valval = -loRec.valval
ENDIF
Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) Values (1, loArticol.id_articol, loArticol.denumire, loRec.id_valuta, loRec.valval, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva)
Endscan && crsValoareTemp
Use In (Select('crsValoareTemp'))
Endif && llSucces
Use In (Select('cDateConvoiTemp'))
Endif && m.llSucces
Return m.llSucces
Endproc && make_factura_tranzit
****************************************************************************************************************************
*** Completez crsFactura cu valoarea cheiajului
****************************************************************************************************************************
Procedure make_factura_cheiaj
* tnVVId: ips_voyage_vanzari.id
Private pcVVIds, pnVVId
Local loFrmFactura As "frm_factura"
Local lcSql, llSucces, lnCantitate, lnIdJtva, lnIdJTVAExpl, lnPret, lnProcTva, loArticol, loRec, loMonedaNationala, lnIdMonedaNationala, lcDenumire, lcPort, lcDataP, lcContract, lnIntern, loTVAStandard
Local llExplicatieEN
pcVVIds = poDate.uuid
pnVVId = 0
lcPort = ''
lnIntern = crsCapFactura.intern
loTVAStandard = GetTVAStandard(m.lnIntern) && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva
lnIdJTVAExpl = loTVAStandard.IdJtvaExpl
lnIdJtva = loTVAStandard.IdJtva
lnProcTva = loTVAStandard.ProcTva
llExplicatieEN = (crsCapFactura.intern = 0)
loArticol = GetPrestatieByTip(TIP_CHEIAJ, m.llExplicatieEN) && *C/V SERVICII PORTUARE IN PORTUL [PORT], DIN [DATA] CONFORM [CONTRACT]
lcDenumire = loArticol.denumire
loMonedaNationala = GetMonedaNationala()
lnIdMonedaNationala = loMonedaNationala.id_valuta
lcDataP = Dtoc(poDate.zi_curs) && Dtoc(Ttod(Nvl(datap, {//::})))
lcContract = Alltrim(Nvl(crsCapFactura.contract_client, ''))
* Port(uri)
llSucces = goExecutor.oExecuta([select stringagg(locatia) as port from (SELECT distinct locatia FROM ips_vberthing_details_vanzari WHERE VV_ID in (] + m.pcVVIds + [))], [cDateCheiajTemp])
If m.llSucces
Select cDateCheiajTemp
Go Top
lcPort = Alltrim(Nvl(port, ''))
Use In (Select('cDateCheiajTemp'))
Endif
loArticol.denumire = Strtran(m.lcDenumire, '[PORT]', m.lcPort, 1, 10, 1)
loArticol.denumire = Strtran(loArticol.denumire, '[DATA]', m.lcDataP, 1, 10, 1)
loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1)
lcSql = [SELECT id_valuta, valuta, SUM(valval) as valval FROM ips_vberthing_details_vanzari WHERE VV_ID in (] + m.pcVVIds + [) GROUP BY id_valuta, valuta]
llSucces = goExecutor.oExecuta(m.lcSql, "crsValoareTemp")
If m.llSucces
Select crsValoareTemp
Scan
Scatter Name loRec
lnCantitate = 1
lnPret = 0
loRec.valval = Round(loRec.valval, m.gnPC) && rotunjesc la 2 zecimale
If loRec.id_valuta = m.lnIdMonedaNationala
lnPret = loRec.valval
ENDIF
* Daca am factura storno cu pret -, fac cantitatea - si pretul +
* La eFactura nu se valideaza cu pret -
IF m.lnPret < 0
lnCantitate = -m.lnCantitate
lnPret = -m.lnPret
loRec.valval = -loRec.valval
ENDIF
Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) ;
Values (1, loArticol.id_articol, loArticol.denumire, loRec.id_valuta, loRec.valval, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva)
Endscan && crsValoareTemp
Endif && llSucces
Use In (Select('crsValoareTemp'))
Return m.llSucces
Endproc
**************************************************
Procedure make_factura_contracte
Private pnIdCtr
Local lcSql, llSucces, lnIdJtva, lnIdJTVAExpl, lnNrCrt, lnPret, lnProcTva, loRec, loMonedaNationala, lnIdMonedaNationala, lcSelect, lnIntern, loTVA, lcTipFactura, lnTipFactura, lcRegDocIds
Local lnCotaTVA, lnNrCrt
lcSelect = Select()
llSucces = .F.
Select crsCapFactura
lcRegDocIds = poDate.uuid
lcTipFactura = poDate.cTip && TRANZIT, CHEIAJ, CHIRII, APA, DIVERSE
lnTipFactura = poDate.nTipFactura && tip intern factura 0=TRANZIT,1=CHEIAJ, 2=APA, 3=CHIRII, 4=PILOTAJ, 5=ALTE, 6=PENALITATI, 9=DIVERSE
lnIntern = intern
llExplicatieEN = (crsCapFactura.intern = 0)
lcDataP = Dtoc(crsCapFactura.dataact) && Dtoc(Ttod(Nvl(datap, {//::})))
lcContract = Alltrim(Nvl(crsCapFactura.contract_client, ''))
loArticol = GetPrestatieByTip(m.lcTipFactura, m.llExplicatieEN) && un articol generic care cumuleaza toata valoarea
lnIdArticol = loArticol.id_articol
loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1)
loMonedaNationala = GetMonedaNationala()
lnIdMonedaNationala = loMonedaNationala.id_valuta
* Factura INTERN se transforma valorile in valuta in lei, fara TVA, si se cumuleaza valorile in lei
* Factura EXTERN sunt defalcate pe valuta
* crsCursuri este deja creat in formularul de factura
* pun acelasi articol pe toate liniile (trebuie sa fie un articol oarecare pe toate liniile). as putea sa pun si un articol generic sau un articol de pe contract
lcSql = [SELECT id_valuta, proc_tvav, id_articol, valval FROM ips_vregdoc WHERE id in (] + m.lcRegDocIds + [)]
llSucces = goExecutor.oExecuta(m.lcSql, "crsValoareTemp2")
If m.llSucces And Reccount('crsValoareTemp2') > 0
Select crsValoareTemp2
Go Top
*!* lnIdArticol = id_articol
If m.lnIntern = 1
Select m.lnIdMonedaNationala As id_valuta, v.proc_tvav, ;
Iif(v.id_valuta = m.lnIdMonedaNationala, Round(v.valval, m.gnPC), Round(v.valval * C.Curs, gnPC)) As valval ;
From crsValoareTemp2 v Left Join crsCursuri C On v.id_valuta = C.id_valuta ;
Into Cursor crsValoareTemp3
Select id_valuta, proc_tvav, lnIdArticol As id_articol, Sum(valval) As valval From crsValoareTemp3 Group By id_valuta, proc_tvav Into Cursor crsValoareTemp
Use In (Select('crsValoareTemp3'))
Else
Select id_valuta, proc_tvav, lnIdArticol As id_articol, Sum(valval) As valval From crsValoareTemp2 Group By id_valuta, proc_tvav Into Cursor crsValoareTemp
Endif
Use In (Select('crsValoareTemp2'))
SET STEP ON
Select crsValoareTemp
Scan
Scatter Name loRec
*!* loArticol = GetPrestatieById(loRec.id_articol)
*!* loArticol.denumire = loArticol.denumire + [ ] + Iif(!Empty(m.lcContract), Iif(m.llExplicatieEN, 'ACCORDING TO THE CONTRACT ', 'CONFORM CONTRACT ') + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA'))
lnNrCrt = Recno('crsValoareTemp')
lnCantitate = 1
lnPret = 0
loRec.valval = Round(loRec.valval, m.gnPC) && rotunjesc la 2 zecimale
If loRec.id_valuta = m.lnIdMonedaNationala
lnPret = loRec.valval
Endif
lnCotaTVA = (loRec.proc_tvav - 1) * 100
loTVA = GetObiectTVA(m.lnIntern, m.lnCotaTVA) && GetTVAStandard(m.lnIntern) && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva
lnIdJTVAExpl = loTVA.IdJtvaExpl
lnIdJtva = loTVA.IdJtva
lnProcTva = loTVA.ProcTva
* Daca am factura storno cu pret -, fac cantitatea - si pretul +
* La eFactura nu se valideaza cu pret -
IF m.lnPret < 0
lnCantitate = -m.lnCantitate
lnPret = -m.lnPret
loRec.valval = -loRec.valval
ENDIF
Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) ;
Values (m.lnNrCrt, loArticol.id_articol, loArticol.denumire, loRec.id_valuta, loRec.valval, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva)
Endscan && crsValoareTemp
Endif && llSucces
Use In (Select('crsValoareTemp'))
Select (m.lcSelect)
Return m.llSucces
Endproc
**************************************************
Procedure make_factura_penalitati
Lparameters tlImportCalculat
* tlImportCalculat (optional, default .F.): daca s-au calculat deja datele pentru import intr-un formular de calcul si din formularul de calcul s-a lansat factura
Local lcContract, lcFiltru, lcRegDocIds, lcSelect, lcTipFactura, llExplicatieEN, llSucces
Local lnIdArticol, lnIdJtva, lnIdJTVAExpl, lnIdMonedaNationala, lnIntern, lnPenalitati, lnProcTva
Local lnTipFactura, loArticol, loMonedaNationala, loTVAStandard, ldDataReferinta, lnPret, lnPretVal, lnCantitate
lcSelect = Select()
llSucces = .T.
* lcRegDocIds = poDate.uuid
lcTipFactura = TIP_PENALITATI && poDate.cTip && TRANZIT, CHEIAJ, CHIRII, APA, DIVERSE
lnIntern = crsCapFactura.intern
lnCotaTVA = 0
lnIdJTvaColoana = 12 && Neimpozabil
loTVA = GetObiectTVA(m.lnIntern, m.lnCotaTVA, m.lnIdJTvaColoana)
lnIdJTVAExpl = loTVA.IdJtvaExpl
lnIdJtva = loTVA.IdJtva
lnProcTva = loTVA.ProcTva
loMonedaNationala = GetMonedaNationala()
lnIdMonedaNationala = loMonedaNationala.id_valuta
llExplicatieEN = (m.lnIntern = 0)
lcContract = ''
Select Distinct contract From crsCalculPenalitatiAles Where sters = 0 Order By contract Into Cursor cContracteTemp
Select cContracteTemp
Scan
lcContract = lcContract + Iif(!Empty(Nvl(contract, '')), ', ' + Alltrim(contract), '')
Endscan
If !Empty(m.lcContract)
lcContract = Substr(m.lcContract, 3)
Endif
Use In (Select('cContracteTemp'))
* crsCalculPenalitati este filtrat pe un client
Select crsCalculPenalitatiAles
Calculate Sum(penalitati), Min(dataref) For sters = 0 To lnPenalitati, ldDataReferinta
loArticol = GetPrestatieByTip(m.lcTipFactura, m.llExplicatieEN) && un articol generic care cumuleaza toata valoarea
lnIdArticol = loArticol.id_articol
loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1)
loArticol.denumire = Strtran(loArticol.denumire, '[DATA]', Dtoc(m.ldDataReferinta), 1, 10, 1)
* Daca am factura storno cu pret -, fac cantitatea - si pretul +
* La eFactura nu se valideaza cu pret -
lnCantitate = 1
lnPret = m.lnPenalitati
lnPretVal = m.lnPenalitati
IF m.lnPret < 0
lnCantitate = -m.lnCantitate
lnPret = -m.lnPret
lnPretVal = m.lnPret && factura de penalitati este in RON, Pretval = Pret
ENDIF
Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) ;
Values (1, loArticol.id_articol, loArticol.denumire, m.lnIdMonedaNationala, m.lnPret, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva)
Select (m.lcSelect)
Return m.llSucces
Endproc
Procedure make_ccapfactura
* IF !USED('crsCapFactura')
Create Cursor crsCapFactura(uuid N(20) Null, dataact D, datascad D, nract N(20), serie_act C(10), client_id N(10) Null, client C(100) Null, client_ctr_id N(10) Null, contract_client C(250) Null, nr_zile_scadenta N(5) Null, tip_curs N(1) Null, eagent N(1) Null, intern N(1) Null, beneficiar_id N(10) Null, beneficiar C(100) Null, id_set N(10), id_fdoc N(5))
* ENDIF
Endproc
Procedure make_cfactura
* IF !USED('crsFactura')
Create Cursor crsFactura (nrcrt N(5), id_articol N(20), denumire M, id_locatia N(12) Null, um C(20) Null, cantitate N(10, 4), Pret N(20, 4), valftva N(20, 4), valtva N(20, 4), valctva N(20, 4), pretval N(20, 4), valval N(20, 4), TVAVAL N(20, 4), totval N(20, 4), Curs N(12, 4), id_valuta N(10), id_jtva_coloana_ex N(10), id_jtva_coloana N(10), proc_tva N(5,2), pret_cu_tva N(1), taxcode N(6) null)
* ENDIF
Endproc
Procedure make_cCalculPenalitati
Create Cursor crsCalculPenalitati(ales L, facturate L, sterse L, clie_id N(12) Null, nrfact N(16) Null, datafact D Null, datascad D Null, valctva N(18, 4) Null, totval N(18, 4) Null, Curs N(18, 6) Null, id_valuta N(12) Null, valuta C(20) Null, ;
explicatia C(100) Null, id_ctr N(12) Null, numar C(100) Null, contract C(100) Null, nume C(100) Null, id_doc N(20) Null, nract N(16) Null, dataact D Null, suma N(18, 4) Null, sumaval N(18, 4) Null, ;
pereche N(16) Null, id_fact N(20) Null, ppenzi N(8, 2) Null, ppenzi2 N(8, 2) Null, penzile N(6) Null, penzile2 N(6) Null, descriere C(250) Null, zilegratie N(6) Null, ;
nr_zile I Null, nr_zile1 I Null, nr_zile2 I Null, penalitati N(18, 4) Null, databaza D Null, dataref D Null, tip N(2) Null, sters N(1))
Endproc && make_cCalculPenalitati
Procedure make_cClientiPenalitati
Create Cursor crsClientiPenalitati (nume C(100), clie_id N(12) )
Endproc && make_cClientiPenalitati
*******************************
Procedure make_grupe_vase
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsGrupeVase")
lcSql = [select id, grupa from ips_vgrupe_vase order By grupa]
llSucces = goExecutor.oExecuta(m.lcSql, "crsGrupeVase")
If !m.llSucces
Create Cursor crsGrupeVase(Id I, GRUPA C(100))
Endif
Select crsGrupeVase
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_grupe_vase
Procedure make_grupe_marfa
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsGrupeMarfa ")
Create Cursor crsGrupeMarfa (Id N(10), GRUPA C(100), nstr_code C(6) Null)
Insert Into crsGrupeMarfa (Id, GRUPA, nstr_code) Values (-1, 'FARA MARFA', '')
Insert Into crsGrupeMarfa (Id, GRUPA, nstr_code) Values (0, '', '')
lcSql = [Select id, nume, nstr_code From ips_vgoods_groups]
llSucces = goExecutor.oExecuta(m.lcSql, "crsGrupeMarfaTemp")
If m.llSucces
Insert Into crsGrupeMarfa (Id, GRUPA, nstr_code) ;
Select Id, Padr(Id, 3, ' ') + nume As GRUPA, Cast(Nvl(nstr_code, '') As C(6)) From crsGrupeMarfaTemp Order By Id
Use In (Select('crsGrupeMarfaTemp'))
Select crsGrupeMarfa
Index On Id Tag Id
Endif
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_grupe_marfa
Procedure make_marfa
Lparameters tnGrpId
* tnGrpId (optional) : Numeric = grupa de marfa, Logic T = cu grupa de marfa, F/empty = toate
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsMarfa ")
Create Cursor crsMarfa (Id C(36) Null, MARFA C(100), GRP_ID N(10) Null)
Insert Into crsMarfa (Id, MARFA, GRP_ID) Values ('', '', - 1) && -1 = GRUPA FARA MARFA
lcSql = [Select id, name as marfa, un_number as grp_id From ips_vgoods] + ;
Iif(!Empty(m.tnGrpId), Iif(Type('tnGrpId') = 'N', [ where un_number = ] + Alltrim(Str(m.tnGrpId)), [ where NVL(un_number,0) <> 0]), []) + ;
[ order by name]
llSucces = goExecutor.oExecuta(m.lcSql, "crsMarfaTemp")
If m.llSucces
Select crsMarfa
Append From Dbf('crsMarfaTemp')
Use In (Select('crsMarfaTemp'))
Select crsMarfa
Index On Id Tag Id
Endif
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_marfa
***----------------------------------------------------------------------------------------
*creeaza un tabel crsContracte din contractele active si numele clientului cu conditie (ex: clie_id=2)
Procedure make_contracte
Lparameters tcCond, tnIdCtr, tlToateInregistrarile
&& tnIdCtr: daca dau id_ctr direct (facturile de penalitati) selectez numai acest contractul indiferent de iscontract_valid()
&& tlToateInregistrarile: daca in tabelul cu contracte este o inregistrare "Toate contractele" cu id_ctr = 0 (pentru raport situatie tranzit toti clientii)
Local lcWhere
lcWhere = [incetat = 0] + m.gcCondSucursala
If Type('tnIdCtr') = 'N' And !Empty(m.tnIdCtr)
lcWhere = m.lcWhere + [ and (id_ctr = ] + Alltrim(Str(m.tnIdCtr)) + [)]
Else
lcAnLuna = Alltrim(Str(m.gnAn)) + Padl(m.gnLuna, 2, '0')
lcWhere = m.lcWhere + [ and (] + Iif(!Empty(m.tcCond), m.tcCond + [ and ], "") + Alltrim(Str(m.gnAn * 12 + m.gnLuna)) + [ between extract(year from data_inceput) * 12 + extract(month from data_inceput) and ] + ;
[extract(year from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm'))) * 12 + extract(month from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm'))))]
Endif
lcSql = [select id_ctr, id_part, denumire, data, numar, data_inceput, data_sfarsit, scadenta_incasare as nr_zile_scadenta, tip_curs from vcontracte where ] + m.lcWhere + [ order by denumire, data_inceput]
llSucces = goExecutor.oExecuta(m.lcSql, 'crsContracteTemp')
Use In (Select('crsContracte'))
If m.tlToateInregistrarile
Select * From crsContracteTemp Into Cursor crsContracte Where 1 = 2 NOFILTER Readwrite
Insert Into tcontracte (denumire) Values ('TOATE CONTRACTELE')
Select crsContracte
Append From Dbf('crsContracteTemp')
Else
Select * From crsContracteTemp Into Cursor crsContracte NOFILTER Readwrite
Endif
Use In (Select('crsContracteTemp'))
Return "crsContracte"
Endproc && make_contracte
***----------------------------------------------------------------------------------------
Procedure make_contacts
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsContacts")
lcSql = [Select id, name From IPS_VCONTACTS Order By Name]
llSucces = goExecutor.oExecuta(m.lcSql, "crsContacts")
If !m.llSucces
Create Cursor crsContacts(Id I, Name C(100))
Endif
Select crsContacts
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_contacts
***----------------------------------------------------------------------------------------
Procedure make_vessel_types
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsVesselTypes")
lcSql = [Select id, name From ips_vvessel_types Order By Name]
llSucces = goExecutor.oExecuta(m.lcSql, "crsVesselTypes")
If !m.llSucces
Create Cursor crsVesselTypes(Id I, Name C(100))
Endif
Select crsVesselTypes
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_vessel_types
***----------------------------------------------------------------------------------------
Procedure make_routes
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsRoutes")
lcSql = [select id, acronym, name, destinatio, rpt_id, rpt_id_has, rty_id, sens, distanta, ckmi, ckmf, kmi, kmf, orig, intern from ips_vroutes order by name]
llSucces = goExecutor.oExecuta(m.lcSql, "crsRoutes")
If !m.llSucces
Create Cursor crsRoutes(Id I, Name C(100), distanta N(10, 2))
Endif
Select crsRoutes
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_vessel_types
***----------------------------------------------------------------------------------------
Procedure make_vas_echivalent
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsVasEchivalent")
lcSql = [select id, vtp_id, vum_id, id_grup from ips_vvas_echivalent]
llSucces = goExecutor.oExecuta(m.lcSql, "crsVasEchivalent")
If !m.llSucces
Create Cursor crsVasEchivalent(Id I, VTP_ID I, vum_id I, id_grup I)
Endif
Select crsVasEchivalent
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_vas_echivalent
***----------------------------------------------------------------------------------------
Procedure make_vas_um
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsVasUM")
lcSql = [select id, um from ips_vvas_um order by um]
llSucces = goExecutor.oExecuta(m.lcSql, "crsVasUM")
If !m.llSucces
Create Cursor crsVasUM(Id I, um C(20))
Endif
Select crsVasUM
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_vas_um
***----------------------------------------------------------------------------------------
Procedure make_um
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsUM")
lcSql = [select id, um from vnom_um order by um]
llSucces = goExecutor.oExecuta(m.lcSql, "crsUM")
If !m.llSucces
Create Cursor crsUM(Id I, um C(20))
Endif
Select crsUM
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_um
***----------------------------------------------------------------------------------------
*** crsGrupTipNave pentru tarife tranzit
Procedure make_grup_tip_nave
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsGrupTipNave")
lcSql = [select id, nume from ips_vgrup_tip_nave]
llSucces = goExecutor.oExecuta(m.lcSql, "crsGrupTipNave")
If !m.llSucces
Create Cursor crsGrupTipNave(Id I, nume C(20))
Endif
Select crsGrupTipNave
Index On Id Tag Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_grup_tip_nave
***----------------------------------------------------------------------------------------
Procedure make_aramis_tip_nave
Local lcSelect, lcSql, llSucces
lcSelect = Select()
llSucces = .T.
If !Used("crsAramisTipNave")
lcSql = [select id, nume from ips_varamis_tip_nave]
llSucces = goExecutor.oExecuta(m.lcSql, "crsAramisTipNave")
If !m.llSucces
Create Cursor crsAramisTipNave(Id I, nume C(20))
Endif
Select crsAramisTipNave
Index On Id Tag Id
Index On nume Tag nume
Set Order To nume
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_aramis_tip_nave
***----------------------------------------------------------------------------------------
Procedure make_dane
lcSelect = Select()
llSucces = .T.
If !Used('crsDane')
lcSql = [select id, descriere as dana, dana as cod from ips_dane]
llSucces = goExecutor.oExecuta(m.lcSql, "crsDane")
If !m.llSucces
Create Cursor crsDane(Id N(1), dana C(20), cod C(5))
Insert Into crsDane (Id, dana, cod) Values (1, 'OPERARE/PORT', 'OP')
Insert Into crsDane (Id, dana, cod) Values (2, 'ASTEPTARE', 'AS')
Insert Into crsDane (Id, dana, cod) Values (3, 'IERNAT', 'IE')
Insert Into crsDane (Id, dana, cod) Values (4, 'REPARATII', 'RE')
Insert Into crsDane (Id, dana, cod) Values (5, 'PESCUIT', 'PE')
Insert Into crsDane (Id, dana, cod) Values (9, 'ALTE', 'AL')
ENDIF
Select crsDane
Index On Id Tag Id
Index On dana Tag dana
Set Order To Id
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_dane
****************************************************
*** creeaza cursor crsJTVA
****************************************************
Procedure make_jtva_explicatii
Local lcSql, llSucces
llSucces = .T.
If !Used('crsJTVA')
lcSql = [select id, denumire, id_jtva_coloana, id_tva, explicatie, ordine, cota_tva, coloana_jv, coloana_jc from vjtva_coloane_explicatii where inactiv = 0]
llSucces = goExecutor.oExecuta(m.lcSql, "crsJTVA")
If m.llSucces
Select crsJtva
Index On Id Tag Id
Endif
Endif
Return m.llSucces
Endproc && make_jtva_explicatii
****************************************************
*** creeaza cursor crsCoteTVA
****************************************************
Procedure make_cote_tva
Local lcSql, llSucces
llSucces = .T.
If !Used('crsCoteTVA')
Text To lcSql Noshow
select rpad(trim(TO_CHAR(procent, '999')),25, ' ') as procent, proc_tva
from vcote_tva
where an = ?gnAn and luna = ?gnLuna
order by proc_tva desc
Endtext
*!* UNION
*!* SELECT ' < ALES LA FACTURARE > ' AS procent, -1 AS proc_tva FROM dual
llSucces = goExecutor.oExecuta(m.lcSql, "crsCoteTVA")
If m.llSucces
Index On proc_tva Tag proc_tva Descending
Endif && llSucces
Endif && used
Return m.llSucces
Endproc && make_cote_tva
****************************************************
*** creeaza cursor crsCheiajPrestatii
****************************************************
Procedure make_cheiaj_prestati
Local lcSql, llSucces, lcSelect
lcSelect = Select()
m.llSucces = .T.
If !Used('crsCheiajPrestatii')
lcSql = [select id, dana_id, dana, tipn_id, tipn, id_articol, articol, id_locatia, locatia from ips_vcheiaj_prestatii]
llSucces = goExecutor.oExecuta(m.lcSql, "crsCheiajPrestatii")
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_cheiaj_prestati
****************************************************
*** creeaza cursor crsArticole
****************************************************
Procedure make_articole
Local lcSql, llSucces, lcSelect
lcSelect = Select()
m.llSucces = .T.
If !Used('crsArticole')
lcSql = [select id_articol, codmat, denumire, descriere, um, id_grupa, grupa, id_subgrupa, subgrupa from vnom_articole where inactiv = 0 and tip = 1 order by denumire] && manopera
llSucces = goExecutor.oExecuta(m.lcSql, "crsArticole")
If m.llSucces
Select crsArticole
Index On id_articol Tag id_articol
Index On denumire Tag denumire
Endif
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_articole
****************************************************
*** creeaza cursor crsLocatii
****************************************************
Procedure make_locatii
Local lcSql, llSucces, lcSelect
lcSelect = Select()
llSucces = .T.
If !Used('crsLocatii')
lcSql = [select id, denumire from vnom_locatii where inactiv = 0 order by denumire]
llSucces = goExecutor.oExecuta(m.lcSql, "crsLocatii")
If m.llSucces
Select crsLocatii
Index On Id Tag Id
Index On denumire Tag denumire
Endif && llSucces
Endif && used
Select (m.lcSelect)
Return m.llSucces
Endproc && make_locatii
****************************************************
*** creeaza cursor crsArticoleLocatii
****************************************************
Procedure make_articole_locatii
Local lcSql, llSucces, lcSelect
lcSelect = Select()
Use In (Select('crsArticoleLocatii'))
llSucces = .T.
If !Used('crsArticoleLocatii')
lcSql = [select id_articol, id_locatia, ctdebitor, ctcreditor, ctaideb, ctaedeb, ctaicred, ctaecred, ctpideb, ctapideb, ctpicred, ctapicred from ips_vprestatii_locatii]
llSucces = goExecutor.oExecuta(m.lcSql, "crsArticoleLocatii")
If m.llSucces
Select crsArticoleLocatii
Index On id_articol Tag id_articol
Index On id_locatia Tag id_locatia
Endif
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && crsArticoleLocatii
****************************************************
*** creeaza cursor crsValute
****************************************************
Procedure make_valute
Local lcSql, llSucces, lcSelect
lcSelect = Select()
llSucces = .T.
If !Used('crsValute')
lcSql = [select id_valuta, nume_val, moneda_nationala from vnom_valute where inactiv = 0 order by nume_val]
llSucces = goExecutor.oExecuta(m.lcSql, "crsValute")
If m.llSucces
Select crsValute
Index On id_valuta Tag id_valuta
Endif
Endif
Select (m.lcSelect)
Return m.llSucces
Endproc && make_valute
*!* ****************************************************
*!* *** creeaza cursor crsTarifeDiverseContract pentru contractul dat si tarifele generale pentru clientii fara contract
*!* ****************************************************
*!* Procedure make_tarife_diverse_contract
*!* Lparameters tnIdCtr, tnIdCtrFara
*!* * tnIdCtrFara (optional)
*!* Local lcSql, lnIdCtr, lnIdCtr2, lcSelect, llSucces
*!* lcSelect = Select()
*!* lnIdCtr = m.tnIdCtr
*!* lnIdCtr2 = Iif(!Empty(m.tnIdCtrFara), m.tnIdCtrFara, m.tnIdCtr)
*!* && selectez tarifele de pe contract si pe cele generale
*!* Text To lcSql Textmerge Noshow
*!* select id, id_articol, lim1, lim2, umlim, corect, tar_prest, tar_furn, tar_total, numevaluta, ctr_id, tip, intern, loc_id, cant, um, plus, arebaza, baza, valval, ediscount, id_valuta
*!* from ips_tarife_diverse
*!* WHERE ctr_id in (<<m.lnIdCtr>>, <<m.lnIdCtr2>>)
*!* Endtext
*!* llSucces = goExecutor.oExecuta(m.lcSql, 'crsTarifeDiverseContract')
*!* Select (m.lcSelect)
*!* Return m.llSucces
*!* Endproc
****************************************************
*** creeaza cursor crsTarifeCheiajContract pentru contractul dat si tarifele generale pentru clientii fara contract
****************************************************
Procedure make_tarife_cheiaj_contract
Lparameters tnIdCtr, tnIdCtrFara
* tnIdCtrFara (optional)
Local lcSql, lnIdCtr, lnIdCtr2, lcSelect, llSucces
lcSelect = Select()
lnIdCtr = m.tnIdCtr
lnIdCtr2 = Iif(!Empty(m.tnIdCtrFara), m.tnIdCtrFara, m.tnIdCtr)
&& selectez tarifele de pe contract si pe cele generale
Text To lcSql Textmerge Noshow
select id, id_articol, lim1, lim2, um, corect, valoare as tarif, valoare, ctr_id, intern, plus, arebaza, baza, id_valuta
from ips_tarife_cheiaj
WHERE ctr_id in (<<m.lnIdCtr>>, <<m.lnIdCtr2>>)
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'crsTarifeDiverseContract')
Select (m.lcSelect)
Return m.llSucces
Endproc
Procedure make_tipfactura
If !Used('crsTipFactura')
Create Cursor crsTipFactura (tip C(100))
Insert Into crsTipFactura (tip) Values ('TRANZIT')
Insert Into crsTipFactura (tip) Values ('CHEIAJ')
Insert Into crsTipFactura (tip) Values ('CHIRII')
Insert Into crsTipFactura (tip) Values ('APA')
Insert Into crsTipFactura (tip) Values ('DIVERSE')
Insert Into crsTipFactura (tip) Values ('PENALITATI')
Insert Into crsTipFactura (tip) Values ('PROFORMA')
Endif
Endproc
***----------------------------------------------------------------------------------------
*** intoarce id contract pentru clientul "FARA CONTRACT", pentru calcularea valorii facturii din tarifele pentru clientul FARA CONTRACT valabil in luna curenta
Function get_ctr_id_fara_contract
Private pnId
Local lnId, lcAnLuna, lcSelect, llSucces, llShowError
lcSelect = Select()
lnId = -3
llShowError = .T.
lcAnLuna = Alltrim(Str(Int(m.gnAn))) + Padl(Int(m.gnLuna), 2, '0')
lcSql = [SELECT ID_CTR FROM VCONTRACTE WHERE DENUMIRE = 'FARA CONTRACT' and ] + Alltrim(Str(m.gnAn * 12 + m.gnLuna)) + [ between extract(year from data_inceput) * 12 + extract(month from data_inceput) and ] + ;
[extract(year from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm'))) * 12 + extract(month from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm')))]
pnId = 0
llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pnId)
If Empty(m.pnId)
Do Case
Case Val(m.an) < 2006
lnId = -1
Case Val(m.an) = 2006
lnId = -2
Otherwise && >= 2007
lnId = -3
Endcase
Else
lnId = m.pnId
Endif
Select (m.lcSelect)
Return m.lnId
Endfunc && get_ctr_id_fara_contract
****************************************************
*** Intoarce un obiect cu id-ul si denumirea articolulul tranzit/cheiaj/penalitati
****************************************************
Function GetPrestatieByTip
Lparameters tcTip, tlExplicatieEN
* tcTip: Tranzit, Cheiaj, Penalitati
* tlExplicatieEN: explicatia in engleza
Local lcTip, loArticol, lcSelect, lcDescriere1, lcDescriere2, lcDescriereRO, lcDescriereEN
Private pnId, pcDenumire
pnId = 0
lcSelect = Select()
lcTip = m.tcTip
loArticol = Createobject("empty")
AddProperty(loArticol, "id_articol", 0)
AddProperty(loArticol, "denumire", "")
AddProperty(loArticol, "descriere", "")
pcDenumire = '*' + m.lcTip && *TRANZIT/*CHEIAJ/*PENALITATI/*APA/*CHIRII
lcSql = [SELECT id_articol, denumire, descriere FROM nom_articole WHERE denumire = ?pcDenumire]
llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticolTemp')
If m.llSucces
Select crsArticolTemp
Go Top
loArticol.id_articol = id_articol
lcDescriere = Alltrim(Nvl(descriere, '')) && RO::C/V TRANZITARE CDMN PENTRU CONVOIUL/BARJA [INDICATIV], DIN [DATA] CONFORM [CONTRACT]|EN::TRANSIT FOR [INDICATIV], IN [DATA] ACCORDING TO THE [CONTRACT]
lcDescriere1 = Getwordnum(m.lcDescriere, 1, '|')
lcDescriere2 = Getwordnum(m.lcDescriere, 2, '|')
If Left(m.lcDescriere1, 4) = 'RO::'
lcDescriereRO = Strtran(m.lcDescriere1, 'RO::', '', 1, 1, 1)
lcDescriereEN = Strtran(m.lcDescriere2, 'EN::', '', 1, 1, 1)
Else
lcDescriereRO = Strtran(m.lcDescriere2, 'RO::', '', 1, 1, 1)
lcDescriereEN = Strtran(m.lcDescriere1, 'EN::', '', 1, 1, 1)
Endif
loArticol.denumire = Iif(m.tlExplicatieEN, m.lcDescriereEN, m.lcDescriereRO)
loArticol.descriere = Iif(m.tlExplicatieEN, m.lcDescriereEN, m.lcDescriereRO)
Use In (Select('crsArticolTemp'))
Endif
Select (m.lcSelect)
Return loArticol
Endfunc && GetPrestatieByTip
****************************************************
****************************************************
*** Intoarce un obiect cu id-ul si denumirea articolulul cu id_articol din parametru
****************************************************
Function GetPrestatieById
Lparameters tnIdArticol, tlExplicatieEN
Private pnIdArticol
Local loArticol As "empty"
Local lcDescriere, lcDescriere1, lcDescriere2, lcDescriereEN, lcDescriereRO, lcSelect, lcSql
Local llSucces
pnIdArticol = tnIdArticol
lcSelect = Select()
loArticol = Createobject("empty")
AddProperty(loArticol, "id_articol", 0)
AddProperty(loArticol, "denumire", "")
AddProperty(loArticol, "descriere", "")
lcSql = [SELECT id_articol, denumire, descriere FROM nom_articole WHERE id_articol = ?pnIdArticol]
llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticolTemp')
If m.llSucces
Select crsArticolTemp
Go Top
loArticol.id_articol = id_articol
loArticol.denumire = Alltrim(Nvl(denumire, ''))
lcDescriere = Alltrim(Nvl(descriere, '')) && RO::C/V TRANZITARE CDMN PENTRU CONVOIUL/BARJA [INDICATIV], DIN [DATA] CONFORM [CONTRACT]|EN::TRANSIT FOR [INDICATIV], IN [DATA] ACCORDING TO THE [CONTRACT]
lcDescriere1 = Getwordnum(m.lcDescriere, 1, '|')
lcDescriere2 = Getwordnum(m.lcDescriere, 2, '|')
If Left(m.lcDescriere1, 4) = 'RO::'
lcDescriereRO = Strtran(m.lcDescriere1, 'RO::', '', 1, 1, 1)
lcDescriereEN = Strtran(m.lcDescriere2, 'EN::', '', 1, 1, 1)
Else
lcDescriereRO = Strtran(m.lcDescriere2, 'RO::', '', 1, 1, 1)
lcDescriereEN = Strtran(m.lcDescriere1, 'EN::', '', 1, 1, 1)
Endif
loArticol.descriere = Iif(m.tlExplicatieEN, m.lcDescriereEN, m.lcDescriereRO)
Use In (Select('crsArticolTemp'))
Endif
Select (m.lcSelect)
Return loArticol
Endfunc && GetPrestatieId
****************************************************
****************************************************
*** Intoarce id_Articol din obiectul articol.id_articol, denumire
****************************************************
Function GetIdPrestatieByArticol
Lparameters toArticol
Return Iif(Type('toArticol.id_articol') = 'N', toArticol.id_articol, 0)
Endfunc && GetIdPrestatieByArticol
****************************************************
*** Intoarce numele unui articol dupa Id din cursorul crsArticole sau din baza de date
****************************************************
Function GetArticolById
Lparameters tnId
Local llSucces, llShowError, lcSelect
Private pnId, pcDenumire
pnId = m.tnId
pcDenumire = ''
lcSelect = Select()
If Used('crsArticole')
If Seek(m.pnId, 'crsArticole', 'id_articol')
pcDenumire = Alltrim(crsArticole.denumire)
Endif
Endif && USED
If Empty(m.pcDenumire)
llShowError = .T.
llSucces = goExecutor.oSelecteaza2Value([SELECT denumire FROM vnom_articole WHERE id_articol = ?pnId], @pcDenumire)
Endif
Select (m.lcSelect)
Return m.pcDenumire
Endfunc
****************************************************
*** Intoarce numele unei locatii dupa Id din cursorul crsLocatii sau din baza de date
****************************************************
Function GetLocatieById
Lparameters tnId
Local llSucces, llShowError, llSelect
Private pnIdLocatie, pcLocatie
pnId = m.tnId
pcDenumire = ''
lcSelect = Select()
If Used('crsLocatii')
If Seek(m.pnId, 'crsLocatii', 'id')
pcDenumire = Alltrim(crsLocatii.denumire)
Endif
Endif && USED
If Empty(m.pcDenumire)
llShowError = .T.
llSucces = goExecutor.oSelecteaza2Value([SELECT denumire FROM vnom_locatii WHERE id = ?pnId], @pcDenumire)
Endif
Select (m.lcSelect)
Return m.pcDenumire
Endfunc
************************************
*** Intoarce id locatie dupa denumirea locatiei din cursorul crsLocatii sau din baza de date
************************************
Function GetIdLocatieByName
Lparameters tcDenumire
Private pcDenumire, pnId
Local llShowError, lcSelect
lcSelect = Select()
pcDenumire = Upper(Alltrim(Nvl(m.tcDenumire, '')))
pnId = 0
If Used('crsLocatii')
If Seek(m.pcDenumire, 'crsLocatii', 'denumire')
pnId = crsLocatii.Id
Endif
Endif && USED
If Empty(m.pnId)
llShowError = .T.
llSucces = goExecutor.oSelecteaza2Value([select id from vnom_locatii where denumire = ?pcDenumire], @pnId)
Endif
Select (m.lcSelect)
Return m.pnId
Endfunc && GetIdLocatieByName
****************************************************
*** intoarce procent TVA standard 19/20/24
****************************************************
Function GetCotaTVAStandard
Local lcSql, llSucces, lnProcTva, lcSelect
lcSelect = Select()
lnProcTva = Iif(m.gnAn*12+m.gnLuna >= 2025*12+8, 21, Iif(m.gnAn >= 2017, 19, Iif(m.gnAn >= 2016, 20, Iif(m.gnAn >= 2015, 24, 21))))
lcSql = [select procent from cote_tva where an=?m.gnAn and luna = ?m.gnLuna and descriere = 'STANDARD']
llSucces = goExecutor.oExecuta(m.lcSql, 'crsCoteTemp')
If m.llSucces
Select crsCoteTemp
Go Top
If Reccount() >= 1
lnProcTva = crsCoteTemp.procent
Endif
Use In (Select('crsCoteTemp'))
Endif
Select (m.lcSelect)
Return m.lnProcTva
Endfunc && GetCotaTVAStandard
****************************************************
*** intoarce obiect procent TVA standard (IdJtvaExpl, IdJtva, ProcTva)
*** trebuie sa existe crsJTVA: make_jtva_explicatii()
****************************************************
Function GetTVAStandard
Lparameters tnIntern
* tnIntern (optional): 1 = intern, 0 = extern, implicit 1
Local lnInter, loTVA As "empty"
lnIntern = Iif(Type('tnIntern') = 'N', m.tnIntern, 1)
loTVA = GetObiectTVA(m.lnIntern)
Return loTVA
Endfunc && GetTVAStandard
****************************************************
*** intoarce obiect procent TVA standard (IdJtvaExpl, IdJtva, ProcTva)
*** trebuie sa existe crsJTVA: make_jtva_explicatii()
****************************************************
Function GetObiectTVA
Lparameters tnIntern, tnCotaTVA, tnIdJtvaColoana
* tnIntern (optional): 1 = intern, 0 = extern, implicit .T.
* tnCotaTVA (optional, default COTA STANDARD): 19/20/24
* tnIdJtvaColoana (optional) - intorc obiect tva cu id_jtva_coloana = tnIdJtvaColoana
Local llIntern, lnCotaTVA, lcSelect, lnCotaTVAStandard, loTVA As "empty"
lcSelect = Select()
loTVA = Createobject("empty")
AddProperty(loTVA, "IdJTVAExpl", 0)
AddProperty(loTVA, "IdJTVA", 0)
AddProperty(loTVA, "ProcTVA", 0)
lnCotaTVAStandard = GetCotaTVAStandard()
llIntern = Iif(Pcount() >= 1, Iif(m.tnIntern = 1, .T., .F.), .T.)
Do Case
Case !Empty(m.tnIdJtvaColoana)
Select crsJtva
Locate For id_jtva_coloana = m.tnIdJtvaColoana
Otherwise
If m.llIntern
lnCotaTVA = Iif(Type('tnCotaTVA') = 'N', m.tnCotaTVA, m.lnCotaTVAStandard)
Select crsJtva
Locate For cota_tva = m.lnCotaTVA
If !Found()
Locate For cota_tva = m.lnCotaTVAStandard
Endif
Else
Select crsJtva
Locate For coloana_jv = 'WRSCDD' && alte livrari scutite cu drept de deducere
Endif
Endcase
If Found()
loTVA.IdJtvaExpl = Id
loTVA.IdJtva = id_jtva_coloana
loTVA.ProcTva = Round(1 + cota_tva / 100, 2)
Endif
Select (m.lcSelect)
Return loTVA
Endfunc && GetObiectTVA
****************************************************
*** Creeaza cursorul cRegDoc pentru inregistrarea in Reg Doc.
*** Se inregistreaza factura in vanzari si apoi in Reg. Doc.
****************************************************
Procedure make_cregdoc
Private poRegdoc
poRegdoc = Null
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
Text To lcSchema Noshow
id N(20), id_vanzare N(12), tip N(1), id_articol N(10), articol C(100), id_locatia N(5), locatia C(100), id_valuta N(5), valuta C(50), id_client N(10), client C(100), id_contract N(10), contract C(100), pret N(16,4), curs N(12, 4), cantitate N(10,3), valval N(20,4), tvaval N(20,4), totval N(20,4), valftva N(20,4), valtva N(20,4), valctva N(20,4), um C(20), document C(100), data D, id_jtva_coloana N(10), id_jtva_coloana_ex N(10) Null
Endtext
lcOrder = []
lcFiltru = [1=2]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Noshow
select id, id_vanzare, tip, id_articol, articol, id_locatia, locatia, id_valuta, valuta, id_client, client, id_contract, contract, pret, curs, cantitate, valval, tvaval, totval, valftva, valtva, valctva, um, document, data, 0 as id_jtva_coloana, 0 as id_jtva_coloana_ex from ips_vregdoc
Endtext
gencursor('poRegDoc', 'cRegDoc', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poRegdoc.ca_baza1.afisare()
Endproc && make_cregdoc
****************************************************
*** Creeaza cursorul gol actactan
*** Intoarce .T. daca s-a creat cursorul actactan
****************************************************
Procedure make_actactan
Private poAct
poAct = Null
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
Text To lcSchema Noshow
serie_act C(10),id_act N(20),luna N(4),an N(6),cod N(20),dataireg T,nract N(16),dataact T,suma N(20,4),explicatia C(100),scd C(4),ascd C(4),scc C(4),ascc C(4),pereched N(16),perechec N(16),suma_val N(20,4),explicatia2 C(100),explicatia3 C(100),curs N(14,6),datascad T,neimpozab N(20,4),nnir N(16),id_util N(7),util C(30),dataora T,id_utils N(7),utils C(30),dataoras T,id_respons N(12),nresp C(30),id_venchel N(7),dst_chlt C(100),id_lucrare N(12),nrord C(50),id_ctr N(10),contract C(61),id_sectie N(7),sectie C(50),proc_tva N(7,2),id_set N(20),id_fact N(20),id_factd N(20),id_factc N(20),id_partd N(12),partd C(70),id_partc N(12),partc C(70),id_sucursala N(7),sucursala C(30),id_fdoc N(7),fdoc C(30),id_gestin N(7),id_jtva_coloana N(6),gestin C(50),id_gestout N(7),gestout C(50),id_valuta N(7),nume_val C(20),id_pol N(10),nume_lista C(30),tva_incasare N(1),id_instiintare N(20),numar_instiintare N(16),nr_nota N(6),taxcode N(6),paymentcode V(9)
Endtext
lcOrder = []
lcFiltru = [1=2]
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Noshow
select serie_act, id_act, luna, an, cod, dataireg, nract, dataact, suma, explicatia, scd, ascd, scc, ascc, pereched, perechec, suma_val, explicatia4, explicatia5, curs, datascad, neimpozab, nnir, id_util, util, dataora, id_utils, utils, dataoras, id_responsabil, nresp, id_venchelt, dst_chlt, id_lucrare, nrord, id_ctr, contract, id_sectie, sectie, proc_tva, id_set, id_fact, id_factd, id_factc, id_partd, partd, id_partc, partc, id_sucursala, sucursala, id_fdoc, fdoc, id_gestin, id_jtva_coloana, gestin, id_gestout, gestout, id_valuta, nume_val, id_pol, nume_lista_preturi, tva_incasare, id_instiintare, numar_instiintare, nr_nota, taxcode, paymentcode from vactan
Endtext
gencursor('poAct', 'actactan', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poAct.ca_baza1.afisare()
Return Used('actactan')
Endproc && make_actactan
**************************************************
*** Intoarce conturi, analitice pentru o prestatie/activitate din crsArticoleLocatii (ips_varticole_locatii)
**************************************************
Procedure GetCont
Lparameters tcTip, tnIdLocatia, tnIdArticol, tlIntern, tlPenalitati, tcScd, tcAscd, tcScc, tcAscc, tcExplicatia
Local lcSelect, lcGrupa, llFound, llIntern, llPenalitati, lnTip, lnIdArticol, lnIdLocatia, lcTip, llSucces
lcSelect = Select()
llSucces = .F.
tcScd = ''
tcScc = ''
tcAscd = ''
tcAscc = ''
tcExplicatia = ''
lcTip = m.tcTip
llIntern = m.tlIntern
llPenalitati = m.tlPenalitati
lnIdArticol = m.tnIdArticol
lnIdLocatia = m.tnIdLocatia
lcGrupa = ''
llFound = .F.
* Inca nu este implementat penalitati pentru facturi de tranzit pe locatii din ips_regdoc
* pun penalitati tranzit pe locatia SEDIU
If m.llPenalitati And Empty(Nvl(m.lnIdLocatia, 0))
lnIdLocatia = GetIdLocatieByName('SEDIU')
Endif
*** caut prestatia pentru tipul respectiv.
*** Daca este facturi diverse TIP = 9 sau alte prestatii TIP = 2, caut doar prestatia. La diverse, pot sa aleg prestatie de orice tip
If !Empty(m.lnIdArticol) And !Empty(m.lnIdLocatia)
Select crsArticoleLocatii
Locate For id_articol = m.lnIdArticol And id_locatia = m.lnIdLocatia
llFound = Found()
Endif
If !m.llFound
lcGrupa = Iif(m.lcTip = TIP_TRANZIT, 'TRANZIT', Iif(m.lcTip = TIP_CHEIAJ, 'CHEIAJ', Iif(m.lcTip = TIP_PILOTAJ, 'PILOTAJ', Iif(m.lcTip = TIP_APA, 'LIVAPA', Iif(m.lcTip = TIP_DIVERSE, 'DIVERSE', '*')))))
*** nu am gasit prestatia dupa ID, sau este o activitate fara prestatii - caut configurari generice dupa CAT = *, SUBCAT = TRANZIT/CHEIAJ/PILOTAJ/LIVAPA
If m.llPenalitati
Select crsArticole
Locate For GRUPA = TIP_PENALITATI And subgrupa = m.lcTip
Else
Select crsArticole
Locate For GRUPA = m.lcTip And subgrupa = '*'
Endif
If Found()
lnIdArticol = crsArticole.id_articol
Select crsArticoleLocatii
Locate For id_articol = m.lnIdArticol And id_locatia = m.lnIdLocatia
llFound = Found()
Endif
Endif
If m.llFound
Select crsArticoleLocatii
If !m.llPenalitati
tcScd = Allt(Nvl(CTDEBITOR, ''))
tcScc = Allt(Nvl(CTCREDITOR, ''))
tcAscd = Alltrim(Iif(m.llIntern, Nvl(ctaideb, ''), Nvl(ctaedeb, '')))
tcAscc = Alltrim(Iif(m.llIntern, Nvl(ctaicred, ''), Nvl(ctaecred, '')))
Else
tcScd = Allt(Nvl(CTPIDEB, ''))
tcScc = Allt(Nvl(CTPICRED, ''))
tcAscd = Alltrim(Nvl(CTAPIDEB, ''))
tcAscc = Alltrim(Nvl(CTAPICRED, ''))
Endif
tcExplicatia = ''
If Empty(tcScd) Or Empty(tcScc)
lctext = 'Nu sunt completate conturile la prestatia ID: ' + Alltrim(Transform(lnIdArticol)) + ' ' + GetArticolById(m.lnIdArticol) + ' locatia ID: ' + Alltrim(Transform(m.lnIdLocatia)) + ' ' + GetLocatieById(m.lnIdLocatia) + Iif(m.lnIdLocatia <> m.tnIdLocatia, '(' + Alltrim(Str(m.tnIdLocatia)) + ' ' + GetLocatieById(m.tnIdLocatia) + ')', '') + ' GRUPA: ' + m.lcGrupa
poLog.Log(m.lctext, Program())
amessagebox(m.lctext, 0 + 48, _Screen.Caption)
Endif
Else
lctext = 'Nu exista configurari pentru conturi la prestatia ID: ' + Alltrim(Transform(lnIdArticol)) + ' ' + GetArticolById(m.lnIdArticol) + ' locatia ID: ' + Alltrim(Transform(m.lnIdLocatia)) + ' ' + GetLocatieById(m.lnIdLocatia) + Iif(m.lnIdLocatia <> m.tnIdLocatia, '(' + Alltrim(Str(m.tnIdLocatia)) + ' ' + GetLocatieById(m.tnIdLocatia) + ')', '') + ' GRUPA: ' + m.lcGrupa
poLog.Log(m.lctext, Program())
amessagebox(m.lctext, 0 + 48, _Screen.Caption)
Endif
llSucces = !(Empty(m.tcScd) Or Empty(m.tcScc))
Select (m.lcSelect)
Return m.llSucces
Endproc && GetCont
**************************************************************
*** vizualizare tarife tranzit
**************************************************************
Procedure vizualizare_tarife_tranzit
Local loFrmTarife As "frm_tarife_tranzit"
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, lcSql, lcSqlDelete
Local lcSqlInsert, lcSqlUpdate, llAfiseaza, llModParam, llScris, llSucces, llSucces2, lnModificat
Local lnRec
Private pnId, poRec, poTarife
poTarife = Null
Do make_contracte && crsContracte
Do make_grupe_marfa && crsGrupeMarfa
Do make_marfa With .T. && crsMarfa
Do make_valute && crsValute
Do make_vas_um && crsVasUM
Do make_routes && crsRoutes
Do make_grup_tip_nave && crsGrupTipNave
Text To lcSchema Noshow
id N(10) null, intern N(1), ctr_id N(10) null, rte_id N(20) null, vum_id N(10), gtn_id N(10), gdsg_id N(10) NULL, gds_id C(36) null, id_valuta N(7), valoare N(20,4), tcap1 N(5), tcap2 N(5), tccap1 N(12), tccap2 N(12), modificat N(1)
Endtext
lcOrder = [intern desc, gtn_id, tcap1, tcap2, gdsg_id]
lcFiltru = []
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Noshow
select id,
intern,
ctr_id,
rte_id,
vum_id,
gtn_id,
decode(gdsg_id, -1, 999888, gdsg_id) as gdsg_id,
gds_id,
id_valuta,
valoare,
tcap1,
tcap2,
tccap1,
tccap2,
0 as modificat
from ips_vtarife_tranzit
Endtext
Update crsGrupeMarfa Set Id = Iif(Id = -1, 999888, Id) && nu se afisa corect grupa de marfa cu id = -1, am pus id = 999888, apoi l-am modificat in -1
gencursor('poTarife', 'crsTarife', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poTarife.ca_baza1.afisare()
Select crsTarife
loFrmTarife = Createobject("frm_tarife_tranzit") && oacnpro.vcx
* DO FORM frm_tarife_tranzit NAME loFrmTarife NOSHOW
loFrmTarife.Show(1)
If m.gnButon = 1
lcSqlDelete = [DELETE from ips_tarife_tranzit WHERE id = ?pnId]
Text To lcSqlInsert Noshow
insert into ips_tarife_tranzit
(intern, ctr_id, rte_id, tcap1, tcap2, vum_id, valoare, tccap1, tccap2, gdsg_id, gtn_id, gds_id, id_valuta)
values
(?poRec.intern, ?poRec.ctr_id, ?poRec.rte_id, ?poRec.tcap1, ?poRec.tcap2, ?poRec.vum_id, ?poRec.valoare, ?poRec.tccap1, ?poRec.tccap2, ?poRec.gdsg_id, ?poRec.gtn_id, ?poRec.gds_id, ?poRec.id_valuta)
Endtext
Text To lcSqlUpdate Noshow
update ips_tarife_tranzit
set intern = ?poRec.intern,
ctr_id = ?poRec.ctr_id,
rte_id = ?poRec.rte_id,
tcap1 = ?poRec.tcap1,
tcap2 = ?poRec.tcap2,
vum_id = ?poRec.vum_id,
valoare = ?poRec.valoare,
tccap1 = ?poRec.tccap1,
tccap2 = ?poRec.tccap2,
gdsg_id = ?poRec.gdsg_id,
gtn_id = ?poRec.gtn_id,
gds_id = ?poRec.gds_id,
id_valuta = ?poRec.id_valuta
where id = ?poRec.id;
Endtext
Select crsTarife
Set Filter To
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
If m.llSucces && transactions
*** SELECTEZ IREG STERSE
Set Deleted Off
Sele Id From crsTarife Where Deleted() Into Cursor cTarifeSterse
Set Deleted On
Select cTarifeSterse
Scan
pnId = Id
llSucces = goExecutor.oExecuta(m.lcSqlDelete)
If !m.llSucces
Exit
Endif
Endscan
Use In (Select('cTarifeSterse'))
*** STERG IN TARIFE_DIVERSE IREG STERSE
If m.llSucces
*** MODIFIC IN TARIFE IREG MODIFICATE IN TEMPORAR
Sele crsTarife
Set Filter To
Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1
lnRec = 0
Sele crsTarife
Scan For Nvl(modificat, 0) = 1
Scatter Name poRec Memo
poRec.gdsg_id = Iif(poRec.gdsg_id = 999888, -1, poRec.gdsg_id) && nu se afisa corect grupa de marfa cu id = -1, am pus id = 999888, apoi l-am modificat in -1
lnRec = m.lnRec + 1
Wait Window 'Tarif nou/modificat ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait
If Empty(Nvl(poRec.Id, 0))
llSucces = goExecutor.oExecuta(m.lcSqlInsert)
Else
llSucces = goExecutor.oExecuta(m.lcSqlUpdate)
Endif
If !m.llSucces
Exit
Endif
Endscan
Endif && llSucces
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
Endif && gnButon
If m.llSucces
amessagebox('Tarife modificate cu succes!', 0 + 64, _Screen.Caption)
Else
amessagebox('Tarifele nu s-au modificat!', 0 + 64, _Screen.Caption)
Endif
Endif && gnButon
Use In (Select('crsContracte'))
Use In (Select('crsGrupeMarfa'))
Use In (Select('crsMarfa'))
Use In (Select('crsValute'))
Use In (Select('crsVasUM'))
Use In (Select('crsRoutes'))
Use In (Select('crsGrupTipNave'))
Return m.llSucces
Endproc && vizualizare_tarife_tranzit
**************************************************************
*** vizualizare tarife cheiaj
**************************************************************
Procedure vizualizare_tarife_cheiaj
Local loFrmTarife As "frm_tarife_tranzit"
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, lcSql, lcSqlDelete
Local lcSqlInsert, lcSqlUpdate, llAfiseaza, llModParam, llScris, llSucces, llSucces2, lnModificat
Local lnRec
Private pnId, poRec, poTarife
poTarife = Null
Do make_contracte && crsContracte
Do make_articole && crsArticole
Do make_valute && crsValute
Text To lcSchema Noshow
id N(10) null, intern N(1), ctr_id N(10), id_articol N(12), articol C(100), id_valuta N(7), lim1 N(12,2), lim2 N(12,2), um C(10), corect N(2), valoare N(20,4), plus N(1), arebaza N(1), baza N(1), modificat N(1)
Endtext
lcOrder = [intern desc, articol, lim1, lim2]
lcFiltru = []
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Noshow
select id,
intern,
ctr_id,
id_articol,
articol,
id_valuta,
lim1,
lim2,
um,
corect,
valoare,
plus,
arebaza,
baza,
0 as modificat
from ips_vtarife_cheiaj
Endtext
gencursor('poTarife', 'crsTarife', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poTarife.ca_baza1.afisare()
Select crsTarife
loFrmTarife = Createobject("frm_tarife_cheiaj") && oacnpro.vcx
loFrmTarife.Show(1)
If m.gnButon = 1
lcSqlDelete = [DELETE from ips_tarife_cheiaj WHERE id = ?pnId]
Text To lcSqlInsert Noshow
insert into ips_tarife_cheiaj
(id_articol, lim1, lim2, um, corect, valoare, ctr_id, intern, plus, arebaza, baza, id_valuta)
values
(?poRec.id_articol, ?poRec.lim1, ?poRec.lim2, ?poRec.um, ?poRec.corect, ?poRec.valoare, ?poRec.ctr_id, ?poRec.intern, ?poRec.plus, ?poRec.arebaza, ?poRec.baza, ?poRec.id_valuta)
Endtext
Text To lcSqlUpdate Noshow
update ips_tarife_cheiaj
set id_articol = ?poRec.id_articol,
lim1 = ?poRec.lim1,
lim2 = ?poRec.lim2,
um = ?poRec.um,
corect = ?poRec.corect,
valoare = ?poRec.valoare,
ctr_id = ?poRec.ctr_id,
intern = ?poRec.intern,
plus = ?poRec.plus,
arebaza = ?poRec.arebaza,
baza = ?poRec.baza,
id_valuta = ?poRec.id_valuta
where id = ?poRec.id;
Endtext
Select crsTarife
Set Filter To
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
If m.llSucces && transactions
*** SELECTEZ IREG STERSE
Set Deleted Off
Sele Id From crsTarife Where Deleted() Into Cursor cTarifeSterse
Set Deleted On
Select cTarifeSterse
Scan
pnId = Id
llSucces = goExecutor.oExecuta(m.lcSqlDelete)
If !m.llSucces
Exit
Endif
Endscan
Use In (Select('cTarifeSterse'))
*** STERG IN TARIFE_DIVERSE IREG STERSE
If m.llSucces
*** MODIFIC IN TARIFE IREG MODIFICATE IN TEMPORAR
Sele crsTarife
Set Filter To
Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1
lnRec = 0
Sele crsTarife
Scan For Nvl(modificat, 0) = 1
Scatter Name poRec Memo
lnRec = m.lnRec + 1
Wait Window 'Tarif nou/modificat ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait
If Empty(Nvl(poRec.Id, 0))
llSucces = goExecutor.oExecuta(m.lcSqlInsert)
Else
llSucces = goExecutor.oExecuta(m.lcSqlUpdate)
Endif
If !m.llSucces
Exit
Endif
Endscan
Endif && llSucces
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
Endif && gnButon
If m.llSucces
amessagebox('Tarife modificate cu succes!', 0 + 64, _Screen.Caption)
Else
amessagebox('Tarifele nu s-au modificat!', 0 + 64, _Screen.Caption)
Endif
Endif && gnButon
Use In (Select('crsContracte'))
Use In (Select('crsGrupeMarfa'))
Use In (Select('crsMarfa'))
Use In (Select('crsValute'))
Use In (Select('crsVasUM'))
Use In (Select('crsRoutes'))
Use In (Select('crsGrupTipNave'))
Return m.llSucces
Endproc && vizualizare_tarife_cheiaj
**************************************************************
*** vizualizare tarife contracte
**************************************************************
Procedure vizualizare_tarife_contracte
Local loFrmTarife As "frm_tarife_contracte"
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam
Local lcSql, lcSqlDelete, lcSqlInsert, lcSqlUpdate, llScris, llSucces, llSucces2, lnModificat, lnRec
Private poRec, poTarife, pnPretftva, pnPretctva
poTarife = Null
poRec = Null
pnPretftva = 0
pnPretctva = 0
Do make_contracte && crsContracte
Do make_locatii && crsLocatii
Do make_articole && crsArticole
Do make_valute && crsValute
Do make_um && crsUM
make_cote_tva() && crsCoteTVA
Text To lcSchema Noshow
id_ctr_art N(7) null, id_ctr N(7) null, id_articol N(20) null, articol C(100) null, um C(10) null, pret_cu_tva N(1) null, proc_tvav N(10,2) null, pret_unitar N(20,4) null, cant N(12,4) null, valoare N(20,4) null, coef_discount N(12,4) null, val_discount N(20,4) null, id_valuta N(7) null, explicatie C(100) null, nume_val C(20) null, moneda_nationala N(1) null, id_locatia N(5), locatia C(100), modificat N(1)
Endtext
lcOrder = [articol]
lcFiltru = []
llAfiseaza = .F.
lcGroup = []
llModParam = .T.
lcFiltruOriginal = []
Text To lcSelect Noshow
select id_ctr_art,
id_ctr,
id_articol,
articol,
um,
NVL(pret_cu_tva,0) AS pret_cu_tva,
NVL(proc_tvav, -1) as proc_tvav,
pret_unitar,
cant,
ROUND(valoare, ?gnPC) as valoare,
coef_discount,
val_discount,
id_valuta,
explicatie,
valuta,
moneda_nationala,
id_locatia,
locatia,
0 as modificat
from vctr_articole2
Endtext
gencursor('poTarife', 'crsTarife', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal)
poTarife.ca_baza1.afisare()
Select crsTarife
loFrmTarife = Createobject("frm_tarife_contracte") && oacnpro.vcx
loFrmTarife.Show(1)
If m.gnButon = 1
lcSqlDelete = [DELETE from ctr_articole WHERE id_ctr_art = ?pnIdCtrArt]
Text To lcSqlInsert Noshow
insert into ctr_articole
(id_ctr, pret_unitar, cant, valoare, coef_discount, val_discount, id_valuta, explicatie, um, id_articol, pret_cu_tva, proc_tvav, id_locatia)
values
(?poRec.id_ctr, ?poRec.pret_unitar, ?poRec.cant, ?poRec.valoare, ?poRec.coef_discount, ?poRec.val_discount, ?poRec.id_valuta, ?poRec.explicatie, ?poRec.um, ?poRec.id_articol, ?poRec.pret_cu_tva, ?poRec.proc_tvav, ?poRec.id_locatia)
Endtext
Text To lcSqlUpdate Noshow
update ctr_articole
set id_ctr_art = ?poRec.id_ctr_art,
id_ctr = ?poRec.id_ctr,
pret_unitar = ?poRec.pret_unitar,
cant = ?poRec.cant,
valoare = ?poRec.valoare,
coef_discount = ?poRec.coef_discount,
val_discount = ?poRec.val_discount,
id_valuta = ?poRec.id_valuta,
explicatie = ?poRec.explicatie,
um = ?poRec.um,
id_articol = ?poRec.id_articol,
pret_cu_tva = ?poRec.pret_cu_tva,
proc_tvav = ?poRec.proc_tvav,
id_locatia = ?poRec.id_locatia
where id_ctr_art = ?poRec.id_ctr_art
Endtext
Select crsTarife
Set Filter To
llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0)
If m.llSucces && transactions
*** SELECTEZ IREG STERSE
Set Deleted Off
Sele id_ctr_art From crsTarife Where Deleted() Into Cursor cTarifeSterse
Set Deleted On
Select cTarifeSterse
Scan
pnIdCtrArt = id_ctr_art
llSucces = goExecutor.oExecuta(m.lcSqlDelete)
If !m.llSucces
Exit
Endif
Endscan
Use In (Select('cTarifeSterse'))
*** STERG IN TARIFE_DIVERSE IREG STERSE
If m.llSucces
*** MODIFIC IN TARIFE IREG MODIFICATE IN TEMPORAR
Sele crsTarife
Set Filter To
Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1
lnRec = 0
Sele crsTarife
Scan For Nvl(modificat, 0) = 1
Scatter Name poRec Memo
poRec.proc_tvav = Iif(poRec.proc_tvav = -1, Null, poRec.proc_tvav)
poRec.pret_cu_tva = Nvl(poRec.pret_cu_tva, 0)
lnRec = m.lnRec + 1
Wait Window 'Tarif nou/modificat ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait
If Empty(Nvl(poRec.id_ctr_art, 0))
llSucces = goExecutor.oExecuta(m.lcSqlInsert)
Else
llSucces = goExecutor.oExecuta(m.lcSqlUpdate)
Endif
If !m.llSucces
Exit
Endif
Endscan
Endif && llSucces
If !m.llSucces
lcSql = "ROLLBACK"
llScris = .F.
Else
lcSql = "COMMIT"
llScris = .T.
Endif
llScris = goExecutor.oExecuta(m.lcSql)
llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0)
If !m.llSucces2
amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!')
Endif
llSucces = m.llSucces And m.llScris
Endif && gnButon
If m.llSucces
amessagebox('Tarife modificate cu succes!', 0 + 64, _Screen.Caption)
Else
amessagebox('Tarifele nu s-au modificat!', 0 + 64, _Screen.Caption)
Endif
Endif && gnButon
Use In (Select('crsTarife'))
Use In (Select('crsContracte'))
Use In (Select('crsArticole'))
Use In (Select('crsLocatii'))
Use In (Select('crsValute'))
Use In (Select('crsUM'))
Use In (Select('crsCoteTVA'))
Return m.llSucces
Endproc && vizualizare_tarife_contracte
********************************************
*** Genereaza data act din luna contabila curenta
********************************************
Function GenDataAct
Local ldData, ldDataCurenta
ldData = Gomonth(Date(m.gnAn, m.gnLuna, 1), 1) - 1 && ultima zi din luna contabila curenta
ldDataCurenta = Date()
If !(Year(m.ldDataCurenta) = Year(m.ldData) And Month(m.ldDataCurenta) = Month(m.ldData))
m.ldDataCurenta = m.ldData
Endif
Return m.ldDataCurenta
Endfunc && GenDataAct
********************************************
*** Intoarce numarul tipului de prestatie din numele tipului
********************************************
Function cTip2nTip
Lparameters tcTip
Local lcTip, lnTip
lcTip = Upper(Alltrim(tcTip))
lnTip = NTIP_TRANZIT
Do Case
Case m.lcTip = TIP_TRANZIT
lnTip = NTIP_TRANZIT
Case m.lcTip = TIP_CHEIAJ
lnTip = NTIP_CHEIAJ
Case m.lcTip = TIP_APA
lnTip = NTIP_APA
Case m.lcTip = TIP_CHIRII
lnTip = NTIP_CHIRII
Case m.lcTip = TIP_PILOTAJ
lnTip = NTIP_PILOTAJ
Case m.lcTip = TIP_ALTE
lnTip = NTIP_ALTE
Case m.lcTip = TIP_PENALITATI
lnTip = NTIP_PENALITATI
Case m.lcTip = TIP_DIVERSE
lnTip = NTIP_DIVERSE
Endcase
Return m.lnTip
Endfunc && cTip2nTip
********************************************************
*** listare recapitulatie cheiaj
*** se apeleaza din frm_facturi
********************************************************
Procedure listeaza_recapitulatie_cheiaj
Private pnIdVanzare, pnTotalValoare, pnTotalValoareVal
pnTotalValoare = 0
pnTotalValoareVal = 0
pnIdVanzare = poDate.nid_vanzare
poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_cheiaj')
* Selectez membri convoaielor
Text To lcSelect Textmerge Noshow
select vye_id,
vz_id,
numar_act,
data_act,
client_id,
client,
contract_client,
client_ctr_id,
beneficiar_id,
beneficiar,
intern,
document,
declcdt,
nava,
tipn_id,
tipn,
lbd,
trn,
hp,
cap,
lung,
id_locatia,
locatia,
id_dana,
dana,
datai,
datap,
nrore,
id_valuta,
valuta,
id_articol,
articol,
tarif,
cant,
durata,
um,
valval,
tvaval,
totval,
valftva,
valtva,
valctva,
curs
from ips_vberthing_members_vanzari
where vz_id = ?pnIdVanzare
Endtext
llSucces = goExecutor.oExecuta(m.lcSelect, 'crsBerthingMembersVanzari')
If !m.llSucces
Return
Endif
Select vye_id, ;
vz_id, ;
numar_act As nrfact, ;
data_act As datafact, ;
client_id, ;
client, ;
contract_client, ;
client_ctr_id, ;
beneficiar_id, ;
beneficiar, ;
(Nvl(intern, 0) = 1) As intern, ;
Document, ;
DECLCDT, ;
nava, ;
tipn_id, ;
tipn, ;
lbd, ;
trn, ;
hp, ;
cap, ;
lung, ;
id_locatia, ;
locatia, ;
id_dana, ;
dana, ;
datai, ;
datap, ;
nrore, ;
id_valuta, ;
valuta, ;
id_articol, ;
articol, ;
tarif, ;
cant, ;
durata, ;
um, ;
valval, ;
TVAVAL, ;
totval, ;
valftva, ;
valtva, ;
valctva, ;
Curs ;
From crsBerthingMembersVanzari ;
Order By DECLCDT, nava ;
Into Cursor crsRecapitulatie
Use In (Select('crsBerthingMembersVanzari'))
Select crsRecapitulatie
Go Top
llIntern = intern
* Total valoare
Select Max(Curs) As Curs, Sum(valval) As valval From crsRecapitulatie Into Cursor crsTotalTemp
Select crsTotalTemp
Go Top
pnTotalValoare = Iif(m.llIntern, Round(Round(crsTotalTemp.valval, m.gnPC) * crsTotalTemp.Curs, m.gnPC), Round(crsTotalTemp.valval, m.gnPC)) && intern lei, extern valuta
pnTotalValoareVal = Round(crsTotalTemp.valval, m.gnPC)
Use In (Select('crsTotalTemp'))
Select crsRecapitulatie
lcRaport = 'recapitulatie_cheiaj.frx'
Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg
Use In (Select('crsRecapitulatie'))
Endproc && listeaza_recapitulatie_cheiaj
********************************************************
*** listare recapitulatie tranzit
*** se apeleaza din frm_facturi
********************************************************
Procedure listeaza_recapitulatie_tranzit
Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcRaport, lcSchema, lcSelect, llAfiseaza
Local llModParam, llSucces
Local lcModCalcul, lcVyeId
Private pnIdVanzare, pnTotalValoare
pnTotalValoare = 0
pnIdVanzare = poDate.nid_vanzare
poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_tranzit')
* Selectez membri convoaielor
Text To lcSelect Textmerge Noshow
select vmv_id,
vv_id,
client_id,
client,
contract_client,
client_ctr_id,
beneficiar_id,
tiprecap,
beneficiar,
intern,
vz_id,
numar_act,
data_act,
cuplat,
arm_id,
armator,
kmi,
kmf,
rte_id,
ruta,
convoy_nam,
declaratio,
generation,
vye_id,
aviz,
data_aviz,
origin,
destinatio,
vms_id,
vsl_id,
ctt_id,
dirty_tank,
rstart_id,
rfin_id,
distanta,
distanta_cdmn,
contact,
indicativ,
lbd,
trn,
hp,
tcap,
procdiv,
vtp_id,
tip_nava,
vgrp_id,
grupa_nava,
felcargo,
cargo,
gds_id,
grp_id,
grupa_marfa,
periculos,
corect,
procdist,
id_valuta,
valuta,
tarif,
cant,
um,
valval,
tvaval,
totval,
valftva,
valtva,
valctva,
curs
from ips_vvoyage_members_vanzari
where vz_id = ?pnIdVanzare
Endtext
* from ips_vvoyage_members_vanzari3 ia o singura inregistrare din ips_cargoes, ca sa nu faca full scan pe ips_cargoes, dar trebuie cumulata cantitatea de marfa!!!
* trebuie sa salvez cargo in ips_voyage_members_vanzari
llSucces = goExecutor.oExecuta(m.lcSelect, 'crsVoyageMembers')
If !m.llSucces
Return
Endif
* Selectez capacitatea totala a convoiului, nu numai a navelor de pe factura curenta.
* Este posibil sa fac facturi catre clienti diferiti pe un singur convoi.
* Este posibil sa stornez factura si apoi sa o refacturez cu barje cu TCAP corectat
* Daca o barja apare cu mai multe TCAP, din mai multe facturi, iau TCAP de la aceeasi barja de pe factura curenta
Text To lcSql Noshow
Select vye_id, Sum(tcap) As tcap
from (select distinct vye_id,
vms_id,
LAST_VALUE(tcap) OVER(PARTITION BY vms_id ORDER BY fact ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS tcap
from (Select vmv.vye_id,
vmv.vms_id,
vmv.tcap,
decode(vv.vz_id, ?pnIdVanzare, 1, 0) as fact
From IPS_VOYAGE_MEMBERS_VANZARI vmv
join IPS_VOYAGES_VANZARI vv
On vmv.vv_id = vv.id
where vmv.vye_id in (SELECT distinct vmv1.vye_id
FROM ips_voyage_members_vanzari vmv1
join ips_voyages_vanzari vv1
on vmv1.vv_id = vv1.id
WHERE vv1.vz_id = ?pnIdVanzare)))
GROUP By vye_id
Endtext
* Select vye_id, Sum(tcap) As tcap From crsVoyageMembers Group By vye_id Into Cursor cCapacitateTemp
llSucces = goExecutor.oExecuta(m.lcSql, 'cCapacitateTemp')
If !m.llSucces
Use In (Select('crsVoyageMembers'))
Return
Endif
Select vm.vye_id, ;
vm.armator, ;
vm.declaratio As DECLCDT, ;
vm.origin, ;
vm.destinatio, ;
vm.aviz, ;
vm.data_aviz, ;
vm.convoy_nam As numeconvoi, ;
vm.client, ;
vm.contract_client, ;
(Nvl(vm.intern, 1) = 1) As intern, ;
vm.beneficiar, ;
vm.numar_act As nrfact, ;
vm.data_act As datafact, ;
vm.vv_id, ;
vm.vmv_id, ;
vm.tiprecap, ;
vm.cuplat, ;
vm.kmi, ;
vm.kmf, ;
vm.rte_id, ;
vm.ruta, ;
vm.vms_id, ;
vm.vsl_id, ;
vm.ctt_id, ;
vm.dirty_tank, ;
vm.rstart_id, ;
vm.rfin_id, ;
vm.distanta, ;
vm.distanta_cdmn, ;
vm.contact, ;
vm.indicativ, ;
vm.lbd, ;
vm.trn, ;
vm.hp, ;
vm.tcap, ;
vm.procdiv, ;
vm.VTP_ID, ;
vm.tip_nava, ;
vm.vgrp_id, ;
vm.grupa_nava, ;
vm.felcargo, ;
vm.cargo, ;
vm.gds_id, ;
vm.GRP_ID, ;
vm.grupa_marfa, ;
vm.periculos, ;
vm.corect, ;
vm.procdist, ;
vm.id_valuta, ;
vm.valuta, ;
vm.Curs, ;
vm.tarif, ;
vm.cant, ;
vm.um, ;
vm.valval, ;
vm.TVAVAL, ;
vm.totval, ;
vm.valftva, ;
vm.valtva, ;
vm.valctva, ;
Cast(Nvl(C.tcap, 0) As N(20, 2)) As convoi_t, ;
Cast('' As M) As mod_calcul ;
From crsVoyageMembers vm Join cCapacitateTemp C On vm.vye_id = C.vye_id ;
Order By vm.declaratio, vm.indicativ ;
Into Cursor crsRecapitulatie Readwrite
Select crsRecapitulatie
Go Top
llIntern = intern
* Total valoare
Select Max(Curs) As Curs, Sum(valval) As valval From crsRecapitulatie Into Cursor crsTotalTemp
Select crsTotalTemp
Go Top
pnTotalValoare = Iif(m.llIntern, Round(crsTotalTemp.valval * crsTotalTemp.Curs, m.gnPC), crsTotalTemp.valval) && intern lei, extern valuta
Use In (Select('crsTotalTemp'))
Select Distinct vye_id From crsRecapitulatie Into Cursor cModCalcul
Select cModCalcul
Scan
lcVyeId = Alltrim(cModCalcul.vye_id)
lcModCalcul = mod_calcul_tranzit('crsRecapitulatie', m.lcVyeId)
Update crsRecapitulatie Set mod_calcul = m.lcModCalcul Where vye_id = m.lcVyeId
Endscan
Use In (Select('cModCalcul'))
Use In (Select('crsVoyageMembers'))
Use In (Select('cCapacitateTemp'))
lcRaport = 'recapitulatie_tranzit.frx'
Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg
Use In (Select('crsRecapitulatie'))
Endproc && listeaza_recapitulatie_tranzit
*******************************************
*** se apeleaza din recapitulatie_tranzit.frx
*** intorce text cu modul de calcul valoare tranzit
*******************************************
Procedure mod_calcul_tranzit
Lparameters tcTabel, tcVyeId
Local lcModCalcul, llIntern, lnCurs, lnOldDecimals, lcSelect
Local lnValftva, lnValval, lcValuta
lcSelect = Select()
llIntern = .F.
lcModCalcul = ;
[TARIF * CANT * %DIST * (%COR + %SUPL) = TOTAL ] + Chr(13) + Chr(10)
lnValval = 0
lnValftva = 0
lnOldDecimals = Set("Decimals")
lcValuta = ''
Set Decimals To 4
Select vye_id, intern, indicativ, tarif, valuta, cant, um, procdist, corect, procdiv, valval, Curs, valftva From (m.tcTabel) Where vye_id = m.tcVyeId Order By indicativ Into Cursor cModCalculTemp
Select cModCalculTemp
Scan
lcModCalcul = lcModCalcul + Alltrim(Transform(tarif, GET_MASK(10, 4))) + [ ] + Allt(valuta) + [ * ] + Allt(Str(cant, 8, 2)) + [ ] + Allt(um) + [ * ] + Allt(Str(procdist, 6, 3)) + [ * ] + Allt(Str(corect + procdiv, 5, 3)) + [ = ] + Alltrim(Transform(valval, GET_MASK(16, 2))) + [ ] + Allt(valuta)
llIntern = intern
lnCurs = Curs
If m.llIntern
* nu mai adaug contravaloarea in lei pentru ca totalul nu este suma la valorile individuale in lei, ci este valoarea totala in valuta * curs
*!* lcModCalcul = lcModCalcul + " * " + Alltrim(Str(Curs, 10, gnPcurs)) + " LEI/" + Allt(valuta) + " = " + Alltrim(Transform(valftva, GET_MASK(12, gnPC))) + " LEI"
Endif
lcModCalcul = lcModCalcul + Chr(13)
lnValval = lnValval + valval
lnValftva = lnValftva + valftva
lcValuta = Alltrim(valuta)
Endscan && cModCalculTemp
Use In (Select('cModCalculTemp'))
lnValftva = Round(m.lnValval * m.lnCurs, m.gnPC) && totalul in lei = total in valuta * curs, nu suma totalurilor in lei
If m.llIntern
lcModCalcul = lcModCalcul + [TOTAL ] + Alltrim(Transform(lnValval, GET_MASK(13, 2))) + [ ] + Allt(m.lcValuta) + IIF(inlist(UPPER(allt(nvl(m.lcValuta, 'LEI'))), 'LEI', 'RON'), " ", " * " + Alltrim(Str(lnCurs, 10, gnPcurs)) + " LEI/" + Allt(m.lcValuta) + " = " + Alltrim(Transform(lnValftva, GET_MASK(12, gnZ))) + " LEI")
Else
lcModCalcul = lcModCalcul + [TOTAL ] + Alltrim(Transform(lnValval, GET_MASK(14, 2))) + [ ] + Allt(m.lcValuta)
Endif
Set Decimals To (lnOldDecimals)
Select (m.lcSelect)
Return lcModCalcul
Endproc && mod_calcul_tranzit
*********************************************
** Listeaza recapitulatie penalitati apelata din frm_facturi sau din formularul de penalitati, caz in care exista cursorul recapitulatie
*********************************************
Procedure listeaza_recapitulatie_penalitati
Lparameters tlEvaluare, tcTitlu
* tlEvaluare (optional): Default .F., daca se listeaza recapitulatia fara factura, din formularul de calcul.
* tcTitlu (optional), daca se listeaza recapitulatia fara factura, din formularul de calcul
Private pnIdVanzare, pcTitlu, pnNrFactPenalitati, pdDataFactPenalitati, pnIdFact
Local lcSelect
lcSelect = Select()
pnIdVanzare = 0
pcTitlu = Iif(!Empty(m.tcTitlu), m.tcTitlu, '')
pnNrFactPenalitati = 0
pdDataFactPenalitati = {}
pnIdFact = 0
If !m.tlEvaluare
pnIdVanzare = poDate.nid_vanzare
poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_penalitati')
lcSql = [select v.id_fact, v.numar_act, v.data_act, p.denumire from vanzari v join nom_parteneri p on v.id_part = p.id_part WHERE v.id_vanzare = ?pnIdVanzare]
llSucces = goExecutor.oExecuta(m.lcSql, 'cFacturaRTemp')
If m.llSucces
Select cFacturaRTemp
Go Top
pnIdFact = id_fact
pnNrFactPenalitati = cFacturaRTemp.numar_act
pdDataFactPenalitati = Ttod(cFacturaRTemp.data_act)
pcTitlu = 'Situatia calculului penalitatilor de intarziere la ' + Alltrim(Transform(pdDataFactPenalitati)) + Chr(13) + Chr(10) + ' pentru ' + Alltrim(cFacturaRTemp.denumire)
Endif && llSucces
Use In (Select('cFacturaRTemp'))
Text To lcSql Noshow
select id,
id_ctr,
contract,
id_part,
denumire as nume,
cod_fiscal,
nrfact,
datafact,
valctva,
nract,
dataact,
suma,
databaza,
dataref,
coef_penalitati as ppenzi,
coef_penalitati2 as ppenzi2,
nr_zile,
nr_zile1,
nr_zile2,
nr_zile_gratie,
penalitati,
datascad
from vpenalitati
where id_fact_pen = ?pnIdFact
Endtext
llSucces = goExecutor.oExecuta(m.lcSql, 'crsRecapitulatie')
Endif
If Used('crsRecapitulatie')
Select crsRecapitulatie
lcRaport = 'recapitulatie_penalitati.frx'
Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg
Use In (Select('crsRecapitulatie'))
Endif
Select (m.lcSelect)
Endproc && listeaza_recapitulatie_penalitati
Procedure listeaza_recapitulatie_alte
Private pnIdVanzare, pcValoareValute, pcCursValute
pcValoareValute = ''
pcCursValute = ''
pnIdVanzare = poDate.nid_vanzare
poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_alte')
Text To lcSelect Textmerge Noshow
select id,
id_vanzare,
tip,
id_articol,
articol,
id_locatia,
locatia,
id_valuta,
valuta,
moneda_nationala,
id_client,
client,
id_contract,
contract as contract_client,
pret as tarif,
curs,
cantitate,
valval,
valftva,
um,
document,
data,
perioada,
numar_act as nrfact,
data_act as datafact,
ctdebitor,
ctaideb,
ctaedeb,
ctcreditor,
ctaicred,
ctaecred
from ips_vregdoc
where id_vanzare = ?pnIdVanzare
order by id
Endtext
llSucces = goExecutor.oExecuta(m.lcSelect, 'crsRecapitulatie')
If !m.llSucces
Return
Endif
* pcValoareValute - il scriu la total in raport
Select valuta, moneda_nationala, Curs, Sum(valval) As valval From crsRecapitulatie Group By valuta, Curs, moneda_nationala Order By moneda_nationala Desc, valuta Into Cursor cTotalTemp
* daca nu are alte valute decat lei, nu il mai scriu
Select cTotalTemp
Locate For moneda_nationala = 0
If Found()
Scan
pcValoareValute = pcValoareValute + ', ' + Alltrim(Str(valval, 16, m.gnPC)) + ' ' + Alltrim(valuta)
If moneda_nationala = 0
pcCursValute = pcCursValute + ', ' + Alltrim(Str(Curs, 12, m.gnPcurs)) + " LEI/" + Alltrim(valuta)
Endif
Endscan
If !Empty(m.pcValoareValute)
pcValoareValute = Alltrim(Substr(m.pcValoareValute, 2))
pcCursValute = Alltrim(Substr(m.pcCursValute, 2))
Endif
Endif
Use In (Select('cTotalTemp'))
Select crsRecapitulatie
lcRaport = 'recapitulatie_alte.frx'
Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg
Use In (Select('crsRecapitulatie'))
Endproc && listeaza_recapitulatie_alte
*-------------------------------------
* meniu suplimentar pentru butonul Borderou din frm_facturi
Procedure meniu_borderou_plus
Lparameters tcListaMeniu, tcListaProceduri
* tcListaMeniu: titlurile optiunilor din meniu separate prin |
* tcListaProceduri: numele procedurilor corespunzatoare optiunilor din meniu separate prin |
* Procedurile primesc ca parametru tcVanzareIds (lista id_vanzare) si intorc llSucces
Local lnNumarOptiuni
lnNumarOptiuni = 1
tcListaMeniu = 'Copiere declaratii comandant si istorice cheiaj in directorul cu facturi'
tcListaProceduri = 'CopyDeclCdtPdf'
Return lnNumarOptiuni
Endproc && meniu_borderou_plus
*-------------------------------------
* Copie (muta) declaratii comandant si istoricele de cheiaj pdf in directorul facturi pdf si redenumeste declaratiile cu data_nr_factura_declaratie.pdf
* Nu suprascrie
* Pentru a fi atasate la emailul cu borderou facturi
Procedure CopyDeclCdtPdf
Lparameters tcVanzareIds
* tcVanzareIds: lista id_vanzare facturi
Local lcDeclPath, lcDeclaratie, lcDeclaratiiCopiate, lcDeclaratiiNecopiate, lcDeclaratiiNuExista, lcDeclaratiiExistaDeja
Local lcDestinationFile, lcFacturaPath, lcFacturaPdf, lcSourceFile, lcSql, lcSufixDecl
Local ldDataFactura, llSucces, lnNumarFactura, lnPos, lcCursor, lcSelect
lcSelect = Select()
lcDeclaratiiCopiate = ''
lcDeclaratiiNecopiate = ''
lcDeclaratiiNuExista = ''
lcDeclaratiiExistaDeja = ''
llSucces = .T.
lcSufixDecl = 'DEC'
lcDeclPath = GetDocumentPath('declcdt') && [pdf_declcdt_acn]
lcFacturaPath = GetDocumentPath('factura') && [pdf_factura_acn]
If Empty(m.lcDeclPath) Or !Directory(m.lcDeclPath)
amessagebox('Directorul declaratii/istorice: ' + m.lcDeclPath + ' nu exista!')
llSucces = .F.
Endif
If Empty(m.lcFacturaPath) Or !Directory(m.lcFacturaPath)
amessagebox('Directorul facturi: ' + m.lcFacturaPath + ' nu exista!')
llSucces = .F.
Endif
If Empty(m.tcVanzareIds)
amessagebox('Selectati facturile de tranzit/cheiaj pentru care doriti sa copiati declaratiile/istoricele!', 0 + 48, _Screen.Caption)
Return m.llSucces
Endif
* Selectez facturi, declaratii pentru tip_factura 0 = tranzit, , document stationare pentru tip_factura 1 = cheiaj
Text To lcSql Textmerge Noshow
SELECT V.DATA_ACT, V.NUMAR_ACT, VYE.DECLARATIO AS DECLCDT, V.TIP_FACTURA, VV.DOCUMENT as ISTORIC, COUNT(*) OVER (PARTITION BY V.TIP_FACTURA, VYE.DECLARATIO) AS NR
FROM VANZARI V JOIN IPS_VOYAGES_VANZARI VV ON V.ID_VANZARE = VV.VZ_ID JOIN IPS_VOYAGES VYE ON VV.VYE_ID = VYE.ID
WHERE V.ID_VANZARE IN (<<m.tcVanzareIds>>) AND V.TIP_FACTURA IN (0,1)
ORDER BY V.DATA_ACT, V.NUMAR_ACT
Endtext
lcCursor = Sys(2015)
If m.llSucces
llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursor)
Endif && llSucces
If m.llSucces
If Reccount(m.lcCursor) = 0
amessagebox('Nu exista rezultate. Alegeti facturi de tranzit!', 0 + 48, _Screen.Caption)
llSucces = .F.
Endif
Endif
If m.llSucces
* O declaratie poate aparea pe mai multe facturi
* Sterg declaratia pdf doar dupa ce am copiat declaratia pentru toate facturile
Select Distinct Upper(DECLCDT) As DECLCDT, nr From (m.lcCursor) Into Cursor cDeclTemp Readwrite
Select cDeclTemp
Index On DECLCDT Tag DECLCDT
Select Distinct Upper(istoric) As istoric, nr From (m.lcCursor) Into Cursor cIstoricTemp Readwrite
Select cIstoricTemp
Index On istoric Tag istoric
* Scanez cursorul cu facturi si copiez fiecare declaratie din directorul declaratii in directorul facturi cu redenumirea declaratiei
Select (m.lcCursor)
Scan
ldDataFactura = Ttod(data_act)
lnNumarFactura = numar_act
lcDeclaratie = Upper(Alltrim(DECLCDT)) && 20A0041
lcIstoric = Upper(Alltrim(istoric))
lnTipFactura = tip_factura
lcFacturaPdf = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) && 20200410_123456_factura.pdf
lnPos = At('_', Juststem(m.lcFacturaPdf), 2) && caut a doua aparitie a '_' din 20200410_123456_factura
If m.lnTipFactura = 0
lcDestinationFileName = Left(Juststem(m.lcFacturaPdf), m.lnPos) + 'dec_' + m.lcDeclaratie + '.pdf' && 20200410_123456_dec_20A0041.pdf
lcSourceFile = Addbs(m.lcDeclPath) + m.lcDeclaratie + '.pdf' && 20A0041.pdf
Else
lcDestinationFileName = Left(Juststem(m.lcFacturaPdf), m.lnPos) + 'ist_' + m.lcIstoric + '.pdf' && 20200410_123456_ist_20M271.pdf
lcSourceFile = Addbs(m.lcDeclPath) + m.lcIstoric + '.pdf' && 20M271.pdf
Endif
lcDestinationFile = Addbs(m.lcFacturaPath) + m.lcDestinationFileName
If goApp.FileExist(m.lcSourceFile)
llCopie = .T.
If goApp.FileExist(m.lcDestinationFile)
llCopie = (amessagebox('Exista fisierul ' + m.lcDestinationFile + Chr(13) + 'Doriti sa il suprascrieti?', 4 + 32, _Screen.Caption) = 6)
Endif
If m.llCopie
llSucces = goApp.CopyFile(m.lcSourceFile, m.lcDestinationFile) && override
Else
llSucces = .T.
Endif
If m.llSucces
If m.lnTipFactura = 0
* Sterg declaratia pdf daca a fost ultima aparitie a declaratiei pe o factura
Select cDeclTemp
If Seek(m.lcDeclaratie)
Replace nr With nr - 1
If nr = 0
llSucces = goApp.DeleteFile(m.lcSourceFile)
Endif
Endif
Else
* Sterg istoric pdf daca a fost ultima aparitie a declaratiei pe o factura
Select cIstoricTemp
If Seek(m.lcIstoric)
Replace nr With nr - 1
If nr = 0
llSucces = goApp.DeleteFile(m.lcSourceFile)
Endif
Endif
Endif
lcDeclaratiiCopiate = lcDeclaratiiCopiate + Justfname(m.lcSourceFile) + ' - ' + Justfname(m.lcDestinationFile) + Chr(13) + Chr(10)
Else
lcDeclaratiiNecopiate = lcDeclaratiiNecopiate + Justfname(m.lcSourceFile) + Chr(13) + Chr(10)
Endif
Else
* Daca nu exista deja in destinatie de la o copiere anterioara declar declaratia ca nu exista
If goApp.FileExist(m.lcDestinationFile)
lcDeclaratiiExistaDeja = m.lcDeclaratiiExistaDeja + Justfname(m.lcDestinationFile) + Chr(13) + Chr(10)
Else
lcDeclaratiiNuExista = m.lcDeclaratiiNuExista + Justfname(m.lcSourceFile) + Chr(13) + Chr(10)
Endif
Endif
Endscan && lcCursor
Use In (Select(m.lcCursor))
Use In (Select('cDeclTemp'))
Use In (Select('cIstoricTemp'))
Endif && llSucces
amessagebox('Declaratii/istorice copiate din ' + m.lcDeclPath + ' in ' + m.lcFacturaPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiCopiate + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ;
'Declaratii/istorice necopiate (eroare) din ' + m.lcDeclPath + ' in ' + m.lcFacturaPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiNecopiate + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ;
'Declaratii/istorice care nu exista in ' + m.lcDeclPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiNuExista + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ;
'Declaratii/istorice existente deja in ' + m.lcFacturaPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiExistaDeja, 0 + 64, _Screen.Caption)
Select (m.lcSelect)
llSucces = Empty(m.lcDeclaratiiNecopiate)
Return m.llSucces
Endproc && CopyDeclCdtPdf