Files
vfp_roaauto/COMUN/programe/makexmlfacturaelectronica.prg

1158 lines
44 KiB
Plaintext
Raw Blame History

PROCEDURE makexmlfacturaelectronica
LPARAMETERS plrectificativa, ;
mlnumefisier, ;
plcalefacturi
LOCAL mtipfactura, i, mlinii, ;
mliniireducere, ;
mliniistornare, mid, ;
maccize, mtotalcharges, ;
mtotalallowances, mmoneda, ;
minvoicetype, mcodfiscal, ;
mcomanda, mtara, mtiptert, ;
mtiptvacurent, mtvai, ;
mincasat, mindicetva, ;
mexpliesirilot
STORE 1 TO i
STORE 0 TO maccize, ;
mliniireducere, ;
mtotalcharges, ;
mtotalallowances, mtvai, ;
mincasat
STORE "" TO mexpliesirilot
IF EMPTY(pcodfiscal)
MESSAGEBOX( ;
"Completati codul fiscal al societatii, in ecranul 'Configurare societati'.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
IF .NOT. USED("SOC_SUPL")
myot("SOC_SUPL","SOC_SUPL", ;
1)
ENDIF
UPDATE C_IES_FORM SET indice = ;
IIF(INLIST(cont, '667', ;
'709', '609'), -1, 0)
UPDATE C_IES_FORM SET protva = 0 ;
WHERE INLIST(tip, "U", ;
"H")
DELETE FROM C_IES_FORM WHERE ;
EMPTY(id_u)
mid = c_id_tip.id_iesire
IF pisfb
SQLEXEC(gnconnhandle, ;
"SELECT CONTRACTE.nr, CONTRACTE.data,CONTRACTE_TIP.recurenta FROM CONTRACTE INNER JOIN CONTR_DET ON CONTRACTE.id = CONTR_DET.id JOIN CONTRACTE_TIP ON CONTRACTE.cod_contr=CONTRACTE_TIP.cod WHERE id_fact=?mId", ;
"C_CONTRACT_FACTURA")
ELSE
SELECT contracte.nr, ;
contracte.data, ;
contracte_tip.recurenta ;
FROM CONTRACTE INNER ;
JOIN CONTR_DET ON ;
contracte.id = ;
contr_det.id INNER ;
JOIN CONTRACTE_TIP ON ;
contracte.cod_contr = ;
contracte_tip.cod ;
WHERE id_fact = mid ;
INTO CURSOR ;
C_CONTRACT_FACTURA
ENDIF
SELECT protva, ROUND(SUM(valoare) * ;
protva / 100, 2) AS tva, ;
SUM(valoare) AS valoare, ;
' ' AS tip, REPLICATE(' ', ;
30) AS explicatie, ;
REPLICATE(' ', 30) AS ;
motiv FROM C_IES_FORM ;
GROUP BY protva INTO ;
CURSOR C_TVA_FACTURA ;
READWRITE
SELECT c_tva_factura
SUM tva TO mtotaltva
INDEX ON protva TAG procent
IF pisfb
SQLEXEC(gnconnhandle, ;
"SELECT DISTINCT ies_det.id_u,com_m.nr,com_m.data FROM iesiri INNER JOIN ies_det ON iesiri.id_iesire=ies_det.id_iesire" + ;
" JOIN FACT_COMENZI ON ies_det.id_u=fact_comenzi.id_factura JOIN COMENZI ON FACT_COMENZI.id_comanda = comenzi.id_com JOIN com_m ON comenzi.id=com_m.id WHERE IESIRI.id_iesire=?mId", ;
"C_COMENZI_FACTURA")
ELSE
SELECT DISTINCT ies_det.id_u, ;
com_m.nr, com_m.data ;
FROM iesiri INNER ;
JOIN ies_det ON ;
iesiri.id_iesire = ;
ies_det.id_iesire ;
INNER JOIN ;
FACT_COMENZI ON ;
ies_det.id_u = ;
fact_comenzi.id_factura ;
INNER JOIN COMENZI ON ;
fact_comenzi.id_comanda = ;
comenzi.id_com INNER ;
JOIN com_m ON ;
comenzi.id = com_m.id ;
WHERE ;
iesiri.id_iesire = ;
mid INTO CURSOR ;
C_COMENZI_FACTURA
ENDIF
SELECT DISTINCT nr, data FROM ;
C_COMENZI_FACTURA INTO ;
CURSOR ;
C_COMENZI_INDIVIDUALE
IF RECCOUNT("C_COMENZI_INDIVIDUALE") = ;
1
mcomanda = ALLTRIM(c_comenzi_individuale.nr) + ;
"/" + ;
ALLTRIM(DTOC(c_comenzi_individuale.data))
ELSE
mcomanda = ""
ENDIF
IF pisfb
SQLEXEC(gnconnhandle, ;
"SELECT SUM(suma) AS suma FROM NOTE_FACTURI WHERE id_factura=?mId", ;
"C_FB")
IF RECCOUNT("C_FB") > 0 ;
.AND. .NOT. ;
ISNULL(c_fb.suma)
mincasat = c_fb.suma
ENDIF
ELSE
SELECT SUM(suma) FROM ;
NOTE_FACTURI WHERE ;
id_factura = mid INTO ;
ARRAY ;
atestincasareefactura
IF _TALLY > 0 .AND. .NOT. ;
ISNULL(atestincasareefactura)
mincasat = atestincasareefactura(1)
ENDIF
ENDIF
SELECT c_ies_form
mmoneda = ALLTRIM(c_ies_form.moneda)
mcodfiscal = c_ies_form.cod_fiscal
mtipfactura = c_ies_form.tip
mtara = c_ies_form.tara
mtiptert = c_ies_form.tip_tert
mtiptvacurent = gettva(c_ies_form.data)
mtvai = c_ies_form.tvai
minf_suplm = c_ies_form.inf_suplm
IF .NOT. INLIST(mtipfactura, ' ', ;
'S', 'M', 'U', 'H')
MESSAGEBOX( ;
"Pentru acest document nu se genereaza factura electronica momentan.", ;
64, "Atentie...")
RETURN
ENDIF
COUNT TO mlinii
COUNT FOR indice = -1 TO ;
mliniireducere
COUNT FOR indice >= 0 .AND. ;
valoare < 0 TO ;
mliniistornare
COUNT FOR cont = '419' TO ;
mnrliniiavans
SUM ABS(valoare) TO mdiscounturi ;
FOR indice = -1
mtotalallowances = mtotalallowances + ;
mdiscounturi
LOCATE
SELECT c_tva_factura
SCAN
DO CASE
CASE mtipfactura = 'T' ;
.OR. mtiptert = ;
'I'
REPLACE tip WITH ;
'AE', ;
explicatie ;
WITH ;
'Taxare inversa', ;
motiv WITH ;
'VATEX-EU-AE'
CASE mtipfactura = 'S'
REPLACE tip WITH ;
'E', ;
explicatie ;
WITH ;
'Scutit cu drept de deducere'
CASE EMPTY(mtipfactura) ;
.AND. ;
c_tva_factura.protva = ;
0
IF mtiptvacurent < ;
3
REPLACE tip ;
WITH ;
'Z'
ELSE
REPLACE tip ;
WITH ;
'Z'
ENDIF
CASE mtipfactura = 'H'
REPLACE tip WITH ;
'E', ;
explicatie ;
WITH ;
'Bunuri second-hand', ;
motiv WITH ;
'VATEX-EU-F'
CASE mtipfactura = 'U'
REPLACE tip WITH ;
'E', ;
explicatie ;
WITH ;
'Regim special agentii de turism', ;
motiv WITH ;
'VATEX-EU-D'
OTHERWISE
REPLACE tip WITH ;
'S'
ENDCASE
ENDSCAN
IF c_ies_form.accize > 0
maccize = c_ies_form.accize
mtotalcharges = mtotalcharges + ;
maccize
SELECT COUNT(*) FROM ;
C_TVA_FACTURA WHERE ;
tip = 'Z' INTO ARRAY ;
agetcotaz
IF _TALLY > 0 .AND. .NOT. ;
ISNULL(agetcotaz(1)) ;
.AND. agetcotaz(1) > 0
UPDATE C_TVA_FACTURA ;
SET valoare = ;
valoare + ;
maccize WHERE ;
tip = 'Z'
ELSE
INSERT INTO ;
C_TVA_FACTURA ;
(protva, tva, ;
valoare, tip, ;
explicatie, ;
motiv) VALUES (0, ;
0, maccize, 'Z', ;
'Acciza', '')
ENDIF
ENDIF
SELECT c_ies_form
LOCATE
oxml = CREATEOBJECT("msxml2.DOMDocument")
oxml.appendchild(oxml.createnode("PROCESSINGINSTRUCTION", ;
"xml",""))
oinvoice = oxml.appendchild(oxml.createelement("Invoice"))
oinvoice.setattribute("xmlns:cbc", ;
"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" ;
)
oinvoice.setattribute("xmlns:udt", ;
"urn:oasis:names:specification:ubl:schema:xsd:UnqualifiedDataTypes-2" ;
)
oinvoice.setattribute("xmlns:cac", ;
"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" ;
)
oinvoice.setattribute("xmlns:ccts", ;
"urn:un:unece:uncefact:documentation:2")
oinvoice.setattribute("xmlns", ;
"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" ;
)
oinvoice.setattribute("xmlns:qdt", ;
"urn:oasis:names:specification:ubl:schema:xsd:QualifiedDataTypes-2" ;
)
oinvoice.setattribute("xsi:schemaLocation", ;
"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 ../../UBL-2.1(1)/xsd/maindoc/UBL-Invoice-2.1.xsd" ;
)
oinvoice.setattribute("xmlns:xsi", ;
"http://www.w3.org/2001/XMLSchema-instance" ;
)
oinvoice.appendchild(oxml.createelement("cbc:UBLVersionID"))
oinvoice.lastchild.text = "2.1"
oinvoice.appendchild(oxml.createelement("cbc:CustomizationID"))
oinvoice.lastchild.text = "urn:cen.eu:en16931:2017#compliant#urn:efactura.mfinante.ro:CIUS-RO:1.0.0"
oinvoice.appendchild(oxml.createelement("cbc:ID"))
oinvoice.lastchild.text = ALLTRIM(c_ies_form.nr)
oinvoice.appendchild(oxml.createelement("cbc:IssueDate"))
oinvoice.lastchild.text = ALLTRIM(STR(YEAR(c_ies_form.data))) + ;
"-" + ;
PADL(ALLTRIM(STR(MONTH(c_ies_form.data))), ;
2, "0") + ;
"-" + ;
PADL(ALLTRIM(STR(DAY(c_ies_form.data))), ;
2, ;
"0")
IF .NOT. ;
EMPTY(c_ies_form.scadent) ;
.AND. .NOT. ;
ISNULL(c_ies_form.scadent) ;
.AND. c_ies_form.scadent <> ;
{}
oinvoice.appendchild(oxml.createelement("cbc:DueDate"))
oinvoice.lastchild.text = ALLTRIM(STR(YEAR(c_ies_form.scadent))) + ;
"-" + ;
PADL(ALLTRIM(STR(MONTH(c_ies_form.scadent))), ;
2, ;
"0") + ;
"-" + ;
PADL(ALLTRIM(STR(DAY(c_ies_form.scadent))), ;
2, ;
"0")
ENDIF
minvoicetype = ""
DO CASE
CASE plrectificativa = 1
minvoicetype = "384"
CASE ALLTRIM(getnrfromstring(mcodfiscal)) == ;
ALLTRIM(pcodfiscal)
minvoicetype = "389"
CASE mliniistornare = mlinii
minvoicetype = "381"
OTHERWISE
minvoicetype = "380"
ENDCASE
oinvoice.appendchild(oxml.createelement("cbc:InvoiceTypeCode"))
oinvoice.lastchild.text = minvoicetype
IF mtvai = 1
oinvoice.appendchild(oxml.createelement("cbc:Note"))
oinvoice.lastchild.text = "TVA la incasare"
ENDIF
IF .NOT. EMPTY(mtipfactura = 'T' ;
.OR. mtiptert = 'I')
oinvoice.appendchild(oxml.createelement("cbc:Note"))
oinvoice.lastchild.text = "Taxare inversa"
ENDIF
IF .NOT. ;
EMPTY(c_ies_form.inf_suplm)
oinvoice.appendchild(oxml.createelement("cbc:Note"))
oinvoice.lastchild.text = ALLTRIM(minf_suplm)
ENDIF
oinvoice.appendchild(oxml.createelement("cbc:DocumentCurrencyCode"))
IF pisexport
oinvoice.lastchild.text = ALLTRIM(moneda)
ELSE
oinvoice.lastchild.text = "RON"
ENDIF
oinvoice.appendchild(oxml.createelement("cbc:TaxCurrencyCode"))
oinvoice.lastchild.text = "RON"
IF .NOT. EMPTY(mcomanda)
oorderreference = oinvoice.appendchild(oxml.createelement("cac:OrderReference"))
oorderreference.appendchild(oxml.createelement("cbc:ID"))
oorderreference.lastchild.text = ;
mcomanda
ENDIF
IF RECCOUNT("C_CONTRACT_FACTURA") > ;
0
ocontractreference = oinvoice.appendchild(oxml.createelement("cac:ContractDocumentReference"))
ocontractreference.appendchild(oxml.createelement("cbc:ID"))
ocontractreference.lastchild.text = ;
ALLTRIM(c_contract_factura.nr) + ;
"/" + ;
ALLTRIM(DTOC(c_contract_factura.data))
ENDIF
osupplier = oinvoice.appendchild(oxml.createelement("cac:AccountingSupplierParty"))
oparty = osupplier.appendchild(oxml.createelement("cac:Party"))
IF EMPTY(pcs.email)
MESSAGEBOX( ;
"Completati adresa de email a societatii in ecranul 'Configurare societati'." + ;
CHR(13) + ;
"Aceasta este necesara pentru primirea raspunsului facturii electronice.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
oendpointid = oparty.appendchild(oxml.createelement("cbc:EndpointID"))
oendpointid.setattribute("schemeID", ;
"EM")
oendpointid.text = ALLTRIM(pcs.email)
IF .NOT. ;
EMPTY(c_ies_form.cod_fiscal)
opartyidentification = oparty.appendchild(oxml.createelement("cac:PartyIdentification"))
oidparty = opartyidentification.appendchild(oxml.createelement("cbc:ID"))
oidparty.text = pcodfiscal
ENDIF
oadresa = oparty.appendchild(oxml.createelement("cac:PostalAddress"))
IF EMPTY(pcs.strada)
MESSAGEBOX( ;
"Completati strada in ecranul 'Configurare societati'.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
oadresa.appendchild(oxml.createelement("cbc:StreetName"))
oadresa.lastchild.text = ALLTRIM(pcs.strada)
IF EMPTY(pcs.localitate)
MESSAGEBOX( ;
"Completati localitatea in ecranul 'Configurare societati'.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
IF EMPTY(pcs.judet)
MESSAGEBOX( ;
"Alegeti judetul in ecranul 'Configurare societati'.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ELSE
IF pcs.judet = "BUCURESTI" ;
.AND. EMPTY(pcs.sect)
MESSAGEBOX( ;
"Completati sectorul in ecranul 'Configurare societati'.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
ENDIF
oadresa.appendchild(oxml.createelement("cbc:CityName"))
IF pcs.judet = "B "
oadresa.lastchild.text = "SECTOR " + ;
ALLTRIM(pcs.sect)
ELSE
oadresa.lastchild.text = ALLTRIM(UPPER(pcs.localitate))
ENDIF
SELECT cod FROM FREETAB\JUDETE ;
WHERE denjud = pcs.judet ;
INTO ARRAY agetjudadresa
mcodjudet = ""
IF _TALLY > 0 .AND. .NOT. ;
ISNULL(agetjudadresa(1))
mcodjudet = agetjudadresa(1)
ENDIF
oadresa.appendchild(oxml.createelement("cbc:CountrySubentity"))
oadresa.lastchild.text = "RO-" + ;
ALLTRIM(mcodjudet)
otara = oadresa.appendchild(oxml.createelement("cac:Country"))
otara.appendchild(oxml.createelement("cbc:IdentificationCode"))
otara.lastchild.text = "RO"
otaxe = oparty.appendchild(oxml.createelement("cac:PartyTaxScheme"))
otaxe.appendchild(oxml.createelement("cbc:CompanyID"))
otaxe.lastchild.text = "RO" + ;
pcodfiscal
oschemataxe = otaxe.appendchild(oxml.createelement("cac:TaxScheme"))
oschemataxe.appendchild(oxml.createelement("cbc:ID"))
oschemataxe.lastchild.text = "VAT"
oformalegala = oparty.appendchild(oxml.createelement("cac:PartyLegalEntity"))
oformalegala.appendchild(oxml.createelement("cbc:RegistrationName"))
oformalegala.lastchild.text = ALLTRIM(pdensoc)
IF .NOT. EMPTY(pregcom)
oidentificatorformalegala = oformalegala.appendchild(oxml.createelement("cbc:CompanyID"))
oidentificatorformalegala.text = ;
ALLTRIM(pregcom)
ENDIF
mdensoc = UPPER(pdensoc) + " "
mprefix = ""
msufix = ""
DO CASE
CASE mdensoc = "S.C. " .OR. ;
mdensoc = "SC "
mprefix = "Societate comerciala"
CASE mdensoc = "P.F. " .OR. ;
mdensoc = "PF "
mprefix = "Persoana fizica"
CASE mdensoc = "P.F.A. " ;
.OR. mdensoc = "PFA "
mprefix = "Persoana fizica autorizata"
CASE mdensoc = "A.F. " .OR. ;
mdensoc = "AF "
mprefix = "Asociatie familiala"
ENDCASE
DO CASE
CASE " S.R.L." $ mdensoc ;
.OR. " SRL " $ mdensoc
msufix = "Societate cu raspundere limitata"
CASE " S.A." $ mdensoc .OR. ;
" SA " $ mdensoc
msufix = "Societate pe actiuni"
ENDCASE
IF .NOT. EMPTY(mprefix)
oformalegala.appendchild(oxml.createelement("cbc:CompanyLegalForm"))
oformalegala.lastchild.text = ;
ALLTRIM(mprefix)
ENDIF
IF .NOT. EMPTY(pcs.numea) .OR. ;
.NOT. EMPTY(pcs.prea) .OR. ;
.NOT. EMPTY(pcs.email) .OR. ;
.NOT. EMPTY(pcs.telefon)
ocontact = oparty.appendchild(oxml.createelement("cac:Contact"))
IF .NOT. EMPTY(pcs.numea) ;
.OR. .NOT. ;
EMPTY(pcs.prea)
ocontact.appendchild(oxml.createelement("cbc:Name"))
ocontact.lastchild.text = ;
ALLTRIM(pcs.numea) + ;
" " + ;
ALLTRIM(pcs.prea)
ENDIF
IF .NOT. EMPTY(pcs.telefon)
ocontact.appendchild(oxml.createelement("cbc:Telephone"))
ocontact.lastchild.text = ;
ALLTRIM(pcs.telefon)
ENDIF
IF .NOT. EMPTY(pcs.email)
ocontact.appendchild(oxml.createelement("cbc:ElectronicMail"))
ocontact.lastchild.text = ;
ALLTRIM(pcs.email)
ENDIF
ENDIF
SELECT c_ies_form
LOCATE
ocustomer = oinvoice.appendchild(oxml.createelement("cac:AccountingCustomerParty"))
opartys = ocustomer.appendchild(oxml.createelement("cac:Party"))
IF .NOT. EMPTY(c_ies_form.email)
oendpointid = opartys.appendchild(oxml.createelement("cbc:EndpointID"))
oendpointid.setattribute("schemeID", ;
"EM")
oendpointid.text = ALLTRIM(c_ies_form.email)
ENDIF
IF .NOT. ;
EMPTY(c_ies_form.cod_fiscal) ;
.AND. ;
verifcf(ALLTRIM(c_ies_form.cod_fiscal))
opartyidentifications = opartys.appendchild(oxml.createelement("cac:PartyIdentification"))
oidpartys = opartyidentifications.appendchild(oxml.createelement("cbc:ID"))
oidpartys.text = ALLTRIM(c_ies_form.cod_fiscal)
ENDIF
oadresas = opartys.appendchild(oxml.createelement("cac:PostalAddress"))
IF EMPTY(c_ies_form.adresa)
MESSAGEBOX( ;
"Completati adresa clientului.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
oadresas.appendchild(oxml.createelement("cbc:StreetName"))
oadresas.lastchild.text = ALLTRIM(c_ies_form.adresa)
IF EMPTY(c_ies_form.localitate)
MESSAGEBOX( ;
"Completati localitatea in adresa clientului.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
oadresas.appendchild(oxml.createelement("cbc:CityName"))
IF EMPTY(c_ies_form.judet)
MESSAGEBOX( ;
"Alegeti judetul clientului.", ;
48, ;
"Date incomplete..." ;
)
RETURN
ENDIF
IF c_ies_form.judet = "B "
msector = ""
IF .NOT. "SECTOR" $ ;
UPPER(c_ies_form.localitate)
MESSAGEBOX( ;
"Alegeti un sector valid pentru Bucuresti in adresa clientului.", ;
48, ;
"Atentie...")
RETURN
ENDIF
oadresas.lastchild.text = "SECTOR " + ;
RIGHT(ALLTRIM(c_ies_form.localitate), ;
1)
ELSE
oadresas.lastchild.text = ALLTRIM(c_ies_form.localitate)
ENDIF
oadresas.appendchild(oxml.createelement("cbc:CountrySubentity"))
oadresas.lastchild.text = ALLTRIM(c_ies_form.judet)
otaras = oadresas.appendchild(oxml.createelement("cac:Country"))
otaras.appendchild(oxml.createelement("cbc:IdentificationCode"))
otaras.lastchild.text = IIF( ;
.NOT. ;
EMPTY(c_ies_form.tara), ;
c_ies_form.tara, ;
"RO")
IF (EMPTY(c_ies_form.tara) .OR. ;
c_ies_form.tara = 'RO') .AND. ;
.NOT. ;
EMPTY(c_ies_form.cod_fiscal) ;
.AND. ;
verifcf(c_ies_form.cod_fiscal)
otaxes = opartys.appendchild(oxml.createelement("cac:PartyTaxScheme"))
otaxes.appendchild(oxml.createelement("cbc:CompanyID"))
otaxes.lastchild.text = "RO" + ;
getnrfromstring(c_ies_form.cod_fiscal)
oschemataxes = otaxes.appendchild(oxml.createelement("cac:TaxScheme"))
oschemataxes.appendchild(oxml.createelement("cbc:ID"))
oschemataxes.lastchild.text = ;
"VAT"
ENDIF
oformalegalas = opartys.appendchild(oxml.createelement("cac:PartyLegalEntity"))
oformalegalas.appendchild(oxml.createelement("cbc:RegistrationName"))
oformalegalas.lastchild.text = ALLTRIM(c_ies_form.den_cli)
IF .NOT. ;
EMPTY(c_ies_form.reg_com)
oidentificatorformalegalas = ;
oformalegalas.appendchild(oxml.createelement("cbc:CompanyID"))
oidentificatorformalegalas.text = ;
ALLTRIM(c_ies_form.reg_com)
ENDIF
mdensoc = ALLTRIM(c_ies_form.den_cli) + ;
" "
mprefix = ""
msufix = ""
DO CASE
CASE mdensoc = "S.C. " .OR. ;
mdensoc = "SC "
mprefix = "Societate comerciala"
CASE mdensoc = "P.F. " .OR. ;
mdensoc = "PF "
mprefix = "Persoana fizica"
CASE mdensoc = "P.F.A. " ;
.OR. mdensoc = "PFA "
mprefix = "Persoana fizica autorizata"
CASE mdensoc = "A.F. " .OR. ;
mdensoc = "AF "
mprefix = "Asociatie familiala"
ENDCASE
DO CASE
CASE " S.R.L." $ mdensoc ;
.OR. " SRL " $ mdensoc
msufix = "Societate cu raspundere limitata"
CASE " S.A." $ mdensoc .OR. ;
" SA " $ mdensoc
msufix = "Societate pe actiuni"
ENDCASE
IF .NOT. EMPTY(mprefix)
oformalegalas.appendchild(oxml.createelement("cbc:CompanyLegalForm"))
oformalegalas.lastchild.text = ;
mprefix
ENDIF
IF .NOT. EMPTY(c_ies_form.tel) ;
.OR. .NOT. ;
EMPTY(c_ies_form.email) .OR. ;
.NOT. ;
EMPTY(c_ies_form.delegat)
ocontacts = opartys.appendchild(oxml.createelement("cac:Contact"))
IF .NOT. ;
EMPTY(c_ies_form.delegat)
ocontacts.appendchild(oxml.createelement("cbc:Name"))
ocontacts.lastchild.text = ;
ALLTRIM(c_ies_form.delegat)
ENDIF
IF .NOT. ;
EMPTY(c_ies_form.tel)
ocontacts.appendchild(oxml.createelement("cbc:Telephone"))
ocontacts.lastchild.text = ;
ALLTRIM(c_ies_form.tel)
ENDIF
IF .NOT. ;
EMPTY(c_ies_form.email)
ocontacts.appendchild(oxml.createelement("cbc:ElectronicMail"))
ocontacts.lastchild.text = ;
ALLTRIM(c_ies_form.email)
ENDIF
ENDIF
IF USED("C_GET_ADRLIV") .AND. ;
RECCOUNT("C_GET_ADRLIV") > 0
SELECT c_get_adrliv
odelivery = oinvoice.appendchild(oxml.createelement("cac:Delivery"))
odeliverylocation = odelivery.appendchild(oxml.createelement("cac:DeliveryLocation"))
oadresalivrare = odeliverylocation.appendchild(oxml.createelement("cac:Address"))
oadresalivrare.appendchild(oxml.createelement("cbc:StreetName"))
oadresalivrare.lastchild.text = ;
ALLTRIM(c_get_adrliv.adresa)
oadresalivrare.appendchild(oxml.createelement("cbc:CityName"))
IF EMPTY(c_get_adrliv.localitate)
MESSAGEBOX( ;
"Alegeti localitatea din adresa de livrare.", ;
48, ;
"Atentie...")
RETURN
ENDIF
IF EMPTY(c_get_adrliv.judet)
MESSAGEBOX( ;
"Alegeti judetul din adresa de livrare.", ;
48, ;
"Atentie...")
RETURN
ENDIF
IF c_get_adrliv.judet = "B "
msector = ""
IF .NOT. "SECTOR" $ ;
UPPER(c_get_adrliv.localitate)
MESSAGEBOX( ;
"Alegeti un sector valid pentru Bucuresti, in adresa de livrare.", ;
48, ;
"Atentie...")
RETURN
ENDIF
oadresalivrare.lastchild.text = ;
"SECTOR " + ;
RIGHT(ALLTRIM(c_get_adrliv.localitate), ;
1)
ELSE
oadresalivrare.lastchild.text = ;
ALLTRIM(c_get_adrliv.localitate)
ENDIF
oadresalivrare.appendchild(oxml.createelement("cbc:CountrySubentity"))
oadresalivrare.lastchild.text = ;
"RO-" + ;
ALLTRIM(c_get_adrliv.judet)
otaralivrare = oadresalivrare.appendchild(oxml.createelement("cac:Country"))
otaralivrare.appendchild(oxml.createelement("cbc:IdentificationCode"))
otaralivrare.lastchild.text = ;
"RO"
ENDIF
SELECT c_ies_form
IF mliniireducere > 0
SELECT c_ies_form
SCAN FOR indice = -1
oallowancecharge = oinvoice.appendchild(oxml.createelement("cac:AllowanceCharge"))
oallowancecharge.appendchild(oxml.createelement("cbc:ChargeIndicator"))
oallowancecharge.lastchild.text = ;
"false"
oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReasonCode"))
oallowancecharge.lastchild.text = ;
"95"
oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReason"))
oallowancecharge.lastchild.text = ;
IIF(c_ies_form.cont = ;
"667", "Scont", ;
IIF(c_ies_form.cont = ;
"709", ;
"Reducere comerciala", ;
"Discount"))
odocallowancecharge = oallowancecharge.appendchild(oxml.createelement("cbc:Amount"))
odocallowancecharge.setattribute("currencyID", ;
mmoneda)
odocallowancecharge.text = ;
ALLTRIM(STR(ABS(c_ies_form.valoare), ;
15, 2))
otaxcategoryallowance = ;
oallowancecharge.appendchild(oxml.createelement("cac:TaxCategory"))
otaxcategoryallowance.appendchild(oxml.createelement("cbc:ID"))
SELECT tip FROM ;
C_TVA_FACTURA ;
WHERE protva = ;
c_ies_form.protva ;
INTO ARRAY ;
agettipcota
otaxcategoryallowance.lastchild.text = ;
ALLTRIM(agettipcota(1))
otaxcategoryallowance.appendchild(oxml.createelement("cbc:Percent"))
otaxcategoryallowance.lastchild.text = ;
ALLTRIM(STR(c_ies_form.protva, ;
2, 0))
otaxschemeallowance = otaxcategoryallowance.appendchild(oxml.createelement("cac:TaxScheme"))
otaxschemeallowance.appendchild(oxml.createelement("cbc:ID"))
otaxschemeallowance.lastchild.text = ;
"VAT"
ENDSCAN
ENDIF
IF maccize > 0
oallowancecharge = oinvoice.appendchild(oxml.createelement("cac:AllowanceCharge"))
oallowancecharge.appendchild(oxml.createelement("cbc:ChargeIndicator"))
oallowancecharge.lastchild.text = ;
"true"
oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReason"))
oallowancecharge.lastchild.text = ;
"Acciza"
odocallowancecharge = oallowancecharge.appendchild(oxml.createelement("cbc:Amount"))
odocallowancecharge.setattribute("currencyID", ;
mmoneda)
odocallowancecharge.text = ALLTRIM(STR(maccize, ;
15, ;
2))
otaxcategorycharge = oallowancecharge.appendchild(oxml.createelement("cac:TaxCategory"))
otaxcategorycharge.appendchild(oxml.createelement("cbc:ID"))
otaxcategorycharge.lastchild.text = ;
"Z"
otaxcategorycharge.appendchild(oxml.createelement("cbc:Percent"))
otaxcategorycharge.lastchild.text = ;
"0"
otaxschemeallowance = otaxcategorycharge.appendchild(oxml.createelement("cac:TaxScheme"))
otaxschemeallowance.appendchild(oxml.createelement("cbc:ID"))
otaxschemeallowance.lastchild.text = ;
"VAT"
ENDIF
IF RECCOUNT("C_TVA_FACTURA") > 0
otaxtotal = oinvoice.appendchild(oxml.createelement("cac:TaxTotal"))
mtvatotal = 000000000.00
IF .NOT. INLIST(mtipfactura, ;
"U", "H")
SELECT ROUND(SUM(valoare * ;
protva / 100), ;
2) AS tva FROM ;
C_TVA_FACTURA ;
GROUP BY protva ;
INTO CURSOR ;
C_COTE_T
SELECT c_cote_t
SUM (tva) TO mtvatotal
ELSE
SUM (tva) TO mtvatotal
ENDIF
ototal = otaxtotal.appendchild(oxml.createelement("cbc:TaxAmount"))
ototal.setattribute("currencyID", ;
mmoneda)
ototal.text = ALLTRIM(STR(mtvatotal, ;
15, 2))
SELECT c_tva_factura
SET ORDER TO procent
LOCATE
SCAN
otaxablesubtotal = otaxtotal.appendchild(oxml.createelement("cac:TaxSubtotal"))
osubtotal = otaxablesubtotal.appendchild(oxml.createelement("cbc:TaxableAmount"))
osubtotal.setattribute("currencyID", ;
mmoneda)
osubtotal.text = ALLTRIM(STR(c_tva_factura.valoare, ;
15, ;
2))
osubtotaltaxa = otaxablesubtotal.appendchild(oxml.createelement("cbc:TaxAmount"))
osubtotaltaxa.setattribute("currencyID", ;
mmoneda)
osubtotaltaxa.text = ALLTRIM(STR(c_tva_factura.tva, ;
15, ;
2))
otaxcategorytotals = otaxablesubtotal.appendchild(oxml.createelement("cac:TaxCategory"))
otaxcategorytotals.appendchild(oxml.createelement("cbc:ID"))
otaxcategorytotals.lastchild.text = ;
ALLTRIM(c_tva_factura.tip)
otaxcategorytotals.appendchild(oxml.createelement("cbc:Percent"))
otaxcategorytotals.lastchild.text = ;
ALLTRIM(STR(c_tva_factura.protva, ;
2, 0))
IF .NOT. ;
EMPTY(c_tva_factura.motiv)
otaxcategorytotals.appendchild(oxml.createelement("cbc:TaxExemptionReasonCode"))
otaxcategorytotals.lastchild.text = ;
ALLTRIM(c_tva_factura.motiv)
ENDIF
IF .NOT. ;
EMPTY(c_tva_factura.explicatie)
otaxcategorytotals.appendchild(oxml.createelement("cbc:TaxExemptionReason"))
otaxcategorytotals.lastchild.text = ;
ALLTRIM(c_tva_factura.explicatie)
ENDIF
otaxschemetotals = otaxcategorytotals.appendchild(oxml.createelement("cac:TaxScheme"))
otaxschemetotals.appendchild(oxml.createelement("cbc:ID"))
otaxschemetotals.lastchild.text = ;
"VAT"
ENDSCAN
SELECT c_ies_form
LOCATE
IF mmoneda <> "RON"
otaxtotal = oinvoice.appendchild(oxml.createelement("cac:TaxTotal"))
ototal = otaxtotal.appendchild(oxml.createelement("cbc:TaxAmount"))
ototal.setattribute("currencyID", ;
"RON")
ototal.text = ALLTRIM(STR(ROUND(mtvatotal * ;
c_ies_form.curs, ;
2), 15, ;
2))
ENDIF
ENDIF
SELECT c_ies_form
LOCATE
SUM valoare TO mtotalnet FOR ;
indice >= 0
LOCATE
mtotalnetliniifactura = mtotalnet
mtotalnet = mtotalnet + ;
mtotalcharges - ;
mtotalallowances
mtotalbrut = mtotalnet + ;
mtotaltva
omonetarytotal = oinvoice.appendchild(oxml.createelement("cac:LegalMonetaryTotal"))
ototalnet = omonetarytotal.appendchild(oxml.createelement("cbc:LineExtensionAmount"))
ototalnet.setattribute("currencyID", ;
mmoneda)
ototalnet.text = ALLTRIM(STR(mtotalnetliniifactura, ;
15, 2))
ototalnetfaratva = omonetarytotal.appendchild(oxml.createelement("cbc:TaxExclusiveAmount"))
ototalnetfaratva.setattribute("currencyID", ;
mmoneda)
ototalnetfaratva.text = ALLTRIM(STR(mtotalnet, ;
15, 2))
ototalbrut = omonetarytotal.appendchild(oxml.createelement("cbc:TaxInclusiveAmount"))
ototalbrut.setattribute("currencyID", ;
mmoneda)
ototalbrut.text = ALLTRIM(STR(mtotalbrut, ;
15, 2))
IF mtotalallowances > 0
ototaldeduceri = omonetarytotal.appendchild(oxml.createelement("cbc:AllowanceTotalAmount"))
ototaldeduceri.setattribute("currencyID", ;
mmoneda)
ototaldeduceri.text = ALLTRIM(STR(mtotalallowances, ;
15, ;
2))
ENDIF
IF mtotalcharges > 0
ototaltaxe = omonetarytotal.appendchild(oxml.createelement("cbc:ChargeTotalAmount"))
ototaltaxe.setattribute("currencyID", ;
mmoneda)
ototaltaxe.text = ALLTRIM(STR(mtotalcharges, ;
15, 2))
ENDIF
IF mincasat > 0
ototalincasat = omonetarytotal.appendchild(oxml.createelement("cbc:PrepaidAmount"))
ototalincasat.setattribute("currencyID", ;
mmoneda)
ototalincasat.text = ALLTRIM(STR(mincasat, ;
15, ;
2))
ENDIF
ototalplata = omonetarytotal.appendchild(oxml.createelement("cbc:PayableAmount"))
ototalplata.setattribute("currencyID", ;
mmoneda)
ototalplata.text = ALLTRIM(STR(mtotalbrut - ;
mincasat, 15, ;
2))
SELECT c_ies_form
SCAN FOR indice = 0
oinvoiceline = oinvoice.appendchild(oxml.createelement("cac:InvoiceLine"))
oinvoiceline.appendchild(oxml.createelement("cbc:ID"))
oinvoiceline.lastchild.text = ;
ALLTRIM(STR(i, 4, 0))
IF .NOT. ;
EMPTY(ALLTRIM(c_ies_form.text_supl))
oinvoiceline.appendchild(oxml.createelement("cbc:Note"))
oinvoiceline.lastchild.text = ;
ALLTRIM(c_ies_form.text_supl)
ENDIF
SELECT cod FROM FREETAB\um ;
WHERE cod_ro = ;
c_ies_form.um INTO ;
ARRAY agetumfact
mum = "H87"
IF _TALLY > 0 .AND. .NOT. ;
ISNULL(agetumfact(1))
mum = ALLTRIM(agetumfact(1))
ENDIF
oum = oinvoiceline.appendchild(oxml.createelement("cbc:InvoicedQuantity"))
oum.setattribute("unitCode", ;
mum)
oum.text = ALLTRIM(STR(c_ies_form.cantitate, ;
15, 3))
oamount = oinvoiceline.appendchild(oxml.createelement("cbc:LineExtensionAmount"))
oamount.setattribute("currencyID", ;
mmoneda)
oamount.text = ALLTRIM(STR(c_ies_form.valoare, ;
15, 2))
SELECT * FROM ;
C_COMENZI_FACTURA ;
WHERE id_u = ;
c_ies_form.id_u ;
INTO ARRAY ;
agetcomenzilinie
IF _TALLY > 0 .AND. .NOT. ;
ISNULL(agetcomenzilinie(1, ;
2)) .AND. .NOT. ;
ISNULL(agetcomenzilinie(1, ;
3))
oorderlinereference = oinvoiceline.appendchild(oxml.createelement("cac:OrderLineReference"))
oorderlinereference.appendchild(oxml.createelement("cbc:LineID"))
oorderlinereference.lastchild.text = ;
ALLTRIM(agetcomenzilinie(1, ;
2)) + "/" + ;
ALLTRIM(DTOC(agetcomenzilinie(1, ;
3)))
ENDIF
oitem = oinvoiceline.appendchild(oxml.createelement("cac:Item"))
IF .NOT. ;
EMPTY(c_ies_form.is_a)
oitem.appendchild(oxml.createelement("cbc:Description"))
oitem.lastchild.text = ALLTRIM(c_ies_form.is_a)
ENDIF
IF .NOT. ;
EMPTY(c_ies_form.denumire)
oitem.appendchild(oxml.createelement("cbc:Name"))
oitem.lastchild.text = ALLTRIM(c_ies_form.denumire)
ENDIF
IF .NOT. ;
EMPTY(c_ies_form.cod_art_cl)
obuyeritem = oitem.appendchild(oxml.createelement("cac:BuyersItemIdentification"))
obuyeritem.appendchild(oxml.createelement("cbc:ID"))
obuyeritem.lastchild.text = ;
c_ies_form.cod_art_cl
ENDIF
IF .NOT. ;
EMPTY(c_ies_form.cod)
oselleritem = oitem.appendchild(oxml.createelement("cac:SellersItemIdentification"))
oselleritem.appendchild(oxml.createelement("cbc:ID"))
oselleritem.lastchild.text = ;
ALLTRIM(c_ies_form.cod)
ENDIF
IF isi
SELECT c_get_cbare
LOCATE FOR cod = ;
c_ies_form.cod ;
.AND. ;
c_get_cbare.cod_bare <> ;
0
IF FOUND()
ostandarditem = oitem.appendchild(oxml.createelement("cac:StandardItemIdentification"))
oidstandard = ostandarditem.appendchild(oxml.createelement("cbc:ID"))
oidstandard.setattribute("schemeID", ;
"0160")
oidstandard.text = ;
ALLTRIM(STR(c_get_cbare.cod_bare, ;
13, 0))
ENDIF
IF pcs.is_loturi
SELECT c_get_cbare
LOCATE FOR cod = ;
c_ies_form.cod ;
.AND. ;
is_lot = 1
IF FOUND()
IF c_ies_form.cantitate >= ;
0
IF .NOT. ;
USED("TMPDESC1")
getdescarcari(c_ies_form.cod, ;
c_ies_form.gestiune, ;
c_id_tip.id_iesire, ;
0, ;
1, ;
.F.)
ENDIF
SELECT tmpdesc1
mexpliesirilot = ;
""
SCAN FOR ;
.NOT. ;
EMPTY(lot)
IF pisfb
SQLEXEC(gnconnhandle, "SELECT garantie,fabricatie,explicatie FROM LOTURI WHERE cod=?TMPDESC1.lot", "C_FB")
SELECT * FROM C_FB INTO ARRAY agetgarantie
ELSE
SELECT garantie, fabricatie, explicatie FROM LOTURI WHERE cod = tmpdesc1.lot INTO ARRAY agetgarantie
ENDIF
IF _TALLY > ;
0
mexpliesirilot = mexpliesirilot + IIF(EMPTY(mexpliesirilot), "Lot ", "." + " Lot ") + ALLTRIM(tmpdesc1.lot) + IIF( .NOT. EMPTY(agetgarantie(1,1)) .AND. .NOT. ISNULL(agetgarantie(1,1)), " exp. " + DTOC(agetgarantie(1,1)), "") + IIF( .NOT. EMPTY(agetgarantie(1,2)) .AND. .NOT. ISNULL(agetgarantie(1,2)), " fabr. " + DTOC(agetgarantie(1,2)), "")
ELSE
mexpliesirilot = IIF(EMPTY(mexpliesirilot), "Lot " + ALLTRIM(tmpdesc1.lot), mexpliesirilot + ", " + ALLTRIM(tmpdesc1.lot))
ENDIF
ENDSCAN
ENDIF
ENDIF
IF .NOT. ;
EMPTY(mexpliesirilot)
oclassificationlot = ;
oitem.appendchild(oxml.createelement("cac:CommodityClassification"))
olot = oclassificationlot.appendchild(oxml.createelement("cbc:ItemClassificationCode"))
olot.setattribute("listID", ;
"BB")
olot.text = IIF(LEN(ALLTRIM(mexpliesirilot)) > ;
50, ;
LEFT(ALLTRIM(mexpliesirilot), ;
50), ;
ALLTRIM(mexpliesirilot))
ENDIF
ENDIF
SELECT c_get_cbare
LOCATE FOR cod = ;
c_ies_form.cod ;
.AND. ;
c_get_cbare.cod_bare <> ;
0
IF FOUND()
oclassificationcodbare = ;
oitem.appendchild(oxml.createelement("cac:CommodityClassification"))
ocodbare = oclassificationcodbare.appendchild(oxml.createelement("cbc:ItemClassificationCode"))
ocodbare.setattribute("listID", ;
"EN")
ocodbare.text = ALLTRIM(STR(c_get_cbare.cod_bare, ;
13, ;
0))
ENDIF
SELECT c_get_cbare
LOCATE FOR cod = ;
c_ies_form.cod ;
.AND. .NOT. ;
EMPTY(c_get_cbare.cod_fe) ;
.AND. .NOT. ;
ISNULL(c_get_cbare.cod_fe)
IF FOUND()
oclassificationnc = ;
oitem.appendchild(oxml.createelement("cac:CommodityClassification"))
oclassificationstandardidnc = ;
oclassificationnc.appendchild(oxml.createelement("cbc:ItemClassificationCode"))
oclassificationstandardidnc.setattribute("listID", ;
"TSP")
oclassificationstandardidnc.text = ;
ALLTRIM(c_get_cbare.cod_fe)
ENDIF
ENDIF
oitemtaxcategory = oitem.appendchild(oxml.createelement("cac:ClassifiedTaxCategory"))
SELECT tip FROM ;
C_TVA_FACTURA WHERE ;
protva = ;
c_ies_form.protva ;
INTO ARRAY ;
agettipcota
oitemtaxcategory.appendchild(oxml.createelement("cbc:ID"))
oitemtaxcategory.lastchild.text = ;
ALLTRIM(agettipcota(1))
oitemtaxcategory.appendchild(oxml.createelement("cbc:Percent"))
oitemtaxcategory.lastchild.text = ;
ALLTRIM(STR(c_ies_form.protva, ;
2, 0))
oitemtaxscheme = oitemtaxcategory.appendchild(oxml.createelement("cac:TaxScheme"))
oitemtaxscheme.appendchild(oxml.createelement("cbc:ID"))
oitemtaxscheme.lastchild.text = ;
"VAT"
oitemprice = oinvoiceline.appendchild(oxml.createelement("cac:Price"))
oitemamount = oitemprice.appendchild(oxml.createelement("cbc:PriceAmount"))
oitemamount.setattribute("currencyID", ;
mmoneda)
oitemamount.text = ALLTRIM(STR(c_ies_form.pret_vanz, ;
15, 4))
i = i + 1
ENDSCAN
mdencomplet = plcalefacturi + ;
mlnumefisier + ;
".xml"
mdenfisierraspuns = plcalefacturi + ;
mlnumefisier + ;
'.txt'
oxml.save(mdencomplet)
IF FILE(mdenfisierraspuns)
DELETE FILE ;
(mdenfisierraspuns)
ENDIF
cfilename = 'FREETAB\dist\Efactura\DUKIntegrator.jar'
cparams = ' -c FREETAB\dist\Efactura\config -v FACT1 ' + ;
mdencomplet + ' ' + ;
mdenfisierraspuns
shellexecute(0,"open",cfilename, ;
cparams,"",1)
WAIT WINDOW TIMEOUT 2 ""
shellexecute(0,"open", ;
plcalefacturi,"","", ;
1)
IF FILE(mdenfisierraspuns)
IF FILETOSTR(mdenfisierraspuns) = ;
"ok"
MESSAGEBOX( ;
"Factura este valida. O puteti <20>ncarca prin SPV, la sectiunea 'Factura electronica', cu optiunea de sintaxa XML - UBL sau cu programul 'Declaratii ANAF'.", ;
64, ;
"Validare declaratie" ;
)
DELETE FILE ;
(mdenfisierraspuns)
ELSE
MODIFY FILE ;
(mdenfisierraspuns)
ENDIF
ENDIF
ENDPROC