Files
comun/programe/ofacturare_antet.prg
2026-09-30 22:27:28 +03:00

1315 lines
47 KiB
Plaintext

*!* 21.08.2026
*!* marius.mutu
*!* oAntetFacturare - logica de antet a formularului unificat frm_facturare_articole2, portata din frm_date_factura /
*!* frm_date_aviz (ofacturare.vcx): cautarile (do_cauta_*), do_verifica, validarea antetului (valideaza_antet) si regulile
*!* schimbarii felului de document (alege_tipdoc, schimba_tipdoc); formularul vine ca parametru toForm, ramura
*!* factura/aviz se alege pe poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie.
*!* 28.08.2026
*!* marius.mutu
*!* controalele grupului de contabilitate (Ct_clb_venchelt, Ct_clb_sectie, Ct_clb_lucrare, Ct_clb_responsabil,
*!* Ct_clb_gestiune_init, Ed_tx_simplu1) au trecut in containerul ct_contabilitate al formularului, deci
*!* referintele lor din acest fisier sunt prefixate cu containerul, inclusiv in expresiile Type().
*!* 29.09.2026
*!* marius.mutu
*!* verificare automata ANAF a clientului de pe factura: VerificaANAFAutomat clasifica verdictul (ClasificaRezultat) si il arata pe
*!* butonul But_verifica1 (AplicaIndicatorANAF: OK / ATENTIE / NECUNOSCUT / NEUTRU): textul casetei txtCodFiscal da verdictul (verde OK, rosu ATENTIE, original
*!* altfel), iconita "!!" da sursa (verde/rosu = ANAF sau istoric valabil pentru data facturii, gri = ANAF indisponibil si verdict doar din istoric mai vechi sau fara istoric,
*!* albastra originala = nimic de verificat); cod fiscal romanesc invalid (nenumeric, lungime in afara 2..10, cifra de control gresita) sau CNP invalid = ATENTIE fara apel ANAF;
*!* istoric mai vechi decat factura cu discordanta = ATENTIE cu iconita gri; la deschidere
*!* se citeste intai istoricul, la schimbarea clientului si a datei se interogheaza ANAF; butonul manual verifica la data
*!* facturii si actualizeaza indicatorul din rezultatul lui, fara alte intrebari.
*!* Acelasi indicator si aceiasi declansatori pe dialogul frm_date_factura (lFormVechi);
*!* cautarea inchisa fara alegere pastreaza indicatorul cat timp clientul ramane afisat (NEUTRU doar fara client).
Define Class oAntetFacturare As Custom
lInVerificare = .F.
lVerificaLaActivare = .F.
cCheieVerificata = ''
cStare = 'NEUTRU'
cTooltip = 'Verificare'
oNegasit = .Null.
oTextAnaf = .Null.
lFormVechi = .F.
Function EsteAviz
Return poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie
Endfunc
Procedure do_cauta_altele
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
If m.llAviz
Do Case
Case Inlist(toForm.nid_tip,23,41)
toForm.do_cauta_gestiune_dest()
Case Inlist(toForm.nid_tip,21,25,28,42,47) && modificare v 2.0.93 : am adaugat 47
toForm.do_cauta_comanda()
Case toForm.nid_tip = 26
toForm.do_cauta_contract()
Case toForm.nid_tip = 24 && aviz retur
toForm.do_cauta_avize()
Endcase
Else
Do Case
Case toForm.nid_tip=2
toForm.do_cauta_contract()
Case toForm.nid_tip=3
toForm.do_cauta_comanda()
Case toForm.nid_tip=4
toForm.do_cauta_avize()
*!* modificare v 2.0.46
Case toForm.nid_tip=7
toForm.do_cauta_factura()
*!* modificare v 2.0.46 ^
*!* modificare v 2.0.56
Case Inlist(toForm.nid_tip,8,9)
toForm.do_cauta_facturi()
*!* modificare v 2.0.56 ^
*!* modificare v 2.0.87
Case toForm.nid_tip = 45
toForm.do_cauta_locatii()
*!* modificare v 2.0.87 ^
Endcase
Endif
Endproc
Procedure do_cauta_avize
Lparameters toForm
Local lcXMLAvize
If Empty(Nvl(poDate.id_client,0))
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Else
lcXMLAvize = caut_avize(poDate.id_client) && oproceduri_facturare.prg
If !Empty(lcXMLAvize)
Xmltocursor(lcXMLAvize, "crsAvizeTemp")
*!* modificare v 2.0.44
Select id_vanzare,id_comanda,;
Padl(Iif(!Empty(Nvl(serie_act,[])),Alltrim(serie_act)+[ ],[])+Alltrim(Str(numar_act,20)),50,[ ]) As numar_act ;
From crsAvizeTemp Into Cursor crsAvizeTemp
*!* modificare v 2.0.44 ^
lcIdVanzare = cursor2lista("crsAvizeTemp", "id_vanzare", ",")
lcNumar_Act = cursor2lista("crsAvizeTemp", "numar_act", ",")
poDate.listaid = lcIdVanzare
poDate.descriere = lcNumar_Act
AddProperty(poDate,"id_comanda_aviz",0)
Select crsAvizeTemp
Locate For Not Empty(ID_COMANDA)
If Found()
poDate.id_comanda_aviz=ID_COMANDA
Endif
Use In crsAvizeTemp
toForm.ct_clb_altele.Refresh()
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Else
toForm.but_TERMIN1.SetFocus()
Endif
Endif
Endif
Endproc
Procedure do_cauta_client
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
If m.llAviz
Local loCauta
Do Case
Case poDate.tip = 23
loCauta = caut_gestiune_sursa([2,4,5,6,7]) && modificare v 2.0.71 : am adaugat 2
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
poDate.id_client = loCauta.id_gestiune
poDate.nume_client = loCauta.nume_gestiune
poDate.listaid = []
poDate.descriere = []
Endif
*!* modificare v 2.0.16
Case poDate.tip = 41
loCauta = caut_gestiune_sursa([2,4,5,6,7])
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
poDate.id_client = loCauta.id_gestiune
poDate.nume_client = loCauta.nume_gestiune
poDate.listaid = []
poDate.descriere = []
Endif
*!* modificare v 2.0.16 ^
Case poDate.tip = 25
loCauta = caut_gestiune_dest()
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_gestiune,0))
poDate.id_client = loCauta.id_gestiune
poDate.nume_client = loCauta.nume_gestiune
poDateGestiuneDest.id_gestiune = loCauta.id_gestiune
poDateGestiuneDest.id_tipgest = loCauta.id_tipgest
poDateGestiuneDest.Cont = Nvl(loCauta.Cont,[XXXX])
poDateGestiuneDest.acont = Nvl(loCauta.acont,[XXXX])
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda_gest(?poDate.id_client,?gnIdSucursala,] + ;
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
lnSucces = goExecutor.oExecute(lcSql)
If lnSucces < 0
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
poDate.listaid = []
poDate.descriere = []
Endif
Endif
Otherwise
&& modificare v 2.0.93 : am adaugat 47
loHash = GetHash([cTitlu=>Clienti??cCont=>]+Iif(INLIST(poDate.tip,42,47),[357],Iif(Inlist(poDate.tip,28,29),[461],Alltrim(gcCont411)))+[??lAdaugCorespondente=>1??lVerificaANAF=>1])
loHash.SetValue('dDataDoc', Iif(Type('poDate.dataact') = 'D', poDate.dataact, {}))
loCauta = CautPartenerContabilitate(loHash)
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
poDate.id_client = loCauta.id_part
poDate.nume_client = loCauta.denumire
poDate.cod_fiscal = Nvl(loCauta.cod_fiscal, '')
If Inlist(poDate.tip,21,28,42,47) && modificare v 2.0.93 : am adaugat 47
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda(?poDate.id_client,?gnIdSucursala,] + ;
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
lnSucces = goExecutor.oExecute(lcSql)
If lnSucces < 0
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
poDate.listaid = []
poDate.descriere = []
Endif
Else
poDate.listaid = []
poDate.descriere = []
Endif
Endif
Endcase
*!* modificare v 2.0.70
If Type('toForm.ct_clb_altele.visible')<>'U'
toForm.ct_clb_altele.Refresh()
Endif
*!* modificare v 2.0.70 ^
toForm.ct_clb_nume_client.Refresh()
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
This.VerificaANAFAutomat(m.toForm, .F.)
Else
Local loCauta
loHash = GetHash([cTitlu=>Clienti??cCont=>4111??lAdaugCorespondente=>1??lVerificaANAF=>1])
loHash.SetValue('dDataDoc', Iif(Type('poDate.dataact') = 'D', poDate.dataact, {}))
loCauta = CautPartenerContabilitate(loHash)
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
If loCauta.id_part <> poDate.id_client
poDate.listaid = []
poDate.descriere = []
poDate.text_aditional = []
Endif
poDate.id_client = loCauta.id_part
poDate.nume_client = loCauta.denumire
poDate.cod_fiscal = loCauta.cod_fiscal
If poDate.tip = 3
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda(?poDate.id_client,?gnIdSucursala,] + ;
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
lnSucces = goExecutor.oExecute(lcSql)
If lnSucces < 0
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
poDate.listaid = []
poDate.descriere = []
poDate.text_aditional = []
Endif
Endif
*!* If Type('toForm.ct_clb_altele.visible')<>'U'
*!* toForm.ct_clb_altele.Refresh()
*!* Endif
* Soldul curent
loSoldClient = GetSoldClient(poDate.id_client)
toForm.nSoldLei = loSoldClient.sold_lei
toForm.nSoldValuta = loSoldClient.sold_valuta
toForm.txtSoldLei.Refresh()
toForm.txtCodFiscal.Refresh()
toForm.ct_clb_nume_client.Refresh()
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = 'Id client: ' + TRANSFORM(poDate.id_client)
This.VerificaANAFAutomat(m.toForm, .F.)
Else
poDate.listaid = []
poDate.descriere = []
poDate.text_aditional = []
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = ''
toForm.nSoldLei = 0
toForm.nSoldValuta = 0
toForm.txtSoldLei.Refresh()
This.ReseteazaIndicator(m.toForm)
Endif
*!* modificare v 2.0.70
If Type('toForm.ct_clb_altele.visible')<>'U'
toForm.ct_clb_altele.Refresh()
ENDIF
*!* modificare v 2.0.70 ^
Endif
Endproc
Procedure do_cauta_comanda
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
If m.llAviz
Local loCauta
If Empty(Nvl(poDate.id_client,0))
amessagebox("Nu ati ales " + Iif(poDate.tip = 25,[gestiunea destinatie],[clientul]) + " !",0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Else
If poDate.tip = 25
loCauta = caut_comanda_gestiune(poDate.id_client)
Else
loCauta = caut_comanda_client(poDate.id_client)
Endif
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_comanda,0))
poDate.listaid = loCauta.id_comanda
poDate.descriere = ALLTRIM(loCauta.nr_comanda)
toForm.ct_clb_altele.Refresh()
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Else
toForm.buT_TERMIN1.SetFocus()
Endif
Endif
Endif
Else
* 12.03.2021
* folosesc caut_comanda_clienti in loc de caut_comanda_client,
* ca sa pot folosi un client diferit fata de comanda (ex: pers. fizica in loc de pers. juridica)
Local loCauta
If Empty(Nvl(poDate.id_client,0))
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Else
* loCauta = caut_comanda_client(poDate.id_client)
loCauta = caut_comanda_clienti(poDate.id_client)
If !Isnull(loCauta) And !Empty(loCauta.id_comanda)
IF poDate.id_client <> loCauta.id_part
AMESSAGEBOX('Comanda ' + ALLTRIM(TRANSFORM(loCauta.nr_comanda)) + ' (Client: ' + ALLTRIM(loCauta.nume) + ' Id: ' + ALLTRIM(TRANSFORM(loCauta.id_part)) + ')' + ;
' nu apartine clientului ales (' + ALLTRIM(poDate.nume_client) + ' Id: ' + ALLTRIM(TRANSFORM(poDate.id_client)) + ')',0+48,_sCREEN.Caption)
ENDIF
poDate.listaid = loCauta.id_comanda
poDate.descriere = loCauta.nr_comanda
toForm.ct_clb_altele.Refresh()
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Else
toForm.but_TERMIN1.SetFocus()
Endif
Endif
Endif
Endif
Endproc
Procedure do_cauta_contract
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
If m.llAviz
Local loCauta
If Empty(Nvl(poDate.id_client,0))
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Else
*!* modificare v 2.0.67
*!* loCauta = caut_contract_facturare(poDate.id_client)
*!* If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_ctr,0))
*!* poDate.listaid = loCauta.id_ctr
*!* poDate.descriere = loCauta.contract
*!* *!* If Inlist(loCauta.opt_facturare,3,4) And !Empty(loCauta.scadenta_incasare)
*!* *!* poDate.datascad = poDate.dataact + loCauta.scadenta_incasare
*!* *!* toForm.clb_data_scadenta.Refresh()
*!* *!* *!* Else
*!* *!* *!* poDate.datascad = Iif(gnScadentaAutomata=0,Gomonth(poDate.dataact,1),poDate.dataact+gnZileScadentaFact)
*!* *!* Endif
*!* toForm.ct_clb_altele.Refresh()
*!* *!* modificare v 2.0.41
*!* If Inlist(loCauta.opt_facturare,3,4)
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
*!* Else
*!* toForm.but_termin1.SetFocus()
*!* Endif
*!* Else
*!* poDate.id_gestiune_init = Null
*!* toForm.cgestiune_init = []
*!* *!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
*!* *!* toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
*!* *!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .F.
*!* *!* Endif
*!* *!* toForm.but_termin1.SetFocus()
*!* amessagebox("Acest contract este in rate si nu se poate emite aviz pentru el!",48,"Atentie")
*!* Endif
*!* *!* modificare v 2.0.41 ^
*!* *!* toForm.buT_TERMIN1.SetFocus()
*!* Endif
lcXMLContracte = caut_contract_facturare(poDate.id_client,[3,4])
If !Empty(lcXMLContracte) And gnButon = 1
Xmltocursor(lcXMLContracte, "crsCtrTemp")
poDate.listaid = cursor2lista("crsCtrTemp", "id_ctr", ",")
poDate.descriere = cursor2lista("crsCtrTemp", "contract", ",")
toForm.ct_clb_altele.Refresh()
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Else
toForm.but_termin1.SetFocus()
Endif
*!* Use In crsCtrTemp
Endif
*!* modificare v 2.0.67 ^
Endif
Else
Local loCauta,lcXMLContracte
If Empty(Nvl(poDate.id_client,0))
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Else
*!* modificare v 2.0.67
*!* loCauta = caut_contract_facturare(poDate.id_client)
*!* If !Isnull(loCauta) And !Empty(loCauta.id_ctr)
*!* poDate.listaid = loCauta.id_ctr
*!* poDate.descriere = loCauta.contract
*!* toForm.ct_clb_altele.Refresh()
*!* If Inlist(loCauta.opt_facturare,3,4)
*!* If !Empty(loCauta.scadenta_incasare)
*!* poDate.datascad = poDate.dataact + loCauta.scadenta_incasare
*!* toForm.clb_data_scadenta.Refresh()
*!* Endif
*!* *!* modificare v 2.0.41
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
*!* Else
*!* toForm.but_termin1.SetFocus()
*!* Endif
*!* *!* modificare v 2.0.41 ^
*!* Else
*!* *!* poDate.datascad = Iif(gnScadentaAutomata=0,Gomonth(poDate.dataact,1),poDate.dataact+gnZileScadentaFact)
*!* *!* modificare v 2.0.41
*!* poDate.id_gestiune_init = Null
*!* toForm.cgestiune_init = []
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .F.
*!* Endif
*!* toForm.but_termin1.SetFocus()
*!* Endif
*!* *!* modificare v 2.0.41 ^
lcXMLContracte = caut_contract_facturare(poDate.id_client)
If !Empty(lcXMLContracte) And gnButon = 1
Xmltocursor(lcXMLContracte, "crsCtrTemp")
poDate.listaid = cursor2lista("crsCtrTemp", "id_ctr", ",")
poDate.descriere = cursor2lista("crsCtrTemp", "contract", ",")
toForm.ct_clb_altele.Refresh()
Select crsCtrTemp
Calculate Min(scadenta_incasare),MAX(afisare_scadenta) For Inlist(opt_facturare,3,4,0) To lnScadentaIncasare,lnAfisareScadenta
If lnScadentaIncasare <> 0
poDate.datascad = poDate.dataact + lnScadentaIncasare
toForm.clb_data_scadenta.Refresh()
Endif
poDate.afisare_scadenta = lnAfisareScadenta && modificare ROACONTRACTE v 2.0.38
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Else
toForm.but_termin1.SetFocus()
Endif
*!* Use In crsCtrTemp
*!* modificare v 2.0.67 ^
Endif
Endif
Endif
Endproc
Procedure do_cauta_factura
Lparameters toForm
*!* modificare v 2.0.46
Local loCauta
If Empty(Nvl(poDate.id_client,0))
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Else
loCauta = caut_facturi_client(poDate.id_client)
If !Isnull(loCauta) And !Empty(loCauta.id_fact)
poDate.descriere = Alltrim(Alltrim(Nvl(loCauta.serie_act,[]))+[ ]+Alltrim(Str(loCauta.nract,14,0)))
poDate.text_aditional = [INVOICE ] + poDate.descriere
toForm.ct_clb_altele.Refresh()
toForm.buT_TERMIN1.SetFocus()
Endif
EndIf
*!* modificare v 2.0.46 ^
Endproc
Procedure do_cauta_facturi
Lparameters toForm
*!* modificare v 2.0.56
Local loCauta
Do Case
Case Empty(Nvl(poDate.id_client,0))
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Case Empty(Nvl(poDate.id_valuta,0)) And poDate.tip = 9
amessagebox("Nu ati ales valuta!",0+48,"Atentie")
toForm.ct_clb_valuta.SetFocus()
OTHERWISE
* 03.07.2020, marius
* Nu stiu de ce se alegea o singura factura la retur.
* Era si codul pentru mai multe facturi retur, dar era comentat
*!* loCauta = caut_facturi_multiple_client(poDate.id_client,poDate.in_valuta,poDate.id_valuta)
*!* If gnButon = 1 and !Empty(Nvl(loCauta.id_vanzare,0))
*!* poDate.listaid = Alltrim(Str(loCauta.id_vanzare))
*!* poDate.descriere = Alltrim(Iif(!Empty(Nvl(loCauta.serie_act,[])),Alltrim(loCauta.serie_act)+[ ],[])+Alltrim(Str(loCauta.numar_act,20,0)))
* pentru mai multe facturi :
lcXMLFacturi = caut_facturi_multiple_client(poDate.id_client,poDate.in_valuta,poDate.id_valuta,.T.)
If !Empty(lcXMLFacturi) and gnButon = 1
Xmltocursor(lcXMLFacturi, "crsFacturiTemp")
Select id_vanzare,;
Padl(Iif(!Empty(Nvl(serie_act,[])),Alltrim(serie_act)+[ ],[])+Alltrim(Str(numar_act,20,0)),50,[ ]) As numar_act ;
From crsFacturiTemp Into Cursor crsFacturiTemp
poDate.listaid = cursor2lista("crsFacturiTemp", "id_vanzare", ",")
poDate.descriere = cursor2lista("crsFacturiTemp", "numar_act", ",")
USE IN (SELECT('crsFacturiTemp'))
poDate.text_aditional = Iif(poDate.tip=8,[RETUR FACTURA ],[REFUND INVOICE FOR ]) + poDate.descriere
toForm.ct_clb_altele.Refresh()
toForm.buT_TERMIN1.SetFocus()
Endif
Endcase
*!* modificare v 2.0.56 ^
Endproc
Procedure do_cauta_fdoc
Lparameters toForm
Local loCauta
loCauta = caut_fdoc()
If !Isnull(loCauta) And !Empty(loCauta.fel_document)
poDate.id_fdoc = loCauta.id_fdoc
poDate.fdoc = loCauta.fel_document
toForm.clb_fdoc.Refresh()
toForm.clb_dataact.SetFocus()
Endif
Endproc
Procedure do_cauta_gestiune_dest
Lparameters toForm
Local loCauta
If Empty(NVL(poDate.id_client,0))
amessagebox("Nu ati ales gestiunea " + Iif(poDate.tip = 41,"de la care se face returul!","sursa!") ,0+48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
Else
If poDate.tip = 41
loCauta = caut_gestiune_dest(poDate.id_client,[2,4,5,6,7]) && modificare v 2.0.71 : am adaugat 2
Else
loCauta = caut_gestiune_dest(poDate.id_client)
Endif
If !Isnull(loCauta) And !Empty(NVL(loCauta.id_gestiune,0))
poDate.listaid = loCauta.id_gestiune
poDate.descriere = loCauta.nume_gestiune
poDateGestiuneDest.id_gestiune = loCauta.id_gestiune
poDateGestiuneDest.id_tipgest = loCauta.id_tipgest
poDateGestiuneDest.Cont = Nvl(loCauta.Cont,[XXXX])
poDateGestiuneDest.acont = Nvl(loCauta.acont,[XXXX])
toForm.ct_clb_altele.Refresh()
toForm.ct_clb_politici_preturi.SetFocus()
Endif
Endif
Endproc
Procedure do_cauta_gestiune_init
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
loCauta = caut_gestiune(0,gnIdUtil)
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
poDate.id_gestiune_init = loCauta.id_gestiune
toForm.cgestiune_init = loCauta.nume_gestiune
Else
poDate.id_gestiune_init = Null
toForm.cgestiune_init = []
Endif
toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
If m.llAviz
toForm.buT_TERMIN1.SetFocus()
Else
*!* modificare ROACONTRACTE v 2.0.42
*!* toForm.buT_TERMIN1.SetFocus()
toForm.ct_contabilitate.ed_tx_simplu1._edbase1.SetFocus()
*!* modificare ROACONTRACTE v 2.0.42 ^
Endif
Endproc
Procedure do_cauta_locatii
Lparameters toForm
Local loCauta
loCauta = caut_locatie_restaurant()
If !Isnull(loCauta) And !Empty(loCauta.id_rest_locatie)
poDate.listaid = loCauta.id_rest_locatie
poDate.descriere = loCauta.locatie
toForm.ct_clb_altele.Refresh()
toForm.but_TERMIN1.SetFocus()
Endif
Endproc
Procedure do_cauta_lucrare
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
Local loCauta
LOCAL llToateIreg, llNou, lcFiltruOriginal
llToateIreg = .F.
llNou = .T.
lcFiltruOriginal = ''
loCauta = caut_lucrare(m.llToateIreg, m.llNou, m.lcFiltruOriginal)
If m.llAviz
If !Empty(Nvl(loCauta.id_lucrare,0))
poDate.id_lucrare = loCauta.id_lucrare
poDate.nrord = loCauta.nrord
Else
poDate.id_lucrare = Null
poDate.nrord = []
Endif
toForm.ct_contabilitate.ct_clb_lucrare.Refresh()
Else
*!* modificare v 2.0.46
*!* If !Empty(Nvl(loCauta.id_lucrare,0))
*!* poDate.id_lucrare = loCauta.id_lucrare
*!* poDate.nrord = loCauta.nrord
*!* toForm.ct_contabilitate.ct_clb_lucrare.Refresh()
*!* Endif
If gnButon = 1
poDate.id_lucrare = loCauta.id_lucrare
poDate.nrord = loCauta.nrord
Else
poDate.id_lucrare = Null
poDate.nrord = []
Endif
*!* modificare v 2.0.46 ^
Endif
toForm.ct_contabilitate.ct_clb_sectie.SetFocus()
Endproc
Procedure do_cauta_politica
Lparameters toForm
Local loCauta
loCauta = caut_politici_curente_util()
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_pol,0))
poDate.id_pol = loCauta.id_pol
poDate.nume_politica = loCauta.nume
toForm.ct_clb_politici_preturi.SetFocus()
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Else
toForm.buT_TERMIN1.SetFocus()
Endif
Endif
Endproc
Procedure do_cauta_responsabil
Lparameters toForm
Local loCauta
loCauta = CautPartenerContabilitate(GetHash([cTitlu=>Responsabili??cTipuriParteneri=>]+Alltrim(Str(gnIdTipResponsabili))+[??lAdaugCorespondente=>1]))
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
poDate.id_responsabil = loCauta.id_part
poDate.responsabil = loCauta.denumire
Else
poDate.id_responsabil = Null
poDate.responsabil = []
Endif
toForm.ct_contabilitate.ct_clb_responsabil.Refresh()
Do Case
Case Type('toForm.ct_clb_altele.visible')<>'U'
toForm.ct_clb_altele.SetFocus()
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Otherwise
toForm.buT_TERMIN1.SetFocus()
Endcase
Endproc
Procedure do_cauta_sectie
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
Local loCauta
LOCAL lnPornire, llDesktop, llToateIreg, llNou, lcFiltruOriginal
lnPornire = 0
llDesktop = .F.
llToateIreg = .F.
llNou = .T.
lcFiltruOriginal = ''
loCauta = caut_sectie(lnPornire, llDesktop, m.llToateIreg, m.llNou, m.lcFiltruOriginal)
If m.llAviz
If !Empty(Nvl(loCauta.id_sectie,0))
poDate.id_sectie = loCauta.id_sectie
poDate.sectie = loCauta.sectie
Else
poDate.id_sectie = Null
poDate.sectie = []
Endif
toForm.ct_contabilitate.ct_clb_sectie.Refresh()
Else
*!* modificare v 2.0.46
*!* If !Empty(Nvl(loCauta.id_sectie,0))
*!* poDate.id_sectie = loCauta.id_sectie
*!* poDate.sectie = loCauta.sectie
*!* toForm.ct_contabilitate.ct_clb_sectie.Refresh()
*!* Endif
If gnButon = 1
poDate.id_sectie = loCauta.id_sectie
poDate.sectie = loCauta.sectie
Else
poDate.id_sectie = Null
poDate.sectie = []
Endif
toForm.ct_contabilitate.ct_clb_sectie.Refresh()
*!* modificare v 2.0.46 ^
Endif
Do Case
*!* modificare v 2.0.46
Case Type('toForm.ct_contabilitate.ct_clb_venchelt.visible')<>'U'
toForm.ct_contabilitate.ct_clb_venchelt.SetFocus()
*!* modificare v 2.0.46 ^
Case Type('toForm.ct_contabilitate.ct_clb_responsabil.visible')<>'U'
toForm.ct_contabilitate.ct_clb_responsabil.SetFocus()
Case Type('toForm.ct_clb_altele.visible')<>'U'
If m.llAviz
toForm.ct_clb_altele.Refresh()
Endif
toForm.ct_clb_altele.SetFocus()
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Otherwise
toForm.buT_TERMIN1.SetFocus()
Endcase
Endproc
Procedure do_cauta_valuta
Lparameters toForm
Local loCauta
loCauta = caut_valuta(1,.F.,.T.)
If !Isnull(loCauta) And !Empty(loCauta.id_valuta)
poDate.id_valuta = loCauta.id_valuta
poDate.nume_valuta = loCauta.nume_val
toForm.ct_clb_valuta.Refresh()
If Type('toForm.clb_zi_curs.visible')<>'U'
toForm.clb_zi_curs.SetFocus()
Else
toForm.clb_serie_act1.SetFocus()
Endif
Endif
Endproc
Procedure do_cauta_venchelt
Lparameters toForm
Local llAviz
llAviz = This.EsteAviz()
Local loCauta
LOCAL lnPornire, llDesktop, lnTip, lnId, llToateIreg, llNou, lcFiltruOriginal
lnPornire = 0
llDesktop = .F.
lnTip = 2 && venituri
lnId = 0
llToateIreg = .F.
llNou = .T.
lcFiltruOriginal = ''
loCauta = caut_venchelt(m.lnPornire, m.llDesktop, m.lnTip, m.lnId, m.llToateIreg, m.llNou, m.lcFiltruOriginal)
If gnButon = 1
poDate.id_venchelt = loCauta.id_venchelt
poDate.venchelt = loCauta.explicatie
Else
poDate.id_venchelt = Null
poDate.venchelt = []
Endif
toForm.ct_contabilitate.ct_clb_venchelt.Refresh()
Do Case
Case Type('toForm.ct_contabilitate.ct_clb_responsabil.visible')<>'U'
toForm.ct_contabilitate.ct_clb_responsabil.SetFocus()
Case Type('toForm.ct_clb_altele.visible')<>'U'
If m.llAviz
toForm.ct_clb_altele.Refresh()
Endif
toForm.ct_clb_altele.SetFocus()
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
Otherwise
toForm.buT_TERMIN1.SetFocus()
Endcase
Endproc
Procedure do_verifica
Lparameters toForm
Local loDate As "empty"
Local lnOptiune, lnRaspuns, loPartener
lnOptiune = 1
loPartener = Null
loDate = Createobject("empty")
AddProperty(loDate, "denumire", poDate.nume_client)
AddProperty(loDate, "cod_fiscal", poDate.cod_fiscal)
AddProperty(loDate, "data", ANAF_CaData(Iif(Type('poDate.dataact') $ 'DT', poDate.dataact, {})))
AddProperty(loDate, "tip_verificare", "ANAF_SERVICIU_WEB")
lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener)
This.AplicaRezultatButon(m.toForm, m.loPartener)
Endproc
Procedure valideaza_antet
Lparameters toForm
Local plReturn,lcFacturi_dublate, llCopiere, llAviz
Store .T. To plReturn
llAviz = This.EsteAviz()
llCopiere = toForm.lCopiere && copiere factura/aviz
Do Case
Case Empty(poDate.dataireg)
amessagebox("Nu ati completat data inregistrarii!",48,"Atentie")
toForm.clb_dataireg.SetFocus()
plReturn = .F.
Case Empty(poDate.dataact)
amessagebox("Nu ati completat data documentului!",48,"Atentie")
toForm.clb_dataact.SetFocus()
plReturn = .F.
Case !m.llAviz And Empty(poDate.datascad)
amessagebox("Nu ati completat data scadenta!",48,"Atentie")
toForm.clb_data_scadenta.SetFocus()
plReturn = .F.
Case Isnull(poDate.id_fdoc) Or Empty(poDate.id_fdoc)
amessagebox("Nu ati ales felul documentului!",48,"Atentie")
toForm.clb_fdoc.SetFocus()
plReturn = .F.
*!* modificare v 2.0.56
Case !m.llAviz And poDate.in_valuta = 1 And Empty(Nvl(poDate.zi_curs,{})) And Type('toForm.clb_zi_curs.visible')<>'U'
*!* Case poDate.in_valuta = 1 And Empty(Nvl(poDate.zi_curs,{}))
*!* modificare v 2.0.56 ^
amessagebox("Nu ati completat ziua cursului valutar!",48,"Atentie")
toForm.clb_zi_curs.SetFocus()
plReturn = .F.
Case !m.llAviz And poDate.in_valuta = 1 And Empty(Nvl(poDate.id_valuta,0))
amessagebox("Nu ati completat valuta!",48,"Atentie")
toForm.ct_clb_valuta.SetFocus()
plReturn = .F.
Case Empty(poDate.nract)
amessagebox("Nu ati completat numarul documentului!",48,"Atentie")
toForm.clb_nract.SetFocus()
plReturn = .F.
Case !Between(poDate.dataireg,Date(gnAn,gnLuna,1),Gomonth(Date(gnAn,gnLuna,1),1)-1)
amessagebox("Data inregistrarii trebuie sa fie din luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn))+" !",48,"Atentie")
toForm.clb_dataireg.SetFocus()
plReturn = .F.
Case !m.llAviz And poDate.datascad<poDate.dataact
amessagebox("Data scadenta trebuie sa fie mai mare sau egala cu data documentului!",48,"Atentie")
toForm.clb_data_scadenta.SetFocus()
plReturn = .F.
Case poDate.dataact>poDate.dataireg
amessagebox("Data documentului trebuie sa fie mai mica sau egala cu data inregistrarii!",48,"Atentie")
toForm.clb_dataact.SetFocus()
plReturn = .F.
Case !m.llAviz And (Empty(poDate.id_client) Or Isnull(poDate.id_client)) && aviz: fara validare client
amessagebox("Nu ati ales clientul!",48,"Atentie")
toForm.ct_clb_nume_client.SetFocus()
plReturn = .F.
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And poDate.tip = 7
amessagebox("Nu ati ales factura!",48,"Atentie")
toForm.ct_clb_altele.SetFocus()
plReturn = .F.
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And m.llCopiere
amessagebox("Nu ati ales factura de copiat!",48,"Atentie")
toForm.ct_clb_altele.SetFocus()
plReturn = .F.
Case m.llAviz And Empty(Nvl(poDate.descriere,[])) And m.llCopiere
amessagebox("Nu ati ales avizul de copiat!",48,"Atentie")
toForm.ct_clb_altele.SetFocus()
plReturn = .F.
*!* modificare v 2.0.56
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And Inlist(poDate.tip,8,9)
amessagebox("Nu ati ales factura/facturile pentru care se face returul!",48,"Atentie")
toForm.ct_clb_altele.SetFocus()
plReturn = .F.
*!* modificare v 2.0.56 ^
Case !m.llAviz And Empty(Nvl(poDate.listaid,[])) And !Inlist(poDate.tip,1,5,7,8,9,10,48,49) && modificare : am adaugat 10 ( v 2.0.56 ), 48 ( v 2.0.93 ), 49 ( v 2.0.95 )
Do Case
Case Inlist(poDate.tip, 2, 6, 52)
lcMesaj = [Nu ati ales contractul!]
Case poDate.tip = 3
lcMesaj = [Nu ati ales comanda!]
Case poDate.tip = 4
lcMesaj = [Nu ati ales avizul!]
Case poDate.tip = 45 && modificare v 2.0.87
lcMesaj = [Nu ati ales locatia!]
Endcase
amessagebox(lcMesaj,48,"Atentie")
toForm.ct_clb_altele.SetFocus()
plReturn = .F.
Case m.llAviz And Empty(Nvl(poDate.listaid,[])) And Inlist(poDate.tip,21,23,25,26,28,41,42,47) && modificare v 2.0.93 : am adaugat 47
Do Case
Case INLIST(poDate.tip,21,25,28,42,47) && modificare v 2.0.93 : am adaugat 47
lcMesaj = [Nu ati ales comanda!]
Case poDate.tip = 23
lcMesaj = [Nu ati ales gestiunea destinatie!]
*!* modificare v 2.0.16
Case poDate.tip = 41
lcMesaj = [Nu ati ales gestiunea catre care se face returul!]
*!* modificare v 2.0.16 ^
Case poDate.tip = 26
lcMesaj = [Nu ati ales contractul!]
Endcase
amessagebox(lcMesaj,48,"Atentie")
toForm.ct_clb_altele.SetFocus()
plReturn = .F.
Case m.llAviz And Empty(Nvl(poDate.id_pol,0)) And InList(poDate.tip,23,41)
amessagebox("Nu ati ales politica de preturi!",48,"Atentie")
toForm.ct_clb_politici_preturi.SetFocus()
plReturn = .F.
Otherwise
*!* modificare v 2.0.46
*!* plReturn = .T.
lcFacturi_dublate = facturi_duplicate(Iif(m.llAviz,'418','4111'), 0, poDate.serie_act, poDate.nract, [])
If !Empty(lcFacturi_dublate)
lnRaspuns = amessagebox(lcFacturi_dublate + Chr(13)+"Doriti sa continuati?",4+32,Iif(m.llAviz,"Avize dublate","Facturi dublate"))
plReturn = (m.lnRaspuns = 6)
Endif
*!* modificare v 2.0.46 ^
* Daca FACTURA si clientul se numeste "CLIENT"[I DIVERSI]
* Atentionez ca ar trebui sa se aleaga "BON FISCAL" in loc de "FACTURA"
IF poDate.nIdTipDoc = poDate.nIdTipDocFactura AND 'CLIENT'$UPPER(NVL(poDate.nume_client,''))
lnRaspuns = amessagebox('Ati ales clientul ' + ALLTRIM(poDate.nume_client) + ' si Tip document = FACTURA in loc de BON FISCAL' + Chr(13)+"Doriti sa continuati?",4+32,"Bon Fiscal")
plReturn = (m.lnRaspuns = 6)
ENDIF
Endcase
Return plReturn
Endproc
Function alege_tipdoc
Lparameters tcTipDoc
LOCAL lnIdTipDoc, lcTipDoc
lcTipDoc = UPPER(m.tcTipDoc)
lnIdTipDoc = IIF(m.lcTipDoc = 'FACTURA', poDate.nIdTipDocFactura, ;
IIF(m.lcTipDoc = 'PROFORMA', poDate.nIdTipDocProforma, ;
IIF(m.lcTipDoc = 'BON FISCAL', poDate.nIdTipDocBonFiscal, ;
IIF(m.lcTipDoc = 'AVIZ', poDate.nIdTipDocAvizExpeditie, poDate.nIdTipDocFactura))))
*!* poDate.nIdTipDocFactura = 5
*!* poDate.nIdTipDocProforma = 23
*!* poDate.nIdTipDocBonFiscal = 3
*!* poDate.nIdTipDocAvizExpeditie = 6
*!* poDate.eProforma = IIF(m.lnIdTipDoc = poDate.nIdTipDocProforma, 1, 0)
*!* poDate.eBonFiscal = IIF(m.lnIdTipDoc = poDate.nIdTipDocBonFiscal, 1, 0)
poDate.initializeaza_setari_document(IIF(m.lnIdTipDoc = poDate.nIdTipDocBonFiscal, -101, IIF(m.lnIdTipDoc = poDate.nIdTipDocProforma, -102, poDate.Tip)))
Return m.lnIdTipDoc
Endfunc
Function schimba_tipdoc
Lparameters tnIdTipDoc
IF poDate.nIdTipDoc = m.tnIdTipDoc
RETURN .F.
ENDIF
poDate.nract = 0
poDate.serie_act = ""
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
poDate.nIdTipDoc = m.tnIdTipDoc && se initializeaza automat si .eBonFiscal, .eProforma
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) && 1 = CU SERIE, 2 = FARA SERIE CU PLAJE, 3 = CU SERIE SI PLAJE
Return .T.
Endfunc
Procedure VerificaANAFAutomat
Lparameters toForm, tlIstoricIntai
Local lcCod, ldData, lcMotiv, lcCheie, loRez, loEx
If This.lInVerificare
Return
Endif
This.lVerificaLaActivare = .F.
This.lInVerificare = .T.
Try
lcCod = This.CodFiscalClient()
ldData = ANAF_CaData(Iif(Type('poDate.dataact') $ 'DT', poDate.dataact, {}))
lcMotiv = This.MotivNeutru(m.lcCod, m.ldData)
lcCheie = Upper(Chrtran(m.lcCod, ' ', '')) + '_' + Dtos(m.ldData)
Do Case
Case !Empty(m.lcMotiv)
This.cCheieVerificata = ''
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', m.lcMotiv)
Case This.CodInvalid(m.lcCod)
This.cCheieVerificata = ''
This.AplicaIndicatorANAF(m.toForm, 'ATENTIE', 'Cod fiscal invalid: ' + m.lcCod)
Case m.lcCheie == This.cCheieVerificata
&& indicatorul e deja la zi pentru cod si data
Otherwise
This.cCheieVerificata = ''
loRez = This.CalculeazaStare(m.toForm, m.lcCod, m.ldData, m.lcCheie, m.tlIstoricIntai)
This.AplicaIndicatorANAF(m.toForm, loRez.cStare, loRez.cTooltip, loRez.lGri)
This.cCheieVerificata = Iif(loRez.cStare == 'NEUTRU', '', m.lcCheie)
Endcase
Catch To loEx
This.cCheieVerificata = ''
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', 'Verificare ANAF esuata - apasati pentru verificare manuala')
This.Logheaza('eroare: ' + loEx.Message + ' linia ' + Transform(loEx.LineNo))
Finally
This.lInVerificare = .F.
This.SeteazaCursor(m.toForm, 0)
Endtry
Endproc
Procedure LaSchimbareData
Lparameters toForm
If !This.lVerificaLaActivare
This.VerificaANAFAutomat(m.toForm, .F.)
Endif
Endproc
Procedure ReseteazaIndicator
Lparameters toForm
If Type('poDate.id_client') = 'N' And !Empty(Nvl(poDate.id_client, 0))
Return
Endif
This.cCheieVerificata = ''
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', 'Verificare')
Endproc
Procedure MarcheazaVerificareLaActivare
If Type('poDate.tip') = 'N' And !Inlist(poDate.tip, 23, 25, 41) And Type('poDate.cod_fiscal') $ 'CX'
poDate.cod_fiscal = This.CodFiscalClient()
Endif
This.lVerificaLaActivare = .T.
Endproc
Function AplicaRezultatButon
Lparameters toForm, toPartener
Local lcCod, ldData, lcCheie, lcCheieSes, loStare, loRez, lcRO
lcCod = This.CodFiscalClient()
ldData = ANAF_CaData(Iif(Type('poDate.dataact') $ 'DT', poDate.dataact, {}))
If !Empty(This.MotivNeutru(m.lcCod, m.ldData)) Or Vartype(m.toPartener) <> 'O' Or !Pemstatus(m.toPartener, 'platitortvamfin', 5) Or !Empty(Nvl(toPartener.eroare, ''))
Return ''
Endif
lcCheie = Upper(Chrtran(m.lcCod, ' ', '')) + '_' + Dtos(m.ldData)
If Empty(Alltrim(Nvl(toPartener.firma, '')))
lcCheieSes = 'C' + NormalizeazaCUI(m.lcCod) + '_' + Dtos(m.ldData)
If Type('goCacheANAF_Sesiune') = 'O' And goCacheANAF_Sesiune.GetKey(m.lcCheieSes) > 0
goCacheANAF_Sesiune.Remove(m.lcCheieSes)
Endif
This.cCheieVerificata = ''
This.VerificaANAFAutomat(m.toForm, .F.)
Return This.cStare
Endif
lcRO = Left(Upper(Alltrim(m.lcCod)), 2) == 'RO'
loStare = Createobject('Empty')
Addproperty(loStare, 'cCui', NormalizeazaCUI(m.lcCod))
Addproperty(loStare, 'lAreRO', m.lcRO)
Addproperty(loStare, 'lPlatitorANAF', toPartener.platitortvamfin)
Addproperty(loStare, 'lInactivANAF', toPartener.inactiv)
Addproperty(loStare, 'cDenumireANAF', Alltrim(toPartener.firma))
Addproperty(loStare, 'lRadiatANAF', .F.)
Addproperty(loStare, 'dRadiereANAF', {})
Addproperty(loStare, 'lDiscordanta', (toPartener.platitortvamfin <> m.lcRO) Or toPartener.inactiv)
Addproperty(loStare, 'dInceputScpTVA', Nvl(toPartener.data_inceput_scptva, {}))
Addproperty(loStare, 'dSfarsitScpTVA', Nvl(toPartener.data_sfarsit_scptva, {}))
Addproperty(loStare, 'dAnulareScpTVA', Nvl(toPartener.data_anul_imp_scptva, {}))
Addproperty(loStare, 'cMesajScpTVA', Alltrim(Nvl(toPartener.stare, '')))
Addproperty(loStare, 'lTvaIncasareANAF', Nvl(toPartener.tvaincasare, .F.))
Addproperty(loStare, 'dInceputTvaInc', Nvl(toPartener.data_inceput_tvainc, {}))
Addproperty(loStare, 'dSfarsitTvaInc', Nvl(toPartener.data_sfarsit_tvainc, {}))
Addproperty(loStare, 'dData', m.ldData)
Addproperty(loStare, 'cSursa', Iif(Empty(Alltrim(Nvl(toPartener.sursa, ''))), 'ANAF', Alltrim(toPartener.sursa)))
Addproperty(loStare, 'dDataSursa', Nvl(toPartener.data_sursa, {}))
loRez = This.ClasificaRezultat(m.loStare, .F., '', m.lcCod, m.ldData)
This.AplicaIndicatorANAF(m.toForm, loRez.cStare, loRez.cTooltip, loRez.lGri)
This.cCheieVerificata = m.lcCheie
Return loRez.cStare
Endfunc
Procedure PuneFiltruCui
Lparameters toHash, tcCui
Local lcFiltru, lnNr
If Empty(m.tcCui) Or !Empty(Chrtran(m.tcCui, '0123456789', ''))
Return
Endif
lcFiltru = "LTRIM(UPPER(B.COD_FISCAL), 'RO ') = '" + m.tcCui + "'"
lnNr = 0
goExecutor.oSelect2Value('select count(*) from nom_parteneri b where b.sters = 0 and b.inactiv = 0 and ' + m.lcFiltru, @lnNr)
If Nvl(m.lnNr, 0) > 1
toHash.SetValue('cFiltruOrig', m.lcFiltru)
Endif
Endproc
Function CalculeazaStare
Lparameters toForm, tcCod, tdData, tcCheie, tlIstoricIntai
Local loStare, llNecesita, llNegasit, lcClasa, loRez, lnT0
If Isnull(This.oNegasit)
This.oNegasit = Createobject('Collection')
Endif
If This.oNegasit.GetKey(m.tcCheie) > 0
Return This.oNegasit.Item(m.tcCheie)
Endif
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', 'Se verifica la ANAF...')
This.SeteazaCursor(m.toForm, 11)
lnT0 = Seconds()
Store .F. To llNecesita, llNegasit
lcClasa = ''
loStare = ANAF_StarePartener(m.tcCod, m.tdData, .F., @llNecesita, @llNegasit, @lcClasa, 0, m.tlIstoricIntai)
loRez = This.ClasificaRezultat(m.loStare, m.llNegasit, m.lcClasa, m.tcCod, m.tdData)
If m.llNegasit
This.oNegasit.Add(m.loRez, m.tcCheie)
Endif
This.Logheaza('stare=' + loRez.cStare + ' cod=' + m.tcCod + ' data=' + Dtoc(m.tdData) + ;
' sursa=' + Iif(Isnull(m.loStare), '-', loStare.cSursa) + ' data_sursa=' + Iif(Isnull(m.loStare), '-', Dtoc(loStare.dDataSursa)) + ;
' ms=' + Transform(Int((Seconds() - m.lnT0) * 1000)))
Return m.loRez
Endfunc
Function ClasificaRezultat
Lparameters toStare, tlNegasit, tcClasaEsec, tcCod, tdData
Local lcStare, lcTip, llGri, loRez
lcStare = 'NEUTRU'
llGri = .F.
lcTip = 'Verificare'
Do Case
Case Isnull(m.toStare) And m.tlNegasit
lcStare = 'ATENTIE'
lcTip = 'ATENTIE: cod fiscal inexistent la ANAF (' + Alltrim(Iif(Left(Upper(Alltrim(m.tcCod)), 2) == 'RO', Substr(Alltrim(m.tcCod), 3), m.tcCod)) + ') - verificati daca e client strain. Click/Enter = detalii'
Case Isnull(m.toStare)
Do Case
Case Inlist(m.tcClasaEsec, 'FARA_RASPUNS', 'RASPUNS_NEINTELES')
lcStare = 'NECUNOSCUT'
llGri = .T.
lcTip = 'ANAF indisponibil, fara istoric - verificati manual'
Case m.tcClasaEsec == 'CNP'
lcTip = 'Persoana fizica (CNP) - fara verificare ANAF'
Case m.tcClasaEsec == 'COD_NENUMERIC'
lcTip = 'Cod fiscal nenumeric - nu se poate verifica la ANAF'
Case m.tcClasaEsec == 'SE_TESTEAZA'
lcTip = 'Verificarea ANAF se testeaza - reincercati'
Endcase
Case m.toStare.cSursa == 'CACHE_INDISP' And !Empty(m.toStare.dDataSursa) And m.toStare.dDataSursa < m.tdData
llGri = .T.
If m.toStare.lDiscordanta
lcStare = 'ATENTIE'
lcTip = 'ATENTIE: ANAF indisponibil; ultima verificare din ' + Dtoc(m.toStare.dDataSursa) + ', anterioara facturii: ' + ;
This.MotiveDiscordanta(m.toStare) + '. Click/Enter = detalii'
Else
lcStare = 'NECUNOSCUT'
lcTip = 'ANAF indisponibil; ultima verificare din ' + Dtoc(m.toStare.dDataSursa) + ', anterioara facturii: ' + ;
Iif(m.toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA')
Endif
Case m.toStare.lDiscordanta
lcStare = 'ATENTIE'
lcTip = 'ATENTIE: ' + This.MotiveDiscordanta(m.toStare) + '. ' + This.TextAnafStare(m.toStare) + ' Click/Enter = detalii'
Otherwise
lcStare = 'OK'
lcTip = 'OK - ' + This.TextAnafStare(m.toStare) + Iif(m.toStare.cSursa == 'ANAF', '', ' Radierea nu se verifica din istoric.')
Endcase
loRez = Createobject('Empty')
Addproperty(loRez, 'cStare', m.lcStare)
Addproperty(loRez, 'cTooltip', m.lcTip)
Addproperty(loRez, 'lGri', m.llGri)
Return m.loRez
Endfunc
Function MotiveDiscordanta
Lparameters toStare
Local lcMotiv
lcMotiv = ''
If m.toStare.lAreRO And !m.toStare.lPlatitorANAF
lcMotiv = 'cod cu RO, dar ANAF il da neplatitor TVA la data facturii'
Endif
If !m.toStare.lAreRO And m.toStare.lPlatitorANAF
lcMotiv = 'cod fara RO, dar ANAF il da platitor TVA la data facturii'
Endif
If m.toStare.lInactivANAF
lcMotiv = m.lcMotiv + Iif(Empty(m.lcMotiv), '', '; ') + 'client inactiv la ANAF'
Endif
If m.toStare.lRadiatANAF
lcMotiv = m.lcMotiv + Iif(Empty(m.lcMotiv), '', '; ') + 'client radiat la ANAF din ' + Dtoc(m.toStare.dRadiereANAF)
Endif
Return m.lcMotiv
Endfunc
Procedure AplicaIndicatorANAF
Lparameters toForm, tcStare, tcTooltip, tlGri
Local loBtn, lcTip, lcUp, lcDown, lcPic
lcTip = Left(m.tcTooltip, 255)
This.cStare = m.tcStare
This.cTooltip = m.lcTip
This.ColoreazaCodFiscal(m.toForm, m.tcStare)
If Vartype(m.toForm) <> 'O' Or !Pemstatus(m.toForm, 'But_verifica1', 5)
Return
Endif
loBtn = toForm.But_verifica1
If !Pemstatus(m.loBtn, 'cPicOrig', 5)
Addproperty(m.loBtn, 'cPicOrig', m.loBtn.Picture)
Addproperty(m.loBtn, 'cUpOrig', m.loBtn.cpictureup)
Addproperty(m.loBtn, 'cDownOrig', m.loBtn.cpicturedown)
Endif
Do Case
Case m.tcStare == 'NECUNOSCUT' Or (Vartype(m.tlGri) = 'L' And m.tlGri)
lcUp = 'verificare1_gri.bmp'
lcDown = 'verificare2_gri.bmp'
lcPic = m.lcUp
Case m.tcStare == 'OK'
lcUp = 'verificare1_verde.bmp'
lcDown = 'verificare2_verde.bmp'
lcPic = m.lcUp
Case m.tcStare == 'ATENTIE'
lcUp = 'verificare1_rosu.bmp'
lcDown = 'verificare2_rosu.bmp'
lcPic = m.lcUp
Otherwise
lcUp = m.loBtn.cUpOrig
lcDown = m.loBtn.cDownOrig
lcPic = m.loBtn.cPicOrig
Endcase
This.PuneProprietate(m.loBtn, 'cpictureup', m.lcUp)
This.PuneProprietate(m.loBtn, 'cpicturedown', m.lcDown)
This.PuneProprietate(m.loBtn, 'Picture', m.lcPic)
This.PuneProprietate(m.loBtn, 'ToolTipText', m.lcTip)
This.PuneProprietate(m.loBtn, 'StatusBarText', m.lcTip)
If Pemstatus(m.loBtn, 'Refresh', 5)
loBtn.Refresh()
Endif
Endproc
Procedure ColoreazaCodFiscal
Lparameters toForm, tcStare
Local loTxt, lnCuloare
If Vartype(m.toForm) <> 'O' Or !Pemstatus(m.toForm, 'txtCodFiscal', 5)
Return
Endif
loTxt = toForm.txtCodFiscal
If !Pemstatus(m.loTxt, 'ForeColor', 5) Or !Pemstatus(m.loTxt, 'DisabledForeColor', 5)
Return
Endif
If !Pemstatus(m.loTxt, 'nForeOrig', 5)
Addproperty(m.loTxt, 'nForeOrig', m.loTxt.ForeColor)
Addproperty(m.loTxt, 'nDisOrig', m.loTxt.DisabledForeColor)
Endif
Do Case
Case m.tcStare == 'OK'
loTxt.ForeColor = Rgb(0, 110, 0)
loTxt.DisabledForeColor = Rgb(0, 110, 0)
Case m.tcStare == 'ATENTIE'
loTxt.ForeColor = Rgb(192, 0, 0)
loTxt.DisabledForeColor = Rgb(192, 0, 0)
Otherwise
loTxt.ForeColor = m.loTxt.nForeOrig
loTxt.DisabledForeColor = m.loTxt.nDisOrig
Endcase
Endproc
Procedure PuneProprietate
Lparameters toObj, tcNume, tuValoare
If Pemstatus(m.toObj, m.tcNume, 5)
toObj.&tcNume = m.tuValoare
Endif
Endproc
Procedure SeteazaCursor
Lparameters toForm, tnCursor
If Vartype(m.toForm) = 'O' And Pemstatus(m.toForm, 'MousePointer', 5)
toForm.MousePointer = m.tnCursor
Endif
Endproc
Procedure Logheaza
Lparameters tcText
If Type('goLog') = 'O'
goLog.Log(m.tcText, 'anaf_verif_factura')
Endif
Endproc
Function MotivNeutru
Lparameters tcCod, tdData
Do Case
Case !('OCAUTARE' $ Upper(Set('Procedure'))) Or ANAF_NivelVerificare() = 0
Return 'Verificare'
Case Type('poDate.lEditare') = 'L' And poDate.lEditare
Return 'Verificare'
Case Type('poDate.tip') = 'N' And Inlist(poDate.tip, 23, 25, 41)
Return 'Gestiune - fara verificare ANAF'
Case Empty(m.tcCod)
Return 'Verificare'
Case Empty(m.tdData)
Return 'Completati data facturii'
Endcase
Return ''
Endfunc
Function CodInvalid
Lparameters tcCod
Local lcCui
lcCui = NormalizeazaCUI(m.tcCod)
If Empty(m.lcCui)
Return .F.
Endif
If Len(m.lcCui) = 13 And Empty(Chrtran(m.lcCui, '0123456789', ''))
Return !Empty(ANAF_ValidareCod(m.tcCod, 2))
Endif
Return !Empty(ANAF_ValidareCod(m.tcCod, 1)) Or (Len(m.lcCui) < 2 And Empty(Chrtran(m.lcCui, '0123456789', '')))
Endfunc
Function TextAnafStare
Lparameters toStare
If Isnull(This.oTextAnaf)
This.oTextAnaf = Createobject('anaf_verif_cautare')
Endif
Return This.oTextAnaf.TextAnaf(m.toStare, .F., 24)
Endfunc
Function CodFiscalClient
Local lcCod, lnSelect
Private pnIdClientAnaf
lcCod = Iif(Type('poDate.cod_fiscal') $ 'CX', Alltrim(Nvl(poDate.cod_fiscal, '')), '')
If Empty(m.lcCod) And Type('poDate.id_client') = 'N' And Type('goExecutor') = 'O'
pnIdClientAnaf = poDate.id_client
If !Empty(pnIdClientAnaf)
lnSelect = Select()
Use In (Select('crsCodFiscalAnaf'))
If goExecutor.oExecute('select cod_fiscal from nom_parteneri where id_part = ?pnIdClientAnaf', 'crsCodFiscalAnaf') >= 0 And Used('crsCodFiscalAnaf')
lcCod = Alltrim(Nvl(crsCodFiscalAnaf.cod_fiscal, ''))
Endif
Use In (Select('crsCodFiscalAnaf'))
If Used(m.lnSelect)
Select (m.lnSelect)
Endif
Endif
Endif
Return m.lcCod
Endfunc
Enddefine