Files
gomag-vending/vfp/ApplicationSetup.prg
Marius Mutu 5d43509987 Update VFP integration with improved error handling and settings management
- Add output/ directory to .gitignore to exclude generated JSON files
- Fix ApplicationSetup.prg parameter handling with LPARAMETERS and proper validation
- Update gomag-adapter.prg to use global settings object and clean old JSON files
- Enhance sync-comenzi-web.prg with Oracle integration improvements
- Add Visual FoxPro project files (roawebcomenzi.PJT/.pjx)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 17:01:00 +03:00

288 lines
9.7 KiB
Plaintext

*-- ApplicationSetup.prg - Clasa pentru configurarea si setup-ul aplicatiei
*-- Contine toate functiile pentru settings.ini si configurare
*-- Autor: Claude AI
*-- Data: 10 septembrie 2025
DEFINE CLASS ApplicationSetup AS Custom
*-- Proprietati publice
cAppPath = ""
cIniFile = ""
oSettings = NULL
lInitialized = .F.
*-- Constructor
PROCEDURE Init
PARAMETERS tcAppPath
IF !EMPTY(tcAppPath)
THIS.cAppPath = ADDBS(tcAppPath)
ELSE
THIS.cAppPath = ADDBS(JUSTPATH(SYS(16,0)))
ENDIF
THIS.cIniFile = THIS.cAppPath + "settings.ini"
THIS.lInitialized = .F.
ENDPROC
*-- Functie pentru incarcarea tuturor setarilor din fisierul INI
PROCEDURE LoadSettings
PARAMETERS tcIniFile
LOCAL loSettings
IF EMPTY(tcIniFile)
tcIniFile = THIS.cIniFile
ENDIF
*-- Cream un obiect pentru toate setarile
loSettings = CREATEOBJECT("Empty")
*-- Sectiunea API
ADDPROPERTY(loSettings, "ApiBaseUrl", ReadPini("API", "ApiBaseUrl", tcIniFile))
ADDPROPERTY(loSettings, "OrderApiUrl", ReadPini("API", "OrderApiUrl", tcIniFile))
ADDPROPERTY(loSettings, "ApiKey", ReadPini("API", "ApiKey", tcIniFile))
ADDPROPERTY(loSettings, "ApiShop", ReadPini("API", "ApiShop", tcIniFile))
ADDPROPERTY(loSettings, "UserAgent", ReadPini("API", "UserAgent", tcIniFile))
ADDPROPERTY(loSettings, "ContentType", ReadPini("API", "ContentType", tcIniFile))
*-- Sectiunea PAGINATION
ADDPROPERTY(loSettings, "Limit", VAL(ReadPini("PAGINATION", "Limit", tcIniFile)))
*-- Sectiunea OPTIONS
ADDPROPERTY(loSettings, "GetProducts", ReadPini("OPTIONS", "GetProducts", tcIniFile) = "1")
ADDPROPERTY(loSettings, "GetOrders", ReadPini("OPTIONS", "GetOrders", tcIniFile) = "1")
*-- Sectiunea FILTERS
ADDPROPERTY(loSettings, "OrderDaysBack", VAL(ReadPini("FILTERS", "OrderDaysBack", tcIniFile)))
*-- Sectiunea ORACLE - pentru conexiunea la database
ADDPROPERTY(loSettings, "OracleUser", ReadPini("ORACLE", "OracleUser", tcIniFile))
ADDPROPERTY(loSettings, "OraclePassword", ReadPini("ORACLE", "OraclePassword", tcIniFile))
ADDPROPERTY(loSettings, "OracleDSN", ReadPini("ORACLE", "OracleDSN", tcIniFile))
*-- Sectiunea SYNC - pentru configurarea sincronizarii
ADDPROPERTY(loSettings, "AdapterProgram", ReadPini("SYNC", "AdapterProgram", tcIniFile))
ADDPROPERTY(loSettings, "JsonFilePattern", ReadPini("SYNC", "JsonFilePattern", tcIniFile))
ADDPROPERTY(loSettings, "AutoRunAdapter", ReadPini("SYNC", "AutoRunAdapter", tcIniFile) = "1")
*-- Salvare in proprietatea clasei
THIS.oSettings = loSettings
RETURN loSettings
ENDPROC
*-- Functie pentru crearea unui fisier INI implicit cu setari de baza
PROCEDURE CreateDefaultIni
PARAMETERS tcIniFile
LOCAL llSuccess
IF EMPTY(tcIniFile)
tcIniFile = THIS.cIniFile
ENDIF
llSuccess = .T.
TRY
*-- Sectiunea API
WritePini("API", "ApiBaseUrl", "https://api.gomag.ro/api/v1/product/read/json?enabled=1", tcIniFile)
WritePini("API", "OrderApiUrl", "https://api.gomag.ro/api/v1/order/read/json", tcIniFile)
WritePini("API", "ApiKey", "YOUR_API_KEY_HERE", tcIniFile)
WritePini("API", "ApiShop", "https://yourstore.gomag.ro", tcIniFile)
WritePini("API", "UserAgent", "Mozilla/5.0", tcIniFile)
WritePini("API", "ContentType", "application/json", tcIniFile)
*-- Sectiunea PAGINATION
WritePini("PAGINATION", "Limit", "100", tcIniFile)
*-- Sectiunea OPTIONS
WritePini("OPTIONS", "GetProducts", "1", tcIniFile)
WritePini("OPTIONS", "GetOrders", "1", tcIniFile)
*-- Sectiunea FILTERS
WritePini("FILTERS", "OrderDaysBack", "7", tcIniFile)
*-- Sectiunea ORACLE - conexiune database
WritePini("ORACLE", "OracleUser", "MARIUSM_AUTO", tcIniFile)
WritePini("ORACLE", "OraclePassword", "ROMFASTSOFT", tcIniFile)
WritePini("ORACLE", "OracleDSN", "ROA_CENTRAL", tcIniFile)
*-- Sectiunea SYNC - configurare sincronizare
WritePini("SYNC", "AdapterProgram", "gomag-adapter.prg", tcIniFile)
WritePini("SYNC", "JsonFilePattern", "gomag_orders*.json", tcIniFile)
WritePini("SYNC", "AutoRunAdapter", "1", tcIniFile)
CATCH
llSuccess = .F.
ENDTRY
RETURN llSuccess
ENDPROC
*-- Functie pentru validarea setarilor obligatorii
PROCEDURE ValidateSettings
LPARAMETERS toSettings
LOCAL llValid, lcErrors
IF PCOUNT() = 0
toSettings = THIS.oSettings
ENDIF
IF TYPE('toSettings') <> 'O' OR ISNULL(toSettings)
RETURN .F.
ENDIF
llValid = .T.
lcErrors = ""
*-- Verificare setari API obligatorii
IF EMPTY(toSettings.ApiKey) OR toSettings.ApiKey = "YOUR_API_KEY_HERE"
llValid = .F.
lcErrors = lcErrors + "ApiKey nu este setat corect in settings.ini" + CHR(13) + CHR(10)
ENDIF
IF EMPTY(toSettings.ApiShop) OR "yourstore.gomag.ro" $ toSettings.ApiShop
llValid = .F.
lcErrors = lcErrors + "ApiShop nu este setat corect in settings.ini" + CHR(13) + CHR(10)
ENDIF
*-- Verificare setari Oracle obligatorii (doar pentru sync)
IF TYPE('toSettings.OracleUser') = 'C' AND EMPTY(toSettings.OracleUser)
llValid = .F.
lcErrors = lcErrors + "OracleUser nu este setat in settings.ini" + CHR(13) + CHR(10)
ENDIF
IF TYPE('toSettings.OracleDSN') = 'C' AND EMPTY(toSettings.OracleDSN)
llValid = .F.
lcErrors = lcErrors + "OracleDSN nu este setat in settings.ini" + CHR(13) + CHR(10)
ENDIF
*-- Log erorile daca exista
IF !llValid AND TYPE('gcLogFile') = 'C'
LogMessage("Erori validare settings.ini:", "ERROR", gcLogFile)
LogMessage(lcErrors, "ERROR", gcLogFile)
ENDIF
RETURN llValid
ENDPROC
*-- Functie pentru configurarea initiala a aplicatiei
PROCEDURE Setup
LOCAL llSetupOk
llSetupOk = .T.
*-- Verificare existenta settings.ini
IF !CheckIniFile(THIS.cIniFile)
IF TYPE('gcLogFile') = 'C'
LogMessage("ATENTIE: Fisierul settings.ini nu a fost gasit!", "WARN", gcLogFile)
LogMessage("Cream un fisier settings.ini implicit...", "INFO", gcLogFile)
ENDIF
IF THIS.CreateDefaultIni()
IF TYPE('gcLogFile') = 'C'
LogMessage("Fisier settings.ini creat cu succes.", "INFO", gcLogFile)
LogMessage("IMPORTANT: Modifica setarile din settings.ini (ApiKey, ApiShop) inainte de a rula scriptul din nou!", "INFO", gcLogFile)
ENDIF
llSetupOk = .F. && Opreste executia pentru a permite configurarea
ELSE
IF TYPE('gcLogFile') = 'C'
LogMessage("EROARE: Nu s-a putut crea fisierul settings.ini!", "ERROR", gcLogFile)
ENDIF
llSetupOk = .F.
ENDIF
ENDIF
*-- Incarca setarile daca setup-ul este OK
IF llSetupOk
THIS.LoadSettings()
THIS.lInitialized = .T.
ENDIF
RETURN llSetupOk
ENDPROC
*-- Functie pentru afisarea informatiilor despre configuratie
PROCEDURE DisplaySettingsInfo
LPARAMETERS toSettings
LOCAL lcInfo
IF PCOUNT() = 0
toSettings = THIS.oSettings
ENDIF
IF TYPE('toSettings') <> 'O' OR ISNULL(toSettings)
RETURN .F.
ENDIF
IF TYPE('gcLogFile') != 'C'
RETURN .F.
ENDIF
lcInfo = "=== CONFIGURATIE APLICATIE ==="
LogMessage(lcInfo, "INFO", gcLogFile)
*-- API Settings
LogMessage("API: " + toSettings.ApiShop, "INFO", gcLogFile)
LogMessage("Orders Days Back: " + TRANSFORM(toSettings.OrderDaysBack), "INFO", gcLogFile)
LogMessage("Get Products: " + IIF(toSettings.GetProducts, "DA", "NU"), "INFO", gcLogFile)
LogMessage("Get Orders: " + IIF(toSettings.GetOrders, "DA", "NU"), "INFO", gcLogFile)
*-- Oracle Settings (doar daca exista)
IF TYPE('toSettings.OracleUser') = 'C' AND !EMPTY(toSettings.OracleUser)
LogMessage("Oracle User: " + toSettings.OracleUser, "INFO", gcLogFile)
LogMessage("Oracle DSN: " + toSettings.OracleDSN, "INFO", gcLogFile)
ENDIF
*-- Sync Settings (doar daca exista)
IF TYPE('toSettings.AdapterProgram') = 'C' AND !EMPTY(toSettings.AdapterProgram)
LogMessage("Adapter Program: " + toSettings.AdapterProgram, "INFO", gcLogFile)
LogMessage("JSON Pattern: " + toSettings.JsonFilePattern, "INFO", gcLogFile)
LogMessage("Auto Run Adapter: " + IIF(toSettings.AutoRunAdapter, "DA", "NU"), "INFO", gcLogFile)
ENDIF
LogMessage("=== SFARSIT CONFIGURATIE ===", "INFO", gcLogFile)
RETURN .T.
ENDPROC
*-- Metoda pentru setup complet cu validare
PROCEDURE Initialize
LOCAL llSuccess
llSuccess = THIS.Setup()
IF llSuccess
llSuccess = THIS.ValidateSettings()
IF llSuccess
THIS.DisplaySettingsInfo()
ENDIF
ENDIF
RETURN llSuccess
ENDPROC
*-- Functie pentru obtinerea setarilor
PROCEDURE GetSettings
RETURN THIS.oSettings
ENDPROC
*-- Functie pentru obtinerea path-ului aplicatiei
PROCEDURE GetAppPath
RETURN THIS.cAppPath
ENDPROC
*-- Functie pentru obtinerea path-ului fisierului INI
PROCEDURE GetIniFile
RETURN THIS.cIniFile
ENDPROC
ENDDEFINE
*-- ApplicationSetup Class - Clasa pentru configurarea si setup-ul aplicatiei
*-- Caracteristici:
*-- - Gestionare completa a settings.ini cu toate sectiunile
*-- - Creare fisier implicit cu valori default
*-- - Validare setari obligatorii pentru functionare
*-- - Setup si initializare completa cu o singura metoda
*-- - Afisarea informatiilor despre configuratia curenta
*-- - Proprietati pentru acces facil la configuratii si paths