From 9e0e35661ee2d0a897e2fcde4ead0c35f42b815a Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Fri, 22 May 2026 12:32:20 +0300 Subject: [PATCH] feat(vadeco): script bat copiere lunara date contabilitate Script Windows interactiv pentru client VADECO_20240227: - verificare TCP port 1521 (fail-fast fara tunel SSH) - verificare calendar Oracle: deschidere luna noua (tnDeschidere=1) sau redeschidere cu avertisment stergere date (tnDeschidere=0) - apel ACOPIE_BAZA_DATE + pack_deschidere_luna.deschidere_luna - mod Dry Run (afiseaza SQL fara executie) si suport argumente CLI - valori implicite: anul si luna anterioara curenta Co-Authored-By: Claude Sonnet 4.6 --- .../clienti/vadeco/copiere_luna_vadeco.bat | 386 ++++++++++++++++++ 1 file changed, 386 insertions(+) create mode 100644 proxmox/lxc108-oracle/clienti/vadeco/copiere_luna_vadeco.bat diff --git a/proxmox/lxc108-oracle/clienti/vadeco/copiere_luna_vadeco.bat b/proxmox/lxc108-oracle/clienti/vadeco/copiere_luna_vadeco.bat new file mode 100644 index 0000000..ac267ad --- /dev/null +++ b/proxmox/lxc108-oracle/clienti/vadeco/copiere_luna_vadeco.bat @@ -0,0 +1,386 @@ +@echo off +setlocal EnableDelayedExpansion +chcp 1250 >nul + +REM ============================================================ +REM CONFIGURARE - completati parola inainte de a da clientului +REM ============================================================ +set DB_USER=VADECO_20240227 +set DB_PASS=ROMFASTSOFT +set DB_SERVICE=ROA_ROMFAST +REM ============================================================ +REM +REM UTILIZARE INTERACTIVA: +REM copiere_luna_vadeco.bat +REM +REM UTILIZARE CLI (pentru testare): +REM copiere_luna_vadeco.bat +REM mod: 1=Normal 2=Dry Run +REM an: ex: 2026 +REM luna: 1-12 +REM confirmare: D=Da N=Nu +REM Exemplu dry run: copiere_luna_vadeco.bat 2 2026 4 D +REM ============================================================ + +echo. +echo ============================================================ +echo COPIERE DATE CONTABILITATE - VADECO +echo Conectare: %DB_USER%@%DB_SERVICE% +echo ============================================================ +echo. + +REM ------------------------------------------------------------ +REM Calcul valori implicite: luna anterioara +REM ------------------------------------------------------------ +for /f %%a in ('powershell -noprofile -command "(Get-Date).AddMonths(-1).Year"') do set "DEFAULT_AN=%%a" +for /f %%a in ('powershell -noprofile -command "(Get-Date).AddMonths(-1).Month"') do set "DEFAULT_LUNA=%%a" + +REM ------------------------------------------------------------ +REM Detectare mod CLI vs interactiv +REM ------------------------------------------------------------ +if not "%~1"=="" goto :cli_mode + +REM ============================================================ +REM MOD INTERACTIV +REM ============================================================ + +:input_mod +echo Mod executie: +echo 1. Normal - executa modificarile in baza de date +echo 2. Dry Run - simulare, fara modificari (pentru testare) +echo. +set "MOD=" +set /p "MOD=Alegeti modul (1/2): " +if "%MOD%"=="1" goto :input_an +if "%MOD%"=="2" goto :input_an +echo EROARE: Introduceti 1 sau 2. +echo. +goto :input_mod + +:input_an +set "v_an=" +set /p "v_an=Introduceti ANUL [%DEFAULT_AN%]: " +if "%v_an%"=="" set "v_an=%DEFAULT_AN%" +echo %v_an%| findstr /r "^[0-9][0-9][0-9][0-9]$" >nul 2>&1 +if errorlevel 1 ( + echo EROARE: Anul trebuie sa fie exact 4 cifre. + goto :input_an +) + +:input_luna +set "v_luna=" +set /p "v_luna=Introduceti LUNA [%DEFAULT_LUNA%]: " +if "%v_luna%"=="" set "v_luna=%DEFAULT_LUNA%" +echo %v_luna%| findstr /r "^[0-9][0-9]*$" >nul 2>&1 +if errorlevel 1 ( + echo EROARE: Luna trebuie sa fie un numar. + goto :input_luna +) +if %v_luna% lss 1 ( + echo EROARE: Luna trebuie sa fie intre 1 si 12. + goto :input_luna +) +if %v_luna% gtr 12 ( + echo EROARE: Luna trebuie sa fie intre 1 si 12. + goto :input_luna +) +goto :validate_ok + +REM ============================================================ +REM MOD CLI (pentru testare) +REM ============================================================ +:cli_mode +set "MOD=%~1" +set "v_an=%~2" +set "v_luna=%~3" +if "%v_an%"=="" set "v_an=%DEFAULT_AN%" +if "%v_luna%"=="" set "v_luna=%DEFAULT_LUNA%" +echo %v_an%| findstr /r "^[0-9][0-9][0-9][0-9]$" >nul 2>&1 +if errorlevel 1 ( + echo EROARE: Anul trebuie sa fie exact 4 cifre ^(primit: %v_an%^). + exit /b 1 +) +echo %v_luna%| findstr /r "^[0-9][0-9]*$" >nul 2>&1 +if errorlevel 1 ( + echo EROARE: Luna trebuie sa fie un numar ^(primit: %v_luna%^). + exit /b 1 +) +if %v_luna% lss 1 ( echo EROARE: Luna ^< 1. & exit /b 1 ) +if %v_luna% gtr 12 ( echo EROARE: Luna ^> 12. & exit /b 1 ) + +REM ============================================================ +REM VALIDARE COMUNA +REM ============================================================ +:validate_ok +:mod_ok + +if "%MOD%"=="1" ( + set "DRY_RUN=0" + echo Mod: NORMAL +) else if "%MOD%"=="2" ( + set "DRY_RUN=1" + echo Mod: DRY RUN ^(simulare^) +) else ( + echo EROARE: Mod invalid ^(primit: %MOD%^). Folositi 1 sau 2. + exit /b 1 +) +echo. + +echo ------------------------------------------------------------ +echo AN: %v_an% LUNA: %v_luna% +if "%DRY_RUN%"=="1" echo MOD: DRY RUN - nu se vor face modificari +echo ------------------------------------------------------------ +echo. + +REM ------------------------------------------------------------ +REM Pas 4: Test conectivitate Oracle (rulat si in dry run) +REM ------------------------------------------------------------ +echo Se verifica conexiunea la Oracle... + +REM Test TCP rapid pe port 1521 (fail fast daca tunelul SSH nu e activ) +powershell -noprofile -command "try{$t=New-Object System.Net.Sockets.TcpClient;$t.Connect('127.0.0.1',1521);$t.Close();exit 0}catch{exit 1}" >nul 2>&1 +if errorlevel 1 ( + echo. + echo ============================================================ + echo EROARE: Nu ma pot conecta la baza de date Oracle! + echo. + echo Cauze posibile si solutii: + echo. + echo 1. Tunelul SSH nu este activ + echo -^> Porniti conexiunea SSH/PuTTY catre serverul ROMFAST + echo. + echo 2. Configurare tnsnames.ora lipsa sau incorecta + echo -^> Verificati ca exista intrarea ROA_ROMFAST in: + echo %%ORACLE_HOME%%\network\admin\tnsnames.ora + echo sau in directorul Oracle Instant Client + echo. + echo 3. sqlplus nu este instalat sau nu este in PATH + echo -^> Verificati ca Oracle Instant Client este instalat + echo si calea catre sqlplus este in variabila PATH + echo. + echo 4. User/parola incorect + echo -^> Contactati ROMFAST pentru resetare parola + echo ============================================================ + echo. + if "%~1"=="" pause + exit /b 1 +) + +set "TMP_SQL=%TEMP%\vadeco_test_%RANDOM%.sql" +set "TMP_LOG=%TEMP%\vadeco_test_%RANDOM%.log" + +echo WHENEVER SQLERROR EXIT 1 > "%TMP_SQL%" +echo SET FEEDBACK OFF >> "%TMP_SQL%" +echo SET HEADING OFF >> "%TMP_SQL%" +echo SET PAGESIZE 0 >> "%TMP_SQL%" +echo SELECT 1 FROM DUAL; >> "%TMP_SQL%" +echo EXIT; >> "%TMP_SQL%" + +sqlplus -s %DB_USER%/%DB_PASS%@%DB_SERVICE% @"%TMP_SQL%" > "%TMP_LOG%" 2>&1 +set CONN_ERR=%errorlevel% +del "%TMP_SQL%" "%TMP_LOG%" 2>nul + +if %CONN_ERR% neq 0 ( + echo. + echo EROARE: Autentificare Oracle esuata ^(user/parola incorecte^). + echo Contactati ROMFAST pentru resetare parola. + echo. + if "%~1"=="" pause + exit /b 1 +) +echo Conexiune Oracle: OK +echo. + +REM ------------------------------------------------------------ +REM Pas 5: Verificare calendar (rulat si in dry run) +REM ------------------------------------------------------------ +echo Se verifica calendarul pentru luna %v_luna%/%v_an%... + +set "TMP_SQL=%TEMP%\vadeco_cal_%RANDOM%.sql" +set "TMP_LOG=%TEMP%\vadeco_cal_%RANDOM%.log" + +echo WHENEVER SQLERROR EXIT 1 > "%TMP_SQL%" +echo SET FEEDBACK OFF >> "%TMP_SQL%" +echo SET HEADING OFF >> "%TMP_SQL%" +echo SET PAGESIZE 0 >> "%TMP_SQL%" +echo SELECT COUNT^(*^) FROM CALENDAR WHERE AN = %v_an% AND LUNA = %v_luna%; >> "%TMP_SQL%" +echo EXIT; >> "%TMP_SQL%" + +sqlplus -s %DB_USER%/%DB_PASS%@%DB_SERVICE% @"%TMP_SQL%" > "%TMP_LOG%" 2>&1 +set SQL_ERR=%errorlevel% + +if %SQL_ERR% neq 0 ( + echo. + echo EROARE la verificarea calendarului: + type "%TMP_LOG%" + del "%TMP_SQL%" "%TMP_LOG%" 2>nul + echo. + if "%~1"=="" pause + exit /b 1 +) + +set /p CAL_COUNT= < "%TMP_LOG%" +del "%TMP_SQL%" "%TMP_LOG%" 2>nul +set "CAL_COUNT=%CAL_COUNT: =%" + +if "%CAL_COUNT%"=="0" ( + set TN_DESCHIDERE=1 + echo Luna %v_luna%/%v_an% nu exista in calendar. + echo Operatie: DESCHIDERE DE LUNA NOUA ^(tnDeschidere=1^) + echo. +) else ( + set TN_DESCHIDERE=0 + echo Luna %v_luna%/%v_an% este deja deschisa in calendar. + echo Operatie: REDESCHIDERE DE LUNA ^(tnDeschidere=0^) + echo. + echo ============================================================ + echo ATENTIE: Daca continuati: + echo - datele existente pentru luna %v_luna%/%v_an% vor fi STERSE + echo - datele vor fi reimportate din sursa VADECO + echo - aceasta operatie NU poate fi anulata + echo ============================================================ + echo. +) + +if not "%~1"=="" goto :skip_confirm +if "!TN_DESCHIDERE!"=="0" ( + set /p "CONFIRM=Doriti sa reimportati luna %v_luna%/%v_an%? (D/N): " +) else ( + set /p "CONFIRM=Continuati? (D/N): " +) +if /i not "!CONFIRM!"=="D" ( + echo. + echo Operatie anulata. + echo. + pause + exit /b 0 +) +goto :proceed + +:skip_confirm +set "CONFIRM=%~4" +if /i not "%CONFIRM%"=="D" ( + echo Operatie anulata ^(confirmare CLI: %CONFIRM%^). + exit /b 0 +) + +:proceed +echo. +if "%DRY_RUN%"=="1" ( + echo ============================================================ + echo DRY RUN - SQL care ar fi executat: + echo ============================================================ +) else ( + echo ============================================================ + echo Se proceseaza luna %v_luna%/%v_an%... + echo ============================================================ +) +echo. + +REM ------------------------------------------------------------ +REM Pas 6: ACOPIE_BAZA_DATE +REM ------------------------------------------------------------ +echo [1/2] ACOPIE_BAZA_DATE ^(copiere date contabilitate din sursa VADECO^) + +set "TMP_SQL=%TEMP%\vadeco_copiere_%RANDOM%.sql" +set "TMP_LOG=%TEMP%\vadeco_copiere_%RANDOM%.log" + +echo WHENEVER SQLERROR EXIT 1 > "%TMP_SQL%" +echo SET SERVEROUTPUT ON SIZE UNLIMITED >> "%TMP_SQL%" +echo SET FEEDBACK OFF >> "%TMP_SQL%" +echo BEGIN >> "%TMP_SQL%" +echo ACOPIE_BAZA_DATE^(v_an =^> %v_an%, v_luna =^> %v_luna%^); >> "%TMP_SQL%" +echo END; >> "%TMP_SQL%" +echo / >> "%TMP_SQL%" +echo EXIT; >> "%TMP_SQL%" + +if "%DRY_RUN%"=="1" ( + echo --- SQL ^(simulare, nu se executa^) --- + type "%TMP_SQL%" + echo --- sfarsit SQL --- + del "%TMP_SQL%" 2>nul + echo. +) else ( + sqlplus -s %DB_USER%/%DB_PASS%@%DB_SERVICE% @"%TMP_SQL%" > "%TMP_LOG%" 2>&1 + set SQL_ERR=!errorlevel! + if exist "%TMP_LOG%" ( + for %%A in ("%TMP_LOG%") do if %%~zA gtr 0 type "%TMP_LOG%" + ) + del "%TMP_SQL%" "%TMP_LOG%" 2>nul + if !SQL_ERR! neq 0 ( + echo. + echo EROARE la copierea datelor! Contactati ROMFAST pentru asistenta. + echo. + if "%~1"=="" pause + exit /b 1 + ) + echo Copiere date: OK +) +echo. + +REM ------------------------------------------------------------ +REM Pas 7: pack_deschidere_luna.deschidere_luna +REM ------------------------------------------------------------ +if %TN_DESCHIDERE%==1 ( + echo [2/2] pack_deschidere_luna.deschidere_luna ^(deschidere luna noua^) +) else ( + echo [2/2] pack_deschidere_luna.deschidere_luna ^(redeschidere luna^) +) + +set "TMP_SQL=%TEMP%\vadeco_deschidere_%RANDOM%.sql" +set "TMP_LOG=%TEMP%\vadeco_deschidere_%RANDOM%.log" + +echo WHENEVER SQLERROR EXIT 1 > "%TMP_SQL%" +echo SET SERVEROUTPUT ON SIZE UNLIMITED >> "%TMP_SQL%" +echo SET FEEDBACK OFF >> "%TMP_SQL%" +echo BEGIN >> "%TMP_SQL%" +echo pack_deschidere_luna.deschidere_luna^( >> "%TMP_SQL%" +echo tnAn =^> %v_an%, >> "%TMP_SQL%" +echo tnLuna =^> %v_luna%, >> "%TMP_SQL%" +echo tnDeschidere =^> %TN_DESCHIDERE%, >> "%TMP_SQL%" +echo tnTipRefacere =^> 3, >> "%TMP_SQL%" +echo tnTvaIncasare =^> 0, >> "%TMP_SQL%" +echo tnIdUtil =^> -3, >> "%TMP_SQL%" +echo tcSchema =^> 'VADECO_20240227', >> "%TMP_SQL%" +echo tnIdProgramareDeschidere =^> NULL >> "%TMP_SQL%" +echo ^); >> "%TMP_SQL%" +echo END; >> "%TMP_SQL%" +echo / >> "%TMP_SQL%" +echo EXIT; >> "%TMP_SQL%" + +if "%DRY_RUN%"=="1" ( + echo --- SQL ^(simulare, nu se executa^) --- + type "%TMP_SQL%" + echo --- sfarsit SQL --- + del "%TMP_SQL%" 2>nul + echo. +) else ( + sqlplus -s %DB_USER%/%DB_PASS%@%DB_SERVICE% @"%TMP_SQL%" > "%TMP_LOG%" 2>&1 + set SQL_ERR=!errorlevel! + if exist "%TMP_LOG%" ( + for %%A in ("%TMP_LOG%") do if %%~zA gtr 0 type "%TMP_LOG%" + ) + del "%TMP_SQL%" "%TMP_LOG%" 2>nul + if !SQL_ERR! neq 0 ( + echo. + echo EROARE la deschiderea lunii! Contactati ROMFAST pentru asistenta. + echo. + if "%~1"=="" pause + exit /b 1 + ) + echo Deschidere luna: OK +) + +echo. +if "%DRY_RUN%"=="1" ( + echo ============================================================ + echo DRY RUN COMPLET. Nu s-au facut modificari in baza de date. + echo ============================================================ +) else ( + echo ============================================================ + echo SUCCES! Luna %v_luna%/%v_an% a fost procesata. + echo ============================================================ +) +echo. +if "%~1"=="" pause +exit /b 0