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>
This commit is contained in:
@@ -15,15 +15,22 @@ PRIVATE gcAppPath, gcLogFile, gnStartTime, gnOrdersProcessed, gnOrdersSuccess, g
|
||||
PRIVATE goConnectie, goSettings, goAppSetup
|
||||
LOCAL lcJsonPattern, laJsonFiles[1], lnJsonFiles, lnIndex, lcJsonFile
|
||||
LOCAL loJsonData, lcJsonContent, lnOrderCount, lnOrderIndex
|
||||
LOCAL loOrder, lcResult, llProcessSuccess
|
||||
LOCAL loOrder, lcResult, llProcessSuccess, lcPath
|
||||
|
||||
goConnectie = NULL
|
||||
|
||||
*-- Initializare
|
||||
gcAppPath = ADDBS(JUSTPATH(SYS(16,0)))
|
||||
SET DEFAULT TO (m.gcAppPath)
|
||||
SET PATH TO nfjson ADDITIVE
|
||||
|
||||
lcPath = gcAppPath + 'nfjson;'
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
|
||||
SET PROCEDURE TO utils.prg ADDITIVE
|
||||
SET PROCEDURE TO ApplicationSetup.prg ADDITIVE
|
||||
SET PROCEDURE TO nfjsonread.prg ADDITIVE
|
||||
SET PROCEDURE TO nfjsoncreate.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
|
||||
*-- Statistici
|
||||
gnStartTime = SECONDS()
|
||||
@@ -33,64 +40,64 @@ gnOrdersErrors = 0
|
||||
|
||||
*-- Initializare logging
|
||||
gcLogFile = InitLog("sync_comenzi")
|
||||
LogMessage("=== SYNC COMENZI WEB → ORACLE ROA ===", "INFO", gcLogFile)
|
||||
LogMessage("=== SYNC COMENZI WEB > ORACLE ROA ===", "INFO", gcLogFile)
|
||||
|
||||
*-- Creare și inițializare clasa setup aplicație
|
||||
*-- Creare si initializare clasa setup aplicatie
|
||||
goAppSetup = CREATEOBJECT("ApplicationSetup", gcAppPath)
|
||||
|
||||
*-- Setup complet cu validare și afișare configurație
|
||||
*-- Setup complet cu validare si afisare configuratie
|
||||
IF !goAppSetup.Initialize()
|
||||
LogMessage("EROARE: Setup-ul aplicației a eșuat sau necesită configurare!", "ERROR", gcLogFile)
|
||||
LogMessage("EROARE: Setup-ul aplicatiei a esuat sau necesita configurare!", "ERROR", gcLogFile)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
*-- Obținere setări din clasă
|
||||
*-- Obtinere setari din clasa
|
||||
goSettings = goAppSetup.GetSettings()
|
||||
|
||||
*-- Verificare directoare necesare
|
||||
IF !DIRECTORY(gcAppPath + "output")
|
||||
LogMessage("EROARE: Directorul output/ nu există! Rulează mai întâi adapter-ul web", "ERROR", gcLogFile)
|
||||
LogMessage("EROARE: Directorul output/ nu exista! Ruleaza mai intai adapter-ul web", "ERROR", gcLogFile)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
*-- Rulare automată adapter pentru obținere comenzi (dacă este configurat)
|
||||
*-- Rulare automata adapter pentru obtinere comenzi (daca este configurat)
|
||||
IF goSettings.AutoRunAdapter
|
||||
LogMessage("Rulez adapter pentru obținere comenzi: " + goSettings.AdapterProgram, "INFO", gcLogFile)
|
||||
LogMessage("Rulez adapter pentru obtinere comenzi: " + goSettings.AdapterProgram, "INFO", gcLogFile)
|
||||
IF !ExecuteAdapter()
|
||||
LogMessage("EROARE la rularea adapter-ului, continuez cu fișierele JSON existente", "WARN", gcLogFile)
|
||||
LogMessage("EROARE la rularea adapter-ului, continuez cu fisierele JSON existente", "WARN", gcLogFile)
|
||||
ENDIF
|
||||
ELSE
|
||||
LogMessage("AutoRunAdapter este dezactivat, folosesc doar fișierele JSON existente", "INFO", gcLogFile)
|
||||
LogMessage("AutoRunAdapter este dezactivat, folosesc doar fisierele JSON existente", "INFO", gcLogFile)
|
||||
ENDIF
|
||||
|
||||
*-- Găsire fișiere JSON comenzi din pattern configurat
|
||||
SET STEP ON
|
||||
*-- Gasire fisiere JSON comenzi din pattern configurat
|
||||
lcJsonPattern = gcAppPath + "output\" + goSettings.JsonFilePattern
|
||||
lnJsonFiles = ADIR(laJsonFiles, lcJsonPattern)
|
||||
|
||||
IF lnJsonFiles = 0
|
||||
LogMessage("AVERTISMENT: Nu au fost găsite fișiere JSON cu comenzi web", "WARN", gcLogFile)
|
||||
LogMessage("Rulează mai întâi adapter-ul web cu GetOrders=1 în settings.ini", "INFO", gcLogFile)
|
||||
LogMessage("AVERTISMENT: Nu au fost gasite fisiere JSON cu comenzi web", "WARN", gcLogFile)
|
||||
LogMessage("Ruleaza mai intai adapter-ul web cu GetOrders=1 in settings.ini", "INFO", gcLogFile)
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
|
||||
LogMessage("Găsite " + TRANSFORM(lnJsonFiles) + " fișiere JSON cu comenzi web", "INFO", gcLogFile)
|
||||
LogMessage("Gasite " + TRANSFORM(lnJsonFiles) + " fisiere JSON cu comenzi web", "INFO", gcLogFile)
|
||||
|
||||
*-- Încercare conectare Oracle (folosind conexiunea existentă din sistem)
|
||||
*-- Incercare conectare Oracle (folosind conexiunea existenta din sistem)
|
||||
IF !ConnectToOracle()
|
||||
LogMessage("EROARE: Nu s-a putut conecta la Oracle ROA", "ERROR", gcLogFile)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
*-- Procesare fiecare fișier JSON găsit
|
||||
*-- Procesare fiecare fisier JSON gasit
|
||||
FOR lnIndex = 1 TO lnJsonFiles
|
||||
lcJsonFile = gcAppPath + "output\" + laJsonFiles[lnIndex, 1]
|
||||
LogMessage("Procesez fișierul: " + laJsonFiles[lnIndex, 1], "INFO", gcLogFile)
|
||||
LogMessage("Procesez fisierul: " + laJsonFiles[lnIndex, 1], "INFO", gcLogFile)
|
||||
|
||||
*-- Citire și parsare JSON
|
||||
*-- Citire si parsare JSON
|
||||
TRY
|
||||
lcJsonContent = FILETOSTR(lcJsonFile)
|
||||
IF EMPTY(lcJsonContent)
|
||||
LogMessage("AVERTISMENT: Fișier JSON gol - " + laJsonFiles[lnIndex, 1], "WARN", gcLogFile)
|
||||
LogMessage("AVERTISMENT: Fisier JSON gol - " + laJsonFiles[lnIndex, 1], "WARN", gcLogFile)
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
@@ -101,21 +108,21 @@ FOR lnIndex = 1 TO lnJsonFiles
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
*-- Verificare dacă este array
|
||||
*-- Verificare daca este array
|
||||
IF TYPE('loJsonData') != 'O'
|
||||
LogMessage("EROARE: JSON-ul nu este un array valid - " + laJsonFiles[lnIndex, 1], "ERROR", gcLogFile)
|
||||
LOOP
|
||||
ENDIF
|
||||
SET STEP ON
|
||||
*-- Obtinere numar comenzi din array
|
||||
lnOrderCount = 0
|
||||
IF TYPE('loJsonData.array') = 'U'
|
||||
lnOrderCount = ALEN(loJsonData.array)
|
||||
ENDIF
|
||||
LogMessage("Gasite " + TRANSFORM(lnOrderCount) + " comenzi in " + laJsonFiles[lnIndex, 1], "INFO", gcLogFile)
|
||||
|
||||
*-- Obținere număr comenzi din array
|
||||
lnOrderCount = AMEMBERS(laOrders, loJsonData, 0)
|
||||
LogMessage("Găsite " + TRANSFORM(lnOrderCount) + " comenzi în " + laJsonFiles[lnIndex, 1], "INFO", gcLogFile)
|
||||
|
||||
*-- Procesare fiecare comandă din JSON
|
||||
FOR lnOrderIndex = 1 TO lnOrderCount
|
||||
lcOrderPropName = laOrders[lnOrderIndex]
|
||||
loOrder = EVALUATE('loJsonData.' + lcOrderPropName)
|
||||
|
||||
*-- Procesare fiecare comanda din JSON
|
||||
FOR EACH loOrder IN loJsonData.array
|
||||
IF TYPE('loOrder') = 'O'
|
||||
gnOrdersProcessed = gnOrdersProcessed + 1
|
||||
llProcessSuccess = ProcessWebOrder(loOrder)
|
||||
@@ -129,16 +136,16 @@ FOR lnIndex = 1 TO lnJsonFiles
|
||||
ENDFOR
|
||||
|
||||
CATCH TO loError
|
||||
LogMessage("EROARE la procesarea fișierului " + laJsonFiles[lnIndex, 1] + ": " + loError.Message, "ERROR", gcLogFile)
|
||||
LogMessage("EROARE la procesarea fisierului " + laJsonFiles[lnIndex, 1] + ": " + loError.Message, "ERROR", gcLogFile)
|
||||
gnOrdersErrors = gnOrdersErrors + 1
|
||||
ENDTRY
|
||||
ENDFOR
|
||||
|
||||
*-- Închidere conexiune Oracle
|
||||
*-- Inchidere conexiune Oracle
|
||||
DisconnectFromOracle()
|
||||
|
||||
*-- Logging final cu statistici
|
||||
LogMessage("=== PROCESARE COMPLETĂ ===", "INFO", gcLogFile)
|
||||
LogMessage("=== PROCESARE COMPLETA ===", "INFO", gcLogFile)
|
||||
LogMessage("Total comenzi procesate: " + TRANSFORM(gnOrdersProcessed), "INFO", gcLogFile)
|
||||
LogMessage("Comenzi importate cu succes: " + TRANSFORM(gnOrdersSuccess), "INFO", gcLogFile)
|
||||
LogMessage("Comenzi cu erori: " + TRANSFORM(gnOrdersErrors), "INFO", gcLogFile)
|
||||
@@ -150,7 +157,7 @@ RETURN .T.
|
||||
*-- HELPER FUNCTIONS
|
||||
*-- ===================================================================
|
||||
|
||||
*-- Funcție pentru conectarea la Oracle folosind setările din settings.ini
|
||||
*-- Functie pentru conectarea la Oracle folosind setarile din settings.ini
|
||||
FUNCTION ConnectToOracle
|
||||
LOCAL llSuccess, lcConnectionString, lnHandle
|
||||
|
||||
@@ -163,10 +170,10 @@ TRY
|
||||
IF lnHandle > 0
|
||||
goConnectie = lnHandle
|
||||
llSuccess = .T.
|
||||
LogMessage("Conectare Oracle reușită - Handle: " + TRANSFORM(lnHandle), "INFO", gcLogFile)
|
||||
LogMessage("Conectare Oracle reusita - Handle: " + TRANSFORM(lnHandle), "INFO", gcLogFile)
|
||||
LogMessage("DSN: " + goSettings.OracleDSN + " | User: " + goSettings.OracleUser, "DEBUG", gcLogFile)
|
||||
ELSE
|
||||
LogMessage("EROARE: Conectare Oracle eșuată - Handle: " + TRANSFORM(lnHandle), "ERROR", gcLogFile)
|
||||
LogMessage("EROARE: Conectare Oracle esuata - Handle: " + TRANSFORM(lnHandle), "ERROR", gcLogFile)
|
||||
LogMessage("DSN: " + goSettings.OracleDSN + " | User: " + goSettings.OracleUser, "ERROR", gcLogFile)
|
||||
ENDIF
|
||||
|
||||
@@ -177,16 +184,16 @@ ENDTRY
|
||||
RETURN llSuccess
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru deconectarea de la Oracle
|
||||
*-- Functie pentru deconectarea de la Oracle
|
||||
FUNCTION DisconnectFromOracle
|
||||
IF TYPE('goConnectie') = 'N' AND goConnectie > 0
|
||||
SQLDISCONNECT(goConnectie)
|
||||
LogMessage("Deconectare Oracle reușită", "INFO", gcLogFile)
|
||||
LogMessage("Deconectare Oracle reusita", "INFO", gcLogFile)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție principală de procesare comandă web
|
||||
*-- Functie principala de procesare comanda web
|
||||
FUNCTION ProcessWebOrder
|
||||
PARAMETERS loOrder
|
||||
LOCAL llSuccess, lcOrderNumber, lcOrderDate, lnPartnerID, lcArticlesJSON
|
||||
@@ -195,13 +202,13 @@ LOCAL lcObservatii, lcSQL, lnResult, lcErrorDetails
|
||||
llSuccess = .F.
|
||||
|
||||
TRY
|
||||
*-- Validare comandă
|
||||
*-- Validare comanda
|
||||
IF !ValidateWebOrder(loOrder)
|
||||
LogMessage("EROARE: Comandă web invalidă - lipsesc date obligatorii", "ERROR", gcLogFile)
|
||||
LogMessage("EROARE: Comanda web invalida - lipsesc date obligatorii", "ERROR", gcLogFile)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
*-- Extragere date comandă
|
||||
*-- Extragere date comanda
|
||||
lcOrderNumber = CleanWebText(TRANSFORM(loOrder.number))
|
||||
lcOrderDate = ConvertWebDate(loOrder.date)
|
||||
|
||||
@@ -219,14 +226,14 @@ TRY
|
||||
*-- Construire JSON articole
|
||||
lcArticlesJSON = BuildArticlesJSON(loOrder.items)
|
||||
IF EMPTY(lcArticlesJSON)
|
||||
LogMessage("EROARE: Nu s-au găsit articole valide în comanda " + lcOrderNumber, "ERROR", gcLogFile)
|
||||
LogMessage("EROARE: Nu s-au gasit articole valide in comanda " + lcOrderNumber, "ERROR", gcLogFile)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
*-- Construire observații cu detalii suplimentare
|
||||
*-- Construire observatii cu detalii suplimentare
|
||||
lcObservatii = BuildOrderObservations(loOrder)
|
||||
|
||||
*-- Apel package Oracle pentru import comandă
|
||||
*-- Apel package Oracle pentru import comanda
|
||||
lcSQL = "SELECT PACK_IMPORT_COMENZI.importa_comanda_web(?, TO_DATE(?, 'YYYY-MM-DD'), ?, ?, NULL, ?) AS ID_COMANDA FROM dual"
|
||||
|
||||
lnResult = SQLEXEC(goConnectie, lcSQL, ;
|
||||
@@ -238,33 +245,33 @@ TRY
|
||||
"cursor_comanda")
|
||||
|
||||
IF lnResult > 0 AND RECCOUNT("cursor_comanda") > 0 AND cursor_comanda.ID_COMANDA > 0
|
||||
LogMessage("SUCCES: Comandă importată - ID Oracle: " + TRANSFORM(cursor_comanda.ID_COMANDA), "INFO", gcLogFile)
|
||||
LogMessage("SUCCES: Comanda importata - ID Oracle: " + TRANSFORM(cursor_comanda.ID_COMANDA), "INFO", gcLogFile)
|
||||
USE IN cursor_comanda
|
||||
llSuccess = .T.
|
||||
ELSE
|
||||
*-- Obținere detalii eroare Oracle
|
||||
*-- Obtinere detalii eroare Oracle
|
||||
lcErrorDetails = GetOracleErrorDetails()
|
||||
LogMessage("EROARE: Import comandă eșuat pentru " + lcOrderNumber + " - " + lcErrorDetails, "ERROR", gcLogFile)
|
||||
LogMessage("EROARE: Import comanda esuat pentru " + lcOrderNumber + " - " + lcErrorDetails, "ERROR", gcLogFile)
|
||||
IF USED("cursor_comanda")
|
||||
USE IN cursor_comanda
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
CATCH TO loError
|
||||
LogMessage("EXCEPȚIE la procesarea comenzii " + lcOrderNumber + ": " + loError.Message, "ERROR", gcLogFile)
|
||||
LogMessage("EXCEPTIE la procesarea comenzii " + lcOrderNumber + ": " + loError.Message, "ERROR", gcLogFile)
|
||||
ENDTRY
|
||||
|
||||
RETURN llSuccess
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru validarea comenzii web
|
||||
*-- Functie pentru validarea comenzii web
|
||||
FUNCTION ValidateWebOrder
|
||||
PARAMETERS loOrder
|
||||
LOCAL llValid
|
||||
|
||||
llValid = .T.
|
||||
|
||||
*-- Verificări obligatorii
|
||||
*-- Verificari obligatorii
|
||||
IF TYPE('loOrder.number') != 'C' OR EMPTY(loOrder.number)
|
||||
llValid = .F.
|
||||
ENDIF
|
||||
@@ -284,7 +291,7 @@ ENDIF
|
||||
RETURN llValid
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru procesarea partenerului din billing GoMag
|
||||
*-- Functie pentru procesarea partenerului din billing GoMag
|
||||
FUNCTION ProcessPartnerFromBilling
|
||||
PARAMETERS loBilling
|
||||
LOCAL lnPartnerID, lcDenumire, lcCodFiscal, lcAdresa, lcTelefon, lcEmail
|
||||
@@ -297,18 +304,18 @@ TRY
|
||||
LOCAL lnIsPersoanaJuridica
|
||||
|
||||
IF TYPE('loBilling.company') = 'O' AND !EMPTY(loBilling.company.name)
|
||||
*-- Companie - persoană juridică
|
||||
*-- Companie - persoana juridica
|
||||
lcDenumire = CleanWebText(loBilling.company.name)
|
||||
lcCodFiscal = IIF(TYPE('loBilling.company.code') = 'C', loBilling.company.code, NULL)
|
||||
lnIsPersoanaJuridica = 1 && Persoană juridică
|
||||
lnIsPersoanaJuridica = 1 && Persoana juridica
|
||||
ELSE
|
||||
*-- Persoană fizică
|
||||
*-- Persoana fizica
|
||||
lcDenumire = CleanWebText(ALLTRIM(loBilling.firstname) + " " + ALLTRIM(loBilling.lastname))
|
||||
lcCodFiscal = NULL && Persoanele fizice nu au CUI în platformele web
|
||||
lnIsPersoanaJuridica = 0 && Persoană fizică
|
||||
lcCodFiscal = NULL && Persoanele fizice nu au CUI in platformele web
|
||||
lnIsPersoanaJuridica = 0 && Persoana fizica
|
||||
ENDIF
|
||||
|
||||
*-- Formatare adresă pentru Oracle (format semicolon cu prefix JUD:)
|
||||
*-- Formatare adresa pentru Oracle (format semicolon cu prefix JUD:)
|
||||
lcAdresa = FormatAddressForOracle(loBilling)
|
||||
|
||||
*-- Date contact
|
||||
@@ -318,7 +325,7 @@ TRY
|
||||
LogMessage("Partener: " + lcDenumire + " | CUI: " + IIF(ISNULL(lcCodFiscal), "NULL", lcCodFiscal) + " | Tip: " + IIF(lnIsPersoanaJuridica = 1, "JURIDICA", "FIZICA"), "DEBUG", gcLogFile)
|
||||
|
||||
*-- Apel package Oracle IMPORT_PARTENERI (PROCEDURA cu parametru OUT)
|
||||
*-- Folosind sintaxa corectă pentru parametrii OUT în VFP
|
||||
*-- Folosind sintaxa corecta pentru parametrii OUT in VFP
|
||||
LOCAL lnPartnerResult
|
||||
lnPartnerResult = 0
|
||||
|
||||
@@ -330,20 +337,20 @@ TRY
|
||||
lnPartnerID = lnPartnerResult
|
||||
LogMessage("Partener procesat cu succes: ID=" + TRANSFORM(lnPartnerID), "DEBUG", gcLogFile)
|
||||
ELSE
|
||||
*-- Obținere detalii eroare Oracle
|
||||
*-- Obtinere detalii eroare Oracle
|
||||
lcErrorDetails = GetOracleErrorDetails()
|
||||
LogMessage("EROARE la apelul procedurii PACK_IMPORT_PARTENERI pentru: " + lcDenumire + " - " + lcErrorDetails, "ERROR", gcLogFile)
|
||||
lnPartnerID = 0
|
||||
ENDIF
|
||||
|
||||
CATCH TO loError
|
||||
LogMessage("EXCEPȚIE la procesarea partenerului: " + loError.Message, "ERROR", gcLogFile)
|
||||
LogMessage("EXCEPTIE la procesarea partenerului: " + loError.Message, "ERROR", gcLogFile)
|
||||
ENDTRY
|
||||
|
||||
RETURN lnPartnerID
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru construirea JSON-ului cu articole conform package Oracle
|
||||
*-- Functie pentru construirea JSON-ului cu articole conform package Oracle
|
||||
FUNCTION BuildArticlesJSON
|
||||
PARAMETERS loItems
|
||||
LOCAL lcJSON, lnItemCount, lnIndex, lcItemProp, loItem
|
||||
@@ -374,7 +381,7 @@ TRY
|
||||
lcPrice = IIF(TYPE('loItem.price') = 'C' OR TYPE('loItem.price') = 'N', TRANSFORM(VAL(TRANSFORM(loItem.price))), "0")
|
||||
|
||||
IF !EMPTY(lcSku)
|
||||
*-- Adaugare virgulă pentru elementele următoare
|
||||
*-- Adaugare virgula pentru elementele urmatoare
|
||||
IF lnIndex > 1
|
||||
lcJSON = lcJSON + ","
|
||||
ENDIF
|
||||
@@ -395,7 +402,7 @@ ENDTRY
|
||||
RETURN lcJSON
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru curățarea textului web (HTML entities → ASCII simplu)
|
||||
*-- Functie pentru curatarea textului web (HTML entities → ASCII simplu)
|
||||
FUNCTION CleanWebText
|
||||
PARAMETERS tcText
|
||||
LOCAL lcResult
|
||||
@@ -406,7 +413,7 @@ ENDIF
|
||||
|
||||
lcResult = tcText
|
||||
|
||||
*-- Conversie HTML entities în caractere simple (fără diacritice)
|
||||
*-- Conversie HTML entities in caractere simple (fara diacritice)
|
||||
lcResult = STRTRAN(lcResult, 'ă', 'a') && ă → a
|
||||
lcResult = STRTRAN(lcResult, 'ș', 's') && ș → s
|
||||
lcResult = STRTRAN(lcResult, 'ț', 't') && ț → t
|
||||
@@ -425,7 +432,7 @@ lcResult = STRTRAN(lcResult, '<br />', ' ')
|
||||
RETURN ALLTRIM(lcResult)
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru conversia datei web în format Oracle
|
||||
*-- Functie pentru conversia datei web in format Oracle
|
||||
FUNCTION ConvertWebDate
|
||||
PARAMETERS tcWebDate
|
||||
LOCAL lcResult
|
||||
@@ -445,30 +452,30 @@ ELSE
|
||||
ENDIF
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru formatarea adresei în format semicolon pentru Oracle
|
||||
*-- Functie pentru formatarea adresei in format semicolon pentru Oracle
|
||||
FUNCTION FormatAddressForOracle
|
||||
PARAMETERS loBilling
|
||||
LOCAL lcAdresa, lcJudet, lcOras, lcStrada
|
||||
|
||||
*-- Extragere componente adresă
|
||||
*-- Extragere componente adresa
|
||||
lcJudet = IIF(TYPE('loBilling.region') = 'C', CleanWebText(loBilling.region), "Bucuresti")
|
||||
lcOras = IIF(TYPE('loBilling.city') = 'C', CleanWebText(loBilling.city), "BUCURESTI")
|
||||
lcStrada = IIF(TYPE('loBilling.address') = 'C', CleanWebText(loBilling.address), "Adresa necunoscuta")
|
||||
|
||||
*-- Format semicolon cu prefix JUD: conform specificațiilor Oracle
|
||||
*-- Format semicolon cu prefix JUD: conform specificatiilor Oracle
|
||||
lcAdresa = "JUD:" + lcJudet + ";" + lcOras + ";" + lcStrada
|
||||
|
||||
RETURN lcAdresa
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru construirea observațiilor comenzii
|
||||
*-- Functie pentru construirea observatiilor comenzii
|
||||
FUNCTION BuildOrderObservations
|
||||
PARAMETERS loOrder
|
||||
LOCAL lcObservatii
|
||||
|
||||
lcObservatii = ""
|
||||
|
||||
*-- Informații plată și livrare
|
||||
*-- Informatii plata si livrare
|
||||
IF TYPE('loOrder.payment') = 'O' AND TYPE('loOrder.payment.name') = 'C'
|
||||
lcObservatii = lcObservatii + "Payment: " + CleanWebText(loOrder.payment.name) + "; "
|
||||
ENDIF
|
||||
@@ -477,7 +484,7 @@ IF TYPE('loOrder.delivery') = 'O' AND TYPE('loOrder.delivery.name') = 'C'
|
||||
lcObservatii = lcObservatii + "Delivery: " + CleanWebText(loOrder.delivery.name) + "; "
|
||||
ENDIF
|
||||
|
||||
*-- Status și sursă
|
||||
*-- Status si sursa
|
||||
IF TYPE('loOrder.status') = 'C'
|
||||
lcObservatii = lcObservatii + "Status: " + CleanWebText(loOrder.status) + "; "
|
||||
ENDIF
|
||||
@@ -505,7 +512,7 @@ IF TYPE('loOrder.shipping') = 'O' AND TYPE('loOrder.billing') = 'O'
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
*-- Limitare lungime observații pentru Oracle
|
||||
*-- Limitare lungime observatii pentru Oracle
|
||||
IF LEN(lcObservatii) > 500
|
||||
lcObservatii = LEFT(lcObservatii, 497) + "..."
|
||||
ENDIF
|
||||
@@ -513,13 +520,13 @@ ENDIF
|
||||
RETURN lcObservatii
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru obținerea detaliilor erorii Oracle
|
||||
*-- Functie pentru obtinerea detaliilor erorii Oracle
|
||||
FUNCTION GetOracleErrorDetails
|
||||
LOCAL lcError, laError[1], lnErrorLines, lnIndex
|
||||
|
||||
lcError = ""
|
||||
|
||||
*-- Obținere eroare Oracle
|
||||
*-- Obtinere eroare Oracle
|
||||
lnErrorLines = AERROR(laError)
|
||||
IF lnErrorLines > 0
|
||||
FOR lnIndex = 1 TO lnErrorLines
|
||||
@@ -531,13 +538,13 @@ IF lnErrorLines > 0
|
||||
ENDIF
|
||||
|
||||
IF EMPTY(lcError)
|
||||
lcError = "Eroare Oracle nedefinită"
|
||||
lcError = "Eroare Oracle nedefinita"
|
||||
ENDIF
|
||||
|
||||
RETURN lcError
|
||||
ENDFUNC
|
||||
|
||||
*-- Funcție pentru execuția adapter-ului configurat
|
||||
*-- Functie pentru executia adapter-ului configurat
|
||||
FUNCTION ExecuteAdapter
|
||||
LOCAL llSuccess, lcAdapterPath
|
||||
|
||||
@@ -547,16 +554,16 @@ TRY
|
||||
lcAdapterPath = gcAppPath + goSettings.AdapterProgram
|
||||
|
||||
IF FILE(lcAdapterPath)
|
||||
LogMessage("Execuție adapter: " + lcAdapterPath, "INFO", gcLogFile)
|
||||
LogMessage("Executie adapter: " + lcAdapterPath, "INFO", gcLogFile)
|
||||
DO (lcAdapterPath)
|
||||
llSuccess = .T.
|
||||
LogMessage("Adapter executat cu succes", "INFO", gcLogFile)
|
||||
ELSE
|
||||
LogMessage("EROARE: Adapter-ul nu a fost găsit la: " + lcAdapterPath, "ERROR", gcLogFile)
|
||||
LogMessage("EROARE: Adapter-ul nu a fost gasit la: " + lcAdapterPath, "ERROR", gcLogFile)
|
||||
ENDIF
|
||||
|
||||
CATCH TO loError
|
||||
LogMessage("EXCEPȚIE la execuția adapter-ului " + goSettings.AdapterProgram + ": " + loError.Message, "ERROR", gcLogFile)
|
||||
LogMessage("EXCEPTIE la executia adapter-ului " + goSettings.AdapterProgram + ": " + loError.Message, "ERROR", gcLogFile)
|
||||
ENDTRY
|
||||
|
||||
RETURN llSuccess
|
||||
@@ -564,9 +571,9 @@ ENDFUNC
|
||||
|
||||
*-- Orchestrator complet pentru sincronizarea comenzilor web cu Oracle ROA
|
||||
*-- Caracteristici:
|
||||
*-- - Citește JSON-urile generate de gomag-vending.prg
|
||||
*-- - Procesează comenzile cu toate helper functions necesare
|
||||
*-- - Integrează cu package-urile Oracle validate în Phase 1
|
||||
*-- - Citeste JSON-urile generate de gomag-vending.prg
|
||||
*-- - Proceseaza comenzile cu toate helper functions necesare
|
||||
*-- - Integreaza cu package-urile Oracle validate in Phase 1
|
||||
*-- - Logging complet cu statistici de procesare
|
||||
*-- - Error handling pentru toate situațiile
|
||||
*-- - Error handling pentru toate situatiile
|
||||
*-- - Support pentru toate formatele GoMag (billing/shipping, companii/persoane fizice)
|
||||
Reference in New Issue
Block a user