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>
387 lines
12 KiB
Batchfile
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
|