Codul VFP original (ROAAUTO) era doar de testare/proba si nu se mai dezvolta. Mutat in legacy-vfp/ (sursa .prg, proiect .pjx/.PJT, date .DBF/.CDX/.FPT, test-comenzi.xml). Actualizat caile DBF default in tools/import_dbf.py si referinta din tests/test_import_dbf.py. Adaugat legacy-vfp/README.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1297 lines
31 KiB
Plaintext
1297 lines
31 KiB
Plaintext
* rar_forms.prg
|
||
#Define C_FORM_WIDTH 800
|
||
#Define C_FORM_HEIGHT 600
|
||
#Define C_BTN_WIDTH 120
|
||
#Define C_BTN_HEIGHT 30
|
||
#Define C_API_TIMEOUT 30
|
||
|
||
Close Databases All
|
||
Set Century On
|
||
Set Exact On
|
||
Set Ansi On
|
||
Set Deleted On
|
||
Set Date Dmy
|
||
Set Hours To 24
|
||
Set Notify Off
|
||
Set Safety Off
|
||
|
||
lcPath = Justpath(Sys(16,0))
|
||
Set Default To (m.lcPath)
|
||
|
||
Set Procedure To rar_autopass Additive
|
||
Set Procedure To nfjsonread Additive
|
||
|
||
Do Main
|
||
|
||
* Form principal pentru managementul RAR AutoPass
|
||
Define Class RarAutoPassForm As Form
|
||
Caption = "RAR AutoPass Manager"
|
||
Width = C_FORM_WIDTH
|
||
Height = C_FORM_HEIGHT
|
||
AutoCenter = .T.
|
||
MaxButton = .F.
|
||
WindowType = 1
|
||
BackColor = Rgb(240,240,240)
|
||
|
||
* Membri privati
|
||
Hidden oRar
|
||
Hidden nTimerHandle
|
||
Hidden cLastXmlPath
|
||
|
||
ErrorMsg = ""
|
||
|
||
* Adaugam PageFrame-ul ?i paginile sale
|
||
Add Object PageFrame1 As PageFrame With ;
|
||
Left = 10, ;
|
||
Top = 10, ;
|
||
Width = C_FORM_WIDTH - 20, ;
|
||
Height = C_FORM_HEIGHT - 80, ;
|
||
PageCount = 4, ;
|
||
Visible = .T.
|
||
|
||
Function Init
|
||
Local loRar, llSuccess, llTestMode
|
||
llSuccess = .F.
|
||
llTestMode = .T.
|
||
|
||
Try
|
||
* Adaugam controalele pentru fiecare pagina
|
||
This.SetupPage1() && Procesare
|
||
This.SetupPage2() && Mapari
|
||
This.SetupPage3() && Monitorizare
|
||
This.SetupPage4() && Prezentari
|
||
|
||
* Initializare RAR AutoPass
|
||
This.oRar = Createobject("RarAutoPass")
|
||
If !This.oRar.SetCredentials(m.llTestMode)
|
||
Messagebox("Eroare setare credentiale: " + This.oRar.ErrorMsg, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Return llSuccess
|
||
Endif
|
||
|
||
* Deschidem tabelele necesare
|
||
Use mapare_prestatii In 0 Shared
|
||
Use rar_log In 0 Shared
|
||
Use prestatii_rar In 0 Shared
|
||
|
||
Create Cursor xml_preview ;
|
||
(nr_comanda C(20), ;
|
||
data D, ;
|
||
vin C(20), ;
|
||
nr_inm C(10), ;
|
||
km_final N(10), ;
|
||
km_init N(10), ;
|
||
observatii M)
|
||
|
||
This.SetupGridMapari()
|
||
This.SetupGridLog()
|
||
This.SetupLogFilter()
|
||
|
||
This.nTimerHandle = 0
|
||
This.cLastXmlPath = ""
|
||
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la initializarea formularului: " + ;
|
||
loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Setup pentru Page1 (Procesare Comenzi)
|
||
Function SetupPage1
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
With This.PageFrame1.Page1
|
||
.Caption = "Procesare Comenzi"
|
||
|
||
.AddObject("lblXmlPath", "Label")
|
||
With .lblXmlPath
|
||
.Caption = "Fisier XML:"
|
||
.Left = 20
|
||
.Top = 20
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("txtXmlPath", "TextBox")
|
||
With .txtXmlPath
|
||
.Left = 100
|
||
.Top = 20
|
||
.Width = 500
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("btnBrowse", "CommandButton")
|
||
With .btnBrowse
|
||
.Caption = "..."
|
||
.Left = 610
|
||
.Top = 20
|
||
.Width = 30
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
* Ata?am handler-ul pentru evenimentul Click
|
||
Bindevent(.btnBrowse, "Click", This, "OnBrowseClick")
|
||
|
||
.AddObject("btnProcess", "CommandButton")
|
||
With .btnProcess
|
||
.Caption = "Proceseaza"
|
||
.Left = 20
|
||
.Top = 60
|
||
.Width = C_BTN_WIDTH
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
* Ata?am handler-ul pentru evenimentul Click
|
||
Bindevent(.btnProcess, "Click", This, "OnProcessClick")
|
||
|
||
.AddObject("chkAutoProcess", "CheckBox")
|
||
With .chkAutoProcess
|
||
.Caption = "Procesare automata"
|
||
.Left = 160
|
||
.Top = 65
|
||
.AutoSize = .T.
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
* Ata?am handler pentru AutoProcess
|
||
Bindevent(.chkAutoProcess, "InteractiveChange", This, "OnAutoProcessChange")
|
||
|
||
.AddObject("txtInterval", "TextBox")
|
||
With .txtInterval
|
||
.Left = 300
|
||
.Top = 65
|
||
.Width = 50
|
||
.Value = "5"
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("lblMinute", "Label")
|
||
With .lblMinute
|
||
.Caption = "minute"
|
||
.Left = 360
|
||
.Top = 65
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("edtStatus", "EditBox")
|
||
With .edtStatus
|
||
.Left = 20
|
||
.Top = 100
|
||
.Width = 700
|
||
.Height = 200
|
||
.ReadOnly = .T.
|
||
.ScrollBars = 2
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("grdPreview", "Grid")
|
||
With .grdPreview
|
||
.Left = 20
|
||
.Top = 320
|
||
.Width = 700
|
||
.Height = 200
|
||
.ReadOnly = .T.
|
||
.Visible = .F.
|
||
|
||
.ColumnCount = 7
|
||
|
||
.Column1.Header1.Caption = "Nr. Comanda"
|
||
.Column1.Width = 100
|
||
|
||
.Column2.Header1.Caption = "Data"
|
||
.Column2.Width = 80
|
||
|
||
.Column3.Header1.Caption = "VIN"
|
||
.Column3.Width = 120
|
||
|
||
.Column4.Header1.Caption = "Nr. Inmatriculare"
|
||
.Column4.Width = 100
|
||
|
||
.Column5.Header1.Caption = "KM Final"
|
||
.Column5.Width = 80
|
||
|
||
.Column6.Header1.Caption = "KM Initial"
|
||
.Column6.Width = 80
|
||
|
||
.Column7.Header1.Caption = "Observatii"
|
||
.Column7.Width = 140
|
||
Endwith
|
||
|
||
.AddObject("lblPreview", "Label")
|
||
With .lblPreview
|
||
.Caption = "Preview comenzi din XML:"
|
||
.Left = 20
|
||
.Top = 300
|
||
.Visible = .F.
|
||
Endwith
|
||
Endwith
|
||
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la setup Page1: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Continuare din partea anterioara...
|
||
|
||
* Setup pentru Page2 (Mapare Operatii)
|
||
Function SetupPage2
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
With This.PageFrame1.Page2
|
||
.Caption = "Mapare Operatii"
|
||
|
||
.AddObject("Grid1", "Grid")
|
||
With .Grid1
|
||
.Left = 20
|
||
.Top = 20
|
||
.Width = 700
|
||
.Height = 300
|
||
.AllowAddNew = .T.
|
||
.DeleteMark = .F.
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("btnSaveMapari", "CommandButton")
|
||
With .btnSaveMapari
|
||
.Caption = "Salveaza"
|
||
.Left = 20
|
||
.Top = 330
|
||
.Width = C_BTN_WIDTH
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("btnRefreshNomenclator", "CommandButton")
|
||
With .btnRefreshNomenclator
|
||
.Caption = "Actualizare Nomenclator"
|
||
.Left = 150
|
||
.Top = 330
|
||
.Width = 150
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
Bindevent(.btnSaveMapari, "Click", This, "OnSaveMappingsClick")
|
||
Bindevent(.btnRefreshNomenclator, "Click", This, "OnRefreshNomenclatorClick")
|
||
Endwith
|
||
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la setup Page2: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Setup pentru Page3 (Monitorizare)
|
||
Function SetupPage3
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
With This.PageFrame1.Page3
|
||
.Caption = "Monitorizare"
|
||
|
||
.AddObject("Grid2", "Grid")
|
||
With .Grid2
|
||
.Left = 20
|
||
.Top = 50
|
||
.Width = 700
|
||
.Height = 300
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("cboLogFilter", "ComboBox")
|
||
With .cboLogFilter
|
||
.Left = 20
|
||
.Top = 20
|
||
.Width = 150
|
||
.Style = 2
|
||
.Visible = .T.
|
||
|
||
.AddItem("Toate")
|
||
.AddItem("Succes")
|
||
.AddItem("Erori")
|
||
.ListIndex = 1
|
||
Endwith
|
||
|
||
.AddObject("btnRefreshLog", "CommandButton")
|
||
With .btnRefreshLog
|
||
.Caption = "Refresh"
|
||
.Left = 180
|
||
.Top = 20
|
||
.Width = C_BTN_WIDTH
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("btnAdvSearch", "CommandButton")
|
||
With .btnAdvSearch
|
||
.Caption = "Cautare avansata"
|
||
.Left = 320
|
||
.Top = 20
|
||
.Width = C_BTN_WIDTH
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
.AddObject("btnExportExcel", "CommandButton")
|
||
With .btnExportExcel
|
||
.Caption = "Export Excel"
|
||
.Left = 450
|
||
.Top = 20
|
||
.Width = C_BTN_WIDTH
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
* Ata?am event handlers
|
||
Bindevent(.cboLogFilter, "InteractiveChange", This, "OnLogFilterChange")
|
||
Bindevent(.btnRefreshLog, "Click", This, "OnRefreshLogClick")
|
||
Bindevent(.btnAdvSearch, "Click", This, "OnAdvSearchClick")
|
||
Bindevent(.btnExportExcel, "Click", This, "OnExportExcelClick")
|
||
Endwith
|
||
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la setup Page3: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Setup pentru Page4 (Prezentari Finalizate)
|
||
Function SetupPage4
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
With This.PageFrame1.Page4
|
||
.Caption = "Prezentari Finalizate"
|
||
|
||
* Grid pentru prezentari
|
||
.AddObject("grdPrezentari", "Grid")
|
||
With .grdPrezentari
|
||
.Left = 20
|
||
.Top = 50
|
||
.Width = 700
|
||
.Height = 300
|
||
.ReadOnly = .T.
|
||
.DeleteMark = .F.
|
||
.Visible = .T.
|
||
|
||
.ColumnCount = 7
|
||
.Column1.Header1.Caption = "ID"
|
||
.Column1.Width = 60
|
||
.Column2.Header1.Caption = "Data Presta?ie"
|
||
.Column2.Width = 100
|
||
.Column3.Header1.Caption = "VIN"
|
||
.Column3.Width = 120
|
||
.Column4.Header1.Caption = "Nr. <20>nmatriculare"
|
||
.Column4.Width = 100
|
||
.Column5.Header1.Caption = "Km Final"
|
||
.Column5.Width = 80
|
||
.Column6.Header1.Caption = "Status"
|
||
.Column6.Width = 80
|
||
.Column7.Header1.Caption = "Observa?ii"
|
||
.Column7.Width = 160
|
||
Endwith
|
||
|
||
* Buton refresh prezentari
|
||
.AddObject("btnRefreshPrez", "CommandButton")
|
||
With .btnRefreshPrez
|
||
.Caption = "Actualizeaza"
|
||
.Left = 20
|
||
.Top = 20
|
||
.Width = C_BTN_WIDTH
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
* Buton anulare prezentare
|
||
.AddObject("btnAnulare", "CommandButton")
|
||
With .btnAnulare
|
||
.Caption = "Anuleaza Prezentare"
|
||
.Left = 150
|
||
.Top = 20
|
||
.Width = C_BTN_WIDTH
|
||
.Height = C_BTN_HEIGHT
|
||
.Visible = .T.
|
||
Endwith
|
||
|
||
* Ata?am event handlers
|
||
Bindevent(.btnRefreshPrez, "Click", This, "OnRefreshPrezentariClick")
|
||
Bindevent(.btnAnulare, "Click", This, "OnAnularePrezentareClick")
|
||
Endwith
|
||
|
||
* Cream cursor pentru prezentari
|
||
If Used("prezentari_fin")
|
||
Use In prezentari_fin
|
||
Endif
|
||
|
||
Create Cursor prezentari_fin ;
|
||
(Id I, ;
|
||
data_prestatie D, ;
|
||
vin C(20), ;
|
||
nr_inmatriculare C(10), ;
|
||
odometru_final N(10), ;
|
||
status C(20), ;
|
||
observatii M)
|
||
|
||
* Setam sursa pentru grid
|
||
This.PageFrame1.Page4.grdPrezentari.RecordSource = "prezentari_fin"
|
||
With This.PageFrame1.Page4.grdPrezentari
|
||
.Column1.ControlSource = "prezentari_fin.id"
|
||
.Column2.ControlSource = "prezentari_fin.data_prestatie"
|
||
.Column3.ControlSource = "prezentari_fin.vin"
|
||
.Column4.ControlSource = "prezentari_fin.nr_inmatriculare"
|
||
.Column5.ControlSource = "prezentari_fin.odometru_final"
|
||
.Column6.ControlSource = "prezentari_fin.status"
|
||
.Column7.ControlSource = "prezentari_fin.observatii"
|
||
Endwith
|
||
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la setup Page4: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Event Handlers pentru Page1
|
||
Function OnBrowseClick
|
||
Local lcFile
|
||
lcFile = Getfile("XML", "Alege fisier XML", "Deschide", 0)
|
||
If !Empty(lcFile)
|
||
This.PageFrame1.Page1.txtXmlPath.Value = lcFile
|
||
This.AddStatus("Fisier selectat: " + lcFile)
|
||
This.ParseXMLToPreview(lcFile)
|
||
Endif
|
||
Endfunc
|
||
|
||
Function OnProcessClick
|
||
Local lcFile
|
||
lcFile = This.PageFrame1.Page1.txtXmlPath.Value
|
||
If Empty(lcFile)
|
||
Messagebox("Selecta?i un fisier XML!", 16, "Aten?ie")
|
||
Return
|
||
Endif
|
||
|
||
This.ProcessXML(lcFile)
|
||
Endfunc
|
||
|
||
Function OnAutoProcessChange
|
||
Local loControl
|
||
loControl = This.PageFrame1.Page1.chkAutoProcess
|
||
|
||
If loControl.Value
|
||
This.StartAutoProcessing()
|
||
Else
|
||
This.StopAutoProcessing()
|
||
Endif
|
||
Endfunc
|
||
|
||
* Event Handlers pentru Page3 (Monitorizare)
|
||
Function OnLogFilterChange
|
||
Lparameters toControl
|
||
Local lcFilter
|
||
|
||
Do Case
|
||
Case toControl.ListIndex = 1 && Toate
|
||
lcFilter = ""
|
||
Case toControl.ListIndex = 2 && Succes
|
||
lcFilter = "status = 'SUCCESS'"
|
||
Case toControl.ListIndex = 3 && Erori
|
||
lcFilter = "status = 'ERROR'"
|
||
Endcase
|
||
|
||
This.ApplyLogFilter(lcFilter)
|
||
Endfunc
|
||
|
||
Function OnRefreshLogClick
|
||
Select rar_log
|
||
Use In rar_log
|
||
Use rar_log In 0 Shared
|
||
Go Top
|
||
This.PageFrame1.Page3.Grid2.Refresh()
|
||
This.AddStatus("Log actualizat.")
|
||
Endfunc
|
||
|
||
Function OnAdvSearchClick
|
||
Do Form search_log
|
||
This.PageFrame1.Page3.Grid2.Refresh()
|
||
Endfunc
|
||
|
||
* Event Handlers pentru Page4 (Prezentari)
|
||
Function OnRefreshPrezentariClick
|
||
This.RefreshPrezentari()
|
||
Endfunc
|
||
|
||
Function OnAnularePrezentareClick
|
||
This.AnularePrezentare(prezentari_fin.id)
|
||
Endfunc
|
||
|
||
* Func?ii utilitare
|
||
Function AddStatus
|
||
Lparameters tcMessage
|
||
With This.PageFrame1.Page1.edtStatus
|
||
.Value = .Value + Ttoc(Datetime()) + ": " + tcMessage + Chr(13) + Chr(10)
|
||
.SelStart = Len(.Value)
|
||
Endwith
|
||
Endfunc
|
||
|
||
Function ApplyLogFilter
|
||
Parameter tcFilter
|
||
Select rar_log
|
||
If !Empty(tcFilter)
|
||
Set Filter To &tcFilter
|
||
Else
|
||
Set Filter To
|
||
Endif
|
||
Go Top
|
||
This.PageFrame1.Page3.Grid2.Refresh()
|
||
Endfunc
|
||
|
||
* Func?ii pentru procesare XML
|
||
Function ParseXMLToPreview
|
||
Parameters tcXMLFile
|
||
Local loXML As MSXML2.DOMDocument.6.0
|
||
Local loNodes As MSXML2.IXMLDOMNodeList
|
||
Local loNode As MSXML2.IXMLDOMNode
|
||
Local llSuccess, lcData
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
loXML = Createobject("MSXML2.DOMDocument.6.0")
|
||
loXML.Async = .F.
|
||
|
||
If !loXML.Load(tcXMLFile)
|
||
This.ErrorMsg = "Eroare incarcare XML: " + loXML.parseError.reason
|
||
This.AddStatus(This.ErrorMsg)
|
||
llSuccess = .F.
|
||
Return llSuccess
|
||
Endif
|
||
|
||
* Obtinem toate nodurile de comenzi
|
||
loNodes = loXML.selectNodes("/comenzi/comanda")
|
||
|
||
If Used("xml_preview")
|
||
Select xml_preview
|
||
Delete All
|
||
Endif
|
||
|
||
For Each loNode In loNodes
|
||
lcData = loNode.selectSingleNode("data").Text
|
||
|
||
ldData = This.Data2Date(m.lcData)
|
||
Insert Into xml_preview ;
|
||
(nr_comanda, ;
|
||
data, ;
|
||
vin, ;
|
||
nr_inm, ;
|
||
km_final, ;
|
||
km_init, ;
|
||
observatii) ;
|
||
VALUES ;
|
||
(loNode.selectSingleNode("nr_comanda").Text, ;
|
||
M.ldData, ;
|
||
loNode.selectSingleNode("vin").Text, ;
|
||
loNode.selectSingleNode("nr_inmatriculare").Text, ;
|
||
VAL(loNode.selectSingleNode("km_final").Text), ;
|
||
VAL(loNode.selectSingleNode("km_initial").Text), ;
|
||
NVL(loNode.selectSingleNode("observatii").Text, ""))
|
||
Endfor
|
||
|
||
Go Top
|
||
This.PageFrame1.Page1.grdPreview.Refresh()
|
||
This.PageFrame1.Page1.grdPreview.Visible = .T.
|
||
This.PageFrame1.Page1.lblPreview.Visible = .T.
|
||
|
||
This.AddStatus("XML citit cu succes: " + Transform(Reccount()) + " comenzi")
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
This.ErrorMsg = "Eroare parsare XML: " + loError.Message
|
||
This.AddStatus(This.ErrorMsg)
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Func?ii pentru prezentari
|
||
Function RefreshPrezentari
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
This.AddStatus("Actualizare prezentari...")
|
||
Try
|
||
If !This.oRar.Login()
|
||
This.AddStatus("Eroare login: " + This.oRar.ErrorMsg)
|
||
Return .F.
|
||
Endif
|
||
|
||
This.oRar.loXMLHTTP.Open("GET", This.oRar.lcUrl + "/prezentari/getAllPrezentariFinalizate", .F.)
|
||
This.oRar.loXMLHTTP.setRequestHeader("Authorization", "Bearer " + This.oRar.lcToken)
|
||
This.oRar.loXMLHTTP.Send()
|
||
|
||
If This.oRar.loXMLHTTP.Status != 200
|
||
This.ErrorMsg = "Eroare obtinere prezentari: " + This.oRar.loXMLHTTP.responseText
|
||
This.AddStatus(This.ErrorMsg)
|
||
Return .F.
|
||
Endif
|
||
|
||
loJson = nfjsonread(This.oRar.loXMLHTTP.responseText)
|
||
|
||
If Type('loJson.data.content') == 'O'
|
||
Select prezentari_fin
|
||
Delete All
|
||
|
||
For Each loItem In loJson.Data.content
|
||
ldData = This.Data2Date(loItem.dataPrestatie)
|
||
|
||
Insert Into prezentari_fin ;
|
||
(Id, ;
|
||
data_prestatie, ;
|
||
vin, ;
|
||
nr_inmatriculare, ;
|
||
odometru_final, ;
|
||
status, ;
|
||
observatii) ;
|
||
VALUES ;
|
||
(loItem.Id, ;
|
||
M.ldData, ;
|
||
loItem.vin, ;
|
||
loItem.nrInmatriculare, ;
|
||
loItem.odometruFinal, ;
|
||
loItem.Status, ;
|
||
loItem.obs)
|
||
Endfor
|
||
|
||
Go Top
|
||
This.PageFrame1.Page4.grdPrezentari.Refresh()
|
||
This.AddStatus("Prezentari actualizate cu succes.")
|
||
llSuccess = .T.
|
||
Endif
|
||
|
||
Catch To loError
|
||
This.ErrorMsg = "Eroare actualizare prezentari: " + loError.Message
|
||
This.AddStatus(This.ErrorMsg)
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Anulare prezentare
|
||
Function AnularePrezentare
|
||
Parameters tnIdPrezentare
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
If !This.oRar.Login()
|
||
Return .F.
|
||
Endif
|
||
|
||
Try
|
||
* Facem request de tip PATCH pentru anulare
|
||
This.oRar.loXMLHTTP.Open("PATCH", ;
|
||
THIS.oRar.lcUrl + "/prezentari/markPrezentareAnulataById/" + ALLTRIM(Transform(tnIdPrezentare)), ;
|
||
.F.)
|
||
This.oRar.loXMLHTTP.setRequestHeader("Authorization", "Bearer " + This.oRar.lcToken)
|
||
This.oRar.loXMLHTTP.Send()
|
||
|
||
This.oRar.LastResponse = This.oRar.loXMLHTTP.responseText
|
||
|
||
* Parsam raspunsul JSON pentru a verifica statusul
|
||
loResponse = nfjsonread(This.oRar.LastResponse)
|
||
|
||
Do Case
|
||
Case This.oRar.loXMLHTTP.Status != 200
|
||
This.ErrorMsg = "Eroare la anularea prezentarii: " + This.oRar.LastResponse
|
||
This.AddStatus(This.ErrorMsg)
|
||
llSuccess = .F.
|
||
|
||
|
||
Case Type('loResponse.STATUS_ANULATA') = 'C'
|
||
* Anulare reusita
|
||
This.AddStatus('Anulare reusita ID: ' + ALLTRIM(TRANSFORM(tnIdPrezentare)))
|
||
|
||
llSuccess = .T.
|
||
This.oRar.LogPrezentare(Ttoc(Date()), ;
|
||
"", ; && nr_comanda
|
||
"", ; && vin
|
||
"", ; && nr_inm
|
||
0, ; && km_final
|
||
0, ; && km_initial
|
||
"", ; && prestatii
|
||
"ANULATA", ; && status
|
||
loResponse.STATUS_ANULATA) && mesaj succes
|
||
This.AddStatus('Prezentare anulata')
|
||
|
||
Case Type('loResponse.EROARE_STATUS_ANULARE') = 'C'
|
||
This.ErrorMsg = loResponse.EROARE_STATUS_ANULARE
|
||
This.oRar.LogPrezentare(Ttoc(Date()), ;
|
||
"", ;
|
||
"", ;
|
||
"", ;
|
||
0, ;
|
||
0, ;
|
||
"", ;
|
||
"ERROR", ;
|
||
THIS.ErrorMsg)
|
||
|
||
This.AddStatus(This.ErrorMsg)
|
||
llSuccess = .F.
|
||
|
||
Otherwise
|
||
This.ErrorMsg = "Raspuns neasteptat: " + This.oRar.LastResponse
|
||
This.AddStatus(This.ErrorMsg)
|
||
llSuccess = .F.
|
||
|
||
Endcase
|
||
|
||
Catch To loEx
|
||
This.ErrorMsg = "Eroare anulare prezentare: " + loEx.Message
|
||
This.AddStatus(This.ErrorMsg)
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
* Actualizam statusul in log daca exista inregistrarea
|
||
If Used("rar_log")
|
||
Select rar_log
|
||
Locate For Id = tnIdPrezentare
|
||
If Found()
|
||
Replace Status With Iif(llSuccess, "ANULATA", "ERROR"), ;
|
||
error_msg With Iif(!llSuccess, This.ErrorMsg, ""), ;
|
||
data_trim With Datetime()
|
||
Endif
|
||
Endif
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Func?ii pentru procesare automata
|
||
Function StartAutoProcessing
|
||
Local lnInterval
|
||
|
||
If !Empty(This.nTimerHandle)
|
||
Return
|
||
Endif
|
||
|
||
lnInterval = Val(This.PageFrame1.Page1.txtInterval.Value)
|
||
If lnInterval <= 0
|
||
Messagebox("Interval invalid!", 16, "Eroare")
|
||
This.PageFrame1.Page1.chkAutoProcess.Value = .F.
|
||
Return
|
||
Endif
|
||
|
||
* Convertim intervalul din minute <20>n milisecunde
|
||
lnInterval = lnInterval * 60 * 1000
|
||
|
||
This.nTimerHandle = _Screen.AddProperty("Timer" + Sys(2015), ;
|
||
NEWOBJECT("Timer"))
|
||
|
||
With _Screen.&("Timer" + Sys(2015))
|
||
.Interval = lnInterval
|
||
Bindevent(.Timer, This, "OnAutoProcessTimer")
|
||
.Enabled = .T.
|
||
Endwith
|
||
|
||
This.AddStatus("Procesare automata pornita. Interval: " + ;
|
||
TRANSFORM(Val(This.PageFrame1.Page1.txtInterval.Value)) + " minute")
|
||
Endfunc
|
||
|
||
Function StopAutoProcessing
|
||
If !Empty(This.nTimerHandle)
|
||
_Screen.RemoveObject("Timer" + Sys(2015))
|
||
This.nTimerHandle = 0
|
||
This.AddStatus("Procesare automata oprita.")
|
||
Endif
|
||
Endfunc
|
||
|
||
Function OnAutoProcessTimer
|
||
Local lcFile
|
||
lcFile = This.PageFrame1.Page1.txtXmlPath.Value
|
||
|
||
If !Empty(lcFile) And File(lcFile)
|
||
This.ProcessXML(lcFile)
|
||
Else
|
||
This.AddStatus("EROARE: Fi?ier XML invalid sau lipsa!")
|
||
This.StopAutoProcessing()
|
||
This.PageFrame1.Page1.chkAutoProcess.Value = .F.
|
||
Endif
|
||
Endfunc
|
||
|
||
|
||
* Event Handlers pentru Page2 (Mapari)
|
||
Function OnSaveMappingsClick
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
Select mapare_prestatii
|
||
Tableupdate(.T.)
|
||
Messagebox("Mapari salvate cu succes!", 64, "Succes")
|
||
llSuccess = .T.
|
||
This.AddStatus("Mapari actualizate cu succes.")
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare salvare mapari: " + loError.Message, 16, "Eroare")
|
||
This.AddStatus("EROARE salvare mapari: " + loError.Message)
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
Function OnRefreshNomenclatorClick
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Wait Window "Actualizare nomenclator <20>n curs..." Nowait
|
||
|
||
Try
|
||
If !This.oRar.UpdateNomenclator(.T.)
|
||
Messagebox("Eroare actualizare nomenclator: " + This.oRar.ErrorMsg, 16, "Eroare")
|
||
This.AddStatus("EROARE actualizare nomenclator: " + This.oRar.ErrorMsg)
|
||
llSuccess = .F.
|
||
Else
|
||
Messagebox("Nomenclator actualizat cu succes!", 64, "Succes")
|
||
This.AddStatus("Nomenclator actualizat cu succes.")
|
||
llSuccess = .T.
|
||
|
||
* Re<52>mprospatam grid-ul cu mapari
|
||
Select mapare_prestatii
|
||
Go Top
|
||
This.PageFrame1.Page2.Grid1.Refresh()
|
||
Endif
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare actualizare nomenclator: " + loError.Message, 16, "Eroare")
|
||
This.AddStatus("EROARE actualizare nomenclator: " + loError.Message)
|
||
llSuccess = .F.
|
||
Finally
|
||
Wait Clear
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Functii pentru procesare XML
|
||
Function ProcessXML
|
||
Parameters tcXMLFile
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
This.AddStatus("Procesare " + tcXMLFile + "...")
|
||
|
||
Try
|
||
If !This.oRar.ProcessXMLComenzi(tcXMLFile)
|
||
This.AddStatus("EROARE: " + This.oRar.ErrorMsg)
|
||
Messagebox(This.oRar.ErrorMsg, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Else
|
||
This.AddStatus("Procesare finalizata cu succes!")
|
||
Messagebox("Procesare finalizata cu succes!", 64, "Succes")
|
||
llSuccess = .T.
|
||
Endif
|
||
|
||
Catch To loError
|
||
This.AddStatus("EROARE: " + loError.Message)
|
||
Messagebox(loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Handler pentru activare/dezactivare procesare automata
|
||
Function OnAutoProcessChange
|
||
Local loControl
|
||
loControl = This.PageFrame1.Page1.chkAutoProcess
|
||
|
||
If loControl.Value
|
||
This.StartAutoProcessing()
|
||
Else
|
||
This.StopAutoProcessing()
|
||
Endif
|
||
Endfunc
|
||
|
||
* Handler pentru timer procesare automata
|
||
Function OnAutoProcessTimer
|
||
Local lcFile
|
||
lcFile = This.PageFrame1.Page1.txtXmlPath.Value
|
||
|
||
If !Empty(lcFile) And File(lcFile)
|
||
This.ProcessXML(lcFile)
|
||
Else
|
||
This.AddStatus("EROARE: Fi?ier XML invalid sau lipsa!")
|
||
This.StopAutoProcessing()
|
||
This.PageFrame1.Page1.chkAutoProcess.Value = .F.
|
||
Endif
|
||
Endfunc
|
||
|
||
|
||
* Export Excel pentru log
|
||
Function OnExportExcelClick
|
||
Local lcFile, loExcel, loWorkbook, loWorksheet
|
||
Local lnRow, lnCol
|
||
|
||
lcFile = Putfile("Excel files|*.xlsx", "RAR_Log_Export.xlsx", "", 0)
|
||
If Empty(lcFile)
|
||
Return
|
||
Endif
|
||
|
||
This.AddStatus("Export Excel <20>n " + lcFile + "...")
|
||
|
||
Try
|
||
loExcel = Createobject("Excel.Application")
|
||
loExcel.Visible = .F.
|
||
|
||
loWorkbook = loExcel.Workbooks.Add()
|
||
loWorksheet = loWorkbook.Sheets(1)
|
||
|
||
* Setam headerele
|
||
With loWorksheet
|
||
.Cells(1,1).Value = "Data prezentare"
|
||
.Cells(1,2).Value = "Nr. comanda"
|
||
.Cells(1,3).Value = "VIN"
|
||
.Cells(1,4).Value = "Nr. <20>nmatriculare"
|
||
.Cells(1,5).Value = "Km final"
|
||
.Cells(1,6).Value = "Km initial"
|
||
.Cells(1,7).Value = "Status"
|
||
.Cells(1,8).Value = "Eroare"
|
||
.Cells(1,9).Value = "Data trimitere"
|
||
|
||
* Formatare header
|
||
.Range(.Cells(1,1), .Cells(1,9)).Font.Bold = .T.
|
||
.Range(.Cells(1,1), .Cells(1,9)).Interior.Color = Rgb(200,200,200)
|
||
Endwith
|
||
|
||
* Populam datele
|
||
Select rar_log
|
||
lnRow = 2
|
||
Scan
|
||
loWorksheet.Cells(lnRow, 1).Value = Dtoc(data_prez)
|
||
loWorksheet.Cells(lnRow, 2).Value = nr_comanda
|
||
loWorksheet.Cells(lnRow, 3).Value = vin
|
||
loWorksheet.Cells(lnRow, 4).Value = nr_inm
|
||
loWorksheet.Cells(lnRow, 5).Value = Transform(km_final)
|
||
loWorksheet.Cells(lnRow, 6).Value = Transform(km_init)
|
||
loWorksheet.Cells(lnRow, 7).Value = Status
|
||
loWorksheet.Cells(lnRow, 8).Value = error_msg
|
||
loWorksheet.Cells(lnRow, 9).Value = Ttoc(data_trim)
|
||
|
||
* Coloram randurile cu erori in rosu deschis
|
||
If Status = "ERROR"
|
||
loWorksheet.Range(loWorksheet.Cells(lnRow,1), ;
|
||
loWorksheet.Cells(lnRow,9)).Interior.Color = Rgb(255,200,200)
|
||
Endif
|
||
|
||
lnRow = lnRow + 1
|
||
Endscan
|
||
|
||
* Auto-fit coloane
|
||
loWorksheet.Range("A:I").Columns.AutoFit()
|
||
|
||
* Salvam si inchidem
|
||
loWorkbook.SaveAs(lcFile)
|
||
loWorkbook.Close()
|
||
loExcel.Quit()
|
||
|
||
This.AddStatus("Export Excel finalizat cu succes")
|
||
|
||
* Deschidem fisierul
|
||
Run /N "explorer.exe" &lcFile
|
||
|
||
Catch To loError
|
||
This.AddStatus("EROARE la export Excel: " + loError.Message)
|
||
Messagebox("Eroare la export Excel: " + loError.Message, 16, "Eroare")
|
||
|
||
Try
|
||
loWorkbook.Close()
|
||
loExcel.Quit()
|
||
Catch
|
||
Endtry
|
||
Endtry
|
||
Endfunc
|
||
|
||
* Refresh pentru grid-ul de log
|
||
Function OnRefreshLogClick
|
||
Select rar_log
|
||
Use In rar_log
|
||
Use rar_log In 0 Shared
|
||
Go Top
|
||
This.PageFrame1.Page3.Grid2.Refresh()
|
||
This.AddStatus("Log actualizat.")
|
||
Endfunc
|
||
|
||
* Cautare avansata <20>n log
|
||
Function OnAdvSearchClick
|
||
Local loSearch
|
||
loSearch = Createobject("SearchLogForm")
|
||
loSearch.Show(1)
|
||
This.PageFrame1.Page3.Grid2.Refresh()
|
||
Endfunc
|
||
|
||
* Handler pentru filtrul de log
|
||
Function OnLogFilterChange
|
||
Lparameters toControl
|
||
Local lcFilter
|
||
|
||
Do Case
|
||
Case toControl.ListIndex = 1 && Toate
|
||
lcFilter = ""
|
||
Case toControl.ListIndex = 2 && Succes
|
||
lcFilter = "status = 'SUCCESS'"
|
||
Case toControl.ListIndex = 3 && Erori
|
||
lcFilter = "status = 'ERROR'"
|
||
Endcase
|
||
|
||
This.ApplyLogFilter(lcFilter)
|
||
Endfunc
|
||
|
||
* Aplicare filtru pentru log
|
||
Function ApplyLogFilter
|
||
Parameter tcFilter
|
||
Select rar_log
|
||
If !Empty(tcFilter)
|
||
Set Filter To &tcFilter
|
||
Else
|
||
Set Filter To
|
||
Endif
|
||
Go Top
|
||
This.PageFrame1.Page3.Grid2.Refresh()
|
||
Endfunc
|
||
|
||
* Helper pentru procesare automata
|
||
Function StartAutoProcessing
|
||
Local lnInterval
|
||
|
||
If !Empty(This.nTimerHandle)
|
||
Return
|
||
Endif
|
||
|
||
lnInterval = Val(This.PageFrame1.Page1.txtInterval.Value)
|
||
If lnInterval <= 0
|
||
Messagebox("Interval invalid!", 16, "Eroare")
|
||
This.PageFrame1.Page1.chkAutoProcess.Value = .F.
|
||
Return
|
||
Endif
|
||
|
||
* Convertim intervalul din minute <20>n milisecunde
|
||
lnInterval = lnInterval * 60 * 1000
|
||
|
||
This.nTimerHandle = _Screen.AddProperty("Timer" + Sys(2015), ;
|
||
NEWOBJECT("Timer"))
|
||
|
||
With _Screen.&("Timer" + Sys(2015))
|
||
.Interval = lnInterval
|
||
Bindevent(.Timer, This, "OnAutoProcessTimer")
|
||
.Enabled = .T.
|
||
Endwith
|
||
|
||
This.AddStatus("Procesare automata pornita. Interval: " + ;
|
||
TRANSFORM(Val(This.PageFrame1.Page1.txtInterval.Value)) + " minute")
|
||
Endfunc
|
||
|
||
Function StopAutoProcessing
|
||
If !Empty(This.nTimerHandle)
|
||
_Screen.RemoveObject("Timer" + Sys(2015))
|
||
This.nTimerHandle = 0
|
||
This.AddStatus("Procesare automata oprita.")
|
||
Endif
|
||
Endfunc
|
||
|
||
|
||
Function SetupLogFilter
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
With This.PageFrame1.Page3.cboLogFilter
|
||
.Clear()
|
||
.AddItem("Toate")
|
||
.AddItem("Succes")
|
||
.AddItem("Erori")
|
||
.ListIndex = 1
|
||
Endwith
|
||
|
||
* Aplicam filtrul ini?ial (fara filtru)
|
||
This.ApplyLogFilter("")
|
||
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la setup filtru log: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Gestionare grid-uri
|
||
Function SetupGridMapari
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
With This.PageFrame1.Page2.Grid1
|
||
.RecordSource = "mapare_prestatii"
|
||
.ColumnCount = 4
|
||
|
||
.Column1.Header1.Caption = "Cod Operatie"
|
||
.Column1.ControlSource = "mapare_prestatii.cod_op"
|
||
.Column1.Width = 150
|
||
|
||
.Column2.Header1.Caption = "Descriere"
|
||
.Column2.ControlSource = "mapare_prestatii.descr_op"
|
||
.Column2.Width = 250
|
||
|
||
.Column3.Header1.Caption = "Cod RAR"
|
||
.Column3.ControlSource = "mapare_prestatii.cod_rar"
|
||
.Column3.Width = 100
|
||
|
||
.Column4.Header1.Caption = "Auto Send"
|
||
.Column4.ControlSource = "mapare_prestatii.auto_send"
|
||
.Column4.Width = 80
|
||
|
||
.SetAll("ReadOnly", .F., "Column")
|
||
.Refresh()
|
||
Endwith
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la setup grid mapari: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
Function SetupGridLog
|
||
Local llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
With This.PageFrame1.Page3.Grid2
|
||
.RecordSource = "rar_log"
|
||
.ColumnCount = 6
|
||
|
||
.Column1.Header1.Caption = "Data"
|
||
.Column1.ControlSource = "rar_log.data_prez"
|
||
.Column1.Width = 100
|
||
|
||
.Column2.Header1.Caption = "Comanda"
|
||
.Column2.ControlSource = "rar_log.nr_comanda"
|
||
.Column2.Width = 100
|
||
|
||
.Column3.Header1.Caption = "VIN"
|
||
.Column3.ControlSource = "rar_log.vin"
|
||
.Column3.Width = 150
|
||
|
||
.Column4.Header1.Caption = "Status"
|
||
.Column4.ControlSource = "rar_log.status"
|
||
.Column4.Width = 80
|
||
|
||
.Column5.Header1.Caption = "Eroare"
|
||
.Column5.ControlSource = "rar_log.error_msg"
|
||
.Column5.Width = 200
|
||
|
||
.Column6.Header1.Caption = "Data Trimitere"
|
||
.Column6.ControlSource = "rar_log.data_trim"
|
||
.Column6.Width = 150
|
||
|
||
.SetAll("ReadOnly", .T., "Column")
|
||
.Refresh()
|
||
Endwith
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la setup grid log: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|
||
|
||
* Convertim din YYYY-MM-DD <20>n data VFP
|
||
Function Data2Date
|
||
Lparameters lcData
|
||
Local lnAn, lnLuna, lnZi, ldData
|
||
lnAn = Val(Getwordnum(lcData,1,'-'))
|
||
lnLuna = Val(Getwordnum(lcData,2,'-'))
|
||
lnZi = Val(Getwordnum(lcData,3,'-'))
|
||
ldData = Date(lnAn,lnLuna,lnZi)
|
||
Return m.ldData
|
||
Endfunc
|
||
|
||
Function Destroy
|
||
This.StopAutoProcessing()
|
||
|
||
* <20>nchidem toate tabelele
|
||
If Used("mapare_prestatii")
|
||
Use In mapare_prestatii
|
||
Endif
|
||
|
||
If Used("rar_log")
|
||
Use In rar_log
|
||
Endif
|
||
|
||
If Used("prestatii_rar")
|
||
Use In prestatii_rar
|
||
Endif
|
||
|
||
If Used("prezentari_fin")
|
||
Use In prezentari_fin
|
||
Endif
|
||
|
||
If Used("xml_preview")
|
||
Use In xml_preview
|
||
Endif
|
||
|
||
DoDefault()
|
||
Endfunc
|
||
Enddefine
|
||
|
||
Enddefine
|
||
|
||
Function Main
|
||
Local loForm, llSuccess
|
||
llSuccess = .F.
|
||
|
||
Try
|
||
loForm = Createobject("RarAutoPassForm")
|
||
loForm.Show(1)
|
||
llSuccess = .T.
|
||
|
||
Catch To loError
|
||
Messagebox("Eroare la lansare aplicatie: " + loError.Message, 16, "Eroare")
|
||
llSuccess = .F.
|
||
Endtry
|
||
|
||
Return llSuccess
|
||
Endfunc
|