*-- 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