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>
272 lines
7.7 KiB
Plaintext
272 lines
7.7 KiB
Plaintext
* Adaugam controale noi in clasa RarAutoPassForm pentru tab-ul Log
|
|
|
|
* Form pentru cautare avansata
|
|
DEFINE CLASS SearchLogForm AS Form
|
|
Caption = "Cautare avansata in log"
|
|
Width = 600
|
|
Height = 400
|
|
AutoCenter = .T.
|
|
MaxButton = .F.
|
|
BorderStyle = 2
|
|
|
|
ADD OBJECT lblDateFrom AS Label WITH ;
|
|
Caption = "De la data:", ;
|
|
Left = 20, ;
|
|
Top = 20
|
|
|
|
ADD OBJECT txtDateFrom AS TextBox WITH ;
|
|
Left = 100, ;
|
|
Top = 20, ;
|
|
Width = 100, ;
|
|
Value = DATE() - 30
|
|
|
|
ADD OBJECT lblDateTo AS Label WITH ;
|
|
Caption = "Pana la:", ;
|
|
Left = 220, ;
|
|
Top = 20
|
|
|
|
ADD OBJECT txtDateTo AS TextBox WITH ;
|
|
Left = 280, ;
|
|
Top = 20, ;
|
|
Width = 100, ;
|
|
Value = DATE()
|
|
|
|
ADD OBJECT lblVin AS Label WITH ;
|
|
Caption = "VIN:", ;
|
|
Left = 20, ;
|
|
Top = 60
|
|
|
|
ADD OBJECT txtVin AS TextBox WITH ;
|
|
Left = 100, ;
|
|
Top = 60, ;
|
|
Width = 150
|
|
|
|
ADD OBJECT lblComanda AS Label WITH ;
|
|
Caption = "Nr. Comanda:", ;
|
|
Left = 270, ;
|
|
Top = 60
|
|
|
|
ADD OBJECT txtComanda AS TextBox WITH ;
|
|
Left = 350, ;
|
|
Top = 60, ;
|
|
Width = 100
|
|
|
|
ADD OBJECT lblStatus AS Label WITH ;
|
|
Caption = "Status:", ;
|
|
Left = 20, ;
|
|
Top = 100
|
|
|
|
ADD OBJECT cboStatus AS ComboBox WITH ;
|
|
Left = 100, ;
|
|
Top = 100, ;
|
|
Width = 150, ;
|
|
Style = 2
|
|
|
|
ADD OBJECT chkHasError AS Checkbox WITH ;
|
|
Caption = "Doar cu erori", ;
|
|
Left = 270, ;
|
|
Top = 100
|
|
|
|
ADD OBJECT btnSearch AS CommandButton WITH ;
|
|
Caption = "Caută", ;
|
|
Left = 20, ;
|
|
Top = 140, ;
|
|
Width = 100, ;
|
|
Height = 30
|
|
|
|
ADD OBJECT btnCancel AS CommandButton WITH ;
|
|
Caption = "Anulează", ;
|
|
Left = 130, ;
|
|
Top = 140, ;
|
|
Width = 100, ;
|
|
Height = 30
|
|
|
|
* Constructor
|
|
FUNCTION Init
|
|
THIS.cboStatus.AddItem("Toate")
|
|
THIS.cboStatus.AddItem("SUCCESS")
|
|
THIS.cboStatus.AddItem("ERROR")
|
|
THIS.cboStatus.ListIndex = 1
|
|
RETURN .T.
|
|
|
|
* Handler pentru butonul Cauta
|
|
FUNCTION btnSearch.Click
|
|
LOCAL lcFilter
|
|
lcFilter = THIS.BuildFilter()
|
|
THISFORM.Parent.ApplyLogFilter(lcFilter)
|
|
THISFORM.Release()
|
|
|
|
* Handler pentru butonul Anuleaza
|
|
FUNCTION btnCancel.Click
|
|
THISFORM.Release()
|
|
|
|
* Construieste filtrul SQL
|
|
FUNCTION BuildFilter
|
|
LOCAL lcFilter, lcAnd
|
|
lcFilter = ""
|
|
lcAnd = ""
|
|
|
|
* Filtru data
|
|
IF !EMPTY(THIS.txtDateFrom.Value)
|
|
lcFilter = lcFilter + "data_prezentare >= CTOD('" + ;
|
|
DTOC(THIS.txtDateFrom.Value) + "')"
|
|
lcAnd = " AND "
|
|
ENDIF
|
|
|
|
IF !EMPTY(THIS.txtDateTo.Value)
|
|
lcFilter = lcFilter + lcAnd + "data_prezentare <= CTOD('" + ;
|
|
DTOC(THIS.txtDateTo.Value) + "')"
|
|
lcAnd = " AND "
|
|
ENDIF
|
|
|
|
* Filtru VIN
|
|
IF !EMPTY(THIS.txtVin.Value)
|
|
lcFilter = lcFilter + lcAnd + "UPPER(vin) LIKE '" + ;
|
|
UPPER(ALLTRIM(THIS.txtVin.Value)) + "%'"
|
|
lcAnd = " AND "
|
|
ENDIF
|
|
|
|
* Filtru comanda
|
|
IF !EMPTY(THIS.txtComanda.Value)
|
|
lcFilter = lcFilter + lcAnd + "UPPER(nr_comanda) LIKE '" + ;
|
|
UPPER(ALLTRIM(THIS.txtComanda.Value)) + "%'"
|
|
lcAnd = " AND "
|
|
ENDIF
|
|
|
|
* Filtru status
|
|
IF THIS.cboStatus.ListIndex > 1
|
|
lcFilter = lcFilter + lcAnd + "status = '" + ;
|
|
THIS.cboStatus.Value + "'"
|
|
lcAnd = " AND "
|
|
ENDIF
|
|
|
|
* Filtru erori
|
|
IF THIS.chkHasError.Value
|
|
lcFilter = lcFilter + lcAnd + "!EMPTY(error_msg)"
|
|
ENDIF
|
|
|
|
RETURN lcFilter
|
|
ENDDEFINE
|
|
|
|
* Adaugam metodele noi in RarAutoPassForm
|
|
* In functia Init, adaugam butoanele noi:
|
|
ADD OBJECT btnAdvSearch AS CommandButton OF tabLog WITH ;
|
|
Caption = "Căutare avansată", ;
|
|
Left = 320, ;
|
|
Top = 20, ;
|
|
Width = 120, ;
|
|
Height = C_BTN_HEIGHT
|
|
|
|
ADD OBJECT btnExportExcel AS CommandButton OF tabLog WITH ;
|
|
Caption = "Export Excel", ;
|
|
Left = 450, ;
|
|
Top = 20, ;
|
|
Width = 120, ;
|
|
Height = C_BTN_HEIGHT
|
|
|
|
* Handler pentru cautare avansata
|
|
FUNCTION btnAdvSearch.Click
|
|
LOCAL loSearch
|
|
loSearch = CREATEOBJECT("SearchLogForm")
|
|
loSearch.Show(1)
|
|
ENDFUNC
|
|
|
|
* Aplicare filtru de cautare
|
|
FUNCTION ApplyLogFilter
|
|
PARAMETERS tcFilter
|
|
SELECT rar_log
|
|
IF !EMPTY(tcFilter)
|
|
SET FILTER TO &tcFilter
|
|
ELSE
|
|
SET FILTER TO
|
|
ENDIF
|
|
GO TOP
|
|
THIS.grdLog.Refresh()
|
|
ENDFUNC
|
|
|
|
* Handler pentru export Excel
|
|
FUNCTION btnExportExcel.Click
|
|
LOCAL lcFile, loExcel, loWorkbook, loWorksheet
|
|
LOCAL lnRow, lnCol, lcValue
|
|
|
|
* Alegem locatia fisierului
|
|
lcFile = PUTFILE("Excel files|*.xlsx", "RAR_Log_Export.xlsx", "", 0)
|
|
IF EMPTY(lcFile)
|
|
RETURN
|
|
ENDIF
|
|
|
|
THIS.AddStatus("Export Excel în " + lcFile + "...")
|
|
|
|
TRY
|
|
* Cream obiectul Excel
|
|
loExcel = CREATEOBJECT("Excel.Application")
|
|
loExcel.Visible = .F.
|
|
|
|
* Adaugam un workbook nou
|
|
loWorkbook = loExcel.Workbooks.Add()
|
|
loWorksheet = loWorkbook.Sheets(1)
|
|
|
|
* Setam headerele
|
|
WITH loWorksheet
|
|
.Cells(1,1).Value = "Data prezentare"
|
|
.Cells(1,2).Value = "Nr. comandă"
|
|
.Cells(1,3).Value = "VIN"
|
|
.Cells(1,4).Value = "Nr. î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 = data_prezentare
|
|
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 = km_final
|
|
loWorksheet.Cells(lnRow, 6).Value = km_initial
|
|
loWorksheet.Cells(lnRow, 7).Value = status
|
|
loWorksheet.Cells(lnRow, 8).Value = error_msg
|
|
loWorksheet.Cells(lnRow, 9).Value = data_trimitere
|
|
|
|
* 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)
|
|
|
|
TRY
|
|
loWorkbook.Close()
|
|
loExcel.Quit()
|
|
CATCH
|
|
ENDTRY
|
|
ENDTRY
|
|
ENDFUNC
|