@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