achizitie import: TVA DVI cu valuta proprie, discount financiar, cote multiple

- TVA-ul de pe DVI poate avea valuta si curs proprii, diferite de ale facturii
  (rand "protejat": rand_dvi/valuta_proprie pe introdc, sparge_tva_protejat).
- Discount financiar pe factura: rand tip_rand='G' (401 = 767), TVA calculat pe
  baza diminuata, marfa si preturile articolelor pe valoarea integrala.
- Factura multi-cota: randurile S, G si T se sparg pe cotele articolelor, cu
  explicatia TVA din familia coloanei si alinierea T -> S.
- Teste noi in utile/Teste/achizitie_import (discount, DVI, cote, e2e).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U9uDgDfUQXbh2Neib36CN8
This commit is contained in:
2026-08-01 09:32:35 +03:00
parent 704e25e190
commit 832fea4913
62 changed files with 12071 additions and 575 deletions

View File

@@ -116,15 +116,24 @@ function Take-Screenshot([IntPtr]$Hwnd, [string]$Path) {
$bmp.Dispose()
}
# omoara doar vfp9 proprii (linia de comanda contine folderul testului), nu instante straine
function Stop-VfpProprii([string]$Marker) {
Get-CimInstance Win32_Process -Filter "Name='vfp9.exe'" -ErrorAction SilentlyContinue | ForEach-Object {
if ($_.CommandLine -and $_.CommandLine.ToLower().Contains($Marker.ToLower())) {
Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue
}
}
}
New-Item -ItemType Directory -Force -Path (Split-Path $OutPng -Parent) | Out-Null
if (Test-Path $SyncDir) { Get-ChildItem $SyncDir -File | Remove-Item -Force -ErrorAction SilentlyContinue } else { New-Item -ItemType Directory -Path $SyncDir | Out-Null }
Write-Host "Precompilez .fxp (izolat): $Precompile -Prg $Prg"
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
Stop-VfpProprii $TestDir
Start-Sleep -Milliseconds 500
Start-Process powershell -WindowStyle Hidden -ArgumentList @('-ExecutionPolicy','Bypass','-File',"`"$Precompile`"",'-Prg',"`"$Prg`"") -Wait | Out-Null
Start-Sleep -Seconds 2
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
Stop-VfpProprii $TestDir
Start-Sleep -Seconds 2
if (-not (Test-Path $TestFxp)) { Write-Warning "Nu s-a generat $TestFxp - compilare esuata."; exit 1 }
@@ -140,7 +149,7 @@ Push-Offscreen $hwnd
if (-not (Wait-File $ready0 $ReadyTimeoutSec $hwnd)) {
Write-Warning "Nu am primit ready_0 in ${ReadyTimeoutSec}s. Ultima linie log: '$(Get-Content $TestLog -Tail 1 -ErrorAction SilentlyContinue)'"
if (-not $proc.HasExited) { try { $proc.Kill() } catch {} }
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
Stop-VfpProprii $TestDir
exit 1
}
Write-Host "ready_0 primit - astept fereastra MESSAGEBOX() nativa (clasa #32770, acelasi PID)"
@@ -156,7 +165,7 @@ while ((Get-Date) -lt $deadline -and $dlgHwnd -eq [IntPtr]::Zero) {
if ($dlgHwnd -eq [IntPtr]::Zero) {
Write-Warning "Fereastra dialogului nu a aparut in ${DialogTimeoutSec}s."
if (-not $proc.HasExited) { try { $proc.Kill() } catch {} }
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
Stop-VfpProprii $TestDir
exit 1
}
Write-Host ("dialog gasit: hwnd={0} titlu=[{1}]" -f $dlgHwnd, [Win32Dlg]::GetTitle($dlgHwnd))
@@ -173,5 +182,5 @@ $done = Join-Path $SyncDir 'done.txt'
if (Wait-File $done 30 $hwnd) { Write-Host "done: $((Get-Content $done -Raw).Trim())" } else { Write-Warning "Nu am primit done.txt dupa inchiderea dialogului." }
Start-Sleep -Milliseconds 500
if (-not $proc.HasExited) { try { $proc.Kill() } catch {} }
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
Stop-VfpProprii $TestDir
Write-Host "GATA. Screenshot in $OutPng"