Files
rar-autopass/legacy-vfp/rar_advanced.prg
Claude Agent 5a8787bbc4 chore(legacy): muta proiectul Visual FoxPro in legacy-vfp/
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>
2026-06-17 06:51:21 +00:00

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