Files
ROMFASTSQL/proxmox/lxc108-oracle/clienti/vadeco/copiere_luna_vadeco.bat
Marius Mutu 9e0e35661e 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 <noreply@anthropic.com>
2026-05-22 12:32:20 +03:00

387 lines
12 KiB
Batchfile

@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 <mod> <an> <luna> <confirmare>
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