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:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -126,6 +126,7 @@ bash.exe.stackdump
|
||||
.claude/
|
||||
|
||||
# --- artefacte generate de rularile de test headless ---
|
||||
utile/Teste/**/screenshots/
|
||||
utile/Teste/**/uisync/
|
||||
# (numele reale poarta sufixul scenariului: screenshots_total/, uisync_212/, ...)
|
||||
utile/Teste/**/screenshots*/
|
||||
utile/Teste/**/uisync*/
|
||||
utile/Teste/**/*_log.txt
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -108,6 +108,26 @@ Cand un bug apare "de azi", compara cu clasa veche fara a atinge SVN:
|
||||
programului ruleaza, doar linia aceea lipseste din `.fxp` si da eroare 16 cand se ajunge la
|
||||
ea. De aceea SQL-ul lung se scrie cu `TEXT TO <var> [TEXTMERGE] NOSHOW ... ENDTEXT` sau
|
||||
concatenat. Verificare: `awk 'length($0) > 260 {print NR": "length($0)}' fisier.prg`.
|
||||
- **Linie de COD (nu doar literal string) prea lunga intr-o metoda de clasa `.vc2` poate
|
||||
arunca eroarea 11 ("Function argument value, type, or count is invalid") pe PRIMA
|
||||
instructiune a metodei, nu pe linia vinovata** - simptom complet derutant. Se exclude prin
|
||||
diagnostic: aceeasi expresie merge normal la nivel de program, in alta clasa, intr-o
|
||||
subclasa cu metoda noua, si pe instanta virgina - deci nu tine de tipul datelor, de context
|
||||
sau de clasa parinte. Reper practic: linii preexistente >200 caractere intr-o clasa mare
|
||||
functioneaza pana la ~250; pragul real e in jur de 255, ca la literalii de string. Remediu:
|
||||
sparge expresia in pasi cu variabile locale. Verificare (comparat intre fisierul curent si
|
||||
un backup anterior):
|
||||
```powershell
|
||||
$l=[IO.File]::ReadAllLines($p,[Text.Encoding]::GetEncoding(28591))
|
||||
for($i=0;$i -lt $l.Length;$i++){ if($l[$i].Length -gt 200){ "{0}: len={1}" -f ($i+1), $l[$i].Length } }
|
||||
```
|
||||
- **Un UDF care citeste campul curent (`Nvl(camp,0)=1` sau similar) nu e de incredere intr-o
|
||||
clauza de filtrare** (`SELECT ... WHERE`, `LOCATE FOR`, `SCAN FOR`, `DELETE FOR`) - pointerul
|
||||
nu e garantat pe randul evaluat la fiecare apel, deci filtrul devine practic o valoare
|
||||
constanta (fie nu se declanseaza niciodata, fie loveste tot). Simptome vazute: o comasare de
|
||||
randuri care nu se mai producea deloc; un test agatat. Remediu: in clauze de filtrare
|
||||
foloseste expresia INLINE pe camp (`Nvl(camp,0) <> 1`); pastreaza helper-ul doar in cod
|
||||
procedural (`If`, `Replace` pe randul curent), unde pointerul e garantat pozitionat.
|
||||
|
||||
## 7. Capcane la SCRIEREA scriptului de test
|
||||
|
||||
|
||||
@@ -10,11 +10,21 @@ in IDE. `txt2vcx.ps1` cu `-CacheRoot` = `-ProjectRoot` (implicit). Pasul 0 de ma
|
||||
rularea `git_sync.ps1`; restul pasilor raman la fel. Fluxul cu cache extern (`vcx2txt.ps1` +
|
||||
`-CacheRoot` separat) ramane doar pentru proiectele nemigrate.
|
||||
|
||||
**Capcana: `git_sync.ps1` cu `-ProjectRoot` pe COMUN direct.** Lista implicita
|
||||
`-RoundtripExempt` are cai de forma `COMUN\clase\<f>.vcx` (raportate la radacina unei aplicatii,
|
||||
unde COMUN e subfolder) si se lipeste de `-ProjectRoot`. Cand radacina E chiar COMUN, caile nu
|
||||
mai potrivesc si clasele scutite (FFC/third-party cu `#INCLUDE`, ex. `oinventar.vcx`) raporteaza
|
||||
fals `roundtrip text1 != text2`. Ruleaza atunci cu lista rebazata:
|
||||
`git_sync.ps1 -ProjectRoot 'D:\ROA\ROAGEST\COMUN' -RoundtripExempt @('clase\accessibility.vcx',
|
||||
'clase\oinventar.vcx','clase\_gdiplus.vcx','clase\_reportlistener.vcx',
|
||||
'utile\foxcharts\foxcharts.vcx','utile\web\_webview.vcx')` - si apeleaza scriptul cu `&`, nu cu
|
||||
`powershell -File` (acolo lista nu se leaga ca array).
|
||||
|
||||
## Parametri per proiect (nemigrate, cache extern)
|
||||
|
||||
- **ROAGEST**: `-Project 'D:\ROA\ROAGEST\roagest.pjx' -ProjectRoot 'D:\ROA\ROAGEST'
|
||||
-CacheRoot 'D:\ROA\_vfp_textcache\roagest'`; procese de verificat inainte de write-back:
|
||||
`vfp9`, `roagest`; patch-uri de review in `docs/diff_runda<N>_<subiect>.patch`.
|
||||
-CacheRoot 'D:\ROA\_vfp_textcache\roagest'`; patch-uri de review in
|
||||
`docs/diff_runda<N>_<subiect>.patch`.
|
||||
|
||||
## Pasii unei runde
|
||||
|
||||
@@ -37,7 +47,10 @@ rularea `git_sync.ps1`; restul pasilor raman la fel. Fluxul cu cache extern (`vc
|
||||
dintr-un cursor in loc de Scan manual; butoane din cmd_butoane.vcx in loc de butoane ad-hoc).
|
||||
Inventarul comunelor: COMUN\docs\inventar-comun.md - se consulta si la pasul de plan/arhitectura,
|
||||
inainte de a scrie cod nou.
|
||||
4. Preconditie write-back: niciun proces vfp9/<exe proiect> (tin lock pe binar); nu se omoara.
|
||||
4. Preconditie write-back: binarul tinta sa nu fie blocat. `txt2vcx.ps1` verifica singur
|
||||
(`Test-ExclusiveAccess` pe `.vcx`+`.vct`) si refuza cu mesaj clar daca e lock. NU conteaza
|
||||
existenta altor instante `vfp9` — utilizatorul poate lucra in paralel in alt proiect VFP —
|
||||
si NU se omoara procese: cand lock-ul exista, se cere utilizatorului sa inchida sesiunea.
|
||||
5. Write-back: `txt2vcx.ps1 -TextFile <vc2> -ProjectRoot <root> -CacheRoot <cache>`
|
||||
(+ `-AllowComun` cu aprobare explicita pentru tinte COMUN — afecteaza toate aplicatiile ROA).
|
||||
Succes = fidelity-check trecut: binar cu mtime nou; `vcx2txt.ps1` ulterior il vede la zi.
|
||||
@@ -68,3 +81,8 @@ rularea `git_sync.ps1`; restul pasilor raman la fel. Fluxul cu cache extern (`vc
|
||||
fluxul text->bin punctual pe binarul vizat.
|
||||
- Subagentii delegati primesc regulile 2-5 in prompt si raporteaza unicitatea sirurilor
|
||||
inlocuite + rezultatul fidelity-check-ului.
|
||||
- Fisierele `.vc2`/`.sc2` sunt CRLF, dar here-string-urile PowerShell (`"...`r`n..."` sau
|
||||
`@"..."@`) produc LF simplu pe orice linie noua inserata daca nu incluzi explicit `` `r`n ``
|
||||
la fiecare capat de linie - rezultatul e un fisier cu sfarsituri de linie amestecate (CRLF pe
|
||||
continutul vechi, LF pe cel nou). Verificare finala obligatorie dupa orice scriere: numara
|
||||
octetii `0x0A` neprecedati de `0x0D` (LF izolati) - trebuie sa fie 0.
|
||||
|
||||
@@ -38,3 +38,63 @@ Regula (valabila in toate proiectele ROA/VFP): un singur subagent care duce o mi
|
||||
completeaza-l, nu repeta investigatia.
|
||||
- Orchestratorul face el insusi munca de volum -> deleaga si pastreaza-si contextul
|
||||
pentru decizii, verificari si deblocari.
|
||||
|
||||
## Disciplina de context a ORCHESTRATORULUI
|
||||
|
||||
Pragul de ~200-250k e pentru subagenti, dar orchestratorul se umple la fel de repede daca isi
|
||||
lasa in sesiune munca de CITIT. Masurat pe o runda reala (implementare + 4 rulari ale unei suite
|
||||
de 25 de teste): sesiunea principala a ajuns la ~570k desi tot codul fusese scris de subagenti.
|
||||
Consumul, in ordinea marimii: (1) citirea rezultatelor de test dupa fiecare test terminat, cu tot
|
||||
cu liniile "OK"; (2) citirea codului ca sa diagnosticheze esecurile; (3) diagnostic si fixuri
|
||||
aplicate direct in loc de delegate.
|
||||
|
||||
- **Nu citi log-uri brute.** Scripturile de raportare afiseaza DOAR esecurile plus un total
|
||||
("22 OK, 3 FAIL: <nume + linia de esec>"). Tabelul complet se citeste o singura data, la
|
||||
baseline - nu dupa fiecare rulare. Pentru suitele VFP exista deja:
|
||||
`COMUN\utile\Teste\raport_teste.ps1 -Dir <folder> [-Tot] [-Baseline <fisier>]` - fara `-Tot`
|
||||
afiseaza doar esecurile, iar cu `-Baseline` le marcheaza `[preexistent]` vs `[NOU - REGRESIE]`.
|
||||
- **Nu citi cod ca sa diagnostichezi.** Deleaga cu "adu-mi dovada, nu fisierul": agentul intoarce
|
||||
cauza + linia + citatul minim. Verifici afirmatia, nu o redescoperi.
|
||||
- **Verifica prin assert, nu prin citire.** Daca vrei sa stii ca ceva e adevarat, cere o comanda
|
||||
care intoarce da/nu, nu continutul din care ai deduce singur.
|
||||
- **Nu aplica fixuri direct** decat sub ~5 linii si doar daca ai deja contextul in sesiune.
|
||||
- **Prag si pe orchestrator**: la ~50% din fereastra, scrie handoff-ul si reia orchestrarea
|
||||
dintr-o sesiune noua. Handoff-ul e deja pe disc - exact pentru asta exista.
|
||||
|
||||
## Model de lucru: backlog de story-uri mici, context mic per story
|
||||
|
||||
Impartirea pe "lane-uri" mari (o clasa, un modul) produce subagenti cu context mare si serializare
|
||||
pe fisier. Alternativa mai ieftina si mai robusta: **backlog de story-uri mici, fiecare rezolvabila
|
||||
cu context mic, rulate in bucla de agenti PROASPETI.**
|
||||
|
||||
Doua fisiere pe disc tin toata starea:
|
||||
|
||||
- `docs/handoff_<subiect>.md` - **contextul stabil**: reguli de editare, cai, ancore verificate,
|
||||
capcane confirmate, decizii luate. Il citeste fiecare agent; se actualizeaza rar.
|
||||
- `docs/backlog_<subiect>.md` - **starea vie**: story-uri cu ID, criteriu de acceptare
|
||||
VERIFICABIL, fisiere atinse, stare (`todo` / `in lucru` / `gata` / `blocat de #N`).
|
||||
|
||||
Bucla:
|
||||
1. orchestratorul ia primul story `todo` neblocat;
|
||||
2. spawneaza un agent proaspat cu prompt = trimitere la handoff + textul story-ului + criteriul
|
||||
de acceptare. **Nimic altceva** - fara istoric, fara rapoartele celorlalti agenti;
|
||||
3. agentul modifica, ruleaza verificarea din criteriu si raporteaza **verdict + ce a schimbat +
|
||||
ce a descoperit neasteptat**, atat;
|
||||
4. orchestratorul marcheaza story-ul in backlog si trece la urmatorul.
|
||||
|
||||
O story buna: are criteriu de acceptare care se poate RULA (un test, un grep, o comanda da/nu);
|
||||
atinge un singur fisier sau o singura zona (altfel story-urile se serializeaza intre ele); incape
|
||||
in 15-20 de linii de descriere; nu cere citirea intregului fisier ca sa fie inteleasa.
|
||||
|
||||
Sablon:
|
||||
|
||||
### S7 - garda pe randul protejat in recalcule
|
||||
Fisiere: COMUN\clase\<x>.vc2 (do_executa, recalc_tva_document)
|
||||
Blocat de: S4
|
||||
De facut: <2-4 propozitii>
|
||||
Acceptare: test_<y>.ps1 trece 12/12 SI `rand_protejat()` nu mai apare in nicio clauza Where
|
||||
Stare: todo
|
||||
|
||||
Cand un story pica de doua ori la rand, nu-l reincerca a treia oara cu acelasi prompt: semnul e ca
|
||||
descrierea sau criteriul e gresit, nu executia. Rescrie story-ul (mai mic, sau cu criteriul
|
||||
corectat) inainte de a mai cheltui un agent.
|
||||
@@ -7,11 +7,17 @@
|
||||
.gitignore ca `docs/diff_runda*.patch`); raman doar local, pe disc.
|
||||
Curatenie: dupa commit se sterg patch-urile de review si backup-urile de lucru
|
||||
(`*.pre_runda*.bak`).
|
||||
2. Comentarii in cod: istoricul modificarilor sta DOAR in ANTETUL fisierului, niciodata inline.
|
||||
Se aplica la fel in `.prg` si in package-urile/procedurile PL/SQL Oracle.
|
||||
In corpul codului sunt permise numai comentarii FUNCTIONALE (ce face codul si de ce, acolo
|
||||
unde nu se vede din cod) - niciodata "am adaugat / am modificat / am sters", data sau autor.
|
||||
In ANTET se tine o singura intrare CUMULATIVA per functionalitate, scurta si compacta, in stilul
|
||||
2. Comentarii in cod: minime si strict functionale - descriu comportamentul CURENT, ca si cum
|
||||
codul ar fi fost scris asa de la inceput. O linie de regula; 2-3 linii doar pentru o metoda
|
||||
cu contract nebanal (parametri, cursorul asteptat/lasat deschis, pozitionarea la iesire).
|
||||
Istoricul modificarilor sta DOAR in ANTETUL fisierului, niciodata inline; se aplica la fel
|
||||
in `.prg` si in package-urile/procedurile PL/SQL Oracle.
|
||||
INTERZIS in comentariu: nume de agent ("claude"), referinte la documente de propuneri sau la
|
||||
decizii/etape (`docs/propuneri_*.md`, "M2", "T3", "dec.6", "runda27", "E7", "D-H2"), istoricul
|
||||
modificarii ("inlocuieste ...", "nu mai depinde de ...", "mutat din ..."), date si autori pe
|
||||
cod nou. Comentariile vechi in stil jurnal nu se rescriu din oficiu - doar cand blocul e
|
||||
oricum atins, sau la cerere explicita.
|
||||
In ANTETUL fisierului se tine o singura intrare CUMULATIVA per functionalitate, in stilul
|
||||
existent (`*!* DD.MM.YYYY` / `*!* autor` / `*!* ce face, 1-2 fraze`): la revenirea pe aceeasi
|
||||
lucrare se rescrie intrarea, nu se adauga alta. Autorul e persoana care semneaza livrarea
|
||||
(ex. `marius.mutu`) - niciodata "claude" sau alt nume de agent.
|
||||
|
||||
@@ -46,13 +46,17 @@ c. **Asteptarea `ready_0`**: cu `.fxp` cald START apare in ~2s, la rece mult mai
|
||||
classlib-uri). `-ReadyTimeoutSec` generos (implicit 180s); retry NUMAI la "start ratat",
|
||||
nu la "start lent". Detectia "a pornit" se face pe mtime-ul log-ului > momentul lansarii
|
||||
(un log stale tinut de un vfp9 zombi pacaleste verificarea "log ne-gol") - omoara zombii
|
||||
inainte de fiecare lansare.
|
||||
PROPRII (filtrati pe linia de comanda, vezi punctul e) inainte de fiecare lansare.
|
||||
d. **`vfp9 -A test.prg` deschide INTERMITENT editorul** in loc sa ruleze (log gol). Lanseaza
|
||||
`.fxp`-ul PRECOMPILAT. Precompilarea (`COMPILE`+`QUIT`) atarna dupa COMPILE si, rulata in
|
||||
ACEEASI sesiune powershell, otraveste lansarile ulterioare - ruleaza-o intr-un proces copil
|
||||
izolat (`Start-Process -Wait _precompile.ps1`).
|
||||
e. **Suitele NU se ruleaza in paralel**: `_precompile.ps1` face `Get-Process vfp9 | Stop-Process
|
||||
-Force` (omoara toate instantele), deci un test lansat in paralel il ucide pe cel in curs.
|
||||
e. **Suitele NU se ruleaza in paralel** intre ele: harness-ul isi omoara instantele `vfp9`
|
||||
ramase inainte de fiecare lansare, deci un al doilea test pornit peste primul il ucide.
|
||||
Omorarea e INSA filtrata pe linia de comanda (`Win32_Process.CommandLine` care contine
|
||||
folderul de teste): instantele `vfp9` straine — sesiunea IDE a utilizatorului sau teste
|
||||
dintr-un ALT proiect VFP — nu sunt atinse si nu blocheaza rularea. Nu reintroduce
|
||||
`Get-Process vfp9 | Stop-Process -Force` fara filtru.
|
||||
f. **FARA FURT DE FOCUS (17/07/2026)**: `Graphics.CopyFromScreen` fura focus si se corupe daca
|
||||
utilizatorul lucreaza in paralel - nu se mai foloseste. Capturile se fac cu `PrintWindow`
|
||||
(user32, P/Invoke) pe `Process.MainWindowHandle`, flag `2` = `PW_RENDERFULLCONTENT`
|
||||
@@ -83,13 +87,35 @@ j. **Mock-urile de date trebuie sa reproduca structura si semantica REALA a surs
|
||||
valori "compuse" manual in test). Un mock incomplet lasa campuri mereu NULL sau ascunde
|
||||
pasul care se testeaza. Cand un flag global activeaza cod suplimentar (ex. `gl406`), acel
|
||||
cod cere mock-uri in plus - verifica ce apeleaza si adauga metodele lipsa din dummy.
|
||||
Cu `gl406=.T.` (SAFT), `GetTaxCodeIdPart`/`GetTaxCode` cer: `goApp.ReadIni`/`WriteIni`
|
||||
(proprietate simpla nu ajunge, clasa `dummyapp` are nevoie de METODE), `goExecutor.oReset`
|
||||
(no-op e suficient), si un cursor `saft_taxtable` real (nu doar mock pe `goExecutor` -
|
||||
`update_jtva_coloane` face `USE saft_taxtable` direct pe alias). Fara ele, simptomul e un
|
||||
dialog nativ Windows "Open" (cauta `saft_taxtable.dbf`) care blocheaza headless la nesfarsit,
|
||||
fara nicio linie noua in log si CPU 0% - vezi `depanare_testare_vfp.md` pentru diagnosticul
|
||||
cu `EnumWindows`/`PrintWindow` pe fereastra ascunsa cand simptomul e "ecran gol, fara eroare".
|
||||
k. **`LOCATE FOR camp == 'literal'` pe camp `C(n)` padded nu gaseste nimic** (`==` e exact) -
|
||||
foloseste `ALLTRIM(camp) == 'literal'`.
|
||||
l. **`CREATEOBJECT`/`ADDPROPERTY` se comporta gresit apelate DINTR-O PROCEDURA in acest runtime
|
||||
headless** (obiect returnat ca string de 30 spatii; `ADDPROPERTY` da eroare 11). Din
|
||||
programul PRINCIPAL merg. Construieste obiectele-parametru INLINE in main, nu intr-un helper.
|
||||
(Cauza neclara; reproductibil.)
|
||||
Cauza confirmata intr-un caz concret: linie de cod prea lunga in ACEEASI metoda de clasa -
|
||||
vezi `depanare_testare_vfp.md` sectiunea 6. Remediul (constructie inline) ramane valabil
|
||||
oricum, indiferent de cauza exacta dintr-un caz punctual.
|
||||
m. **Fara `SELECT-SQL` pe cursorul legat de grid**: `SELECT ... FROM <cursor> INTO CURSOR` cat
|
||||
timp cursorul e RecordSource-ul unui grid viu poate omori procesul vfp9 silentios (fara
|
||||
eroare catchabila, fara semafor). Foloseste xBase nativ (`COUNT FOR ... TO`, `CALCULATE`,
|
||||
`LOCATE`), care nu comuta zona de lucru a grid-ului.
|
||||
n. **Wrapper-ul `.ps1` trebuie sa paseze `-SyncDir` daca `.prg`-ul isi seteaza propriul
|
||||
`gcSyncDir`** - altfel testul scrie semafoarele intr-un folder si `vfp_ui_harness.ps1` le
|
||||
asteapta in cel implicit (`uisync\`), deadlock pana la timeout. Simptom identic cu "test
|
||||
agatat", dar FARA `.ERR` si cu CPU ~0 la procesul vfp9 (nu un dialog modal - procesul chiar
|
||||
asteapta un fisier care nu vine). Timeout minim: ~30s x numarul de pasi din `-Steps`
|
||||
(auto-continue per checkpoint din `HarnessWaitContinue`), plus marja de pornire.
|
||||
o. **Formularul resincronizeaza singur dupa o alegere din grid** (`lSyncPending` + `tmrSync`,
|
||||
ex. `do_modifica_explicatie_tva` din `ointroduceri.vcx`): starea de imediat dupa actiune NU e
|
||||
observabila - `DOEVENTS FORCE` lasa timer-ul sa porneasca, iar resincronizarea rescrie ce
|
||||
tocmai s-a aplicat (la explicatia TVA: randul S revine la familia documentului si randurile T
|
||||
se realiniaza dupa el). Scrie assert-urile pe starea de DUPA resincronizare si alege un efect
|
||||
pe care resincronizarea NU il repara (acolo: `scc`-ul randului T, atins doar cand se schimba
|
||||
explicatia). Altfel testul pica fara sa fie ceva gresit in cod.
|
||||
|
||||
@@ -80,6 +80,13 @@
|
||||
*!* In xsets s-a modificat 21% de la 01.08.2025
|
||||
|
||||
|
||||
*!* 28.07.2026
|
||||
*!* marius.mutu
|
||||
*!* achizitie_import - blocul de TVA din DVI poate avea valuta si curs proprii, diferite de ale
|
||||
*!* facturii (inclusiv fara valuta), iar factura poate avea discount financiar; cursorul introdc
|
||||
*!* primeste coloanele rand_dvi si valuta_proprie.
|
||||
|
||||
|
||||
#Define CRLF Chr(13) + Chr(10)
|
||||
|
||||
********* INCEPUT: lans_Nir_Bon ***********
|
||||
@@ -1557,8 +1564,8 @@ Procedure achizitie_import
|
||||
poAct.id_valuta As id_valuta, poAct.Curs As Curs, poAct.nume_val As nume_val, poAct.dataact as dataact, poAct.fdoc as fdoc, poAct.id_fdoc as id_fdoc, 0 as se_scrie, poAct.tva_incasare as tva_incasare, ;
|
||||
16777215 As doc_color, Space(10) As doc_label, ;
|
||||
'B' As tip_rand, Space(80) As doc_key, 00000000 As nr_doc, ;
|
||||
00000000000000.0000 As suma_doc, 00000000000000.0000 As suma_doc_val, 0 As mod_manual, ;
|
||||
Space(20) As scd_orig, Space(20) As ascd_orig ;
|
||||
00000000000000.0000 As suma_doc, 00000000000000.0000 As suma_doc_val, 0 As mod_manual, 0 As expl_manual, ;
|
||||
Space(20) As scd_orig, Space(20) As ascd_orig, 0 As rand_dvi, 0 As valuta_proprie ;
|
||||
FROM cnote_contabile N ;
|
||||
WHERE N.id_set = poAct.id_set ;
|
||||
INTO Cursor introdc Readwrite Order By ordine
|
||||
@@ -1615,7 +1622,7 @@ Procedure achizitie_import
|
||||
*!* 16.07.2026 claude - F1: index unic de sortare pe introdc, o singura data, inainte de Show
|
||||
*!* (niciodata re-INDEX ulterior sub grid - vezi docs/propuneri_import_unificat.md)
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
SELECT introdc
|
||||
|
||||
@@ -10,7 +10,15 @@ $dir = [System.IO.Path]::GetDirectoryName($Prg)
|
||||
$tmpPrg = Join-Path $dir '_compile_tmp.prg'
|
||||
# prg temporar care compileaza target-ul (COMPILE cu variabila; forma cu literal in ghilimele da eroare)
|
||||
Set-Content -Path $tmpPrg -Value ("lcT = `"$Prg`"`r`nCOMPILE (lcT)`r`nQUIT`r`n") -Encoding ascii
|
||||
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
|
||||
# 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
|
||||
}
|
||||
}
|
||||
}
|
||||
Stop-VfpProprii $dir
|
||||
Start-Sleep -Milliseconds 500
|
||||
if (Test-Path $Fxp) { [System.IO.File]::Delete($Fxp) }
|
||||
|
||||
@@ -48,7 +56,7 @@ foreach ($try in 1..3) {
|
||||
Start-Sleep -Milliseconds 300
|
||||
}
|
||||
Start-Sleep -Seconds 3
|
||||
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
|
||||
Stop-VfpProprii $dir
|
||||
Start-Sleep -Seconds 1
|
||||
if (Test-Path $Fxp) { $ok = $true; break }
|
||||
}
|
||||
|
||||
@@ -4,5 +4,11 @@
|
||||
* (capcana l: CREATEOBJECT/ADDPROPERTY nu merg corect apelate dintr-o procedura in acest runtime).
|
||||
FUNCTION caut_valuta
|
||||
LPARAMETERS tnPornire, tlDesktop, tlFaraMonedaNationala
|
||||
LOCAL loRezultat
|
||||
IF TYPE('goMockValutaCoada') = 'O' AND !ISNULL(goMockValutaCoada) AND goMockValutaCoada.Count > 0
|
||||
loRezultat = goMockValutaCoada.Item(1)
|
||||
goMockValutaCoada.Remove(1)
|
||||
RETURN loRezultat
|
||||
ENDIF
|
||||
RETURN goMockValuta
|
||||
ENDFUNC
|
||||
|
||||
50
utile/Teste/achizitie_import/mock_cauta_alfa_tva11.prg
Normal file
50
utile/Teste/achizitie_import/mock_cauta_alfa_tva11.prg
Normal file
@@ -0,0 +1,50 @@
|
||||
* mock_cauta_alfa_tva11.prg - shadow PROCEDURE cauta_alfa (COMUN\programe\cauta_alfa.prg) DOAR
|
||||
* pentru testul de reproducere TVA 11% pe explicatia TVA din grid (do_modifica_explicatie_tva,
|
||||
* COMUN\clase\ointroduceri.vcx). Acelasi motiv ca mock_cauta_alfa_dialog.prg (cauta_alfa real
|
||||
* populeaza cursorul din Oracle prin gencursor/CursorAdapter - nemock-uibil prin goExecutor) -
|
||||
* vezi acel fisier pentru detalii complete despre flux. Aici simplificat la modul SINGLE-SELECT:
|
||||
* do_modifica_explicatie_tva nu trimite tnTipReturn, deci cauta_alfa il impune 0 (obiect scatter
|
||||
* pe randul curent, lAles=.F.) - submit-ul e echivalentul unui dublu-click pe randul dialogului
|
||||
* (bind dblClick->do_termin activ doar in modul single-select, cauta_alfa_forms.vc2:652
|
||||
* "If !Thisform.lales"), fara nevoie de marcaj (cAles).
|
||||
*
|
||||
* Control test (setat de testul principal INAINTE de fiecare apel):
|
||||
* goDlgTva11 - formularul REAL cauta_alfa_form, pre-construit in main (capcana l:
|
||||
* CREATEOBJECT dintr-o procedura da obiect stricat in acest runtime headless)
|
||||
* gcTestTvaAlege - denumirea randului de ales (coloana "denumire" a cursorului dialogului)
|
||||
|
||||
Procedure cauta_alfa
|
||||
Parameters tcselect,tcfiltru,tcschema,tcorder,tccoloana,tcTitlu,tcTitluColoane, ;
|
||||
tcNume_Proc,tl_AllInList,tcFiltruOriginal,tcPrimaColoana, tnPornire, tnTipReturn, ;
|
||||
tcIdColumn, tlDesktop, tcGroup, tcGridDynamicBackColor, tcGridToolTip, tlModParam, tcStringCriterii, ;
|
||||
tcProceduraVerifica, tcProceduraCopiaza,tcLocate
|
||||
|
||||
LOCAL lcCursor, oReturnScattObj
|
||||
|
||||
lcCursor = goDlgTva11.crs_cursor
|
||||
|
||||
SELECT (lcCursor)
|
||||
LOCATE FOR ALLTRIM(denumire) == ALLTRIM(gcTestTvaAlege)
|
||||
IF !FOUND()
|
||||
GO TOP
|
||||
ENDIF
|
||||
IF TYPE('gcUILog') = 'C'
|
||||
DO HarnessLog WITH 'MOCK cauta_alfa(explicatie tva) pozitionat pe [' + ALLTRIM(denumire) + '] id_jtva_coloana=' + TRANSFORM(id_jtva_coloana) + ' cota_tva=' + TRANSFORM(cota_tva)
|
||||
ENDIF
|
||||
|
||||
*-- echivalentul dublu-click pe randul dialogului (submit direct, mod single-select):
|
||||
*-- butonul OK REAL (_frm_base.do_termin: gnButon=1, Release oForm_cautare)
|
||||
goDlgTva11.do_termin()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- de aici incolo: cod IDENTIC cu cauta_alfa.prg real (tnTipReturn=0 implicit) - SCATTER
|
||||
*-- pe randul curent al cursorului (NU se mai atinge oForm_cautare, Release-uit mai sus)
|
||||
SELECT (lcCursor)
|
||||
IF gnButon = 1
|
||||
SCATTER NAME oReturnScattObj MEMO
|
||||
ELSE
|
||||
SCATTER NAME oReturnScattObj MEMO BLANK
|
||||
ENDIF
|
||||
RETURN oReturnScattObj
|
||||
|
||||
Endproc && cauta_alfa (shadow test tva11)
|
||||
19
utile/Teste/achizitie_import/mock_oscrie_in_fisiere.prg
Normal file
19
utile/Teste/achizitie_import/mock_oscrie_in_fisiere.prg
Normal file
@@ -0,0 +1,19 @@
|
||||
* mock_oscrie_in_fisiere.prg - inlocuieste oscrie_in_fisiere (COMUN\programe\oscrie_in_fisiere.prg)
|
||||
* in testul e2e - functia reala face scriere Oracle NATIVA (SQLSetprop pe gnHandle, conexiune
|
||||
* SQLCONNECT reala), imposibil de mock-uit prin goExecutor/dummyexecutor (acela intercepteaza
|
||||
* doar apeluri oExecute/oExecuta, nu SQL nativ). Fara mock, testul se opreste la eroarea 1466
|
||||
* "Connection handle is invalid" - asteptata, nu bug (vezi handoff_dvi_discount.md).
|
||||
* Incarcat cu SET PROCEDURE ADDITIVE INAINTE de fisierele reale (castiga primul incarcat,
|
||||
* capcana g - vezi antetul mock_caut_valuta.prg). Foloseste DOAR in test_e2e_dvi_ron_discount.prg,
|
||||
* NU global pentru suita - scrierea reala in ACT/actactan trebuie testata separat, cu conexiune
|
||||
* Oracle vie (nu aici).
|
||||
* Contract: aceiasi parametri ca apelul real (tnScrie_Sterge, tlModificare, tlRul,
|
||||
* tlNuSuprascrieCod, tlLoadBackup - vezi oscrie_in_fisiere.prg:14), intoarce 1 (succes - acelasi
|
||||
* cod folosit de functia reala la finalul ei, linia 108/167).
|
||||
FUNCTION oscrie_in_fisiere
|
||||
LPARAMETERS tnScrie_Sterge, tlModificare, tlRul, tlNuSuprascrieCod, tlLoadBackup
|
||||
IF TYPE('gcUILog') = 'C'
|
||||
DO HarnessLog WITH 'MOCK oscrie_in_fisiere apelat: tnScrie_Sterge=' + TRANSFORM(NVL(tnScrie_Sterge,-1)) + ' tlModificare=' + TRANSFORM(NVL(tlModificare,.F.)) + ' tlRul=' + TRANSFORM(NVL(tlRul,.F.)) + ' -> succes mock'
|
||||
ENDIF
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
41
utile/Teste/achizitie_import/stub_verificare/verificare.sc2
Normal file
41
utile/Teste/achizitie_import/stub_verificare/verificare.sc2
Normal file
@@ -0,0 +1,41 @@
|
||||
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
|
||||
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
*< FOXBIN2PRG: Version="1.21" SourceFile="verificare.scx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
|
||||
*
|
||||
*
|
||||
DEFINE CLASS dataenvironment AS dataenvironment
|
||||
*< CLASSDATA: Baseclass="dataenvironment" Timestamp="" Scale="" Uniqueid="" ClassIcon="1" />
|
||||
|
||||
*<PropValue>
|
||||
DataSource = .NULL.
|
||||
Height = 0
|
||||
Left = 0
|
||||
Name = "Dataenvironment"
|
||||
Top = 0
|
||||
Width = 0
|
||||
*</PropValue>
|
||||
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS form1 AS form
|
||||
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="" Uniqueid="" />
|
||||
|
||||
*<PropValue>
|
||||
AutoCenter = .T.
|
||||
Caption = "STUB verificare (test harness only)"
|
||||
DoCreate = .T.
|
||||
Height = 100
|
||||
Name = "FORM1"
|
||||
Visible = .F.
|
||||
Width = 200
|
||||
WindowType = 0
|
||||
*</PropValue>
|
||||
|
||||
PROCEDURE Init
|
||||
LPARAMETERS tVerificAnalitic, tAlegPartener, tnButonIntoarcere, tlNuVerificCont
|
||||
gnButon = 1
|
||||
RETURN .F.
|
||||
ENDPROC
|
||||
|
||||
ENDDEFINE
|
||||
@@ -541,8 +541,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
|
||||
@@ -535,22 +535,21 @@ TRY
|
||||
DO ArLog WITH 'INFO verificare2: cmesajsync gol -> nota SINCRONIZATA'
|
||||
ENDIF
|
||||
|
||||
*-- runda4c (spargere doar factura principala): dupa sincronizeaza(), doar documentul
|
||||
*-- principal (primul B/S din introdc, aici nract=100/RAJA) trebuie spart in randuri S (cont
|
||||
*-- 212); documentele 102 (TRANS OIL MOTO) si 103 (BIROUL VAMAL) trebuie sa ramana B/T
|
||||
*-- neatinse (regula de domeniu: articolele apartin doar facturii principale).
|
||||
LOCAL llDoc100Spart, llDoc102Nesparte, llDoc103Nesparte
|
||||
*-- lSpargeSecundare implicit .T. si documentele 102/103 sunt participante (lIntern=.F.,
|
||||
*-- id_jtva_coloana nenul): dupa sincronizeaza() se sparg TOATE documentele B/S in randuri S
|
||||
*-- pe conturile articolelor (aici doar 212), nu doar documentul principal (100/RAJA).
|
||||
LOCAL llDoc100Spart, llDoc102Spart, llDoc103Spart
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 100 AND tip_rand == 'S'
|
||||
llDoc100Spart = FOUND()
|
||||
LOCATE FOR nract = 102 AND tip_rand == 'B'
|
||||
llDoc102Nesparte = FOUND()
|
||||
LOCATE FOR nract = 103 AND tip_rand == 'B'
|
||||
llDoc103Nesparte = FOUND()
|
||||
IF llDoc100Spart AND llDoc102Nesparte AND llDoc103Nesparte
|
||||
DO ArLog WITH 'PASS verificare3 (runda4c spargere doar principala): doc 100/RAJA spart (rand S gasit), doc 102/103 raman B/T nesparte'
|
||||
LOCATE FOR nract = 102 AND tip_rand == 'S'
|
||||
llDoc102Spart = FOUND()
|
||||
LOCATE FOR nract = 103 AND tip_rand == 'S'
|
||||
llDoc103Spart = FOUND()
|
||||
IF llDoc100Spart AND llDoc102Spart AND llDoc103Spart
|
||||
DO ArLog WITH 'PASS verificare3 (lSpargeSecundare implicit): doc 100/102/103 toate sparte (rand S gasit pe fiecare)'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare3 (runda4c spargere doar principala): doc100Spart=' + TRANSFORM(llDoc100Spart) + ' (astept .T.) doc102Nesparte=' + TRANSFORM(llDoc102Nesparte) + ' (astept .T.) doc103Nesparte=' + TRANSFORM(llDoc103Nesparte) + ' (astept .T.)'
|
||||
DO ArLog WITH 'FAIL verificare3 (lSpargeSecundare implicit): doc100Spart=' + TRANSFORM(llDoc100Spart) + ' (astept .T.) doc102Spart=' + TRANSFORM(llDoc102Spart) + ' (astept .T.) doc103Spart=' + TRANSFORM(llDoc103Spart) + ' (astept .T.)'
|
||||
ENDIF
|
||||
|
||||
*========================= PAS 2: dupa sincronizeaza() =========================
|
||||
@@ -691,8 +690,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
|
||||
@@ -254,7 +254,7 @@ TRY
|
||||
|
||||
*-- index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO ApLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -566,8 +566,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DumpIntrodc
|
||||
|
||||
@@ -281,8 +281,8 @@ poAct.AddProperty('id_valuta', 1)
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
|
||||
INSERT INTO introdc (tip_rand, scd, scc, ascc, suma, suma_val, id_jtva_coloana, ptva, explicatie_tva, ;
|
||||
in_valuta, participa_valuta, id_valuta, curs, nume_val, nr_doc, nract, serie_act, fdoc, partc, explicatia, ;
|
||||
|
||||
878
utile/Teste/achizitie_import/test_discount_factura.prg
Normal file
878
utile/Teste/achizitie_import/test_discount_factura.prg
Normal file
@@ -0,0 +1,878 @@
|
||||
* test_discount_factura.prg
|
||||
* Runda32 (model B/G/T, plan docs/plan_runda32_discount_baza.md): discount financiar pe factura
|
||||
* de import - UN SINGUR rand nou tip_rand='G' (acelasi doc_key/nr_doc cu factura), creat intre
|
||||
* randul B si randul T:
|
||||
* G: scd = contul 401 (cu analitic) preluat de pe CREDITUL randului B, scc='767', suma/
|
||||
* suma_val = baza discount (POZITIVE), id_partd/partd = partenerul facturii (preluat de
|
||||
* pe creditul B), participa_valuta=.F., cota/coloana de TVA ale bazei documentului,
|
||||
* explicatia='DISCOUNT'.
|
||||
* Randul T (4426/4427) se calculeaza pe baza NETA: T.suma = (B.suma - G.suma) * ptva/100,
|
||||
* T.suma_val = (B.suma_val - G.suma_val) * ptva/100 - calculat automat de do_executa() (apelat
|
||||
* din do_adauga_factura), nu necesita pas separat.
|
||||
* Verifica: conturi/sume/semne/parteneri corecte pe G; ordinea fizica in cursor (Append Blank:
|
||||
* B -> G -> T); T calculat pe baza neta; preturile articolelor si randul D neafectate; G
|
||||
* supravietuieste sparge_document/uneste_document/sincronizeaza (nu doar la creare); stergere
|
||||
* factura (document) sterge si discountul; variante discount=0 (fara G) si factura in RON
|
||||
* (fara valuta).
|
||||
*
|
||||
* ASUMPTII (de confruntat cu implementarea reala):
|
||||
* - toDlg poarta disc_baza_lei/disc_baza_val (fara are_discount/disc_tva_lei/disc_tva_val,
|
||||
* eliminate in Runda32); discountul e activ cand Round(Nvl(toDlg.disc_baza_lei,0),gnPC)<>0;
|
||||
* - G se scrie DUPA Endcase-ul ramurii de TVA (F/D/N), inainte de crearea randului T (plan
|
||||
* pct. 6: ordinea devine B -> G -> T), clonat din randul B proaspat creat;
|
||||
* - assert-ul pe actactan/inainte_de_do_termin (:9555 zona, !Inlist(tip_rand,'D','G')) e
|
||||
* best-effort (TRY/CATCH) - harness-ul nu modeleaza integral scrierea reala in ACT/actactan;
|
||||
* - grid-ul NU are index de sortare in productie (randurile noi se adauga la finalul
|
||||
* cursorului) - verificarea de ordine se face pe RECNO fizic, imediat dupa creare, nu pe un
|
||||
* index custom.
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_discount_factura.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_discount_factura_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_discount_factura\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO DcErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO DcLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO DcLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO DcLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
PUBLIC goMockValuta
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 5.23) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5.23)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'RAJA')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO DcLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= DOC1: FACTURA EUR + discount (100 EUR / 523.00 lei, curs 5.23) =========================
|
||||
PUBLIC goDlg, goT, gcDocKey1, gnB1ScdCredit, gnB1IdPartc, gcB1Partc
|
||||
DO AdaugaFactura WITH 15000, 'RAJA', 601, 100.00
|
||||
DO HarnessStep WITH 0, 'dupa DOC1 (cu discount): introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
SELECT introdc
|
||||
SET ORDER TO
|
||||
LOCATE FOR nract = 15000 AND tip_rand == 'B'
|
||||
=Assert3('1-DOC1: rand B gasit', IIF(FOUND(),1,0), 1)
|
||||
LOCAL lnRecnoB1
|
||||
lnRecnoB1 = 0
|
||||
IF FOUND()
|
||||
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
||||
gnB1IdPartc = id_partc
|
||||
gcB1Partc = ALLTRIM(NVL(partc,''))
|
||||
lnRecnoB1 = RECNO()
|
||||
ENDIF
|
||||
|
||||
LOCAL lnCntG1, lnRecnoG1, lnRecnoT1
|
||||
STORE 0 TO lnCntG1, lnRecnoG1, lnRecnoT1
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1
|
||||
DO CASE
|
||||
CASE tip_rand == 'G'
|
||||
lnCntG1 = lnCntG1 + 1
|
||||
lnRecnoG1 = RECNO()
|
||||
DO DcLog WITH 'DOC1 G: scd=' + ALLTRIM(scd) + ' scc=' + ALLTRIM(scc) + ' suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(suma_val) + ' id_partd=' + TRANSFORM(NVL(id_partd,0)) + ' explicatia=[' + ALLTRIM(NVL(explicatia,'')) + ']'
|
||||
CASE tip_rand == 'T' AND lnRecnoT1 = 0
|
||||
lnRecnoT1 = RECNO()
|
||||
ENDCASE
|
||||
ENDSCAN
|
||||
=Assert3('2-DOC1: exact 1 rand G (model B/G/T)', lnCntG1, 1)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G'
|
||||
=Assert3('3-DOC1: randul G gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=AssertStr('4-G.scd == 401 (analitic preluat de pe creditul B)', ALLTRIM(scd), '401')
|
||||
=AssertStr('5-G.scc == 767', ALLTRIM(scc), '767')
|
||||
=Assert3('6-G.suma=523.00 (POZITIVA, 100 EUR x curs 5.23)', suma, 523.00)
|
||||
=Assert3('7-G.suma_val=100.00 (POZITIVA)', suma_val, 100.00)
|
||||
=Assert3('8-G.id_partd = partenerul facturii (preluat de pe creditul B)', NVL(id_partd,0), gnB1IdPartc)
|
||||
=AssertStr('9-G.partd = partenerul facturii', ALLTRIM(NVL(partd,'?')), gcB1Partc)
|
||||
=Assert3('10-G.participa_valuta=.F.', IIF(participa_valuta,1,0), 0)
|
||||
=Assert3('11-G.ptva = cota documentului (G e baza de TVA)', NVL(ptva,0), 21)
|
||||
=Assert3('12-G.cu_tva=1', NVL(cu_tva,0), 1)
|
||||
=Assert3('13-G.id_jtva_coloana = coloana bazei', NVL(id_jtva_coloana,0), goDlg.nIdExplicatieTva)
|
||||
=AssertStr('14-G.explicatia=DISCOUNT', ALLTRIM(NVL(explicatia,'?')), 'DISCOUNT')
|
||||
=AssertStr('15-G.doc_key = doc_key facturii', ALLTRIM(NVL(doc_key,'?')), gcDocKey1)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 11
|
||||
DO DcLog WITH ' FAIL 4-15: G negasit'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T'
|
||||
=Assert3('16-DOC1: randul T gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('17-T.suma=988.47 ((5230.00-523.00)*21%, baza NETA)', suma, 988.47)
|
||||
=Assert3('18-T.suma_val=189.00 ((1000.00-100.00)*21%, baza NETA in valuta)', suma_val, 189.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 17-18: T negasit'
|
||||
ENDIF
|
||||
|
||||
*========================= ORDINE FIZICA IN CURSOR (Append Blank: B -> G -> T) =========================
|
||||
=Assert3('19-ordine fizica: B/G/T gasite (recno>0)', IIF(lnRecnoB1>0 AND lnRecnoG1>0 AND lnRecnoT1>0,1,0), 1)
|
||||
=Assert3('20-ordine fizica: RECNO(B) < RECNO(G)', IIF(lnRecnoB1 < lnRecnoG1,1,0), 1)
|
||||
=Assert3('21-ordine fizica: RECNO(G) < RECNO(T)', IIF(lnRecnoG1 < lnRecnoT1,1,0), 1)
|
||||
|
||||
DO HarnessStep WITH 1, 'DOC1 (G creat, T pe baza neta) verificat - vezi log'
|
||||
|
||||
*========================= ARTICOL + PRETURI NEAFECTATE DE DISCOUNT =========================
|
||||
SELECT introdc
|
||||
SET ORDER TO ord_doc
|
||||
gcMockArtCodmat = 'ART-BULD-212'
|
||||
gcMockAcontCrt = '1'
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA1
|
||||
DO DcLog WITH 'EROARE do_adauga_articol ' + TRANSFORM(loExcA1.ErrorNo) + ' [' + loExcA1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 1000, pretd WITH 1000, pret WITH ROUND(1000*5.23,4), pret_lei WITH ROUND(1000*5.23,4)
|
||||
ENDIF
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
LOCAL llEroareSync1
|
||||
llEroareSync1 = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS1
|
||||
llEroareSync1 = .T.
|
||||
DO DcLog WITH 'EROARE la sincronizeaza() ' + TRANSFORM(loExcS1.ErrorNo) + ' [' + loExcS1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('22-sincronizeaza() (dupa articol) fara eroare', IIF(llEroareSync1,0,1), 1)
|
||||
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
IF FOUND()
|
||||
=Assert3('23-pretul articolului NEAFECTAT de discount (pretd=1000)', pretd, 1000)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO DcLog WITH ' FAIL 23: articolul negasit dupa sincronizare'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR tip_rand == 'D'
|
||||
IF FOUND()
|
||||
DO DcLog WITH 'rand D (diferenta) dupa discount+articol: suma=' + TRANSFORM(suma)
|
||||
=Assert3('24-randul D NEAFECTAT de discount (|suma|<=0.02)', ABS(suma), 0)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' INFO 24: nu exista rand D (diferenta 0) - OK'
|
||||
ENDIF
|
||||
|
||||
*========================= G SUPRAVIETUIESTE dupa sincronizare (nu doar la creare) =========================
|
||||
LOCAL lnCntGDupaSync
|
||||
lnCntGDupaSync = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G'
|
||||
lnCntGDupaSync = lnCntGDupaSync + 1
|
||||
ENDSCAN
|
||||
=Assert3('25-dupa sincronizare (cu articol): tot 1 rand G (nu s-a dublat/sters)', lnCntGDupaSync, 1)
|
||||
|
||||
*-- a doua sincronizare (stabilitate la re-rulare)
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS2
|
||||
DO DcLog WITH 'EROARE la sincronizeaza() #2 ' + TRANSFORM(loExcS2.ErrorNo) + ' [' + loExcS2.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
LOCAL lnCntGDupaSync2
|
||||
lnCntGDupaSync2 = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G'
|
||||
lnCntGDupaSync2 = lnCntGDupaSync2 + 1
|
||||
ENDSCAN
|
||||
=Assert3('26-dupa a doua sincronizare: tot 1 rand G (stabil)', lnCntGDupaSync2, 1)
|
||||
|
||||
DO HarnessStep WITH 2, 'articol/preturi/stabilitate G verificate - vezi log'
|
||||
|
||||
*========================= inainte_de_do_termin: G nu genereaza rand fals de finalizare NIR (best-effort) =========================
|
||||
TRY
|
||||
goObj.inainte_de_do_termin()
|
||||
DO DcLog WITH 'INFO inainte_de_do_termin() rulat fara eroare'
|
||||
IF USED('actactan')
|
||||
LOCAL lnCntGActactan
|
||||
lnCntGActactan = 0
|
||||
SELECT actactan
|
||||
SCAN FOR tip_rand == 'G'
|
||||
lnCntGActactan = lnCntGActactan + 1
|
||||
ENDSCAN
|
||||
DO DcLog WITH 'actactan: ' + TRANSFORM(lnCntGActactan) + ' randuri G gasite (fara relevanta pt NIR fals - vezi INFO)'
|
||||
ELSE
|
||||
DO DcLog WITH 'INFO: cursorul actactan nu exista in acest harness (scriere reala neacoperita de dummyexecutor) - assert 27 omis'
|
||||
ENDIF
|
||||
CATCH TO loExcNir
|
||||
DO DcLog WITH 'INFO inainte_de_do_termin() a aruncat eroare in acest harness (dependent de Oracle real): ' + loExcNir.Message + ' - assert 27 omis'
|
||||
ENDTRY
|
||||
|
||||
DO HarnessStep WITH 3, 'inainte_de_do_termin (best-effort) verificat - vezi log'
|
||||
|
||||
*========================= STERGERE FACTURA -> STERGE SI DISCOUNTUL =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'B'
|
||||
IF !FOUND()
|
||||
*-- dupa spargere B poate lipsi - folosesc orice rand al documentului pentru pozitionare
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1
|
||||
ENDIF
|
||||
=Assert3('28-rand al DOC1 gasit pentru stergere', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
gnMockRaspuns = 6 && Da = tot documentul
|
||||
TRY
|
||||
goObj.do_sterge()
|
||||
CATCH TO loExcDel
|
||||
DO DcLog WITH 'EROARE do_sterge ' + TRANSFORM(loExcDel.ErrorNo) + ' [' + loExcDel.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
ENDIF
|
||||
LOCAL lnCntDupaStergere
|
||||
lnCntDupaStergere = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1
|
||||
lnCntDupaStergere = lnCntDupaStergere + 1
|
||||
ENDSCAN
|
||||
=Assert3('29-dupa stergere document: 0 randuri ramase (inclusiv G)', lnCntDupaStergere, 0)
|
||||
|
||||
DO HarnessStep WITH 4, 'stergere factura + discount verificata - vezi log'
|
||||
|
||||
*========================= VARIANTA A: discount = 0 (fara G, T pe baza integrala) =========================
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
PUBLIC gcDocKey2
|
||||
DO AdaugaFactura WITH 15001, 'TRANS OIL', 602, 0.00
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 15001 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
gcDocKey2 = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
LOCAL lnCntG2A
|
||||
lnCntG2A = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey2 AND tip_rand == 'G'
|
||||
lnCntG2A = lnCntG2A + 1
|
||||
ENDSCAN
|
||||
=Assert3('30-VARIANTA discount=0: niciun rand G', lnCntG2A, 0)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey2 AND tip_rand == 'T'
|
||||
=Assert3('31-VARIANTA discount=0: randul T gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('32-VARIANTA discount=0: T.suma=1098.30 (baza integrala 5230.00*21%)', suma, 1098.30)
|
||||
=Assert3('33-VARIANTA discount=0: T.suma_val=210.00 (baza integrala 1000.00*21%)', suma_val, 210.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 32-33: T (discount=0) negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 5, 'varianta discount=0 verificata - vezi log'
|
||||
|
||||
*========================= VARIANTA B: FACTURA IN RON (fara valuta) + discount 400 lei =========================
|
||||
PUBLIC gcDocKey3
|
||||
DO AdaugaFacturaRon WITH 15002, 'FURNIZOR INTERN SRL', 603, 400.00
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 15002 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
gcDocKey3 = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
LOCAL lnCntG3
|
||||
lnCntG3 = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey3 AND tip_rand == 'G'
|
||||
lnCntG3 = lnCntG3 + 1
|
||||
=Assert3('34.'+TRANSFORM(RECNO())+'-VARIANTA RON: G.suma_val=0 (fara valuta)', NVL(suma_val,0), 0)
|
||||
ENDSCAN
|
||||
=Assert3('35-VARIANTA RON: exact 1 rand G', lnCntG3, 1)
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey3 AND tip_rand == 'G'
|
||||
IF FOUND()
|
||||
=Assert3('36-VARIANTA RON: G.suma=400.00', suma, 400.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO DcLog WITH ' FAIL 36: G (RON) negasit'
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey3 AND tip_rand == 'T'
|
||||
IF FOUND()
|
||||
=Assert3('37-VARIANTA RON: T.suma=336.00 ((2000.00-400.00)*21%)', suma, 336.00)
|
||||
=Assert3('38-VARIANTA RON: T.suma_val=0 (fara valuta)', NVL(suma_val,0), 0)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 37-38: T (RON) negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 6, 'varianta factura RON + discount verificata - vezi log'
|
||||
|
||||
DO DcLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO DcLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 7, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO DcLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AdaugaFactura
|
||||
*-- FACTURA EUR curs 5.23, 1000 EUR, TVA pe furnizor (F, normal - discountul e independent
|
||||
*-- de ramura TVA); baza discountul e in EUR (aceeasi unitate ca suma facturii).
|
||||
LPARAMETERS tnNract, tcPartener, tnIdPartener, tnDiscBazaVal
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = tnNract
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = tnIdPartener
|
||||
goDlg.cPartener = tcPartener
|
||||
goDlg.cExplicatia = 'Import marfa ' + tcPartener
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5.23
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 208
|
||||
goDlg.cExplicatieTva = 'ACH. INT. 21%'
|
||||
goDlg.optTipTva.Value = 1 && F = furnizor (normal)
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO DcLog WITH 'DOC ' + TRANSFORM(tnNract) + ': valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlgF1F2 WITH ROUND(tnDiscBazaVal*5.23,4), tnDiscBazaVal
|
||||
DO DcLog WITH 'DOC ' + TRANSFORM(tnNract) + ': do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AdaugaFacturaRon
|
||||
*-- Varianta FACTURA IN RON (fara valuta) + discount - disc_baza_val=0.
|
||||
LPARAMETERS tnNract, tcPartener, tnIdPartener, tnDiscBazaLei
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = tnNract
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = tnIdPartener
|
||||
goDlg.cPartener = tcPartener
|
||||
goDlg.cExplicatia = 'Achizitie ' + tcPartener
|
||||
goDlg.nSuma = 2000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 0
|
||||
goDlg.nIdExplicatieTva = 208
|
||||
goDlg.cExplicatieTva = 'ACH. INT. 21%'
|
||||
goDlg.optTipTva.Value = 1
|
||||
goDlg.chkInValutaCont.Value = 0
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO DcLog WITH 'DOC ' + TRANSFORM(tnNract) + ' (RON): valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlgF1F2 WITH tnDiscBazaLei, 0
|
||||
DO DcLog WITH 'DOC ' + TRANSFORM(tnNract) + ' (RON): do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ConstruiesteToDlgF1F2
|
||||
*-- Runda32: doar disc_baza_lei/disc_baza_val (are_discount/disc_tva_lei/disc_tva_val
|
||||
*-- eliminate din construieste_todlg).
|
||||
LPARAMETERS tnDiscBazaLei, tnDiscBazaVal
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
|
||||
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
|
||||
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
|
||||
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
|
||||
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
|
||||
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie','')
|
||||
=ADDPROPERTY(goT,'dvi_nract',0)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',0)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc','')
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',0)
|
||||
=ADDPROPERTY(goT,'dvi_partc','')
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',0)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
||||
=ADDPROPERTY(goT,'dvi_curs',0)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val','')
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',0)
|
||||
*-- Runda32: discount financiar - doar baza (fara are_discount/disc_tva_lei/disc_tva_val)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',tnDiscBazaLei)
|
||||
=ADDPROPERTY(goT,'disc_baza_val',tnDiscBazaVal)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
*-- Runda30 (F1/pas2): coloane NOI rand_dvi N(1), valuta_proprie N(1) fata de structura veche.
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO DcLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
12
utile/Teste/achizitie_import/test_discount_factura.ps1
Normal file
12
utile/Teste/achizitie_import/test_discount_factura.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_discount_factura.ps1 - wrapper peste harness-ul generic pentru discountul financiar pe
|
||||
# factura de import (model B/G/T, un singur rand G) - Runda32.
|
||||
# powershell -ExecutionPolicy Bypass -File test_discount_factura.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_discount_factura.prg') `
|
||||
-Steps @('doc1_creat','doc1_g_t_verificat','articol_stabilitate','nir_best_effort','stergere_document','discount_zero','factura_ron','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_discount_factura') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_discount_factura') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
723
utile/Teste/achizitie_import/test_discount_multicota.prg
Normal file
723
utile/Teste/achizitie_import/test_discount_multicota.prg
Normal file
@@ -0,0 +1,723 @@
|
||||
* test_discount_multicota.prg
|
||||
* Runda32 (model B/G/T): factura de import cu articole pe DOUA cote TVA (21% si 11%) + discount
|
||||
* financiar. Verifica distribuirea discountului in sparge_document (calc_baze_cota_creditor +
|
||||
* lnFactorDisc): fiecare rand T e scalat cu ACELASI factor de discount ((baza_grup_tot -
|
||||
* discount) / baza_grup_tot), aplicat pe baza PROPRIE a cotei, nu pe un singur T global.
|
||||
* Flux REAL: dialogul `import_adauga_factura` + doua `do_adauga_articol()` (cote diferite) +
|
||||
* `sincronizeaza()` (declanseaza sparge_document, documentul e principal si unic).
|
||||
*
|
||||
* Discountul se sparge si el pe cote (sparge_discount), proportional cu bazele: fiecare rand G
|
||||
* poarta cota lui, iar randurile S poarta cota articolelor lor - baza si TVA-ul sunt concordante.
|
||||
* Scenariu: factura EUR curs 5, 1500 EUR (=1000 la 21% + 500 la 11%, fara diferenta reziduala),
|
||||
* discount baza 150 EUR (10% din total):
|
||||
* - lnFactorDisc = (1500-150)/1500 = 0.9
|
||||
* - T(21%): suma_val = ROUND(1000*0.9*21/100,2) = 189.00, suma = 945.00
|
||||
* - T(11%): suma_val = ROUND(500*0.9*11/100,2) = 49.50, suma = 247.50
|
||||
* - suma T-urilor = 238.50 (val) / 1192.50 (lei) - fara reziduu de rotunjire (numere curate).
|
||||
*
|
||||
* ASUMPTII: jtva_coloane2 are 2 familii import (FO) la 21%/11% (id 220/222, coloana_jc
|
||||
* FO21B/FO11B) ca gaseste_jtva_cota sa gaseasca perechea corecta pentru a doua cota; articolele
|
||||
* au conturi DIFERITE (212/371), dar fara randuri S preexistente calc_baze_cota_creditor le da
|
||||
* la amandoua ACELASI creditor fallback (scc/ascc-ul randului B), deci crsGrupCota le separa
|
||||
* DOAR dupa cota_tva (grupare pe cota_tva+scc+ascc, nu pe cont).
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_discount_multicota.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_discount_multicota_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_discount_multicota\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO McErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO McLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO McLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO McLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
PUBLIC goMockValuta
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 5) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'MULTI SUPPLY SRL')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: DOUA familii import (FO), 21% si 11% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301205-Import de bunuri cota 11%', 301205, '', 11, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 220, 21, 'ACH. IMP. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 221, 21, 'TVA ACH. IMP. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO McLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO McLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= FACTURA: 1500 EUR (1000@21% + 500@11%), discount 150 EUR =========================
|
||||
PUBLIC goDlg, goT, gcDocKey1
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 16000
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'MULTI SUPPLY SRL'
|
||||
goDlg.cExplicatia = 'Import marfa multicota'
|
||||
goDlg.nSuma = 1500
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 1
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO McLog WITH 'valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act','')
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',ROUND(goDlg.nSuma*goDlg.nCurs,gnPC))
|
||||
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
||||
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
||||
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
||||
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
=ADDPROPERTY(goT,'cTipTva','F')
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie','')
|
||||
=ADDPROPERTY(goT,'dvi_nract',0)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',0)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc','')
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',0)
|
||||
=ADDPROPERTY(goT,'dvi_partc','')
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',0)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
||||
=ADDPROPERTY(goT,'dvi_curs',0)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val','')
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',ROUND(150*5,gnPC))
|
||||
=ADDPROPERTY(goT,'disc_baza_val',150)
|
||||
|
||||
LOCAL llOkAdauga
|
||||
llOkAdauga = goObj.do_adauga_factura(goT)
|
||||
=Assert3('1-do_adauga_factura(goT) reuseste', IIF(llOkAdauga,1,0), 1)
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT introdc
|
||||
SET ORDER TO
|
||||
LOCATE FOR nract = 16000 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO HarnessStep WITH 0, 'factura creata, doc_key=' + gcDocKey1
|
||||
|
||||
*========================= DOUA ARTICOLE, COTE DIFERITE (21% si 11%) =========================
|
||||
gcMockArtCodmat = 'ART-BULD-212'
|
||||
gcMockAcontCrt = ''
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA1
|
||||
DO McLog WITH 'EROARE do_adauga_articol (1) ' + TRANSFORM(loExcA1.ErrorNo) + ' [' + loExcA1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 1000, pretd WITH 1000, pret WITH ROUND(1000*5,4), ;
|
||||
pret_lei WITH ROUND(1000*5,4), cota_tva WITH 21
|
||||
ENDIF
|
||||
|
||||
gcMockArtCodmat = 'ART-A8-371'
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA2
|
||||
DO McLog WITH 'EROARE do_adauga_articol (2) ' + TRANSFORM(loExcA2.ErrorNo) + ' [' + loExcA2.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 500, pretd WITH 500, pret WITH ROUND(500*5,4), ;
|
||||
pret_lei WITH ROUND(500*5,4), cota_tva WITH 11
|
||||
ENDIF
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
=Assert3('2-doua articole in rul_temp', RECCOUNT_ACTIVE('rul_temp'), 2)
|
||||
|
||||
DO HarnessStep WITH 1, 'articole (21% si 11%) adaugate'
|
||||
|
||||
*========================= sincronizeaza() (declanseaza sparge_document) =========================
|
||||
LOCAL llEroareSync
|
||||
llEroareSync = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS
|
||||
llEroareSync = .T.
|
||||
DO McLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcS.ErrorNo) + ' [' + loExcS.Message + '] in ' + loExcS.Procedure + ':' + TRANSFORM(loExcS.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('3-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
|
||||
|
||||
*========================= G: discountul se sparge pe cote (baza TVA-ului) =========================
|
||||
LOCAL lnCntG, lnSumGVal, lnSumG
|
||||
STORE 0 TO lnCntG, lnSumGVal, lnSumG
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G'
|
||||
lnCntG = lnCntG + 1
|
||||
lnSumGVal = lnSumGVal + suma_val
|
||||
lnSumG = lnSumG + suma
|
||||
ENDSCAN
|
||||
=Assert3('4-doua randuri G (unul pe cota)', lnCntG, 2)
|
||||
=Assert3('4a-total discount valuta pastrat', lnSumGVal, 150.00)
|
||||
=Assert3('4b-total discount lei pastrat', lnSumG, 750.00)
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G' AND ptva == 21
|
||||
=Assert3('5-G(21%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('5a-G(21%).suma_val=100.00 (150*1000/1500)', suma_val, 100.00)
|
||||
=Assert3('5b-G(21%).suma=500.00', suma, 500.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 5a-5b: G(21%) negasit'
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G' AND ptva == 11
|
||||
=Assert3('6-G(11%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('6a-G(11%).suma_val=50.00 (150*500/1500)', suma_val, 50.00)
|
||||
=Assert3('6b-G(11%).suma=250.00', suma, 250.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 6a-6b: G(11%) negasit'
|
||||
ENDIF
|
||||
|
||||
*========================= T-uri: cate unul pe cota, scalate cu acelasi factor de discount =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T' AND ptva == 21
|
||||
=Assert3('7-T(21%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('8-T(21%).suma_val=189.00 (1000*0.9*21%)', suma_val, 189.00)
|
||||
=Assert3('9-T(21%).suma=945.00', suma, 945.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 8-9: T(21%) negasit'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T' AND ptva == 11
|
||||
=Assert3('10-T(11%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('11-T(11%).suma_val=49.50 (500*0.9*11%)', suma_val, 49.50)
|
||||
=Assert3('12-T(11%).suma=247.50', suma, 247.50)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 11-12: T(11%) negasit'
|
||||
ENDIF
|
||||
|
||||
LOCAL lnCntT, lnSumTVal, lnSumT
|
||||
STORE 0 TO lnCntT, lnSumTVal, lnSumT
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T'
|
||||
lnCntT = lnCntT + 1
|
||||
lnSumTVal = lnSumTVal + suma_val
|
||||
lnSumT = lnSumT + suma
|
||||
ENDSCAN
|
||||
=Assert3('13-exact 2 randuri T (o cota fiecare)', lnCntT, 2)
|
||||
=Assert3('14-suma T-urilor (valuta) = 238.50, fara reziduu de rotunjire', lnSumTVal, 238.50)
|
||||
=Assert3('15-suma T-urilor (lei) = 1192.50, fara reziduu de rotunjire', lnSumT, 1192.50)
|
||||
|
||||
*========================= S: cota randului de baza = cota articolelor lui =========================
|
||||
LOCAL lnCntS
|
||||
lnCntS = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S'
|
||||
lnCntS = lnCntS + 1
|
||||
ENDSCAN
|
||||
=Assert3('16-doua randuri S', lnCntS, 2)
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 21
|
||||
=Assert3('17-S cu cota 21 (articolul de 1000)', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('17a-S(21%).suma_val=1000.00', suma_val, 1000.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO McLog WITH ' FAIL 17a: S(21%) negasit'
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
||||
=Assert3('18-S cu cota 11 (articolul de 500)', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('18a-S(11%).suma_val=500.00', suma_val, 500.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO McLog WITH ' FAIL 18a: S(11%) negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 2, 'T-uri multicota verificate - suma val=' + TRANSFORM(lnSumTVal) + ' lei=' + TRANSFORM(lnSumT)
|
||||
|
||||
DO McLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO McLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO McLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO McLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO McLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO McLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE McErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO McLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE McLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
|
||||
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
|
||||
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 1, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 2, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 3, 301205)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 4, 301205)
|
||||
ENDPROC
|
||||
12
utile/Teste/achizitie_import/test_discount_multicota.ps1
Normal file
12
utile/Teste/achizitie_import/test_discount_multicota.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_discount_multicota.ps1 - wrapper peste harness-ul generic pentru discountul financiar
|
||||
# distribuit pe doua cote TVA (21%/11%) - Runda32.
|
||||
# powershell -ExecutionPolicy Bypass -File test_discount_multicota.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_discount_multicota.prg') `
|
||||
-Steps @('factura_creata','articole_adaugate','sincronizare','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_discount_multicota') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_discount_multicota') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
624
utile/Teste/achizitie_import/test_discount_valuta.prg
Normal file
624
utile/Teste/achizitie_import/test_discount_valuta.prg
Normal file
@@ -0,0 +1,624 @@
|
||||
* test_discount_valuta.prg
|
||||
* Runda32 (model B/G/T): discount financiar pe factura de import IN VALUTA - verifica suma
|
||||
* (lei) si suma_val (valuta) pe randul G (discount) si pe randul T (TVA pe baza neta), pentru
|
||||
* DOUA valute diferite (EUR cu suma_lei introdusa manual, GBP cu suma_lei auto-calculata din
|
||||
* curs) - discountul insusi e introdus in valuta facturii (aceeasi unitate ca txtSuma).
|
||||
*
|
||||
* DOC1 (EUR, curs 4.50, 1000 EUR, nSumaLei introdus manual = 4500.00):
|
||||
* discount baza = 200 EUR -> disc_baza_lei=900.00, disc_baza_val=200.00
|
||||
* G.suma=900.00, G.suma_val=200.00
|
||||
* T.suma = (4500.00-900.00)*21% = 756.00, T.suma_val = (1000.00-200.00)*21% = 168.00
|
||||
* DOC2 (GBP, curs 5.75, 500 GBP, nSumaLei auto = ROUND(500*5.75,2) = 2875.00):
|
||||
* discount baza = 60 GBP -> disc_baza_lei=345.00, disc_baza_val=60.00
|
||||
* G.suma=345.00, G.suma_val=60.00
|
||||
* T.suma = (2875.00-345.00)*21% = 531.30, T.suma_val = (500.00-60.00)*21% = 92.40
|
||||
*
|
||||
* Flux REAL: dialogul `import_adauga_factura` (toDlg construit inline, capcana l -
|
||||
* CREATEOBJECT/ADDPROPERTY nu merg dintr-o procedura in acest runtime headless).
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_discount_valuta.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_discount_valuta_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_discount_valuta\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO DvErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO DvLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO DvLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO DvLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
PUBLIC goMockValuta
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 4.50) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 4.50)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'EURO IMPEX')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DvLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO DvLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= DOC1: EUR, nSumaLei introdus manual =========================
|
||||
PUBLIC goDlg, goT, gcDocKey1
|
||||
DO AdaugaFacturaValuta WITH 17000, 'EURO IMPEX', 601, 978, 'EUR', 4.50, 1000, 4500.00, 200.00
|
||||
SELECT introdc
|
||||
SET ORDER TO
|
||||
LOCATE FOR nract = 17000 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'B'
|
||||
=Assert3('1-DOC1(EUR): B.suma=4500.00 (nSumaLei manual)', suma, 4500.00)
|
||||
=Assert3('2-DOC1(EUR): B.suma_val=1000.00', suma_val, 1000.00)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G'
|
||||
=Assert3('3-DOC1(EUR): randul G gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('4-DOC1(EUR): G.suma=900.00', suma, 900.00)
|
||||
=Assert3('5-DOC1(EUR): G.suma_val=200.00', suma_val, 200.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DvLog WITH ' FAIL 4-5: G (DOC1) negasit'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T'
|
||||
=Assert3('6-DOC1(EUR): randul T gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('7-DOC1(EUR): T.suma=756.00 ((4500-900)*21%)', suma, 756.00)
|
||||
=Assert3('8-DOC1(EUR): T.suma_val=168.00 ((1000-200)*21%)', suma_val, 168.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DvLog WITH ' FAIL 7-8: T (DOC1) negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 0, 'DOC1 (EUR) verificat'
|
||||
|
||||
*========================= DOC2: GBP, nSumaLei auto-calculat din curs =========================
|
||||
PUBLIC gcDocKey2
|
||||
DO AdaugaFacturaValuta WITH 17001, 'BRITISH TRADE LTD', 604, 826, 'GBP', 5.75, 500, 0, 60.00
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 17001 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
gcDocKey2 = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey2 AND tip_rand == 'B'
|
||||
=Assert3('9-DOC2(GBP): B.suma=2875.00 (auto ROUND(500*5.75,2))', suma, 2875.00)
|
||||
=Assert3('10-DOC2(GBP): B.suma_val=500.00', suma_val, 500.00)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey2 AND tip_rand == 'G'
|
||||
=Assert3('11-DOC2(GBP): randul G gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('12-DOC2(GBP): G.suma=345.00', suma, 345.00)
|
||||
=Assert3('13-DOC2(GBP): G.suma_val=60.00', suma_val, 60.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DvLog WITH ' FAIL 12-13: G (DOC2) negasit'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey2 AND tip_rand == 'T'
|
||||
=Assert3('14-DOC2(GBP): randul T gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('15-DOC2(GBP): T.suma=531.30 ((2875-345)*21%)', suma, 531.30)
|
||||
=Assert3('16-DOC2(GBP): T.suma_val=92.40 ((500-60)*21%)', suma_val, 92.40)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DvLog WITH ' FAIL 15-16: T (DOC2) negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 1, 'DOC2 (GBP) verificat'
|
||||
|
||||
DO DvLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO DvLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO DvLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 2, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO DvLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AdaugaFacturaValuta
|
||||
*-- factura in valuta oarecare (id/nume/curs date), discount in ACEEASI valuta ca suma.
|
||||
LPARAMETERS tnNract, tcPartener, tnIdPartener, tnIdValuta, tcValuta, tnCurs, tnSuma, tnSumaLei, tnDiscBazaVal
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = tnNract
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = tnIdPartener
|
||||
goDlg.cPartener = tcPartener
|
||||
goDlg.cExplicatia = 'Import marfa ' + tcPartener
|
||||
goDlg.nSuma = tnSuma
|
||||
goDlg.nSumaLei = tnSumaLei
|
||||
goDlg.nCurs = tnCurs
|
||||
goDlg.nIdValuta = tnIdValuta
|
||||
goDlg.cValuta = tcValuta
|
||||
goDlg.nIdExplicatieTva = 208
|
||||
goDlg.cExplicatieTva = 'ACH. INT. 21%'
|
||||
goDlg.optTipTva.Value = 1
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO DvLog WITH 'DOC ' + TRANSFORM(tnNract) + ' (' + tcValuta + '): valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act','')
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)))
|
||||
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
||||
=ADDPROPERTY(goT,'in_valuta',1)
|
||||
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
||||
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
||||
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
||||
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
=ADDPROPERTY(goT,'cTipTva','F')
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie','')
|
||||
=ADDPROPERTY(goT,'dvi_nract',0)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',0)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc','')
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',0)
|
||||
=ADDPROPERTY(goT,'dvi_partc','')
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',0)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
||||
=ADDPROPERTY(goT,'dvi_curs',0)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val','')
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',ROUND(tnDiscBazaVal*tnCurs,gnPC))
|
||||
=ADDPROPERTY(goT,'disc_baza_val',tnDiscBazaVal)
|
||||
|
||||
DO DvLog WITH 'DOC ' + TRANSFORM(tnNract) + ' (' + tcValuta + '): do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO DvLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO DvLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DvErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO DvLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DvLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
12
utile/Teste/achizitie_import/test_discount_valuta.ps1
Normal file
12
utile/Teste/achizitie_import/test_discount_valuta.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_discount_valuta.ps1 - wrapper peste harness-ul generic pentru discountul financiar pe
|
||||
# factura de import in valuta (EUR/GBP) - suma/suma_val pe randurile G si T - Runda32.
|
||||
# powershell -ExecutionPolicy Bypass -File test_discount_valuta.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_discount_valuta.prg') `
|
||||
-Steps @('doc1_eur','doc2_gbp','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_discount_valuta') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_discount_valuta') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
613
utile/Teste/achizitie_import/test_dvi_bifa_valuta.prg
Normal file
613
utile/Teste/achizitie_import/test_dvi_bifa_valuta.prg
Normal file
@@ -0,0 +1,613 @@
|
||||
* test_dvi_bifa_valuta.prg
|
||||
* Runda32 (control nou chkDviInValuta, sectiunea TVA DVI): factura de import IN VALUTA (EUR)
|
||||
* cu bifa "Valuta" a DVI-ului SCOASA - DVI-ul e platit doar in lei, desi factura insasi e in
|
||||
* valuta ("factura in valuta, DVI doar in lei", cazul nou din plan).
|
||||
*
|
||||
* Verifica:
|
||||
* - la Init (factura in valuta), bifa porneste BIFATA (chkInValutaCont=1, valuta <> RON);
|
||||
* - dupa scoaterea bifei: lblDviValuta/txtDviValuta/cmdDviValuta/lblDviCurs/txtDviCurs
|
||||
* ascunse, nDviCurs=1; txtDviTvaVal ramane vizibil, comuta pe lei (nDviTvaVal recalculat, nu 0);
|
||||
* - randul T (DVI) creat de do_adauga_factura: FARA valuta/curs/suma_val (in_valuta=0,
|
||||
* id_valuta=0, curs=0, nume_val='', suma_val=0), suma = nDviTvaLei (introdus direct);
|
||||
* - valuta_proprie=1 (starea de valuta a DVI-ului difera de a facturii - factura are valuta,
|
||||
* DVI nu mai are, dupa scoaterea bifei).
|
||||
*
|
||||
* Flux REAL: dialogul `import_adauga_factura` (toDlg construit inline in programul principal,
|
||||
* capcana l - CREATEOBJECT/ADDPROPERTY nu merg dintr-o procedura in acest runtime headless).
|
||||
*
|
||||
* CAPCANA l (mock_caut_valuta.prg, confirmata si in test_e2e_dvi_ron_discount.prg): apelul REAL
|
||||
* goDlg.construieste_todlg() arunca eroarea 11 pe primul Addproperty in acest runtime headless
|
||||
* (CREATEOBJECT/ADDPROPERTY nu merg corect apelate dintr-o METODA, doar din programul PRINCIPAL) -
|
||||
* nu poate fi exercitat direct. toDlg se construieste inline in program, cu formula COPIATA
|
||||
* EXACT din ointroduceri.vc2 PROCEDURE construieste_todlg (~6157-6202, verificata in cache dupa
|
||||
* ce lane-ul de dialog a terminat Runda32):
|
||||
* lcDviVal = Iif(lDviValutaDirty, cDviValuta, cValuta) -- dvi_valuta_efectiva()
|
||||
* llDviFaraVal = (chkDviInValuta.Value=0) Or Empty(lcDviVal) Or Upper(lcDviVal)=='RON'
|
||||
* llFactFaraVal = Empty(cValuta) Or Upper(cValuta)=='RON'
|
||||
* llDviPropriu = (dvi_id_valuta_efectiva()<>nIdValuta Or dvi_curs_efectiv()<>nCurs)
|
||||
* dvi_valuta_proprie = Iif(llDviFaraVal And llFactFaraVal, 0, Iif(llDviFaraVal<>llFactFaraVal, 1, Iif(llDviPropriu,1,0)))
|
||||
* IMPORTANT: dvi_curs_efectiv()/dvi_id_valuta_efectiva() NU citesc nDviCurs/nDviIdValuta direct -
|
||||
* doar cand lDviValutaDirty/lDviCursDirty sunt adevarate (alegere explicita prin picker/curs
|
||||
* tastat). In acest test bifa e scoasa fara sa se atinga picker-ul/cursul DVI, deci flagurile
|
||||
* dirty raman .F. si valorile EFECTIVE raman cele ale facturii (nIdValuta/nCurs), NU nDviCurs=1
|
||||
* fortat de actualizeaza_stare_dvi_valuta() pe widget - acel 1 e doar pentru afisaj, nefolosit
|
||||
* de formula toDlg.
|
||||
* SCOPUL testului ramane do_adauga_factura() (crearea randului T dintr-un toDlg dat) - NU
|
||||
* verifica daca dialogul real produce chiar acest toDlg (blocat de capcana l).
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_dvi_bifa_valuta.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_dvi_bifa_valuta_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_dvi_bifa_valuta\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO BvErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO BvLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO BvLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO BvLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 6
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (factura in EUR, curs 5) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'FURNIZOR EXTERN GMBH')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 220, 21, 'ACH. IMP. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 221, 21, 'TVA ACH. IMP. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp (denumire C(100), codmat C(30), cant N(14,3), pret_val N(18,4), ;
|
||||
pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), acont C(20), serie C(30), ;
|
||||
lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO BvLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO BvLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= DIALOG: factura EUR, mod TVA DVI =========================
|
||||
PUBLIC goDlg
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 18000
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR EXTERN GMBH'
|
||||
goDlg.cExplicatia = 'Import marfa, DVI fara valuta proprie'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.nProcentTva = 21
|
||||
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = 19000
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'DIRECTIA VAMALA'
|
||||
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
|
||||
*========================= bifa Valuta DVI: porneste BIFATA (factura are valuta) =========================
|
||||
=Assert3('1-la Init, factura in valuta: chkDviInValuta.Value=1 (bifata)', goDlg.chkDviInValuta.Value, 1)
|
||||
=Assert3('2-la Init: txtDviValuta.Visible=1 (sectiune vizibila)', IIF(goDlg.txtDviValuta.Visible,1,0), 1)
|
||||
|
||||
*========================= scoatere bifa: sectiunea valuta DVI se ascunde, curs=1, tva val=0 =========================
|
||||
goDlg.chkDviInValuta.Value = 0
|
||||
goDlg.chkDviInValuta.InteractiveChange()
|
||||
=Assert3('3-dupa scoatere bifa: txtDviValuta.Visible=0', IIF(goDlg.txtDviValuta.Visible,1,0), 0)
|
||||
=Assert3('4-dupa scoatere bifa: cmdDviValuta.Visible=0', IIF(goDlg.cmdDviValuta.Visible,1,0), 0)
|
||||
=Assert3('5-dupa scoatere bifa: txtDviCurs.Visible=0', IIF(goDlg.txtDviCurs.Visible,1,0), 0)
|
||||
=Assert3('6-dupa scoatere bifa: txtDviTvaVal.Visible=1 (ramane vizibil, comuta pe lei)', IIF(goDlg.txtDviTvaVal.Visible,1,0), 1)
|
||||
=Assert3('7-dupa scoatere bifa: nDviCurs=1', goDlg.nDviCurs, 1)
|
||||
=Assert3('8-dupa scoatere bifa: nDviTvaVal=1050 (TVA recalculat in lei, nu 0)', goDlg.nDviTvaVal, 1050)
|
||||
|
||||
*-- TVA DVI in lei, introdusa direct (proprietate reala, ca in restul suitei - vezi
|
||||
*-- test_dvi_dialog_ui.prg scenariul F1)
|
||||
goDlg.nDviTvaLei = 900.00
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 0, 'dialog completat, bifa Valuta DVI scoasa'
|
||||
|
||||
*========================= toDlg construit inline, do_adauga_factura REAL =========================
|
||||
*-- formula copiata exact din construieste_todlg (vezi CAPCANA l in antet) - lDviValutaDirty/
|
||||
*-- lDviCursDirty raman .F. (nu s-a atins picker-ul/cursul DVI), deci valorile efective ale
|
||||
*-- DVI-ului raman cele mostenite de la factura (nIdValuta/nCurs), nu nDviCurs=1 fortat de
|
||||
*-- actualizeaza_stare_dvi_valuta() pe widget.
|
||||
PUBLIC goT
|
||||
LOCAL lcDviValEfectiv, llDviFaraVal, llFactFaraVal, llDviPropriu, lnDviIdValutaEfectiv, lnDviCursEfectiv, llValutaProprie
|
||||
lnDviIdValutaEfectiv = IIF(goDlg.lDviValutaDirty, goDlg.nDviIdValuta, goDlg.nIdValuta)
|
||||
lnDviCursEfectiv = IIF(goDlg.lDviValutaDirty OR goDlg.lDviCursDirty, goDlg.nDviCurs, goDlg.nCurs)
|
||||
lcDviValEfectiv = IIF(goDlg.lDviValutaDirty, ALLTRIM(NVL(goDlg.cDviValuta,'')), ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
llDviFaraVal = (goDlg.chkDviInValuta.Value = 0) OR EMPTY(lcDviValEfectiv) OR UPPER(lcDviValEfectiv) == 'RON'
|
||||
llFactFaraVal = (EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta)) == 'RON')
|
||||
llDviPropriu = (lnDviIdValutaEfectiv <> goDlg.nIdValuta OR lnDviCursEfectiv <> goDlg.nCurs)
|
||||
llValutaProprie = IIF(llDviFaraVal AND llFactFaraVal, 0, IIF(llDviFaraVal <> llFactFaraVal, 1, IIF(llDviPropriu,1,0)))
|
||||
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act','')
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',ROUND(goDlg.nSuma*goDlg.nCurs,gnPC))
|
||||
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
||||
=ADDPROPERTY(goT,'in_valuta',1)
|
||||
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
||||
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
||||
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
||||
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
=ADDPROPERTY(goT,'cTipTva','D')
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie',ALLTRIM(NVL(goDlg.cSerieDvi,'')))
|
||||
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
|
||||
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
|
||||
*-- bifa scoasa => dvi_in_valuta=.F. (llDviFaraVal), indiferent de valuta efectiva mostenita
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',!llDviFaraVal)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',lnDviIdValutaEfectiv)
|
||||
=ADDPROPERTY(goT,'dvi_curs',lnDviCursEfectiv)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val',lcDviValEfectiv)
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',llValutaProprie)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_val',0)
|
||||
|
||||
LOCAL llOkAdauga
|
||||
llOkAdauga = goObj.do_adauga_factura(goT)
|
||||
=Assert3('9-do_adauga_factura(goT) reuseste', IIF(llOkAdauga,1,0), 1)
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 1, 'document creat, dupa Termin'
|
||||
|
||||
*========================= randul T (DVI): fara valuta/curs/suma_val =========================
|
||||
SELECT introdc
|
||||
SET ORDER TO
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('10-randul T-DVI (rand_dvi=1) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('11-T-DVI.suma=900.00 (nDviTvaLei introdus)', suma, 900.00)
|
||||
=Assert3('12-T-DVI.suma_val=0 (fara valuta)', NVL(suma_val,0), 0)
|
||||
=Assert3('13-T-DVI.in_valuta=0', NVL(in_valuta,0), 0)
|
||||
=Assert3('14-T-DVI.id_valuta=0', NVL(id_valuta,0), 0)
|
||||
=Assert3('15-T-DVI.curs=0', NVL(curs,0), 0)
|
||||
=AssertStr('16-T-DVI.nume_val=""', ALLTRIM(NVL(nume_val,'?')), '')
|
||||
=Assert3('17-T-DVI.valuta_proprie=1 (factura are valuta, DVI nu mai are)', NVL(valuta_proprie,0), 1)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 7
|
||||
DO BvLog WITH ' FAIL 11-17: T-DVI negasit'
|
||||
ENDIF
|
||||
|
||||
*-- randul B (baza facturii) ramane in valuta - discountul/bifa DVI nu-l afecteaza
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 18000 AND tip_rand == 'B'
|
||||
=Assert3('18-randul B (baza) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('19-B.in_valuta=1 (factura ramane in valuta)', NVL(in_valuta,0), 1)
|
||||
=Assert3('20-B.suma_val=1000.00', NVL(suma_val,0), 1000.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO BvLog WITH ' FAIL 19-20: B negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 2, 'randul T-DVI fara valuta verificat - vezi log'
|
||||
|
||||
DO BvLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO BvLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO BvLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO BvLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE CreeazaIntrodc
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO BvLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO BvLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO BvLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO BvLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE BvErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO BvLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE BvLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
|
||||
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
|
||||
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 1, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 2, 301204)
|
||||
ENDPROC
|
||||
12
utile/Teste/achizitie_import/test_dvi_bifa_valuta.ps1
Normal file
12
utile/Teste/achizitie_import/test_dvi_bifa_valuta.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_dvi_bifa_valuta.ps1 - wrapper peste harness-ul generic pentru bifa noua "Valuta" din
|
||||
# sectiunea TVA DVI (chkDviInValuta) - Runda32.
|
||||
# powershell -ExecutionPolicy Bypass -File test_dvi_bifa_valuta.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_dvi_bifa_valuta.prg') `
|
||||
-Steps @('dialog_bifa_scoasa','document_creat','rand_t_dvi_verificat','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_dvi_bifa_valuta') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_dvi_bifa_valuta') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
794
utile/Teste/achizitie_import/test_dvi_dialog_ui.prg
Normal file
794
utile/Teste/achizitie_import/test_dvi_dialog_ui.prg
Normal file
@@ -0,0 +1,794 @@
|
||||
* test_dvi_dialog_ui.prg
|
||||
* Runda30 (F1, plan fizzy-imagining-parnas.md): teste UI pe formularul REAL de adaugare
|
||||
* factura (import_adauga_factura, COMUN\clase\ointroduceri.vcx), clona a test_adauga_factura_ui.prg,
|
||||
* focalizata pe comportamentul dialogului pentru blocul DVI (valuta/curs proprii) si discount:
|
||||
* 1. precompletarea valutei/cursului DVI din factura la Init (mirror automat);
|
||||
* 2. contractul nou al mock_caut_valuta (goMockValutaCoada, coada FIFO) exercitat prin
|
||||
* 2 pick-uri diferite in acelasi flux (valuta facturii, apoi valuta DVI) + fallback
|
||||
* la contractul vechi (goMockValuta) cand coada se goleste;
|
||||
* 3. alegerea RON pe DVI (curs fix 1, curs disabled, TVA valuta ascunsa si 0);
|
||||
* 4. garda de dirty: TVA in valuta DVI editat manual (txtDviTvaVal.Valid) nu mai e
|
||||
* rescris de recalc_tva (cazul unei a treia valute, diferita de RON si de factura);
|
||||
* 5. Runda32: discountul e activ direct pe nDiscBaza<>0 (fara chkAreDiscount); caption-ul
|
||||
* txtDiscBaza urmeaza valuta facturii, txtDiscBaza e permanent vizibil;
|
||||
* 6. dirty-flags: txtDviCurs.Valid seteaza dirty; realegerea valutei DVI reseteaza cursul;
|
||||
* 7. validari blocante: DVI non-RON cu curs 0; discount negativ; discount >= suma facturii.
|
||||
*
|
||||
* ASUMPTII (de confruntat cu implementarea reala):
|
||||
* - proprietatile de dialog se numesc nDviIdValuta, cDviValuta, nDviCurs, lDviCursDirty,
|
||||
* lDviTvaValDirty, nDiscBaza (verificate pe ointroduceri.vc2, lane F1+F2 dialog,
|
||||
* 27.07.2026; Runda32 elimina chkAreDiscount/txtDiscTva/nDiscTva/lDiscTvaDirty);
|
||||
* - RON e o valuta cu id propriu (1), nu id_valuta=0 (vezi test_repro_valuta_dblclick.prg);
|
||||
* picker-ul (cmdValuta/cmdDviValuta.Click) ignora rezultate cu id_valuta=0 (guard
|
||||
* !Empty(Nvl(loCauta.id_valuta,0))).
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_dvi_dialog_ui.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_dvi_dialog_ui_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_dvi_dialog\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO DdErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO DdLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO DdLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO DdLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 6
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (factura in EUR, curs 5 - ca DVI-ul sa aiba ce mosteni la Init) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 501)
|
||||
poAct.AddProperty('partc', 'FURNIZOR EXTERN GMBH')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% (achizitii interne + import) -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp (denumire C(100), codmat C(30), cant N(14,3), pret_val N(18,4), ;
|
||||
pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), acont C(20), serie C(30), ;
|
||||
lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DdLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO DdLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
|
||||
|
||||
*========================= SCENARIU G: coada FIFO a mock-ului, 2 pick-uri in acelasi flux =========================
|
||||
*-- valuta facturii (GBP) apoi valuta DVI (CHF) - independente; dupa coada, fallback la
|
||||
*-- contractul vechi (goMockValuta fix).
|
||||
PUBLIC goDlg
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 6001
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR UK LTD'
|
||||
goDlg.nSuma = 100
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PUBLIC goMockValuta, goMockValutaCoada
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
goMockValutaCoada = CREATEOBJECT('Collection')
|
||||
LOCAL loValGbp, loValChf
|
||||
loValGbp = CREATEOBJECT('Custom')
|
||||
loValGbp.AddProperty('id_valuta', 826)
|
||||
loValGbp.AddProperty('nume_val', 'GBP')
|
||||
goMockValutaCoada.Add(loValGbp)
|
||||
loValChf = CREATEOBJECT('Custom')
|
||||
loValChf.AddProperty('id_valuta', 756)
|
||||
loValChf.AddProperty('nume_val', 'CHF')
|
||||
goMockValutaCoada.Add(loValChf)
|
||||
|
||||
goDlg.cmdValuta.Click()
|
||||
=Assert3('G1-pick1 (valuta facturii) seteaza nIdValuta=826 (GBP)', goDlg.nIdValuta, 826)
|
||||
=AssertStr('G2-pick1 cValuta=GBP', ALLTRIM(goDlg.cValuta), 'GBP')
|
||||
=Assert3('G3-DVI mirror dupa pick1 (nDviIdValuta=826, nu e dirty inca)', goDlg.nDviIdValuta, 826)
|
||||
|
||||
goDlg.cmdDviValuta.Click()
|
||||
=Assert3('G4-pick2 (valuta DVI) seteaza nDviIdValuta=756 (CHF)', goDlg.nDviIdValuta, 756)
|
||||
=AssertStr('G5-pick2 cDviValuta=CHF', ALLTRIM(goDlg.cDviValuta), 'CHF')
|
||||
=Assert3('G6-valuta facturii ramane GBP (independenta de pick2)', goDlg.nIdValuta, 826)
|
||||
=Assert3('G7-coada goala dupa 2 pick-uri (Count=0)', goMockValutaCoada.Count, 0)
|
||||
|
||||
LOCAL loFallback
|
||||
loFallback = caut_valuta()
|
||||
=Assert3('G8-coada goala: caut_valuta() revine la contractul vechi (goMockValuta EUR=978)', loFallback.id_valuta, 978)
|
||||
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 1, 'scenariul G (coada FIFO mock_caut_valuta) verificat - vezi log'
|
||||
|
||||
*========================= SCENARIU A: precompletare valuta/curs DVI din factura la Init =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
=Assert3('A1-precompletare nDviIdValuta=978 (EUR, ca factura) la Init', goDlg.nDviIdValuta, 978)
|
||||
=AssertStr('A2-precompletare cDviValuta=EUR la Init', ALLTRIM(goDlg.cDviValuta), 'EUR')
|
||||
=Assert3('A3-precompletare nDviCurs=5 (ca factura) la Init', goDlg.nDviCurs, 5)
|
||||
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
=Assert3('A4-txtDviValuta.Visible=1 in mod TVA DVI', IIF(goDlg.txtDviValuta.Visible,1,0), 1)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 2, 'scenariul A (precompletare DVI la Init) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU B: alegerea RON pe DVI =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
|
||||
PUBLIC goMockValutaCoada
|
||||
goMockValutaCoada = CREATEOBJECT('Collection')
|
||||
LOCAL loValRon
|
||||
loValRon = CREATEOBJECT('Custom')
|
||||
loValRon.AddProperty('id_valuta', 1)
|
||||
loValRon.AddProperty('nume_val', 'RON')
|
||||
goMockValutaCoada.Add(loValRon)
|
||||
|
||||
goDlg.cmdDviValuta.Click()
|
||||
=Assert3('B1-alegere RON: nDviIdValuta=1', goDlg.nDviIdValuta, 1)
|
||||
=AssertStr('B2-alegere RON: cDviValuta=RON', ALLTRIM(goDlg.cDviValuta), 'RON')
|
||||
=Assert3('B3-alegere RON: nDviCurs fixat la 1', goDlg.nDviCurs, 1)
|
||||
=Assert3('B4-alegere RON: txtDviCurs.Enabled=0 (disabled)', IIF(goDlg.txtDviCurs.Enabled,1,0), 0)
|
||||
=Assert3('B5-alegere RON: txtDviTvaVal.Visible=1 (ramane vizibil, comuta pe lei)', IIF(goDlg.txtDviTvaVal.Visible,1,0), 1)
|
||||
=Assert3('B6-alegere RON: nDviTvaVal=0', goDlg.nDviTvaVal, 0)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 3, 'scenariul B (RON pe DVI) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU C: garda de dirty pe TVA in valuta DVI (a treia valuta) =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nProcentTva = 21
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
|
||||
PUBLIC goMockValutaCoada
|
||||
goMockValutaCoada = CREATEOBJECT('Collection')
|
||||
LOCAL loValUsd
|
||||
loValUsd = CREATEOBJECT('Custom')
|
||||
loValUsd.AddProperty('id_valuta', 840)
|
||||
loValUsd.AddProperty('nume_val', 'USD')
|
||||
goMockValutaCoada.Add(loValUsd)
|
||||
goDlg.cmdDviValuta.Click()
|
||||
=AssertStr('C1-DVI in USD (a treia valuta, diferita de EUR factura)', ALLTRIM(goDlg.cDviValuta), 'USD')
|
||||
|
||||
goDlg.txtDviCurs.Value = 4.5
|
||||
goDlg.txtDviCurs.Valid()
|
||||
goDlg.recalc_tva()
|
||||
*-- nSumaLei=1000*5=5000; TvaLei=5000*21%=1050; TvaVal(auto)=Round(1050/4.5,2)=233.33
|
||||
=Assert3('C2-baseline auto nDviTvaVal=233.33 (1050/4.5)', goDlg.nDviTvaVal, 233.33)
|
||||
|
||||
goDlg.txtDviTvaVal.Value = 999.99
|
||||
goDlg.txtDviTvaVal.Valid()
|
||||
=Assert3('C3-dupa editare manuala, nDviTvaVal=999.99', goDlg.nDviTvaVal, 999.99)
|
||||
=Assert3('C4-lDviTvaValDirty=1 dupa editare manuala', IIF(goDlg.lDviTvaValDirty,1,0), 1)
|
||||
|
||||
goDlg.recalc_tva()
|
||||
=Assert3('C5-dupa recalc_tva() repetat, nDviTvaVal ramane manual (999.99, nu se rescrie)', goDlg.nDviTvaVal, 999.99)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 4, 'scenariul C (garda dirty TVA valuta DVI) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU D: discount fara bifa (Runda32), caption dupa valuta =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
=Assert3('D1-txtDiscBaza.Visible=1 permanent (fara chkAreDiscount)', IIF(goDlg.txtDiscBaza.Visible,1,0), 1)
|
||||
=AssertContains('D2-caption txtDiscBaza urmeaza valuta facturii (EUR)', 'EUR', goDlg.lblDiscBaza.Caption)
|
||||
|
||||
goDlg.chkInValutaCont.Value = 0
|
||||
goDlg.chkInValutaCont.InteractiveChange()
|
||||
=AssertContains('D3-caption dupa scoaterea valutei: "RON"', 'RON', goDlg.lblDiscBaza.Caption)
|
||||
|
||||
goDlg.txtDiscBaza.Value = 500
|
||||
goDlg.txtDiscBaza.Valid()
|
||||
=Assert3('D4-nDiscBaza=500 dupa completare', goDlg.nDiscBaza, 500)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 5, 'scenariul D (discount fara bifa, caption dupa valuta) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU E: dirty-flags txtDviCurs + revert la realegere valuta DVI =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
|
||||
goDlg.txtDviCurs.Value = 4.75
|
||||
goDlg.txtDviCurs.Valid()
|
||||
=Assert3('E1-lDviCursDirty=1 dupa editare manuala curs DVI', IIF(goDlg.lDviCursDirty,1,0), 1)
|
||||
=Assert3('E2-nDviCurs=4.75 dupa editare manuala', goDlg.nDviCurs, 4.75)
|
||||
|
||||
PUBLIC goMockValutaCoada
|
||||
goMockValutaCoada = CREATEOBJECT('Collection')
|
||||
LOCAL loValEur2
|
||||
loValEur2 = CREATEOBJECT('Custom')
|
||||
loValEur2.AddProperty('id_valuta', 978)
|
||||
loValEur2.AddProperty('nume_val', 'EUR')
|
||||
goMockValutaCoada.Add(loValEur2)
|
||||
goDlg.cmdDviValuta.Click()
|
||||
=Assert3('E3-lDviCursDirty resetat (0) dupa realegerea valutei DVI', IIF(goDlg.lDviCursDirty,1,0), 0)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 6, 'scenariul E (dirty-flags txtDviCurs + revert) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU F1: validare blocanta - DVI non-RON cu curs 0 =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 6002
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR UK LTD'
|
||||
goDlg.nSuma = 100
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
goDlg.nNractDvi = 7002
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'DIRECTIA VAMALA'
|
||||
goDlg.nDviTvaLei = 21
|
||||
goDlg.nDviIdValuta = 840
|
||||
goDlg.cDviValuta = 'USD'
|
||||
goDlg.nDviCurs = 0
|
||||
*-- flagurile dirty marcheaza ca DVI a fost ales explicit (picker/curs tastat) - fara ele,
|
||||
*-- dvi_valuta_efectiva()/dvi_curs_efectiv() urmeaza factura (EUR), nu USD/0 setate direct
|
||||
goDlg.lDviValutaDirty = .T.
|
||||
goDlg.lDviCursDirty = .T.
|
||||
|
||||
gcMockUltimMesaj = ''
|
||||
LOCAL llOkF1
|
||||
llOkF1 = goDlg.valideaza()
|
||||
=Assert3('F1a-valideaza() respinge DVI non-RON cu curs 0', IIF(llOkF1,1,0), 0)
|
||||
=AssertContains('F1b-mesaj contine "curs"', 'curs', gcMockUltimMesaj)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 7, 'scenariul F1 (DVI curs 0 blocant) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU F2: validari blocante - discount negativ / discount >= suma =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 6003
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR UK LTD'
|
||||
goDlg.nSuma = 100
|
||||
goDlg.nIdExplicatieTva = 208
|
||||
goDlg.cExplicatieTva = 'ACH. INT. 21%'
|
||||
goDlg.optTipTva.Value = 1
|
||||
goDlg.txtDiscBaza.Value = -10
|
||||
goDlg.txtDiscBaza.Valid()
|
||||
|
||||
gcMockUltimMesaj = ''
|
||||
LOCAL llOkF2a
|
||||
llOkF2a = goDlg.valideaza()
|
||||
=Assert3('F2a-valideaza() respinge discount negativ', IIF(llOkF2a,1,0), 0)
|
||||
=AssertContains('F2b-mesaj contine "discount"', 'discount', gcMockUltimMesaj)
|
||||
|
||||
goDlg.txtDiscBaza.Value = 100
|
||||
goDlg.txtDiscBaza.Valid()
|
||||
gcMockUltimMesaj = ''
|
||||
LOCAL llOkF2c
|
||||
llOkF2c = goDlg.valideaza()
|
||||
=Assert3('F2c-valideaza() respinge discount >= suma facturii', IIF(llOkF2c,1,0), 0)
|
||||
=AssertContains('F2d-mesaj contine "discount"', 'discount', gcMockUltimMesaj)
|
||||
|
||||
goDlg.txtDiscBaza.Value = 50
|
||||
goDlg.txtDiscBaza.Valid()
|
||||
LOCAL llOkF2e
|
||||
llOkF2e = goDlg.valideaza()
|
||||
=Assert3('F2e-discount < suma: valideaza() trece', IIF(llOkF2e,1,0), 1)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 8, 'scenariul F2 (discount negativ / >=suma blocante) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU H: regresie - Tab fara modificare NU inghenuncheaza dirty =========================
|
||||
*-- Regresia reala reparata de orchestrator: garda veche (This.Value<>Thisform.nXxx) nu se
|
||||
*-- declansa NICIODATA, nici in productie, pentru ca ControlSource sincronizeaza proprietatea
|
||||
*-- legata INAINTE ca Valid sa apuce sa compare. Fix: tipar nOldVal (GotFocus retine valoarea
|
||||
*-- la intrare, Valid seteaza dirty doar daca s-a schimbat fata de acel moment - cf.
|
||||
*-- GridArt.cCant.Text1.GotFocus, deja existent in proiect). Fara acest test, un refactor
|
||||
*-- viitor ar putea reintroduce garda veche (mereu "dirty", declansata de intamplare de
|
||||
*-- initializarea la 0 a lui nOldVal) fara sa aprinda nimic.
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 6004
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR UK LTD'
|
||||
goDlg.nSuma = 100
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
|
||||
*-- txtDviTvaVal: valoare initiala, dirty resetat, Tab FARA modificare, apoi modificare reala
|
||||
goDlg.lDviTvaValDirty = .F.
|
||||
goDlg.txtDviTvaVal.Value = 500
|
||||
goDlg.txtDviTvaVal.GotFocus()
|
||||
goDlg.txtDviTvaVal.Valid()
|
||||
=Assert3('H1-txtDviTvaVal: Tab fara modificare NU seteaza dirty', IIF(goDlg.lDviTvaValDirty,1,0), 0)
|
||||
goDlg.txtDviTvaVal.Value = 777
|
||||
goDlg.txtDviTvaVal.Valid()
|
||||
=Assert3('H2-txtDviTvaVal: modificare reala SETEAZA dirty', IIF(goDlg.lDviTvaValDirty,1,0), 1)
|
||||
|
||||
*-- txtDviCurs: acelasi tipar
|
||||
goDlg.lDviCursDirty = .F.
|
||||
goDlg.txtDviCurs.Value = 5
|
||||
goDlg.txtDviCurs.GotFocus()
|
||||
goDlg.txtDviCurs.Valid()
|
||||
=Assert3('H3-txtDviCurs: Tab fara modificare NU seteaza dirty', IIF(goDlg.lDviCursDirty,1,0), 0)
|
||||
goDlg.txtDviCurs.Value = 6
|
||||
goDlg.txtDviCurs.Valid()
|
||||
=Assert3('H4-txtDviCurs: modificare reala SETEAZA dirty', IIF(goDlg.lDviCursDirty,1,0), 1)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 9, 'scenariul H (Tab fara modificare nu seteaza dirty) verificat - vezi log'
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO DdLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO DdLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO DdLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 10, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO DdLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE CreeazaIntrodc
|
||||
*-- Runda30 (F1/pas2): coloane NOI rand_dvi N(1), valuta_proprie N(1) fata de structura veche.
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO DdLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO DdLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO DdLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO DdLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertContains
|
||||
LPARAMETERS tcLabel, tcNeedle, tcHaystack
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF UPPER(ALLTRIM(tcNeedle)) $ UPPER(ALLTRIM(NVL(tcHaystack,'')))
|
||||
pnPass = pnPass + 1
|
||||
DO DdLog WITH ' PASS ' + tcLabel + ' ([' + tcNeedle + '] gasit in [' + tcHaystack + '])'
|
||||
ELSE
|
||||
DO DdLog WITH ' FAIL ' + tcLabel + ' ([' + tcNeedle + '] NEGASIT in [' + tcHaystack + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DdErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO DdLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DdLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
11
utile/Teste/achizitie_import/test_dvi_dialog_ui.ps1
Normal file
11
utile/Teste/achizitie_import/test_dvi_dialog_ui.ps1
Normal file
@@ -0,0 +1,11 @@
|
||||
# test_dvi_dialog_ui.ps1 - wrapper peste harness-ul generic pentru testul dialogului DVI/discount.
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_dvi_dialog_ui.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_dvi_dialog_ui.prg') `
|
||||
-Steps @('nota_goala','coada_fifo_mock','precompletare_dvi','ron_pe_dvi','garda_dirty_tva_dvi','discount_fara_bifa','dirty_curs_dvi','f1_dvi_curs_zero','f2_discount_negativ_sau_max','tab_fara_modificare','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_dvi_dialog') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_dvi_dialog') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
718
utile/Teste/achizitie_import/test_dvi_multicota.prg
Normal file
718
utile/Teste/achizitie_import/test_dvi_multicota.prg
Normal file
@@ -0,0 +1,718 @@
|
||||
* test_dvi_multicota.prg
|
||||
* Scenariul raportat de Marius (28.07.2026): factura de import in EUR cu discount financiar,
|
||||
* TVA-ul platit in vama (DVI) in RON si articole pe DOUA cote (21% si 11%). Verifica pe fluxul
|
||||
* REAL (dialog import_adauga_factura + do_adauga_articol + sincronizeaza) ca toate cele trei
|
||||
* familii de randuri ale documentului ajung pe cotele articolelor, concordant:
|
||||
* - S (baza): cate un rand pe cont+cota, cu ptva-ul articolelor lui (creeaza_rand_s + tnCota);
|
||||
* - G (discount): spart proportional cu bazele pe cota (sparge_discount), total pastrat;
|
||||
* - T (TVA DVI, rand protejat valuta_proprie=1): spart pe cote cu pondere baza x cota
|
||||
* (sparge_tva_protejat), total pastrat = suma tastata de pe DVI.
|
||||
*
|
||||
* Cifre: 1500 EUR (1000@21% + 500@11%), curs 5, discount 150 EUR (10%), TVA DVI 1192.50 lei
|
||||
* (= TVA-ul corect pe baze diminuate: (1000-100)*21% + (500-50)*11% = 238.50 EUR x 5).
|
||||
* - G: 100 EUR (500 lei) pe 21% + 50 EUR (250 lei) pe 11%
|
||||
* - T: 1192.50 * 210/265 = 945.00 lei pe 21% + 1192.50 * 55/265 = 247.50 lei pe 11%
|
||||
* (ponderi: 1000*21% = 210, 500*11% = 55), suma_val = 0 pe ambele (DVI in RON).
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_dvi_multicota.ps1
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_dvi_multicota_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_dvi_multicota\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO McErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO McLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO McLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO McLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
PUBLIC goMockValuta
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 5) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'MULTI SUPPLY SRL')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: DOUA familii import (FO), 21% si 11% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301205-Import de bunuri cota 11%', 301205, '', 11, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 220, 21, 'ACH. IMP. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 221, 21, 'TVA ACH. IMP. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO McLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO McLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= FACTURA: 1500 EUR (1000@21% + 500@11%), discount 150 EUR =========================
|
||||
PUBLIC goDlg, goT, gcDocKey1
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 17000
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'MULTI SUPPLY SRL'
|
||||
goDlg.cExplicatia = 'Import marfa multicota'
|
||||
goDlg.nSuma = 1500
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO McLog WITH 'valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act','')
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',ROUND(goDlg.nSuma*goDlg.nCurs,gnPC))
|
||||
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
||||
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
||||
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
||||
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
=ADDPROPERTY(goT,'cTipTva','D')
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie','')
|
||||
=ADDPROPERTY(goT,'dvi_nract',9017)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',2)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc','DVI')
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',901)
|
||||
=ADDPROPERTY(goT,'dvi_partc','DIRECTIA VAMALA')
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',1192.50)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
||||
=ADDPROPERTY(goT,'dvi_curs',0)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val','')
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',1)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',ROUND(150*5,gnPC))
|
||||
=ADDPROPERTY(goT,'disc_baza_val',150)
|
||||
|
||||
LOCAL llOkAdauga
|
||||
llOkAdauga = goObj.do_adauga_factura(goT)
|
||||
=Assert3('1-do_adauga_factura(goT) reuseste', IIF(llOkAdauga,1,0), 1)
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT introdc
|
||||
SET ORDER TO
|
||||
LOCATE FOR nract = 17000 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO HarnessStep WITH 0, 'factura creata, doc_key=' + gcDocKey1
|
||||
|
||||
*========================= DOUA ARTICOLE, COTE DIFERITE (21% si 11%) =========================
|
||||
gcMockArtCodmat = 'ART-BULD-212'
|
||||
gcMockAcontCrt = ''
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA1
|
||||
DO McLog WITH 'EROARE do_adauga_articol (1) ' + TRANSFORM(loExcA1.ErrorNo) + ' [' + loExcA1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 1000, pretd WITH 1000, pret WITH ROUND(1000*5,4), ;
|
||||
pret_lei WITH ROUND(1000*5,4), cota_tva WITH 21
|
||||
ENDIF
|
||||
|
||||
gcMockArtCodmat = 'ART-A8-371'
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA2
|
||||
DO McLog WITH 'EROARE do_adauga_articol (2) ' + TRANSFORM(loExcA2.ErrorNo) + ' [' + loExcA2.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 500, pretd WITH 500, pret WITH ROUND(500*5,4), ;
|
||||
pret_lei WITH ROUND(500*5,4), cota_tva WITH 11
|
||||
ENDIF
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
=Assert3('2-doua articole in rul_temp', RECCOUNT_ACTIVE('rul_temp'), 2)
|
||||
|
||||
DO HarnessStep WITH 1, 'articole (21% si 11%) adaugate'
|
||||
|
||||
*========================= sincronizeaza() (declanseaza sparge_document) =========================
|
||||
LOCAL llEroareSync
|
||||
llEroareSync = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS
|
||||
llEroareSync = .T.
|
||||
DO McLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcS.ErrorNo) + ' [' + loExcS.Message + '] in ' + loExcS.Procedure + ':' + TRANSFORM(loExcS.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('3-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
|
||||
|
||||
*========================= G: discountul se sparge pe cote (baza TVA-ului) =========================
|
||||
LOCAL lnCntG, lnSumGVal, lnSumG
|
||||
STORE 0 TO lnCntG, lnSumGVal, lnSumG
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G'
|
||||
lnCntG = lnCntG + 1
|
||||
lnSumGVal = lnSumGVal + suma_val
|
||||
lnSumG = lnSumG + suma
|
||||
ENDSCAN
|
||||
=Assert3('4-doua randuri G (unul pe cota)', lnCntG, 2)
|
||||
=Assert3('4a-total discount valuta pastrat', lnSumGVal, 150.00)
|
||||
=Assert3('4b-total discount lei pastrat', lnSumG, 750.00)
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G' AND ptva == 21
|
||||
=Assert3('5-G(21%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('5a-G(21%).suma_val=100.00 (150*1000/1500)', suma_val, 100.00)
|
||||
=Assert3('5b-G(21%).suma=500.00', suma, 500.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 5a-5b: G(21%) negasit'
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'G' AND ptva == 11
|
||||
=Assert3('6-G(11%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('6a-G(11%).suma_val=50.00 (150*500/1500)', suma_val, 50.00)
|
||||
=Assert3('6b-G(11%).suma=250.00', suma, 250.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 6a-6b: G(11%) negasit'
|
||||
ENDIF
|
||||
|
||||
*========================= T-uri: TVA DVI in RON, protejat, spart pe cote =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T' AND ptva == 21
|
||||
=Assert3('7-T(21%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('8-T(21%).suma=945.00 (1192.50*210/265)', suma, 945.00)
|
||||
=Assert3('8a-T(21%).suma_val=0 (TVA DVI in RON)', suma_val, 0)
|
||||
=Assert3('8b-T(21%) ramane rand DVI protejat', NVL(rand_dvi,0)+NVL(valuta_proprie,0), 2)
|
||||
=Assert3('9-T(21%) partener vamal', NVL(id_partc,0), 901)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 8-9: T(21%) negasit'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T' AND ptva == 11
|
||||
=Assert3('10-T(11%) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('11-T(11%).suma=247.50 (1192.50*55/265)', suma, 247.50)
|
||||
=Assert3('11a-T(11%).suma_val=0 (TVA DVI in RON)', suma_val, 0)
|
||||
=Assert3('12-T(11%) ramane rand DVI protejat', NVL(rand_dvi,0)+NVL(valuta_proprie,0), 2)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO McLog WITH ' FAIL 11-12: T(11%) negasit'
|
||||
ENDIF
|
||||
|
||||
LOCAL lnCntT, lnSumTVal, lnSumT
|
||||
STORE 0 TO lnCntT, lnSumTVal, lnSumT
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T'
|
||||
lnCntT = lnCntT + 1
|
||||
lnSumTVal = lnSumTVal + suma_val
|
||||
lnSumT = lnSumT + suma
|
||||
ENDSCAN
|
||||
=Assert3('13-exact 2 randuri T (o cota fiecare)', lnCntT, 2)
|
||||
=Assert3('14-suma T-urilor (valuta) = 0 (DVI in RON)', lnSumTVal, 0)
|
||||
=Assert3('15-suma T-urilor (lei) = 1192.50 (totalul tastat pe DVI)', lnSumT, 1192.50)
|
||||
|
||||
*========================= S: cota randului de baza = cota articolelor lui =========================
|
||||
LOCAL lnCntS
|
||||
lnCntS = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S'
|
||||
lnCntS = lnCntS + 1
|
||||
ENDSCAN
|
||||
=Assert3('16-doua randuri S', lnCntS, 2)
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 21
|
||||
=Assert3('17-S cu cota 21 (articolul de 1000)', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('17a-S(21%).suma_val=1000.00', suma_val, 1000.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO McLog WITH ' FAIL 17a: S(21%) negasit'
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
||||
=Assert3('18-S cu cota 11 (articolul de 500)', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('18a-S(11%).suma_val=500.00', suma_val, 500.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO McLog WITH ' FAIL 18a: S(11%) negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 2, 'T-uri DVI multicota verificate - suma val=' + TRANSFORM(lnSumTVal) + ' lei=' + TRANSFORM(lnSumT)
|
||||
|
||||
DO McLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO McLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO McLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO McLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO McLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO McLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE McErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO McLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE McLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
|
||||
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
|
||||
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 1, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 2, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 3, 301205)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 4, 301205)
|
||||
ENDPROC
|
||||
12
utile/Teste/achizitie_import/test_dvi_multicota.ps1
Normal file
12
utile/Teste/achizitie_import/test_dvi_multicota.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_dvi_multicota.ps1 - wrapper peste harness-ul generic pentru TVA-ul pe DVI + discountul financiar
|
||||
# distribuite pe doua cote TVA (21%/11%).
|
||||
# powershell -ExecutionPolicy Bypass -File test_dvi_multicota.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_dvi_multicota.prg') `
|
||||
-Steps @('factura_creata','articole_adaugate','sincronizare','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_dvi_multicota') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_dvi_multicota') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
648
utile/Teste/achizitie_import/test_dvi_tva_manual.prg
Normal file
648
utile/Teste/achizitie_import/test_dvi_tva_manual.prg
Normal file
@@ -0,0 +1,648 @@
|
||||
* test_dvi_tva_manual.prg
|
||||
* Runda30 (F1, plan fizzy-imagining-parnas.md): TVA DVI editat MANUAL in dialog (valoare
|
||||
* diferita de baza*cota) trebuie sa supravietuiasca do_executa()/sincronizeaza() - motorul
|
||||
* trebuie sa marcheze randul T rezultat cu mod_manual=1 (semantica EXISTENTA, refolosita - vezi
|
||||
* garda deja prezenta in do_executa: "If Nvl(mod_manual,0) <> 1"), nu sa rescrie suma la
|
||||
* fiecare recalculare.
|
||||
* Verifica:
|
||||
* - DOC1 (TVA DVI manual, 1200.00 <> 1098.30 auto): randul T are mod_manual=1 si suma=1200.00,
|
||||
* verificat pe CURSORUL introdc (nu doar pe proprietatea din dialog), supravietuieste
|
||||
* do_executa() si sincronizeaza();
|
||||
* - DOC2 (control, TVA DVI = baza*cota, 1098.30 exact): randul T are mod_manual=0 (nu orice
|
||||
* rand DVI devine automat manual - doar cel cu valoare divergenta).
|
||||
*
|
||||
* ASUMPTIE (de confruntat cu implementarea reala): mod_manual se determina prin COMPARAREA
|
||||
* toDlg.dvi_tva_lei cu baza*cota (nu printr-un flag suplimentar de dirty in toDlg) - vezi
|
||||
* text plan sectiunea "F1 - modificari", do_adauga_factura.
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_dvi_tva_manual.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_dvi_tva_manual_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_dvi_tva_manual\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO DcErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO DcLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO DcLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO DcLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
PUBLIC goMockValuta
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 5.23) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5.23)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'RAJA')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO DcLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= DOC1: TVA DVI MANUAL (1200.00, diferit de auto 1098.30) =========================
|
||||
PUBLIC goDlg, goT
|
||||
DO AdaugaDoc WITH 15000, 'RAJA', 601, 1200.00
|
||||
DO HarnessStep WITH 0, 'dupa DOC1 (manual): introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 15086 AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('1-DOC1: rand T-DVI gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
DO DcLog WITH 'DOC1 T-DVI: suma=' + TRANSFORM(suma) + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0))
|
||||
=Assert3('2-DOC1: T-DVI.suma=1200.00 (valoare manuala, NU 1098.30 auto)', suma, 1200.00)
|
||||
=Assert3('3-DOC1: T-DVI.mod_manual=1 (dirty, valoare difera de baza*cota)', NVL(mod_manual,0), 1)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 2-3: T-DVI DOC1 negasit'
|
||||
ENDIF
|
||||
|
||||
*-- garda do_executa (existenta - reutilizata prin mod_manual=1)
|
||||
goObj.do_executa()
|
||||
DOEVENTS FORCE
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 15086 AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('4-DOC1: dupa do_executa() suma ramane 1200.00', IIF(FOUND(),suma,-1), 1200.00)
|
||||
|
||||
*-- sincronizare completa
|
||||
LOCAL llEroareSync1
|
||||
llEroareSync1 = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS1
|
||||
llEroareSync1 = .T.
|
||||
DO DcLog WITH 'EROARE la sincronizeaza() DOC1 ' + TRANSFORM(loExcS1.ErrorNo) + ' [' + loExcS1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('5-DOC1: sincronizeaza() fara eroare', IIF(llEroareSync1,0,1), 1)
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 15086 AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('6-DOC1: dupa sincronizeaza() suma ramane 1200.00', IIF(FOUND(),suma,-1), 1200.00)
|
||||
IF FOUND()
|
||||
=Assert3('7-DOC1: dupa sincronizeaza() mod_manual ramane 1', NVL(mod_manual,0), 1)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 1, 'DOC1 (TVA DVI manual) verificat - vezi log'
|
||||
|
||||
*========================= DOC2 (CONTROL): TVA DVI = baza*cota EXACT (1098.30) =========================
|
||||
DO AdaugaDoc WITH 15001, 'TRANS OIL', 602, 1098.30
|
||||
DO HarnessStep WITH 2, 'dupa DOC2 (control): introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 15087 AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('8-DOC2: rand T-DVI gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
DO DcLog WITH 'DOC2 T-DVI: suma=' + TRANSFORM(suma) + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0))
|
||||
=Assert3('9-DOC2: T-DVI.suma=1098.30 (auto, coincide cu baza*cota)', suma, 1098.30)
|
||||
=Assert3('10-DOC2: T-DVI.mod_manual=0 (nu e marcat manual - valoarea coincide cu auto-calc)', NVL(mod_manual,0), 0)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 9-10: T-DVI DOC2 negasit'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'DOC2 (control, TVA auto) verificat - vezi log'
|
||||
|
||||
DO DcLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO DcLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 4, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO DcLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AdaugaDoc
|
||||
*-- FACTURA EUR curs 5.23, 1000 EUR (5230 lei), TVA pe DVI cu valuta facturii (fara
|
||||
*-- valuta_proprie - acest test tinteste STRICT supravietuirea valorii manuale, nu
|
||||
*-- independenta valutara, acoperita in celelalte 2 fisiere de test).
|
||||
LPARAMETERS tnNract, tcPartener, tnIdPartener, tnDviTvaLei
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = tnNract
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = tnIdPartener
|
||||
goDlg.cPartener = tcPartener
|
||||
goDlg.cExplicatia = 'Import marfa ' + tcPartener
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5.23
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2 && D = DVI
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = tnNract + 86
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'BIROUL VAMAL'
|
||||
goDlg.nDviTvaLei = tnDviTvaLei
|
||||
goDlg.nDviTvaVal = ROUND(tnDviTvaLei/5.23,4)
|
||||
*-- DVI cu valuta facturii (EUR) - fara valuta_proprie, ca sa izoleze testul pe mod_manual
|
||||
goDlg.nDviIdValuta = 978
|
||||
goDlg.cDviValuta = 'EUR'
|
||||
goDlg.nDviCurs = 5.23
|
||||
goDlg.actualizeaza_stare_dvi()
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO DcLog WITH 'DOC ' + TRANSFORM(tnNract) + ': valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlgF1F2
|
||||
DO DcLog WITH 'DOC ' + TRANSFORM(tnNract) + ': do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ConstruiesteToDlgF1F2
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
|
||||
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
|
||||
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
|
||||
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
|
||||
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
|
||||
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
|
||||
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
|
||||
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(NVL(goDlg.cDviValuta,'')))=='RON'))
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
|
||||
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(NVL(goDlg.cDviValuta,'')))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(NVL(goDlg.cValuta,'')))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_val',0)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
*-- Runda30 (F1/pas2): coloane NOI rand_dvi N(1), valuta_proprie N(1) fata de structura veche.
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO DcLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
12
utile/Teste/achizitie_import/test_dvi_tva_manual.ps1
Normal file
12
utile/Teste/achizitie_import/test_dvi_tva_manual.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_dvi_tva_manual.ps1 - wrapper peste harness-ul generic pentru TVA DVI editat manual in
|
||||
# dialog (supravietuieste do_executa/sincronizeaza) - F1, runda30.
|
||||
# powershell -ExecutionPolicy Bypass -File test_dvi_tva_manual.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_dvi_tva_manual.prg') `
|
||||
-Steps @('doc1_manual_creat','doc1_manual_verificat','doc2_control_creat','doc2_control_verificat','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_dvi_tva_manual') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_dvi_tva_manual') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
769
utile/Teste/achizitie_import/test_dvi_valuta_proprie_usd.prg
Normal file
769
utile/Teste/achizitie_import/test_dvi_valuta_proprie_usd.prg
Normal file
@@ -0,0 +1,769 @@
|
||||
* test_dvi_valuta_proprie_usd.prg
|
||||
* Runda30 (F1, plan fizzy-imagining-parnas.md): factura import EUR (curs 5.23) cu TVA DVI in
|
||||
* USD (curs 4.00) - a treia valuta, aleasa direct pe blocul DVI din dialog, NU printr-un al
|
||||
* doilea document DVI separat (spre deosebire de test_valuta_dvi_usd.prg, care acopera fluxul
|
||||
* VECHI cu doua documente - ramane neatins, regresie separata).
|
||||
* Verifica:
|
||||
* - randul T (TVA DVI) poarta valuta/curs proprii (USD/4.00), rand_dvi=1, valuta_proprie=1;
|
||||
* - spargere pe cote (sparge_document, prin sincronizeaza cu articole): T-ul protejat ramane
|
||||
* neatins si NU se naste niciun rand T suplimentar pe factura - TVA-ul documentului e
|
||||
* integral cel de pe DVI (altfel iese TVA dubla: o data pe DVI, o data pe factura);
|
||||
* - caz "singurul T e cel protejat" cu o singura cota pe articole: randul protejat ramane
|
||||
* neschimbat (spargerea pe cote se face doar cand articolele au cote diferite);
|
||||
* - editarea cursului pe randul T protejat in grila NU modifica Thisform.oact.curs si NU
|
||||
* corupe preturile articolelor (rul_temp);
|
||||
* - revert valuta_proprie: re-alegerea valutei documentului (EUR) pe randul protejat il
|
||||
* reseteaza la valuta_proprie=0.
|
||||
*
|
||||
* ASUMPTII (de confruntat cu implementarea reala):
|
||||
* - proprietatile de dialog nDviIdValuta/cDviValuta/nDviCurs, setate direct (fara picker);
|
||||
* - randul protejat se identifica prin rand_dvi=1 (index ord_doc nu distinge intre T-uri);
|
||||
* - revert-ul valuta_proprie se declanseaza prin Grid1.cValuta.Text1.DblClick (caut_valuta),
|
||||
* mock_caut_valuta.prg (contract vechi, valoare fixa) intoarce EUR - suficient pentru acest
|
||||
* test, deoarece valuta de revenit e chiar valuta facturii.
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_dvi_valuta_proprie_usd.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_dvi_valuta_proprie_usd_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_dvi_valuta_proprie_usd\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO DcErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO DcLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO DcLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO DcLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- goMockValuta: fix EUR (valuta facturii) - suficient pentru revert (Grid1.cValuta
|
||||
* DblClick alege valuta documentului). goMockValutaCoada pregatit pentru contractul nou. -----
|
||||
PUBLIC goMockValuta, goMockValutaCoada
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
goMockValutaCoada = CREATEOBJECT('Collection')
|
||||
LOCAL loValFact, loValDvi
|
||||
loValFact = CREATEOBJECT('Custom')
|
||||
loValFact.AddProperty('id_valuta', 978)
|
||||
loValFact.AddProperty('nume_val', 'EUR')
|
||||
goMockValutaCoada.Add(loValFact)
|
||||
loValDvi = CREATEOBJECT('Custom')
|
||||
loValDvi.AddProperty('id_valuta', 840)
|
||||
loValDvi.AddProperty('nume_val', 'USD')
|
||||
goMockValutaCoada.Add(loValDvi)
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 5.23) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5.23)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'RAJA')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO DcLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= DOC1: FACTURA EUR + TVA DVI in USD (valuta proprie) =========================
|
||||
PUBLIC goDlg, goT, gcDocKey1
|
||||
DO AdaugaDoc1
|
||||
DO HarnessStep WITH 0, 'dupa AdaugaDoc1: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('1-rand T-DVI gasit (rand_dvi=1)', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
||||
DO DcLog WITH 'T-DVI: doc_key=[' + gcDocKey1 + '] suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(suma_val) + ' curs=' + TRANSFORM(curs) + ' nume_val=[' + ALLTRIM(NVL(nume_val,'')) + ']'
|
||||
=Assert3('2-T-DVI.in_valuta=1 (USD e valuta)', NVL(in_valuta,0), 1)
|
||||
=Assert3('3-T-DVI.valuta_proprie=1 (USD <> EUR factura)', NVL(valuta_proprie,0), 1)
|
||||
=Assert3('4-T-DVI.id_valuta=840 (USD)', NVL(id_valuta,0), 840)
|
||||
=Assert3('5-T-DVI.curs=4.00', NVL(curs,0), 4.00)
|
||||
=AssertStr('6-T-DVI.nume_val=USD', ALLTRIM(NVL(nume_val,'?')), 'USD')
|
||||
=Assert3('7-T-DVI.suma_val=274.58 (1098.30/4.00)', suma_val, 274.58)
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL: nu exista rand T-DVI - sar restul verificarilor dependente'
|
||||
ENDIF
|
||||
|
||||
*========================= ARTICOLE (flux real do_adauga_articol) - documentul devine principal =========================
|
||||
gcMockArtCodmat = 'ART-A8-371'
|
||||
gcMockAcontCrt = '4'
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA1
|
||||
DO DcLog WITH 'EROARE do_adauga_articol ' + TRANSFORM(loExcA1.ErrorNo) + ' [' + loExcA1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 1000, pretd WITH 1000, pret WITH ROUND(1000*5.23,4), pret_lei WITH ROUND(1000*5.23,4)
|
||||
ELSE
|
||||
DO DcLog WITH 'FAIL: articolul nu a fost adaugat de do_adauga_articol()'
|
||||
ENDIF
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO HarnessStep WITH 1, 'dupa adaugare articol, rul_temp=' + TRANSFORM(RECCOUNT_ACTIVE('rul_temp'))
|
||||
|
||||
*========================= SINCRONIZARE (declanseaza sparge_document: singurul T e cel protejat) =========================
|
||||
LOCAL llEroareSync
|
||||
llEroareSync = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS1
|
||||
llEroareSync = .T.
|
||||
DO DcLog WITH 'EROARE la sincronizeaza() ' + TRANSFORM(loExcS1.ErrorNo) + ' [' + loExcS1.Message + '] in ' + loExcS1.Procedure + ':' + TRANSFORM(loExcS1.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('8-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
|
||||
DO DumpIntrodc
|
||||
|
||||
DO HarnessStep WITH 2, 'dupa sincronizare: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
*========================= T PROTEJAT SUPRAVIETUIESTE SPARGERII, NECOMASAT/NEATINS =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('9-dupa sincronizare: T-DVI (rand_dvi=1) inca exista', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('10-T-DVI.suma_val neschimbata (274.58)', suma_val, 274.58)
|
||||
=Assert3('11-T-DVI.curs neschimbat (4.00)', curs, 4.00)
|
||||
=Assert3('12-T-DVI.valuta_proprie ramane 1', NVL(valuta_proprie,0), 1)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 3
|
||||
DO DcLog WITH ' FAIL 10-12: T-DVI a disparut dupa sincronizare (sparge_document l-a atins gresit)'
|
||||
ENDIF
|
||||
|
||||
*========================= NICIUN T SUPLIMENTAR PE FACTURA (TVA-ul e integral cel de pe DVI) =========================
|
||||
LOCAL lnCntTNormale, lnCntTTotal
|
||||
lnCntTNormale = 0
|
||||
lnCntTTotal = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T'
|
||||
lnCntTTotal = lnCntTTotal + 1
|
||||
IF Nvl(rand_dvi,0) = 0
|
||||
lnCntTNormale = lnCntTNormale + 1
|
||||
DO DcLog WITH 'T-duplicat: suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(suma_val) + ' scd=[' + ALLTRIM(NVL(scd,'')) + '] partc=[' + ALLTRIM(NVL(partc,'')) + '] nume_val=[' + ALLTRIM(NVL(nume_val,'')) + ']'
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
=Assert3('13-niciun rand T nou pe factura (TVA-ul e doar pe DVI)', lnCntTNormale, 0)
|
||||
=Assert3('14-un singur rand T pe document (articolele au o singura cota)', lnCntTTotal, 1)
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T'
|
||||
IF FOUND()
|
||||
=Assert3('15-T-ul ramas e cel protejat (rand_dvi=1)', NVL(rand_dvi,0), 1)
|
||||
=AssertStr('16-T pastreaza valuta proprie USD', ALLTRIM(NVL(nume_val,'?')), 'USD')
|
||||
=Assert3('17-T pastreaza suma_val tastata (274.58)', suma_val, 274.58)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 3
|
||||
DO DcLog WITH ' FAIL 15-17: nu exista niciun rand T pe document'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'TVA doar pe randul DVI protejat (' + TRANSFORM(lnCntTTotal) + ' rand T pe document) - vezi log'
|
||||
|
||||
*========================= EDITARE CURS PE T PROTEJAT IN GRILA: oact.curs SI preturi articole NEATINSE =========================
|
||||
LOCAL lnCursInainte, lnPretInainte
|
||||
lnCursInainte = goObj.oact.curs
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
||||
lnPretInainte = IIF(FOUND(),pret,-1)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('18-rand T-DVI gasit pentru editare curs in grila', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
goObj.grid1.cCurs.text1.Value = 4.50
|
||||
goObj.grid1.cCurs.text1.Valid()
|
||||
DOEVENTS FORCE
|
||||
ENDIF
|
||||
|
||||
=Assert3('19-dupa editare curs pe T-DVI: oact.curs NESCHIMBAT (5.23)', goObj.oact.curs, lnCursInainte)
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
||||
=Assert3('20-dupa editare curs pe T-DVI: pretul articolului NESCHIMBAT', IIF(FOUND(),pret,-1), lnPretInainte)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
IF FOUND()
|
||||
=Assert3('21-T-DVI.curs actualizat local (4.50)', curs, 4.50)
|
||||
=Assert3('22-T-DVI.suma_val recalculata (1098.30/4.50=244.07)', suma_val, 244.07)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 21-22: T-DVI negasit dupa editare curs in grila'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 4, 'editare curs pe T protejat verificata (oact.curs+preturi intacte) - vezi log'
|
||||
|
||||
*========================= REVERT valuta_proprie: re-alegerea valutei documentului (EUR) =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('23-rand T-DVI gasit pentru revert valuta', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
TRY
|
||||
goObj.grid1.cValuta.text1.DblClick()
|
||||
CATCH TO loExcRevert
|
||||
DO DcLog WITH 'INFO cValuta.text1.DblClick a aruncat eroare (poate necesita alt trigger): ' + loExcRevert.Message
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
IF FOUND()
|
||||
DO DcLog WITH 'dupa revert: id_valuta=' + TRANSFORM(NVL(id_valuta,0)) + ' nume_val=[' + ALLTRIM(NVL(nume_val,'')) + '] valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0))
|
||||
=Assert3('24-dupa re-alegere valuta facturii (EUR) pe T-DVI: valuta_proprie reseteaza la 0', NVL(valuta_proprie,0), 0)
|
||||
=Assert3('25-dupa revert: id_valuta devine 978 (EUR, valuta facturii)', NVL(id_valuta,0), 978)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 24-25: T-DVI negasit dupa incercarea de revert'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 5, 'revert valuta_proprie verificat - vezi log'
|
||||
|
||||
DO DcLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO DcLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 6, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO DcLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AdaugaDoc1
|
||||
*-- FACTURA 15000 RAJA, 1000 EUR curs 5.23 (5230 lei), TVA pe DVI ('D'): DVI 101 BIROUL
|
||||
*-- VAMAL, tva 1098.30 lei / 274.58 USD (curs propriu 4.00) - a treia valuta, diferita de
|
||||
*-- EUR (factura) si de RON.
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 15000
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'RAJA'
|
||||
goDlg.cExplicatia = 'Import marfa RAJA'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5.23
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2 && D = DVI
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = 101
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'BIROUL VAMAL'
|
||||
goDlg.nDviTvaLei = 1098.30
|
||||
goDlg.nDviTvaVal = 274.58
|
||||
*-- F1 NOU: valuta/curs proprii DVI - USD, a treia valuta (diferita de EUR/factura si de RON)
|
||||
goDlg.nDviIdValuta = 840
|
||||
goDlg.cDviValuta = 'USD'
|
||||
goDlg.nDviCurs = 4.00
|
||||
goDlg.actualizeaza_stare_dvi()
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO DcLog WITH 'DOC1: valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlgF1F2
|
||||
DO DcLog WITH 'DOC1: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ConstruiesteToDlgF1F2
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
|
||||
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
|
||||
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
|
||||
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
|
||||
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
|
||||
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
|
||||
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
|
||||
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(NVL(goDlg.cDviValuta,'')))=='RON'))
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
|
||||
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(NVL(goDlg.cDviValuta,'')))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(NVL(goDlg.cValuta,'')))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_val',0)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
*-- Runda30 (F1/pas2): coloane NOI rand_dvi N(1), valuta_proprie N(1) fata de structura veche.
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE DumpIntrodc
|
||||
LOCAL lnSel
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
SCAN
|
||||
DO DcLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ' nract=' + TRANSFORM(nract) + ' fdoc=[' + ALLTRIM(NVL(fdoc,'')) + '] tip_rand=' + tip_rand + ;
|
||||
' scd=' + ALLTRIM(scd) + ' scc=' + ALLTRIM(scc) + ' suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(suma_val) + ;
|
||||
' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ' doc_key=[' + ALLTRIM(doc_key) + ']'
|
||||
ENDSCAN
|
||||
SELECT (lnSel)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO DcLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
12
utile/Teste/achizitie_import/test_dvi_valuta_proprie_usd.ps1
Normal file
12
utile/Teste/achizitie_import/test_dvi_valuta_proprie_usd.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_dvi_valuta_proprie_usd.ps1 - wrapper peste harness-ul generic pentru TVA DVI in a treia
|
||||
# valuta (USD), proprie fata de factura (EUR) - F1, runda30.
|
||||
# powershell -ExecutionPolicy Bypass -File test_dvi_valuta_proprie_usd.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_dvi_valuta_proprie_usd.prg') `
|
||||
-Steps @('doc1_creat','articol_adaugat','sync_sparge','tva_doar_pe_dvi','curs_grid_protejat','revert_valuta_proprie','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_dvi_valuta_proprie_usd') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_dvi_valuta_proprie_usd') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
948
utile/Teste/achizitie_import/test_dvi_valuta_ron.prg
Normal file
948
utile/Teste/achizitie_import/test_dvi_valuta_ron.prg
Normal file
@@ -0,0 +1,948 @@
|
||||
* test_dvi_valuta_ron.prg
|
||||
* Runda30 (F1, plan fizzy-imagining-parnas.md): factura import EUR (curs 5.23) cu TVA DVI
|
||||
* platita in RON (fara valuta proprie a DVI - selectie explicita, diferita de valuta facturii).
|
||||
* Verifica:
|
||||
* - randul T (TVA DVI) primeste rand_dvi=1, valuta_proprie=1 (RON <> EUR factura),
|
||||
* in_valuta=0, participa_valuta=.F.;
|
||||
* - suma T NU se schimba dupa do_executa()/sincronizeaza()/recalc_tva_document() explicit;
|
||||
* - suma T e imuna la schimbarea cursului facturii (copiaza_valoare sare randul protejat);
|
||||
* - footer TVA in valuta (recalculeaza/ntva_val) EXCLUDE randul T RON chiar daca suma_val
|
||||
* ar contine reziduu (assert direct pe filtrul participa_valuta din Sum);
|
||||
* - uneste_document (test izolat, cursor construit direct) nu comaseaza un rand T protejat;
|
||||
* - debifare in_valuta la nivel de document: randurile B/S se golesc de valuta, randul T
|
||||
* protejat ramane neschimbat (deja RON) si isi pastreaza valuta_proprie=1.
|
||||
*
|
||||
* ASUMPTII (de confruntat cu implementarea reala, vezi raportul catre orchestrator):
|
||||
* - proprietatile noi de dialog se numesc nDviIdValuta, cDviValuta, nDviCurs (RON = 0/''/0);
|
||||
* - toDlg.dvi_valuta_proprie e calculat de do_adauga_factura ca 1 cand valuta/curs DVI difera
|
||||
* de valuta/curs facturii (aici construit direct in ConstruiesteToDlgF1F2, ca proxy);
|
||||
* - recalc_tva_document primeste garda suplimentara Nvl(valuta_proprie,0)=0 langa mod_manual.
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_dvi_valuta_ron.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_dvi_valuta_ron_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_dvi_valuta_ron\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO DcErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO DcLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO DcLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO DcLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- goMockValuta (contract vechi, folosit ca fallback) + goMockValutaCoada (contract nou,
|
||||
* coada FIFO - pregatit aici pentru cand mock_caut_valuta.prg va fi actualizat separat;
|
||||
* acest test NU invoca picker-ul cmdValuta/cmdDviValuta.Click, seteaza id_valuta/curs
|
||||
* direct pe dialog, ca in testele existente). -----
|
||||
PUBLIC goMockValuta, goMockValutaCoada
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
goMockValutaCoada = CREATEOBJECT('Collection')
|
||||
LOCAL loValFact, loValDvi
|
||||
loValFact = CREATEOBJECT('Custom')
|
||||
loValFact.AddProperty('id_valuta', 978)
|
||||
loValFact.AddProperty('nume_val', 'EUR')
|
||||
goMockValutaCoada.Add(loValFact)
|
||||
loValDvi = CREATEOBJECT('Custom')
|
||||
loValDvi.AddProperty('id_valuta', 1)
|
||||
loValDvi.AddProperty('nume_val', 'RON')
|
||||
goMockValutaCoada.Add(loValDvi)
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 5.23) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5.23)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'RAJA')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO DcLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= DOC1: FACTURA EUR + TVA DVI in RON =========================
|
||||
PUBLIC goDlg, goT, gcDocKey1
|
||||
DO AdaugaDoc1
|
||||
DO HarnessStep WITH 0, 'dupa AdaugaDoc1: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('1-rand T-DVI gasit (rand_dvi=1)', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
||||
DO DcLog WITH 'T-DVI: doc_key=[' + gcDocKey1 + '] suma=' + TRANSFORM(suma) + ' in_valuta=' + TRANSFORM(NVL(in_valuta,0)) + ' participa_valuta=' + TRANSFORM(participa_valuta) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0))
|
||||
=Assert3('2-T-DVI.in_valuta=0', NVL(in_valuta,0), 0)
|
||||
=Assert3('3-T-DVI.participa_valuta=.F.', IIF(participa_valuta,1,0), 0)
|
||||
=Assert3('4-T-DVI.valuta_proprie=1', NVL(valuta_proprie,0), 1)
|
||||
=Assert3('5-T-DVI.id_valuta=0', NVL(id_valuta,0), 0)
|
||||
=Assert3('6-T-DVI.curs=0', NVL(curs,0), 0)
|
||||
=AssertStr('7-T-DVI.nume_val=""', ALLTRIM(NVL(nume_val,'?')), '')
|
||||
=Assert3('8-T-DVI.suma=1098.30 (baza*cota auto, nemanual)', suma, 1098.30)
|
||||
=Assert3('9-T-DVI.mod_manual=0 (valoare auto)', NVL(mod_manual,0), 0)
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL: nu exista rand T-DVI - sar restul verificarilor dependente'
|
||||
ENDIF
|
||||
|
||||
*========================= GARDA do_executa (nu rescrie T protejat) =========================
|
||||
goObj.do_executa()
|
||||
DOEVENTS FORCE
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('10-dupa do_executa(): T-DVI.suma neschimbata (1098.30)', IIF(FOUND(),suma,-1), 1098.30)
|
||||
|
||||
*========================= GARDA recalc_tva_document (nu rescrie T protejat) =========================
|
||||
IF !EMPTY(gcDocKey1)
|
||||
TRY
|
||||
goObj.recalc_tva_document(gcDocKey1)
|
||||
CATCH TO loExcRtd
|
||||
DO DcLog WITH 'INFO recalc_tva_document a aruncat eroare (poate nu accepta parametru direct): ' + loExcRtd.Message
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('11-dupa recalc_tva_document(): T-DVI.suma neschimbata (1098.30)', IIF(FOUND(),suma,-1), 1098.30)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO DcLog WITH ' FAIL 11: gcDocKey1 gol, nu pot apela recalc_tva_document'
|
||||
ENDIF
|
||||
|
||||
*========================= SINCRONIZARE completa (pipeline complet) =========================
|
||||
LOCAL llEroareSync
|
||||
llEroareSync = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS1
|
||||
llEroareSync = .T.
|
||||
DO DcLog WITH 'EROARE la sincronizeaza() ' + TRANSFORM(loExcS1.ErrorNo) + ' [' + loExcS1.Message + '] in ' + loExcS1.Procedure + ':' + TRANSFORM(loExcS1.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('12-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('13-dupa sincronizeaza(): rand T-DVI inca gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('14-dupa sincronizeaza(): T-DVI.suma neschimbata (1098.30)', suma, 1098.30)
|
||||
=Assert3('15-dupa sincronizeaza(): T-DVI.valuta_proprie ramane 1', NVL(valuta_proprie,0), 1)
|
||||
=Assert3('16-dupa sincronizeaza(): T-DVI.participa_valuta ramane .F.', IIF(participa_valuta,1,0), 0)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 3
|
||||
DO DcLog WITH ' FAIL 14-16: T-DVI a disparut dupa sincronizare'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 1, 'dupa garzi executie/recalc/sincronizare - vezi log'
|
||||
|
||||
*========================= FOOTER TVA VALUTA: participa_valuta exclude T-DVI din ntva_val =========================
|
||||
*-- injectez artificial un suma_val nenul pe T-DVI (bypass motor) - daca filtrul pe
|
||||
*-- participa_valuta e corect, ntva_val NU se schimba fata de o rulare fara injectie.
|
||||
LOCAL lnNtvaValInainte, lnNtvaValDupa
|
||||
goObj.recalculeaza()
|
||||
lnNtvaValInainte = goObj.ntva_val
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
IF FOUND()
|
||||
REPLACE suma_val WITH 999.99
|
||||
goObj.recalculeaza()
|
||||
lnNtvaValDupa = goObj.ntva_val
|
||||
DO DcLog WITH 'FOOTER: ntva_val inainte=' + TRANSFORM(lnNtvaValInainte) + ' dupa injectie suma_val=999.99 pe T-DVI: ' + TRANSFORM(lnNtvaValDupa)
|
||||
=Assert3('17-footer ntva_val NU include suma_val injectata pe T-DVI (participa_valuta=.F.)', ABS(lnNtvaValDupa - lnNtvaValInainte), 0)
|
||||
*-- recalculeaza() e agregare read-only dar scaneaza cu SUM/CALCULATE (scope ALL), care
|
||||
*-- muta pointerul de inregistrare la EOF - re-LOCATE inainte de REPLACE, altfel reset-ul
|
||||
*-- de mai jos rateaza randul T-DVI (ramane cu suma_val=999.99 injectat mai sus).
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
REPLACE suma_val WITH 0
|
||||
goObj.recalculeaza()
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO DcLog WITH ' FAIL 17: T-DVI negasit pentru testul de footer'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 2, 'footer TVA valuta verificat - vezi log'
|
||||
|
||||
*========================= IMUNITATE LA SCHIMBAREA CURSULUI FACTURII (copiaza_valoare) =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'B'
|
||||
=Assert3('18-rand B gasit pentru schimbare curs', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
goObj.grid1.cCurs.text1.Value = 6.00
|
||||
goObj.grid1.cCurs.text1.Valid()
|
||||
DOEVENTS FORCE
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
IF FOUND()
|
||||
=Assert3('19-dupa schimbare curs factura: T-DVI.curs ramane 0', NVL(curs,0), 0)
|
||||
=Assert3('20-dupa schimbare curs factura: T-DVI.suma_val ramane 0', NVL(suma_val,0), 0)
|
||||
=Assert3('21-dupa schimbare curs factura: T-DVI.suma neschimbata (1098.30)', suma, 1098.30)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 3
|
||||
DO DcLog WITH ' FAIL 19-21: T-DVI negasit dupa schimbare curs factura'
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
=Assert3('22-randul B a primit noul curs (6.00, propagare normala)', curs, 6.00)
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'imunitate curs verificata - vezi log'
|
||||
|
||||
*========================= DEBIFARE in_valuta LA NIVEL DE DOCUMENT, CU T PROTEJAT =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'B'
|
||||
=Assert3('23-rand B gasit pentru debifare in_valuta', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
goObj.grid1.cInValuta.check1.Value = 0
|
||||
goObj.grid1.cInValuta.check1.Valid()
|
||||
=Assert3('24-armare lSyncPending dupa debifare (pre-DOEVENTS)', IIF(goObj.lSyncPending,1,0), 1)
|
||||
DOEVENTS FORCE
|
||||
=Assert3('25-sync consumat dupa debifare', IIF(goObj.lSyncPending,1,0), 0)
|
||||
ENDIF
|
||||
LOCAL lnCntBSGolite
|
||||
lnCntBSGolite = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND INLIST(tip_rand,'B','S')
|
||||
lnCntBSGolite = lnCntBSGolite + 1
|
||||
=Assert3('26.'+TRANSFORM(RECNO())+'-B/S.in_valuta=0 dupa debifare', NVL(in_valuta,0), 0)
|
||||
=Assert3('27.'+TRANSFORM(RECNO())+'-B/S.curs=0 dupa debifare', NVL(curs,0), 0)
|
||||
ENDSCAN
|
||||
=Assert3('28-cel putin un rand B/S golit', IIF(lnCntBSGolite>0,1,0), 1)
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
IF FOUND()
|
||||
=Assert3('29-T-DVI ramane in_valuta=0 dupa debifare document (nu s-a schimbat)', NVL(in_valuta,0), 0)
|
||||
=Assert3('30-T-DVI ramane valuta_proprie=1 dupa debifare document (nu se reseteaza)', NVL(valuta_proprie,0), 1)
|
||||
=Assert3('31-T-DVI.suma neschimbata (1098.30) dupa debifare document', suma, 1098.30)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 3
|
||||
DO DcLog WITH ' FAIL 29-31: T-DVI negasit dupa debifare document'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 4, 'debifare in_valuta cu T protejat verificata - vezi log'
|
||||
|
||||
*========================= UNESTE_DOCUMENT CU RAND T PROTEJAT (cursor izolat, construit direct) =========================
|
||||
DO TestUnesteDocumentCuProtejat
|
||||
|
||||
*========================= IDENTITATE PROPRIE PE RANDUL DVI (cursor izolat, construit direct) =========================
|
||||
DO TestIdentitateDviProtejata
|
||||
|
||||
DO DcLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO DcLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 5, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO DcLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AdaugaDoc1
|
||||
*-- FACTURA 15000 RAJA, 1000 EUR curs 5.23 (5230 lei), TVA pe DVI ('D'): DVI 101 BIROUL
|
||||
*-- VAMAL, tva 1098.30 lei, dar platita in RON (fara valuta proprie DVI) - diferita de
|
||||
*-- valuta facturii (EUR) => valuta_proprie=1 pe randul T rezultat.
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 15000
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'RAJA'
|
||||
goDlg.cExplicatia = 'Import marfa RAJA'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5.23
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2 && D = DVI
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = 101
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'BIROUL VAMAL'
|
||||
goDlg.nDviTvaLei = 1098.30
|
||||
goDlg.nDviTvaVal = 0
|
||||
*-- F1 NOU: valuta/curs proprii DVI - RON (fara valuta), explicit diferite de factura (EUR)
|
||||
goDlg.nDviIdValuta = 0
|
||||
goDlg.cDviValuta = ''
|
||||
goDlg.nDviCurs = 0
|
||||
goDlg.actualizeaza_stare_dvi()
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO DcLog WITH 'DOC1: valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlgF1F2
|
||||
DO DcLog WITH 'DOC1: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ConstruiesteToDlgF1F2
|
||||
*-- toDlg construit INLINE (capcana l) - camp de baza + extensiile F1 (dvi_*) si F2 (discount,
|
||||
*-- neutre in acest test). Deciderul valutar al DVI e dvi_in_valuta (nu dvi_tva_val).
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
|
||||
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
|
||||
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
|
||||
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
|
||||
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
|
||||
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
|
||||
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
|
||||
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
|
||||
*-- F1 NOU: valuta/curs proprii ale DVI (deciderul e dvi_in_valuta, nu dvi_tva_val)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(NVL(goDlg.cDviValuta,'')))=='RON'))
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
|
||||
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(NVL(goDlg.cDviValuta,'')))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(NVL(goDlg.cValuta,'')))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
|
||||
*-- Runda32 (neutru in acest test - fara discount)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_val',0)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TestUnesteDocumentCuProtejat
|
||||
*-- test izolat: cursor introdc construit DIRECT (nu prin dialog) cu un document ce are
|
||||
*-- 2 randuri T "normale" (mod_manual=0, valuta_proprie=0, de comasat) + 1 rand T protejat
|
||||
*-- (rand_dvi=1, valuta_proprie=1, mod_manual=0, NU trebuie comasat). Verifica ca
|
||||
*-- uneste_document() lasa randul protejat intact si comaseaza doar restul.
|
||||
LOCAL lcDocKeyX, lnCntTDupa
|
||||
lcDocKeyX = 'X|900001|0|0'
|
||||
|
||||
SELECT introdc
|
||||
APPEND BLANK
|
||||
REPLACE tip_rand WITH 'S', scd WITH '371', scc WITH '401', suma WITH 1000, suma_val WITH 0, ;
|
||||
nr_doc WITH 900001, nract WITH 900001, fdoc WITH 'Factura', doc_key WITH lcDocKeyX, ;
|
||||
mod_manual WITH 0, rand_dvi WITH 0, valuta_proprie WITH 0
|
||||
|
||||
APPEND BLANK
|
||||
REPLACE tip_rand WITH 'T', scd WITH '4426', scc WITH '401', suma WITH 100, suma_val WITH 0, ;
|
||||
ptva WITH 21, nr_doc WITH 900001, nract WITH 900001, fdoc WITH 'Factura', doc_key WITH lcDocKeyX, ;
|
||||
mod_manual WITH 0, rand_dvi WITH 0, valuta_proprie WITH 0
|
||||
|
||||
APPEND BLANK
|
||||
REPLACE tip_rand WITH 'T', scd WITH '4426', scc WITH '4427', suma WITH 110, suma_val WITH 0, ;
|
||||
ptva WITH 21, nr_doc WITH 900001, nract WITH 900001, fdoc WITH 'Factura', doc_key WITH lcDocKeyX, ;
|
||||
mod_manual WITH 0, rand_dvi WITH 0, valuta_proprie WITH 0
|
||||
|
||||
APPEND BLANK
|
||||
REPLACE tip_rand WITH 'T', scd WITH '4426', scc WITH '401', suma WITH 1098.30, suma_val WITH 0, ;
|
||||
ptva WITH 21, nr_doc WITH 900001, nract WITH 101, fdoc WITH 'DVI', partc WITH 'BIROUL VAMAL', ;
|
||||
doc_key WITH lcDocKeyX, mod_manual WITH 0, rand_dvi WITH 1, valuta_proprie WITH 1
|
||||
|
||||
TRY
|
||||
goObj.uneste_document(PADR(lcDocKeyX, 80))
|
||||
CATCH TO loExcU
|
||||
DO DcLog WITH 'EROARE uneste_document ' + TRANSFORM(loExcU.ErrorNo) + ' [' + loExcU.Message + '] in ' + loExcU.Procedure + ':' + TRANSFORM(loExcU.LineNo)
|
||||
ENDTRY
|
||||
|
||||
lnCntTDupa = 0
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyX AND tip_rand == 'T'
|
||||
lnCntTDupa = lnCntTDupa + 1
|
||||
DO DcLog WITH 'UNESTE: rand T ramas rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ' suma=' + TRANSFORM(suma)
|
||||
ENDSCAN
|
||||
=Assert3('32-uneste_document: raman EXACT 2 randuri T (1 comasat + 1 protejat)', lnCntTDupa, 2)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyX AND tip_rand == 'T' AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('33-uneste_document: randul protejat (rand_dvi=1) supravietuieste', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('34-uneste_document: randul protejat.suma neschimbata (1098.30)', suma, 1098.30)
|
||||
=Assert3('35-uneste_document: randul protejat.valuta_proprie ramane 1', NVL(valuta_proprie,0), 1)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 34-35: randul protejat negasit dupa uneste_document'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyX AND tip_rand == 'T' AND Nvl(rand_dvi,0) = 0
|
||||
=Assert3('36-uneste_document: randul comasat (nemanual, nevaluta_proprie) exista', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('37-uneste_document: randul comasat.suma = 100+110 = 210', suma, 210)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO DcLog WITH ' FAIL 37: randul comasat negasit dupa uneste_document'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TestIdentitateDviProtejata
|
||||
*-- test izolat: randul DVI (rand_dvi=1) trebuie sa isi pastreze identitatea PROPRIE
|
||||
*-- (nract, serie_act, partc, fdoc, id_fdoc) cand copiaza_valoare() propaga aceste campuri
|
||||
*-- pe grupul doc_key; un rand NORMAL din acelasi grup trebuie sa PRIMEASCA valoarea noua
|
||||
*-- (assert dublu per camp - altfel testul ar trece si daca propagarea s-ar strica de tot).
|
||||
*-- Verifica si coerenta doc_key pe grup dupa fiecare propagare (toate 5 campuri sunt chei -
|
||||
*-- llCheie regenereaza doc_key pe tot grupul, inclusiv pe randul protejat).
|
||||
LOCAL lcDocKeyX, lnRecnoB, lcDocKeyCrt
|
||||
lcDocKeyX = 'IDPROT|5001|1|601'
|
||||
|
||||
SELECT introdc
|
||||
APPEND BLANK
|
||||
REPLACE tip_rand WITH 'B', scd WITH '371', scc WITH '401', suma WITH 1000, ;
|
||||
nr_doc WITH 950001, nract WITH 5001, serie_act WITH 'FACT', id_fdoc WITH 1, fdoc WITH 'Factura', ;
|
||||
id_partc WITH 601, partc WITH 'FURNIZOR ORIGINAL', doc_key WITH lcDocKeyX, ;
|
||||
mod_manual WITH 0, rand_dvi WITH 0, valuta_proprie WITH 0
|
||||
|
||||
APPEND BLANK
|
||||
REPLACE tip_rand WITH 'S', scd WITH '4426', scc WITH '401', suma WITH 190, ;
|
||||
nr_doc WITH 950001, nract WITH 5001, serie_act WITH 'FACT', id_fdoc WITH 1, fdoc WITH 'Factura', ;
|
||||
id_partc WITH 601, partc WITH 'FURNIZOR ORIGINAL', doc_key WITH lcDocKeyX, ;
|
||||
mod_manual WITH 0, rand_dvi WITH 0, valuta_proprie WITH 0
|
||||
|
||||
APPEND BLANK
|
||||
REPLACE tip_rand WITH 'T', scd WITH '4426', scc WITH '401', suma WITH 95, ;
|
||||
nr_doc WITH 950001, nract WITH 9001, serie_act WITH 'VAMA', id_fdoc WITH 2, fdoc WITH 'DVI', ;
|
||||
id_partc WITH 900, partc WITH 'DIRECTIA VAMALA', doc_key WITH lcDocKeyX, ;
|
||||
mod_manual WITH 0, rand_dvi WITH 1, valuta_proprie WITH 1
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyX AND tip_rand == 'B'
|
||||
=Assert3('38-IDP: randul B gasit pentru test identitate DVI', IIF(FOUND(),1,0), 1)
|
||||
IF !FOUND()
|
||||
pnAsserts = pnAsserts + 20
|
||||
DO DcLog WITH ' FAIL 39-59: randul B negasit, sar restul testului de identitate DVI'
|
||||
RETURN
|
||||
ENDIF
|
||||
lnRecnoB = RECNO()
|
||||
|
||||
*-- NOTA: introdc e cursor PARTAJAT intre scenariile fisierului - alte scenarii (AdaugaDoc1,
|
||||
*-- TestUnesteDocumentCuProtejat) au deja propriile randuri rand_dvi=1/tip_rand='S' cu alt
|
||||
*-- doc_key. Fiecare LOCATE de mai jos e SCOPAT pe lcDocKeyCrt (doc_key-ul CURENT al
|
||||
*-- grupului, recalculat dupa fiecare propagare) - dublu rol: (a) evita sa gaseasca randul
|
||||
*-- altui scenariu, (b) FOUND() dupa scopare e chiar dovada de coerenta - daca doc_key nu
|
||||
*-- s-ar fi propagat uniform pe grup, randul n-ar mai fi gasit sub noul doc_key.
|
||||
|
||||
*-- 1. nract: 5001 -> 5002
|
||||
GO lnRecnoB
|
||||
REPLACE nract WITH 5002
|
||||
goObj.copiaza_valoare('nract')
|
||||
SELECT introdc
|
||||
GO lnRecnoB
|
||||
lcDocKeyCrt = ALLTRIM(NVL(doc_key,''))
|
||||
=Assert3('39-IDP nract: B.nract=5002 (propriu, control)', nract, 5002)
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('40-IDP nract: DVI gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=Assert3('41-IDP nract: DVI.nract ramane 9001 (protejat)', NVL(nract,0), 9001)
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND tip_rand == 'S'
|
||||
=Assert3('42-IDP nract: S gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=Assert3('43-IDP nract: S.nract=5002 (propagat pe randul normal)', NVL(nract,0), 5002)
|
||||
|
||||
*-- 2. serie_act: 'FACT' -> 'FACT2'
|
||||
GO lnRecnoB
|
||||
REPLACE serie_act WITH 'FACT2'
|
||||
goObj.copiaza_valoare('serie_act')
|
||||
GO lnRecnoB
|
||||
lcDocKeyCrt = ALLTRIM(NVL(doc_key,''))
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('44-IDP serie_act: DVI gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=AssertStr('45-IDP serie_act: DVI.serie_act ramane VAMA (protejat)', ALLTRIM(NVL(serie_act,'')), 'VAMA')
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND tip_rand == 'S'
|
||||
=Assert3('46-IDP serie_act: S gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=AssertStr('47-IDP serie_act: S.serie_act=FACT2 (propagat)', ALLTRIM(NVL(serie_act,'')), 'FACT2')
|
||||
|
||||
*-- 3. partc: 'FURNIZOR ORIGINAL' -> 'FURNIZOR NOU'
|
||||
GO lnRecnoB
|
||||
REPLACE partc WITH 'FURNIZOR NOU'
|
||||
goObj.copiaza_valoare('partc')
|
||||
GO lnRecnoB
|
||||
lcDocKeyCrt = ALLTRIM(NVL(doc_key,''))
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('48-IDP partc: DVI gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=AssertStr('49-IDP partc: DVI.partc ramane DIRECTIA VAMALA (protejat)', ALLTRIM(NVL(partc,'')), 'DIRECTIA VAMALA')
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND tip_rand == 'S'
|
||||
=Assert3('50-IDP partc: S gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=AssertStr('51-IDP partc: S.partc=FURNIZOR NOU (propagat)', ALLTRIM(NVL(partc,'')), 'FURNIZOR NOU')
|
||||
|
||||
*-- 4. fdoc: 'Factura' -> 'Factura Noua'
|
||||
GO lnRecnoB
|
||||
REPLACE fdoc WITH 'Factura Noua'
|
||||
goObj.copiaza_valoare('fdoc')
|
||||
GO lnRecnoB
|
||||
lcDocKeyCrt = ALLTRIM(NVL(doc_key,''))
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('52-IDP fdoc: DVI gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=AssertStr('53-IDP fdoc: DVI.fdoc ramane DVI (protejat)', ALLTRIM(NVL(fdoc,'')), 'DVI')
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND tip_rand == 'S'
|
||||
=Assert3('54-IDP fdoc: S gasit sub doc_key curent (coerenta grup)', IIF(FOUND(),1,0), 1)
|
||||
=AssertStr('55-IDP fdoc: S.fdoc=Factura Noua (propagat)', ALLTRIM(NVL(fdoc,'')), 'Factura Noua')
|
||||
|
||||
*-- 5. id_fdoc: 1 -> 3
|
||||
GO lnRecnoB
|
||||
REPLACE id_fdoc WITH 3
|
||||
goObj.copiaza_valoare('id_fdoc')
|
||||
GO lnRecnoB
|
||||
lcDocKeyCrt = ALLTRIM(NVL(doc_key,''))
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND Nvl(rand_dvi,0) = 1
|
||||
=Assert3('56-IDP id_fdoc: DVI gasit sub doc_key curent (coerenta grup finala)', IIF(FOUND(),1,0), 1)
|
||||
=Assert3('57-IDP id_fdoc: DVI.id_fdoc ramane 2 (protejat)', NVL(id_fdoc,0), 2)
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == lcDocKeyCrt AND tip_rand == 'S'
|
||||
=Assert3('58-IDP id_fdoc: S gasit sub doc_key curent (coerenta grup finala)', IIF(FOUND(),1,0), 1)
|
||||
=Assert3('59-IDP id_fdoc: S.id_fdoc=3 (propagat)', NVL(id_fdoc,0), 3)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
*-- Runda30 (F1/pas2): coloane NOI rand_dvi N(1), valuta_proprie N(1) fata de structura veche.
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO DcLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO DcLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DcLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
11
utile/Teste/achizitie_import/test_dvi_valuta_ron.ps1
Normal file
11
utile/Teste/achizitie_import/test_dvi_valuta_ron.ps1
Normal file
@@ -0,0 +1,11 @@
|
||||
# test_dvi_valuta_ron.ps1 - wrapper peste harness-ul generic pentru TVA DVI in RON (F1, runda30).
|
||||
# powershell -ExecutionPolicy Bypass -File test_dvi_valuta_ron.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_dvi_valuta_ron.prg') `
|
||||
-Steps @('doc1_creat','garzi_executie','footer_valuta','imunitate_curs','debifare_document','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_dvi_valuta_ron') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_dvi_valuta_ron') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
951
utile/Teste/achizitie_import/test_e2e_dvi_ron_discount.prg
Normal file
951
utile/Teste/achizitie_import/test_e2e_dvi_ron_discount.prg
Normal file
@@ -0,0 +1,951 @@
|
||||
* test_e2e_dvi_ron_discount.prg
|
||||
* Runda30 (F1+F2) + Runda32 (model B/G/T, un singur rand G): test e2e pe SCENARIUL EXACT cerut
|
||||
* de Marius - factura de import in valuta (EUR), TVA DVI platit in RON (valuta proprie DVI,
|
||||
* diferita de a facturii), discount financiar (doar baza, fara bifa), articole adaugate, apoi
|
||||
* finalizare. Flux REAL: dialogul `import_adauga_factura` (nu insert direct in cursoare) +
|
||||
* `do_adauga_articol()` real + `sincronizeaza()` real.
|
||||
*
|
||||
* IMPORTANT: toDlg (contractul pentru do_adauga_factura) se construieste INLINE, in programul
|
||||
* PRINCIPAL, NU prin apelul `goDlg.construieste_todlg()` - capcana documentata deja in antetul
|
||||
* `mock_caut_valuta.prg` ("CREATEOBJECT/ADDPROPERTY nu merg corect apelate dintr-o procedura in
|
||||
* acest runtime"): confirmat prin diagnostic (28.07.2026) ca aceasta metoda arunca eroare 11
|
||||
* ("argument invalid") pe PRIMUL Addproperty, universal, pe orice instanta (inclusiv virgina),
|
||||
* dar EXACT ACELASI cod, apelat din programul principal cu goDlg.* in loc de This.*, functioneaza
|
||||
* corect. NU incerca sa "repari" apeland metoda direct - vezi handoff_dvi_discount.md pentru
|
||||
* dovezile complete (izolare fata de tip de date, mediu, mostenire de clasa, lungime de linie).
|
||||
*
|
||||
* Assert-uri rand cu rand pe `introdc` (sursa de adevar inainte de scrierea finala):
|
||||
* - randul B (baza factura): scd=371, suma=5000.00 (1000 EUR x curs 5), suma_val=1000.00,
|
||||
* in_valuta=1, id_valuta=978 (EUR), partener facturii;
|
||||
* - randul T-DVI (rand_dvi=1): scd=4426/scc=401, suma=840.00 (baza NETA lei x 21% =
|
||||
* (5000-1000)*21%, discountul scade baza DVI-ului), suma_val=0, in_valuta=0, id_valuta=0/
|
||||
* curs=0/nume_val='' (normalizare RON->fara valuta pe randul scris, desi pe dialog RON are
|
||||
* id real 1 - vezi conventia din handoff), participa_valuta=.F., partenerul vamal (DIRECTIA
|
||||
* VAMALA), mod_manual=1 (valoarea NETA difera de auto-calculul brut baza*cota=1050.00 facut
|
||||
* de do_adauga_factura la creare, deci randul e protejat de do_executa - vezi Runda32);
|
||||
* - randul G (discount, un singur rand, model B/G/T): scd = scc-ul randului B (analitic
|
||||
* mostenit), scc=767, suma=+1000.00, suma_val=+200.00 (POZITIV), id_partd = partenerul
|
||||
* facturii (de pe creditul B), participa_valuta=.F., cu_tva=0, ptva=0;
|
||||
* - pretul articolului (rul_temp) neafectat de discount: pret_lei=4000.00 (800 EUR x 5);
|
||||
* - randul D (diferenta), daca apare, e informativ (best-effort - nu il forteaza scenariul);
|
||||
* - totalurile din subsol (D4): txtftvalei/txtftvaval raman pe baza integrala (5000.00/
|
||||
* 1000.00); Text2/Text3 (cu TVA) scad discountul (4840.00 = 5000+840-1000, respectiv
|
||||
* 800.00 = 1000+0-200) - verificate imediat dupa Termin, inainte de a adauga articole
|
||||
* (documentul nu e inca spart pe randuri S, B ramane intreg pentru un calcul curat).
|
||||
*
|
||||
* Acoperea si cerinta FINALA (Runda32): factura de import in valuta + discount + TVA pe DVI,
|
||||
* cu assert-uri pe cele trei randuri (B/G/T) si pe totalurile din subsolul notei.
|
||||
*
|
||||
* PASUL FINAL "Terminat" (scrierea in `actactan` prin `import_nota.inainte_de_do_termin()`)
|
||||
* SE RULEAZA (nu mai e sarit). Acel cod deschide `Do Form verificare` (formular MODAL real,
|
||||
* `COMUN\ferestre\verificare.scx`, WindowType=1) - fara mock ar ramane blocat la nesfarsit.
|
||||
* Testul foloseste un STUB `verificare.scx` dedicat, in `stub_verificare\` (langa acest test,
|
||||
* NU peste formularul real) - form gol, `WindowType=0`, `Init` seteaza `gnButon=1` si
|
||||
* `Return .F.` (impiedica instantierea => `Do Form` revine imediat, fara afisare). Stub-ul
|
||||
* castiga rezolutia `Do Form` pentru ca `stub_verificare` e primul folder din `SET PATH`
|
||||
* (inaintea lui `COMUN\FERESTRE`, unde e formularul real) - confirmat empiric: `SET PATH`
|
||||
* rezolva pe ORDINEA din lista, primul folder cu fisierul cerut castiga.
|
||||
* Assert-uri suplimentare rand cu rand pe `actactan` (structura reala, fara `tip_rand`/
|
||||
* `rand_dvi` - randurile se identifica dupa scd/scc/semnul sumei): B (scd=371), T-DVI
|
||||
* (scd=4426, suma POZITIVA), G (scc=767, un singur rand) + niciun rand fals de finalizare NIR.
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_e2e_dvi_ron_discount.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_e2e_dvi_ron_discount_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_e2e_dvi_ron_discount\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
|
||||
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO EeLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO EeLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO EeLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat
|
||||
gnMockRaspuns = 6
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
PUBLIC gnButon
|
||||
gnButon = 1
|
||||
gcMockArtCodmat = ''
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (factura import EUR, curs 5) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'FURNIZOR EXTERN GMBH')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% (achizitii interne + import) -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
*-- import_nota.inainte_de_do_termin() citeste variabila BARA tlIntern (linia
|
||||
*-- "Iif(tlIntern, 0, 100)"), nu This.lIntern - se bazeaza pe mostenirea PRIVATE de-a
|
||||
*-- lungul stivei de apel de la achizitie_import(tnIdSet, tlIntern), procedura reala care
|
||||
*-- ar instantia formularul (Show() modal, deci tlIntern ramane "vizibil" din metodele
|
||||
*-- formularului). Testul ocoleste achizitie_import (CREATEOBJECT direct, ca toate
|
||||
*-- celelalte teste din suita), deci tlIntern trebuie declarata explicit aici, cu ACEEASI
|
||||
*-- valoare data la CREATEOBJECT (.F. = mod import) - nu e defect de cod, e o conventie de
|
||||
*-- scop de variabila care presupune fluxul real prin achizitie_import.
|
||||
PRIVATE tlIntern
|
||||
tlIntern = .F.
|
||||
|
||||
*-- alt global de mediu real (roagest.prg la pornire) folosit de clase pentru export
|
||||
*-- fisiere temporare (XML/PDF/index) - nedeclarat pana acum pentru ca pasul Terminat
|
||||
*-- nu fusese exercitat headless inainte de stub-ul verificare.scx
|
||||
PUBLIC gcTempPath
|
||||
gcTempPath = ADDBS(SYS(2023))
|
||||
|
||||
*-- gnHandle: handle SQLCONNECT real (SQLSetprop/SQLExec native) folosit de
|
||||
*-- oscrie_in_fisiere - -1 e conventia din dbaccesscontroller.prg pt. "fara conexiune";
|
||||
*-- fara o conexiune Oracle reala, scrierea propriu-zisa in ACT nu poate fi validata aici
|
||||
PUBLIC gnHandle
|
||||
gnHandle = -1
|
||||
|
||||
*-- gnTipGest: citit bare la Do listare_nir With poAct.nnir, gnTipGest In oproceduri_listari,
|
||||
*-- dupa oscrie_in_fisiere() cu succes - 0 = gestiune normala (nu declanseaza ramurile
|
||||
*-- speciale gnTipGest=6/7 vazute in cod pentru marfa la pret de vanzare)
|
||||
PUBLIC gnTipGest
|
||||
gnTipGest = 0
|
||||
|
||||
*-- gcCondSucursala: fragment WHERE folosit la rapoarte multi-sucursala (listare_nir) -
|
||||
*-- gol = fara filtrare (o singura sucursala, ca in test_init_env.prg)
|
||||
PUBLIC gcCondSucursala
|
||||
gcCondSucursala = ''
|
||||
|
||||
DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO EeLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
|
||||
|
||||
*========================= DIALOG: factura EUR + TVA DVI in RON + discount financiar =========================
|
||||
PUBLIC goDlg
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 8001
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR EXTERN GMBH'
|
||||
goDlg.cExplicatia = 'Marfa import cu DVI in RON si discount'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.nProcentTva = 21
|
||||
|
||||
*-- DVI: identitate (document vamal, partener vamal)
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = 9001
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'DIRECTIA VAMALA'
|
||||
|
||||
*-- comuta pe mod TVA DVI (radio "TVA in vama") - flux real, InteractiveChange
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.optTipTva.InteractiveChange()
|
||||
|
||||
*-- alegere RON pe blocul DVI, prin picker-ul REAL (mock_caut_valuta, coada FIFO cu 1 pick)
|
||||
PUBLIC goMockValuta, goMockValutaCoada
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 1)
|
||||
goMockValuta.AddProperty('nume_val', 'RON')
|
||||
goMockValutaCoada = CREATEOBJECT('Collection')
|
||||
LOCAL loValRon
|
||||
loValRon = CREATEOBJECT('Custom')
|
||||
loValRon.AddProperty('id_valuta', 1)
|
||||
loValRon.AddProperty('nume_val', 'RON')
|
||||
goMockValutaCoada.Add(loValRon)
|
||||
goDlg.cmdDviValuta.Click()
|
||||
=AssertStr('1-DVI valuta aleasa RON', ALLTRIM(goDlg.cDviValuta), 'RON')
|
||||
=Assert3('2-DVI curs fixat la 1 (RON)', goDlg.nDviCurs, 1)
|
||||
=Assert3('3-DVI TVA lei auto = baza_lei*21% = 1050.00', goDlg.nDviTvaLei, 1050.00)
|
||||
|
||||
*-- discount financiar (Runda32: doar baza, fara bifa) - Valid() reface imediat TVA DVI pe
|
||||
*-- baza NETA (suma-discount), fara auto-calcul separat de "TVA discount"
|
||||
goDlg.txtDiscBaza.Value = 200
|
||||
goDlg.txtDiscBaza.Valid()
|
||||
=Assert3('4-dupa discount: DVI TVA lei pe baza NETA = (5000-1000)*21% = 840.00', goDlg.nDviTvaLei, 840.00)
|
||||
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 1, 'dialog completat: factura EUR 1000, DVI TVA RON 840.00 (baza neta), discount baza 200'
|
||||
|
||||
*-- valideaza() REAL de pe dialog (buton Termin apeleaza mereu asta primul)
|
||||
LOCAL llOkValid
|
||||
llOkValid = goDlg.valideaza()
|
||||
=Assert3('6a-dialog valideaza() reuseste', IIF(llOkValid,1,0), 1)
|
||||
|
||||
*-- toDlg construit INLINE in programul PRINCIPAL, NU prin goDlg.construieste_todlg() -
|
||||
*-- capcana l (vezi antetul mock_caut_valuta.prg): CREATEOBJECT/ADDPROPERTY nu merg corect
|
||||
*-- apelate dintr-o PROCEDURA/METODA in acest runtime headless (confirmat: crapa universal,
|
||||
*-- inclusiv pe o instanta virgina, cu eroarea 11 pe primul Addproperty din construieste_todlg;
|
||||
*-- acelasi cod, apelat din programul principal cu goDlg.* in loc de This.*, functioneaza OK).
|
||||
*-- Lista de campuri COPIATA din construieste_todlg (ointroduceri.vc2 ~6180) ca sa ramana
|
||||
*-- fidela contractului - vezi si celelalte teste motor (test_dvi_valuta_ron.prg etc.), care
|
||||
*-- folosesc acelasi tipar.
|
||||
PUBLIC goT
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
|
||||
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
|
||||
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
|
||||
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
|
||||
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
|
||||
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
IF goDlg.optTipTva.Value = 2
|
||||
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
|
||||
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
|
||||
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
|
||||
*-- dvi_in_valuta: LOGIC (nu numeric), derivat dupa NUME - fidel cu construieste_todlg
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON'))
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
|
||||
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
|
||||
*-- dvi_valuta_proprie: regula pe valuta EFECTIVA (fix task #9) - daca ambele parti sunt
|
||||
*-- efectiv "fara valuta" (gol sau RON), rezultat 0; altfel compara id/curs ca inainte
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
|
||||
ENDIF
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza))
|
||||
=ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0))
|
||||
|
||||
*-- "Termin" REAL: oParinte.do_adauga_factura() cu toDlg-ul construit mai sus
|
||||
LOCAL llOkAdauga
|
||||
llOkAdauga = goObj.do_adauga_factura(goT)
|
||||
=Assert3('6-do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga,1,0), 1)
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 2, 'dupa Termin pe dialog: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
*========================= ASSERT-URI RAND CU RAND PE introdc =========================
|
||||
LOCAL lcSccB
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 8001 AND tip_rand == 'B'
|
||||
=Assert3('7-randul B (baza factura) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
lcSccB = ALLTRIM(NVL(scc,''))
|
||||
=AssertStr('8-B.scd=371', ALLTRIM(scd), '371')
|
||||
=Assert3('9-B.suma=5000.00 (1000 EUR x curs 5)', suma, 5000.00)
|
||||
=Assert3('10-B.suma_val=1000.00', suma_val, 1000.00)
|
||||
=Assert3('11-B.in_valuta=1', NVL(in_valuta,0), 1)
|
||||
=Assert3('12-B.id_valuta=978 (EUR)', NVL(id_valuta,0), 978)
|
||||
=AssertStr('13-B.nume_val=EUR', ALLTRIM(NVL(nume_val,'')), 'EUR')
|
||||
=Assert3('14-B.id_partc=601 (furnizorul facturii)', NVL(id_partc,0), 601)
|
||||
=AssertStr('15-B.partc=FURNIZOR EXTERN GMBH', ALLTRIM(NVL(partc,'')), 'FURNIZOR EXTERN GMBH')
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 8
|
||||
DO EeLog WITH ' FAIL 8-15: randul B negasit'
|
||||
ENDIF
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('16-randul T-DVI (rand_dvi=1) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=AssertStr('17-T-DVI.scd=4426', ALLTRIM(scd), '4426')
|
||||
=AssertStr('18-T-DVI.scc=401', ALLTRIM(scc), '401')
|
||||
=Assert3('19-T-DVI.suma=840.00 (baza NETA lei x 21%, discount scazut din baza DVI)', suma, 840.00)
|
||||
=Assert3('20-T-DVI.suma_val=0 (RON)', NVL(suma_val,0), 0)
|
||||
=Assert3('21-T-DVI.in_valuta=0', NVL(in_valuta,0), 0)
|
||||
=Assert3('22-T-DVI.id_valuta=0 (normalizare fara-valuta pe randul scris)', NVL(id_valuta,0), 0)
|
||||
=Assert3('23-T-DVI.curs=0', NVL(curs,0), 0)
|
||||
=AssertStr('24-T-DVI.nume_val="" ', ALLTRIM(NVL(nume_val,'?')), '')
|
||||
=Assert3('25-T-DVI.participa_valuta=.F. (nu intra in footer valuta)', IIF(participa_valuta,1,0), 0)
|
||||
=Assert3('26-T-DVI.valuta_proprie=1 (RON <> EUR factura)', NVL(valuta_proprie,0), 1)
|
||||
=Assert3('27-T-DVI.id_partc=900 (Directia Vamala)', NVL(id_partc,0), 900)
|
||||
=AssertStr('28-T-DVI.partc=DIRECTIA VAMALA', ALLTRIM(NVL(partc,'')), 'DIRECTIA VAMALA')
|
||||
=Assert3('29-T-DVI.mod_manual=0 (TVA-ul tastat coincide cu auto-calculul pe baza neta 840.00)', NVL(mod_manual,0), 0)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 12
|
||||
DO EeLog WITH ' FAIL 17-29: randul T-DVI negasit'
|
||||
ENDIF
|
||||
|
||||
LOCAL lnCntGDoc1
|
||||
lnCntGDoc1 = 0
|
||||
SELECT introdc
|
||||
SCAN FOR nract = 8001 AND tip_rand == 'G'
|
||||
lnCntGDoc1 = lnCntGDoc1 + 1
|
||||
ENDSCAN
|
||||
=Assert3('30b-exact un singur rand G (model B/G/T, Runda32)', lnCntGDoc1, 1)
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 8001 AND tip_rand == 'G' AND ALLTRIM(NVL(scc,'')) == '767'
|
||||
=Assert3('30-randul G (discount, 401->767) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
IF !EMPTY(lcSccB)
|
||||
=AssertStr('31-G.scd = analitic mostenit de pe creditul B', ALLTRIM(scd), lcSccB)
|
||||
ENDIF
|
||||
=Assert3('32-G.suma=+1000.00 (baza discount in lei, POZITIV)', suma, 1000.00)
|
||||
=Assert3('33-G.suma_val=+200.00 (POZITIV)', suma_val, 200.00)
|
||||
=Assert3('34-G.id_partd=601 (furnizorul facturii, de pe creditul B)', NVL(id_partd,0), 601)
|
||||
=Assert3('35-G.participa_valuta=.F.', IIF(participa_valuta,1,0), 0)
|
||||
=Assert3('36-G.cu_tva=1 (mostenit din linia de baza, runda33)', NVL(cu_tva,0), 1)
|
||||
=Assert3('37-G.ptva=21 (aceeasi cota ca linia de baza, runda33)', NVL(ptva,0), 21)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 6
|
||||
DO EeLog WITH ' FAIL 31-37: randul G negasit'
|
||||
ENDIF
|
||||
|
||||
*========================= TOTALURI SUBSOL (Runda32: total cu TVA scade discountul, =========================
|
||||
*========================= total fara TVA ramane baza integrala - D4) - inainte de a adauga =========================
|
||||
*========================= articole (document inca nespart, B ramane intreg) =========================
|
||||
=Assert3('37b-subsol: txtftvalei (fara TVA) = baza integrala 5000.00', goObj.txtftvalei.Value, 5000.00)
|
||||
=Assert3('37c-subsol: Text2 (cu TVA) = baza+TVA-discount = 5000+840-1000 = 4840.00', goObj.Text2.Value, 4840.00)
|
||||
=Assert3('37d-subsol: txtftvaval (fara TVA, valuta) = baza integrala 1000.00', goObj.txtftvaval.Value, 1000.00)
|
||||
=Assert3('37e-subsol: Text3 (cu TVA, valuta) = baza+TVA-discount = 1000+0-200 = 800.00', goObj.Text3.Value, 800.00)
|
||||
|
||||
*========================= ARTICOL prin do_adauga_articol() REAL =========================
|
||||
gcMockArtCodmat = 'ART-BULD-212'
|
||||
LOCAL llEroareArt
|
||||
llEroareArt = .F.
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcArt
|
||||
llEroareArt = .T.
|
||||
DO EeLog WITH 'EROARE do_adauga_articol ' + TRANSFORM(loExcArt.ErrorNo) + ' [' + loExcArt.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('43-do_adauga_articol() fara eroare', IIF(llEroareArt,0,1), 1)
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
=Assert3('44-articolul BULDOEXCAVATOR adaugat in rul_temp', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 800, pretd WITH 800, pret WITH ROUND(800*5,4), ;
|
||||
pret_lei WITH ROUND(800*5,4), cota_tva WITH 21
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO EeLog WITH ' FAIL 44: articolul nu a fost adaugat'
|
||||
ENDIF
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 3, 'articol adaugat (BULDOEXCAVATOR, 800 EUR)'
|
||||
|
||||
*========================= sincronizeaza() REAL =========================
|
||||
LOCAL llEroareSync
|
||||
llEroareSync = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcSync
|
||||
llEroareSync = .T.
|
||||
DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('45-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
|
||||
|
||||
*-- pretul articolului neafectat de discount (discount participa_valuta=.F., exclus din baze)
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
=Assert3('46-dupa sincronizeaza(): pret_lei articol neschimbat (4000.00)', IIF(FOUND(),pret_lei,-1), 4000.00)
|
||||
|
||||
*-- randurile T-DVI si G supravietuiesc sincronizarii (nu doar la creare)
|
||||
SELECT introdc
|
||||
LOCATE FOR Nvl(rand_dvi,0) = 1
|
||||
=Assert3('47-dupa sincronizeaza(): T-DVI inca gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('48-dupa sincronizeaza(): T-DVI.suma neschimbata (840.00, baza neta, protejata de mod_manual=1)', suma, 840.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO EeLog WITH ' FAIL 48: T-DVI a disparut dupa sincronizare'
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 8001 AND tip_rand == 'G' AND ALLTRIM(NVL(scc,'')) == '767'
|
||||
=Assert3('49-dupa sincronizeaza(): G inca gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('50-dupa sincronizeaza(): G.suma neschimbata (+1000.00)', suma, 1000.00)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 1
|
||||
DO EeLog WITH ' FAIL 50: G a disparut dupa sincronizare'
|
||||
ENDIF
|
||||
|
||||
*-- randul D (diferenta) - informativ, best-effort (nu e fortat de acest scenariu)
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 8001 AND tip_rand == 'D'
|
||||
IF FOUND()
|
||||
DO EeLog WITH 'INFO randul D (diferenta) exista: suma=' + TRANSFORM(suma) + ' - neafectat de discount (G exclus din bazele de calcul)'
|
||||
ELSE
|
||||
DO EeLog WITH 'INFO randul D (diferenta) nu apare in acest scenariu (numere curate, fara rotunjire reziduala) - nu e o cerinta a acestui test'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 4, 'sincronizeaza() verificat - vezi log'
|
||||
|
||||
*========================= Terminat -> scriere in actactan (stub verificare.scx, vezi handoff) =========================
|
||||
DO CreeazaActactan
|
||||
LOCAL llEroareTermin
|
||||
llEroareTermin = .F.
|
||||
TRY
|
||||
goObj.inainte_de_do_termin()
|
||||
CATCH TO loExcTermin
|
||||
llEroareTermin = .T.
|
||||
DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo)
|
||||
ENDTRY
|
||||
=Assert3('51-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1)
|
||||
|
||||
*-- Randurile in actactan sunt scrise INAINTE de Do Form verificare/oscrie_in_fisiere/
|
||||
*-- listare_nir (Scan For suma<>0 Or se_scrie=1 / Append/Gather, mult mai devreme in
|
||||
*-- metoda) - o eroare TARZIE (ex. in raportarea NIR, dupa scriere) nu invalideaza datele
|
||||
*-- deja scrise. De-aia verific actactan INDIFERENT de llEroareTermin.
|
||||
IF USED('actactan')
|
||||
DO EeLog WITH 'DIAG dump actactan dupa Terminat:'
|
||||
SELECT actactan
|
||||
SCAN
|
||||
DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(nract) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ;
|
||||
' suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(NVL(suma_val,0)) + ' in_valuta=?' + ' id_valuta=' + TRANSFORM(NVL(id_valuta,0)) + ;
|
||||
' id_partd=' + TRANSFORM(NVL(id_partd,0)) + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']'
|
||||
ENDSCAN
|
||||
|
||||
=Assert3('52-actactan folosit dupa Terminat', IIF(USED('actactan'),1,0), 1)
|
||||
|
||||
*-- randul "B" (baza facturii) - sincronizeaza() redistribuie valoarea originala pe
|
||||
*-- conturile REALE ale articolelor participante (212 = contul articolului BULDOEXCAVATOR,
|
||||
*-- nu 371, placeholder-ul din sablon) - comportament PRE-EXISTENT de participare la pret,
|
||||
*-- neschimbat de F1/F2. Nu (mai) pin-uiesc contul/suma exacta (ar cere sa refac math-ul
|
||||
*-- complet de spargere pe cote) - verific doar ca valoarea facturii e reprezentata,
|
||||
*-- atribuita corect furnizorului, in EUR.
|
||||
SELECT actactan
|
||||
LOCATE FOR nract = 8001 AND ALLTRIM(NVL(scc,'')) == '401' AND suma > 0 AND NVL(id_partc,0) = 601
|
||||
=Assert3('53-actactan: cel putin un rand de baza (scc=401, furnizor) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('56-actactan randul de baza: id_valuta=978 (EUR)', NVL(id_valuta,0), 978)
|
||||
=AssertStr('57-actactan randul de baza: nume_val=EUR', ALLTRIM(NVL(nume_val,'')), 'EUR')
|
||||
=Assert3('58-actactan randul de baza: id_partc=601 (furnizorul facturii)', NVL(id_partc,0), 601)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 3
|
||||
DO EeLog WITH ' FAIL 56-58: niciun rand de baza gasit in actactan'
|
||||
ENDIF
|
||||
*-- NU verific suma totala exacta pe randurile de baza: cu un singur articol (800 EUR)
|
||||
*-- fata de baza integrala a facturii (1000 EUR), sincronizeaza() mai scrie si un rand de
|
||||
*-- diferenta/reconciliere (scd=6588) - matematica exacta de spargere pe conturi tine de
|
||||
*-- participarea la pret (pre-existenta, neschimbata de F1/F2), nu de scopul acestui test.
|
||||
|
||||
SELECT actactan
|
||||
LOCATE FOR ALLTRIM(NVL(scd,'')) == '4426' AND suma > 0
|
||||
=Assert3('59-actactan randul T-DVI (scd=4426, suma pozitiva) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('60-actactan T-DVI.suma=840.00 (baza neta)', suma, 840.00)
|
||||
=Assert3('61-actactan T-DVI.suma_val=0 (RON, in_valuta=0, necopiat)', NVL(suma_val,0), 0)
|
||||
=Assert3('62-actactan T-DVI.id_valuta=0 (RON normalizat)', NVL(id_valuta,0), 0)
|
||||
=Assert3('63-actactan T-DVI.id_partc=900 (Directia Vamala)', NVL(id_partc,0), 900)
|
||||
=AssertStr('64-actactan T-DVI.partc=DIRECTIA VAMALA', ALLTRIM(NVL(partc,'')), 'DIRECTIA VAMALA')
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 4
|
||||
DO EeLog WITH ' FAIL 60-64: randul T-DVI negasit in actactan'
|
||||
ENDIF
|
||||
|
||||
SELECT actactan
|
||||
LOCATE FOR nract = 8001 AND ALLTRIM(NVL(scc,'')) == '767'
|
||||
=Assert3('65-actactan randul G (scc=767, discount baza) gasit', IIF(FOUND(),1,0), 1)
|
||||
IF FOUND()
|
||||
=Assert3('66-actactan G.suma=+1000.00 (POZITIV)', suma, 1000.00)
|
||||
=Assert3('67-actactan G.suma_val=+200.00 (POZITIV, valuta mostenita de la B)', NVL(suma_val,0), 200.00)
|
||||
=Assert3('68-actactan G.id_partd=601 (furnizorul facturii)', NVL(id_partd,0), 601)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 3
|
||||
DO EeLog WITH ' FAIL 66-68: randul G negasit in actactan'
|
||||
ENDIF
|
||||
|
||||
*-- niciun rand fals de finalizare NIR: scd gol + scc=401 + suma=0, generat cand un rand cu_tva=0 (G) nu e exclus corect
|
||||
SELECT actactan
|
||||
LOCATE FOR EMPTY(NVL(scd,'')) AND ALLTRIM(NVL(scc,'')) == '401' AND NVL(suma,0) = 0
|
||||
=Assert3('73-niciun rand fals de finalizare NIR in actactan', IIF(FOUND(),1,0), 0)
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 16
|
||||
DO EeLog WITH ' FAIL 52-73: inainte_de_do_termin() a esuat sau actactan nu exista - assert-urile pe actactan sarite'
|
||||
ENDIF
|
||||
|
||||
DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 5, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO EeLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE CreeazaIntrodc
|
||||
*-- Runda30 (F1/pas2): coloane NOI rand_dvi N(1), valuta_proprie N(1) fata de structura veche.
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaActactan
|
||||
*-- structura minima ceruta de GATHER-urile
|
||||
*-- din import_nota.inainte_de_do_termin() (Scan For suma<>0 Or se_scrie=1 / Append Blank /
|
||||
*-- Gather Name poAct + Gather Name loFact Fields ...). Fara ea, GATHER FIELDS ar da eroare
|
||||
*-- de camp inexistent inainte sa ajunga la Do Form verificare.
|
||||
IF USED('actactan')
|
||||
USE IN ('actactan')
|
||||
ENDIF
|
||||
CREATE CURSOR actactan ( ;
|
||||
id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ;
|
||||
partc C(100), id_partc N(14), partd C(100), id_partd N(14), ;
|
||||
suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ;
|
||||
scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ;
|
||||
tva_incasare N(1), id_set N(14), id_gestin N(14))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE EeErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE EeLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
*-- gol: niciun cont nu cere analitic in scenariul acestui test (371/401 folosite
|
||||
*-- fara analitic, ca in restul suitei - vezi verificare_note_contabile)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
|
||||
*-- 401 recunoscut ca si cont cu parteneri (verificare_note_contabile) - altfel
|
||||
*-- verif_part goleste id_partc/id_partd pe randurile T-DVI/G inainte de actactan
|
||||
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
|
||||
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
|
||||
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
13
utile/Teste/achizitie_import/test_e2e_dvi_ron_discount.ps1
Normal file
13
utile/Teste/achizitie_import/test_e2e_dvi_ron_discount.ps1
Normal file
@@ -0,0 +1,13 @@
|
||||
# test_e2e_dvi_ron_discount.ps1 - wrapper peste harness-ul generic pentru testul e2e
|
||||
# (factura import EUR + TVA DVI in RON + discount financiar + articol + sincronizare).
|
||||
# NU exercita pasul "Terminat" (scriere in actactan) - vezi antetul .prg pentru motiv.
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_e2e_dvi_ron_discount.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_e2e_dvi_ron_discount.prg') `
|
||||
-Steps @('nota_goala','dialog_completat','dupa_termin_dialog','articol_adaugat','sincronizat','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_e2e_dvi_ron_discount') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_e2e_dvi_ron_discount') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
@@ -666,8 +666,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DumpIntrodc
|
||||
|
||||
@@ -285,8 +285,8 @@ TRY
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
|
||||
*-- Document unic (nract=1001/serie A pentru toate randurile => acelasi doc_key). doc_key
|
||||
*-- populat explicit (padded C(80) la stocare, ca in fluxul real) - vezi PAS 5: comparatia
|
||||
|
||||
@@ -250,7 +250,7 @@ TRY
|
||||
|
||||
*-- index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO MtLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -773,8 +773,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
|
||||
682
utile/Teste/achizitie_import/test_ordine_randuri_document.prg
Normal file
682
utile/Teste/achizitie_import/test_ordine_randuri_document.prg
Normal file
@@ -0,0 +1,682 @@
|
||||
* test_ordine_randuri_document.prg
|
||||
* Runda32 (model B/G/T): ordinea FIZICA de creare a randurilor unui document nou e B -> G -> T
|
||||
* (azi era B -> T -> G, cu G adaugat la sfarsit). Verifica RECNO() imediat dupa
|
||||
* do_adauga_factura(), cat timp documentul e singurul din cursor (nimic altceva interleaved):
|
||||
* - DOC1 (Furnizor, cu discount): 3 randuri contigue, in ordinea B, G, T;
|
||||
* - DOC2 (Furnizor, fara discount): 2 randuri contigue, B, T (G lipseste, nu strica ordinea);
|
||||
* - DOC3 (TVA DVI, cu discount): tot B, G, T - randul T e repurpozat pentru DVI (conturi/sume
|
||||
* din dvi_*), dar pozitia lui fizica ramane a treia, dupa G.
|
||||
* Verifica si ordinea DE AFISARE (index ord_doc: B, G, T) - vezi VerificaOrdineAfisare().
|
||||
*
|
||||
* Flux REAL: dialogul `import_adauga_factura` (toDlg construit inline in programul principal,
|
||||
* capcana l - CREATEOBJECT/ADDPROPERTY nu merg dintr-o procedura in acest runtime headless).
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_ordine_randuri_document.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_ordine_randuri_document_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_ordine_randuri\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO OrErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO OrLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO OrLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO OrLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 6
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (factura in EUR, curs 5) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'FURNIZOR ORDINE SRL')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 220, 21, 'ACH. IMP. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 221, 21, 'TVA ACH. IMP. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp (denumire C(100), codmat C(30), cant N(14,3), pret_val N(18,4), ;
|
||||
pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), acont C(20), serie C(30), ;
|
||||
lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO OrLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO OrLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= DOC1: Furnizor + discount (B, G, T) =========================
|
||||
PUBLIC goDlg, goT
|
||||
DO AdaugaFacturaF WITH 20000, 100.00
|
||||
SELECT introdc
|
||||
SET ORDER TO
|
||||
=VerificaOrdine('DOC1 (Furnizor+discount)', GasesteDocKey(20000), .T., 1)
|
||||
=VerificaOrdineAfisare('DOC1 (Furnizor+discount)', GasesteNrDoc(20000), .T.)
|
||||
|
||||
DO HarnessStep WITH 0, 'DOC1 (Furnizor+discount) verificat'
|
||||
|
||||
*========================= DOC2: Furnizor, fara discount (B, T - fara G) =========================
|
||||
DO AdaugaFacturaF WITH 20001, 0.00
|
||||
=VerificaOrdine('DOC2 (Furnizor, fara discount)', GasesteDocKey(20001), .F., 2)
|
||||
=VerificaOrdineAfisare('DOC2 (Furnizor, fara discount)', GasesteNrDoc(20001), .F.)
|
||||
|
||||
DO HarnessStep WITH 1, 'DOC2 (fara discount) verificat'
|
||||
|
||||
*========================= DOC3: TVA DVI + discount (B, G, T-DVI) =========================
|
||||
*-- doc_key ramane al documentului-mama pe toata ramura DVI (ointroduceri.vc2 ~9096-9097);
|
||||
*-- randul T primeste insa nract-ul DVI-ului (toDlg.dvi_nract), deci NU se poate localiza
|
||||
*-- documentul dupa nract - vezi GasesteDocKey().
|
||||
DO AdaugaFacturaDvi WITH 20002, 150.00
|
||||
=VerificaOrdine('DOC3 (TVA DVI+discount)', GasesteDocKey(20002), .T., 3)
|
||||
=VerificaOrdineAfisare('DOC3 (TVA DVI+discount)', GasesteNrDoc(20002), .T.)
|
||||
|
||||
DO HarnessStep WITH 2, 'DOC3 (DVI+discount) verificat'
|
||||
|
||||
DO OrLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO OrLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO OrLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO OrLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AdaugaFacturaF
|
||||
*-- factura EUR curs 5, mod Furnizor (F), discount optional (0 = fara discount).
|
||||
LPARAMETERS tnNract, tnDiscBazaVal
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = tnNract
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR ORDINE SRL'
|
||||
goDlg.cExplicatia = 'Import marfa ordine randuri'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 1
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO OrLog WITH 'DOC ' + TRANSFORM(tnNract) + ': valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act','')
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',ROUND(goDlg.nSuma*goDlg.nCurs,gnPC))
|
||||
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
||||
=ADDPROPERTY(goT,'in_valuta',1)
|
||||
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
||||
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
||||
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
||||
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
=ADDPROPERTY(goT,'cTipTva','F')
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie','')
|
||||
=ADDPROPERTY(goT,'dvi_nract',0)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',0)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc','')
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',0)
|
||||
=ADDPROPERTY(goT,'dvi_partc','')
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',0)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
||||
=ADDPROPERTY(goT,'dvi_curs',0)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val','')
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',ROUND(tnDiscBazaVal*5,gnPC))
|
||||
=ADDPROPERTY(goT,'disc_baza_val',tnDiscBazaVal)
|
||||
|
||||
DO OrLog WITH 'DOC ' + TRANSFORM(tnNract) + ': do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AdaugaFacturaDvi
|
||||
*-- factura EUR curs 5, mod TVA DVI (D), discount optional.
|
||||
LPARAMETERS tnNract, tnDiscBazaVal
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = tnNract
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'FURNIZOR ORDINE SRL'
|
||||
goDlg.cExplicatia = 'Import marfa ordine randuri (DVI)'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO OrLog WITH 'DOC ' + TRANSFORM(tnNract) + ' (DVI): valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act','')
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',ROUND(goDlg.nSuma*goDlg.nCurs,gnPC))
|
||||
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
||||
=ADDPROPERTY(goT,'in_valuta',1)
|
||||
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
||||
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
||||
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
||||
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
=ADDPROPERTY(goT,'cTipTva','D')
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie','')
|
||||
=ADDPROPERTY(goT,'dvi_nract',tnNract+1000)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',2)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc','DVI')
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',900)
|
||||
=ADDPROPERTY(goT,'dvi_partc','DIRECTIA VAMALA')
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',1050.00)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
||||
=ADDPROPERTY(goT,'dvi_curs',0)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val','')
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',1)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',ROUND(tnDiscBazaVal*5,gnPC))
|
||||
=ADDPROPERTY(goT,'disc_baza_val',tnDiscBazaVal)
|
||||
|
||||
DO OrLog WITH 'DOC ' + TRANSFORM(tnNract) + ' (DVI): do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE GasesteDocKey
|
||||
*-- doc_key ramane al documentului-mama pe toata ramura (inclusiv randul T repurpozat pentru
|
||||
*-- DVI, care primeste alt nract - vezi ointroduceri.vc2 ~9096-9097) - localizeaza documentul
|
||||
*-- prin randul B (singurul care pastreaza mereu nract-ul facturii) si intoarce doc_key.
|
||||
LPARAMETERS tnNract
|
||||
LOCAL lcDocKey
|
||||
lcDocKey = ''
|
||||
SELECT introdc
|
||||
LOCATE FOR nract == tnNract AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
lcDocKey = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
RETURN lcDocKey
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE GasesteNrDoc
|
||||
*-- nr_doc al randului B (identic pe toate randurile B/G/T ale aceluiasi document) - vezi ointroduceri.vc2 ~9032.
|
||||
LPARAMETERS tnNract
|
||||
LOCAL lnNrDoc
|
||||
lnNrDoc = 0
|
||||
SELECT introdc
|
||||
LOCATE FOR nract == tnNract AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
lnNrDoc = nr_doc
|
||||
ENDIF
|
||||
RETURN lnNrDoc
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaOrdine
|
||||
*-- verifica RECNO() fizic: B < [G <] T, contigue, imediat dupa creare documentului doc_key.
|
||||
LPARAMETERS tcLabel, tcDocKey, tlAreG, tnPasIdx
|
||||
LOCAL lnRecnoB, lnRecnoG, lnRecnoT
|
||||
STORE 0 TO lnRecnoB, lnRecnoG, lnRecnoT
|
||||
=Assert3(tcLabel + '-doc_key gasit (GasesteDocKey)', IIF(!EMPTY(tcDocKey),1,0), 1)
|
||||
SELECT introdc
|
||||
SCAN FOR ALLTRIM(NVL(doc_key,'')) == tcDocKey
|
||||
DO CASE
|
||||
CASE tip_rand == 'B' AND lnRecnoB = 0
|
||||
lnRecnoB = RECNO()
|
||||
CASE tip_rand == 'G'
|
||||
lnRecnoG = RECNO()
|
||||
CASE tip_rand == 'T' AND lnRecnoT = 0
|
||||
lnRecnoT = RECNO()
|
||||
ENDCASE
|
||||
ENDSCAN
|
||||
=Assert3(tcLabel + '-B gasit (recno>0)', IIF(lnRecnoB>0,1,0), 1)
|
||||
=Assert3(tcLabel + '-T gasit (recno>0)', IIF(lnRecnoT>0,1,0), 1)
|
||||
IF tlAreG
|
||||
=Assert3(tcLabel + '-G gasit (recno>0)', IIF(lnRecnoG>0,1,0), 1)
|
||||
=Assert3(tcLabel + '-ordine: RECNO(B) < RECNO(G)', IIF(lnRecnoB < lnRecnoG,1,0), 1)
|
||||
=Assert3(tcLabel + '-ordine: RECNO(G) < RECNO(T)', IIF(lnRecnoG < lnRecnoT,1,0), 1)
|
||||
=Assert3(tcLabel + '-contiguitate: RECNO(G)=RECNO(B)+1', IIF(lnRecnoG = lnRecnoB+1,1,0), 1)
|
||||
=Assert3(tcLabel + '-contiguitate: RECNO(T)=RECNO(G)+1', IIF(lnRecnoT = lnRecnoG+1,1,0), 1)
|
||||
ELSE
|
||||
=Assert3(tcLabel + '-fara discount: niciun rand G', IIF(lnRecnoG=0,1,0), 1)
|
||||
=Assert3(tcLabel + '-ordine: RECNO(B) < RECNO(T)', IIF(lnRecnoB < lnRecnoT,1,0), 1)
|
||||
=Assert3(tcLabel + '-contiguitate: RECNO(T)=RECNO(B)+1', IIF(lnRecnoT = lnRecnoB+1,1,0), 1)
|
||||
ENDIF
|
||||
DO OrLog WITH tcLabel + ': RECNO(B)=' + TRANSFORM(lnRecnoB) + ' RECNO(G)=' + TRANSFORM(lnRecnoG) + ' RECNO(T)=' + TRANSFORM(lnRecnoT)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaOrdineAfisare
|
||||
*-- verifica ordinea DE AFISARE (Set Order To ord_doc): pentru acelasi nr_doc, succesiunea tip_rand.
|
||||
LPARAMETERS tcLabel, tnNrDoc, tlAreG
|
||||
LOCAL lcSecventa, lcAsteptat
|
||||
lcSecventa = ''
|
||||
SELECT introdc
|
||||
SET ORDER TO ord_doc
|
||||
GO TOP
|
||||
SCAN FOR nr_doc == tnNrDoc
|
||||
lcSecventa = lcSecventa + tip_rand
|
||||
ENDSCAN
|
||||
SET ORDER TO
|
||||
lcAsteptat = IIF(tlAreG, 'BGT', 'BT')
|
||||
=AssertStr(tcLabel + '-afisare: secventa tip_rand (ord_doc)', lcSecventa, lcAsteptat)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO OrLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO OrLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AssertStr
|
||||
LPARAMETERS tcLabel, tcActual, tcExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF tcActual == tcExpected
|
||||
pnPass = pnPass + 1
|
||||
DO OrLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
|
||||
ELSE
|
||||
DO OrLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE OrErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO OrLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE OrLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
|
||||
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
|
||||
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 1, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 2, 301204)
|
||||
ENDPROC
|
||||
@@ -0,0 +1,12 @@
|
||||
# test_ordine_randuri_document.ps1 - wrapper peste harness-ul generic pentru ordinea fizica de
|
||||
# creare a randurilor (B -> G -> T) la adaugarea unei facturi - Runda32.
|
||||
# powershell -ExecutionPolicy Bypass -File test_ordine_randuri_document.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_ordine_randuri_document.prg') `
|
||||
-Steps @('doc1_furnizor_discount','doc2_furnizor_fara_discount','doc3_dvi_discount','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_ordine_randuri') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_ordine_randuri') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
@@ -541,8 +541,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
|
||||
@@ -290,8 +290,8 @@ TRY
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
DO ReproLog WITH 'introdc creat (gol, ' + TRANSFORM(FCOUNT('introdc')) + ' campuri)'
|
||||
|
||||
*----- rul_temp: in fluxul real e creat abia in Init (T2); il cream aici INAINTE de
|
||||
|
||||
1025
utile/Teste/achizitie_import/test_repro_tva11_explicatie.prg
Normal file
1025
utile/Teste/achizitie_import/test_repro_tva11_explicatie.prg
Normal file
File diff suppressed because it is too large
Load Diff
15
utile/Teste/achizitie_import/test_repro_tva11_explicatie.ps1
Normal file
15
utile/Teste/achizitie_import/test_repro_tva11_explicatie.ps1
Normal file
@@ -0,0 +1,15 @@
|
||||
# test_repro_tva11_explicatie.ps1 - wrapper peste harness-ul generic pentru reproducerea bug-ului
|
||||
# TVA 11% pe "Achizitie din import" (mesaj coloana TVA lipsa + eroare VFP la editarea explicatiei
|
||||
# TVA din grid). Harness-ul standard NU paseaza parametri liniei de comanda catre .fxp; modul
|
||||
# PRE/POST se controleaza din fisierul-steag tva11_post_fix.flag (vezi antetul .prg si
|
||||
# docs\handoff_tva11_test.md) - creeaza-l/sterge-l INAINTE de a rula acest .ps1.
|
||||
# powershell -ExecutionPolicy Bypass -File test_repro_tva11_explicatie.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_repro_tva11_explicatie.prg') `
|
||||
-Steps @('factura_dvi_creata','articole_adaugate','dupa_dblclick_explicatie_tva','dupa_sincronizare2','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_tva11_explicatie') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_tva11_explicatie') `
|
||||
-StepTimeoutSec 180 `
|
||||
-ReadyTimeoutSec 180
|
||||
@@ -275,8 +275,8 @@ TRY
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
|
||||
*-- randul B (baza): suma 1000 lei, suma_val 219.30 USD (curs 4.56)
|
||||
INSERT INTO introdc (tip_rand, scd, scc, ascc, suma, suma_val, id_jtva_coloana, ptva, explicatie_tva, ;
|
||||
|
||||
@@ -252,7 +252,7 @@ TRY
|
||||
|
||||
*-- F1 (ointroduceri.prg): index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO R11Log WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -651,8 +651,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DumpIntrodc
|
||||
|
||||
@@ -266,7 +266,7 @@ TRY
|
||||
*-- nefactura-principala. Cu indexul, ordinea e mereu dupa nr_doc (S-urile mostenesc nr_doc-ul
|
||||
*-- principalei), deci documentul principal ramane stabil la sincronizari repetate.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
PUBLIC goObjA
|
||||
goObjA = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
@@ -491,7 +491,7 @@ TRY
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
PUBLIC goObjB
|
||||
goObjB = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
@@ -694,8 +694,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaRandD
|
||||
|
||||
@@ -257,7 +257,7 @@ TRY
|
||||
|
||||
*-- F1 (ointroduceri.prg): index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -798,8 +798,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
|
||||
@@ -582,14 +582,16 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
*-- verifica perechea B+T adaugata (dupa nract): sume lei/valuta, valuta pe baza
|
||||
*-- verifica perechea B+T adaugata (dupa nract): sume lei/valuta, valuta pe baza. Randul T se
|
||||
*-- cauta dupa doc_key (nu dupa nract): pe ramura DVI do_adauga_factura rescrie nract pe randul
|
||||
*-- T cu numarul DVI-ului, dar pastreaza doc_key-ul documentului-mama.
|
||||
LPARAMETERS tnNract, tnBazaLei, tnBazaVal, tcVal
|
||||
LOCAL lnSel, lcMsg, llB, llT, lnBS, lnBSV, lcNV
|
||||
LOCAL lnSel, lcMsg, llB, llT, lnBS, lnBSV, lcNV, lcDocKey
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = tnNract AND tip_rand == 'B'
|
||||
@@ -598,8 +600,11 @@ PROCEDURE VerificaPereche
|
||||
lnBS = suma
|
||||
lnBSV = suma_val
|
||||
lcNV = ALLTRIM(NVL(nume_val,''))
|
||||
ENDIF
|
||||
lcDocKey = doc_key
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == ALLTRIM(NVL(lcDocKey,'')) AND tip_rand == 'T'
|
||||
ELSE
|
||||
LOCATE FOR nract = tnNract AND tip_rand == 'T'
|
||||
ENDIF
|
||||
llT = FOUND()
|
||||
IF llB AND llT AND ABS(lnBS - tnBazaLei) < 0.01 AND ABS(lnBSV - tnBazaVal) < 0.01 AND ALLTRIM(NVL(lcNV,'')) == tcVal
|
||||
lcMsg = 'PASS pereche nract=' + TRANSFORM(tnNract) + ': B(suma=' + TRANSFORM(lnBS) + ' val=' + TRANSFORM(lnBSV) + ' ' + lcNV + ') + randT gasit'
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* rul_temp.pretd = 1000.00 (pretul valuta NU include cei 523 lei ai secundarei)
|
||||
* rul_temp.pret = 5230.00 (pretul lei NU mai include cei 523 lei)
|
||||
* goObj.procent_lei = 100, goObj.procent_val = 100
|
||||
* rand D (diferenta) cu suma = 523.00, cont dominant clasa 3 = 371 (scd D = 607)
|
||||
* FARA rand D: documentul debifat nu intra in diferenta (v2.11.11)
|
||||
* explicatia4/explicatia5 goale pe randul secundarei (371, doc2)
|
||||
* valideaza_sume() = .T., cmesajsync gol
|
||||
*
|
||||
@@ -274,7 +274,7 @@ TRY
|
||||
|
||||
*-- F1 (ointroduceri.prg): index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -405,12 +405,13 @@ TRY
|
||||
LOCATE FOR tip_rand == 'D'
|
||||
IF FOUND()
|
||||
DO DcLog WITH 'randul D (diferenta): scd=' + ALLTRIM(scd) + ' scc=' + ALLTRIM(scc) + ' suma=' + TRANSFORM(suma)
|
||||
DO Assert3 WITH '4a-randul D exista cu suma=523.00 (diferenta absorbita)', suma, 523.00
|
||||
DO AssertStr WITH '4b-randul D cont dominant clasa 3 (scc=371)', ALLTRIM(scc), '371'
|
||||
DO Assert3 WITH '4a-randul D nu mai preia documentul debifat (astept suma 0)', suma, 0
|
||||
ELSE
|
||||
pnAsserts = pnAsserts + 2
|
||||
DO DcLog WITH ' FAIL 4a/4b: nu exista randul D (diferenta) - asteptat suma=523.00'
|
||||
pnAsserts = pnAsserts + 1
|
||||
pnPass = pnPass + 1
|
||||
DO DcLog WITH ' PASS 4a-nu exista rand D: documentul debifat nu intra in diferenta'
|
||||
ENDIF
|
||||
DO Assert3 WITH '4b-ndif_lei (astept 0, documentul debifat nu incarca pretul)', goObj.ndif_lei, 0
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR nract == 201 AND ALLTRIM(scd) == '371' AND INLIST(tip_rand,'B','S')
|
||||
@@ -595,8 +596,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
|
||||
@@ -256,7 +256,7 @@ TRY
|
||||
|
||||
*-- F1 (ointroduceri.prg): index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -537,8 +537,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Sincronizeaza
|
||||
|
||||
937
utile/Teste/achizitie_import/test_taxcode_scc_aliniere.prg
Normal file
937
utile/Teste/achizitie_import/test_taxcode_scc_aliniere.prg
Normal file
@@ -0,0 +1,937 @@
|
||||
* test_taxcode_scc_aliniere.prg
|
||||
* aliniaza_tva_la_baza (COMUN\clase\ointroduceri.vcx, import_nota) reface taxcode (SAFT) si
|
||||
* comutarea scc/ascc 4427/creditor S pe randurile T realiniate la familia S-ului. Scenariul se
|
||||
* produce integral prin fluxul REAL de utilizator (model: test_repro_tva11_explicatie.prg):
|
||||
* factura de import DVI (21%), 2 articole (21% si 11%), sincronizare, apoi pe randul S de 11%:
|
||||
* 1. dublu-click Explicatie TVA -> alege familia CE (taxare inversa, eligibila 4427) ->
|
||||
* dupa resincronizare T(11%) trebuie sa aiba scc='4427', ascc=''.
|
||||
* 2. editare manuala S(11%).scc/ascc prin Grid1.cScc/cAscc.Text1 (ca in test_tva_creditori.prg)
|
||||
* la un creditor DIFERIT de '401' -> T(11%) ramane pe scc='4427' (regula 4427 domina
|
||||
* creditorul, cat timp familia e eligibila).
|
||||
* 3. dublu-click Explicatie TVA din nou -> revine la familia documentului (FO, neeligibila
|
||||
* 4427) -> T(11%) trebuie sa revina la creditorul CURENT al S(11%) (cel editat la pasul 2,
|
||||
* NU '401' fix - vezi TVA pe creditori).
|
||||
* taxcode (SAFT, gl406 activ) verificat la fiecare pas cu valoarea EXACTA din nomenclator.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_taxcode_scc_aliniere.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_taxcode_scc_aliniere_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_taxcode_scc_aliniere\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO TvErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
|
||||
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO TvLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO TvLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_cauta_alfa_tva11.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO TvLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
PUBLIC goMockValuta
|
||||
goMockValuta = CREATEOBJECT('Custom')
|
||||
goMockValuta.AddProperty('id_valuta', 978)
|
||||
goMockValuta.AddProperty('nume_val', 'EUR')
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
PUBLIC gnTipGest
|
||||
gnTipGest = 0
|
||||
PUBLIC gnHandle
|
||||
gnHandle = -1
|
||||
PUBLIC gcTempPath
|
||||
gcTempPath = ADDBS(SYS(2023))
|
||||
PUBLIC gcCondSucursala
|
||||
gcCondSucursala = ''
|
||||
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
||||
gcMockArtCodmat = ''
|
||||
gcMockAcontCrt = ''
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 6
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
*-- denumirea aleasa in dialogul de cautare explicatie TVA (mock_cauta_alfa_tva11.prg)
|
||||
PUBLIC gcTestTvaAlege
|
||||
gcTestTvaAlege = ''
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei (moneda principala EUR, curs 5) -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', 'EUR')
|
||||
poAct.AddProperty('curs', 5)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 978)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 601)
|
||||
poAct.AddProperty('partc', 'MULTI SUPPLY SRL')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2: FO21B/T (220/221, familia documentului) + CE21CTB/T (226/227) +
|
||||
* CE11CTB/T (232/233, familia CE 11% - eligibila 4427). FO11B/T (236/237, familia
|
||||
* documentului la 11% - NEeligibila 4427) LIPSESC deliberat aici (gol de nomenclator,
|
||||
* ca in test_repro_tva11_explicatie.prg mod PRE) - se adauga mai jos, chiar inainte de
|
||||
* PAS 5, cand utilizatorul "completeaza nomenclatorul" (vezi flux-achizitie-import.md).
|
||||
* Fara acest gol, gaseste_jtva_cota ar rezolva cota 11% pe familia documentului la orice
|
||||
* resincronizare si alegerea manuala (CE, branch A) nu ar mai ramane (nu exista protectie
|
||||
* de tip expl_manual pe randul S, doar pe T). -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 226, 'ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE21CTB', 'CE21CTT', 21, 227)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 227, 'TVA ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE21CTT', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (5, 232, 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE11CTB', 'CE11CTT', 11, 233)
|
||||
INSERT INTO jtva_coloane2 VALUES (6, 233, 'TVA ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE11CTT', '', 11, 0)
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301205-Import de bunuri cota 11%', 301205, '', 11, 1, 0, 1, 0)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('300704-Achizitii de bunuri CE 21%', 300704, '', 21, 1, 0, 1, 0)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('300705-Achizitii de bunuri CE 11%', 300705, '', 11, 1, 0, 1, 0)
|
||||
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 220, 21, 'ACH. IMP. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 221, 21, 'TVA ACH. IMP. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
*----- goDlgTva11: formularul REAL cauta_alfa_form pentru dialogul de explicatie TVA -----
|
||||
IF USED('crsTva11cauta')
|
||||
USE IN ('crsTva11cauta')
|
||||
ENDIF
|
||||
CREATE CURSOR crsTva11cauta (id_jtva_coloana N(14), denumire C(100), cota_tva N(6,2))
|
||||
INSERT INTO crsTva11cauta VALUES (232, 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 11)
|
||||
INSERT INTO crsTva11cauta VALUES (233, 'TVA ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 11)
|
||||
GO TOP
|
||||
|
||||
PUBLIC goDlgTva11
|
||||
goDlgTva11 = CREATEOBJECT('cauta_alfa_form', 'crsTva11cauta', '', 'Explicatie TVA,Cota TVA', ;
|
||||
'denumire,cota_tva', .F., '', 1)
|
||||
goDlgTva11.crs_cursor = 'crsTva11cauta'
|
||||
goDlgTva11.cIdColumn = 'id_jtva_coloana'
|
||||
goDlgTva11.WindowType = 0
|
||||
goDlgTva11.Show()
|
||||
DOEVENTS FORCE
|
||||
DO TvLog WITH 'goDlgTva11 construit (cauta_alfa_form REAL, mod single-select)'
|
||||
|
||||
DO TvLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
||||
PUBLIC goObj
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO TvLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.lSpargeSecundare = .F.
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- cJtvaCol4427: Init l-a creat gol (mock pe goExecutor.oExecuta) - il repopulez cu acelasi
|
||||
*-- filtru REAL folosit in productie, aplicat pe jtva_coloane2 (infrastructura de nomenclator,
|
||||
*-- nu pasul de flux testat): CE11CTT (233) si CE21CTT (227) se califica, FO11T/FO21T nu.
|
||||
IF USED('cJtvaCol4427')
|
||||
USE IN ('cJtvaCol4427')
|
||||
ENDIF
|
||||
SELECT id_jtva_coloana FROM jtva_coloane2 ;
|
||||
WHERE (coloana_jc LIKE 'TI%T' OR coloana_jc LIKE 'XX%TIT') ;
|
||||
OR (coloana_jc LIKE 'CE%T' AND coloana_jc NOT LIKE 'CE%FTT') ;
|
||||
INTO CURSOR cJtvaCol4427
|
||||
INDEX ON id_jtva_coloana TAG id_jtva
|
||||
DO TvLog WITH 'cJtvaCol4427 repopulat: ' + TRANSFORM(RECCOUNT('cJtvaCol4427')) + ' randuri (astept 2: 227,233)'
|
||||
|
||||
PRIVATE pnAsserts, pnPass
|
||||
STORE 0 TO pnAsserts, pnPass
|
||||
|
||||
*========================= PAS 1: FACTURA DE IMPORT, DVI, NOTE INITIAL PE 21% =========================
|
||||
PUBLIC goDlg, goT, gcDocKey1
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 19500
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'MULTI SUPPLY SRL'
|
||||
goDlg.cExplicatia = 'Import marfa multicota TVA scc/taxcode'
|
||||
goDlg.nSuma = 1500
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2 && D = DVI
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = 9519
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 901
|
||||
goDlg.cDviPartener = 'DIRECTIA VAMALA'
|
||||
goDlg.nDviTvaLei = 1325.00
|
||||
goDlg.nDviTvaVal = 0
|
||||
goDlg.actualizeaza_stare_dvi()
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO TvLog WITH 'valideaza = ' + TRANSFORM(goDlg.valideaza())
|
||||
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act','')
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',ROUND(goDlg.nSuma*goDlg.nCurs,gnPC))
|
||||
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
||||
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
||||
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
||||
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
||||
=ADDPROPERTY(goT,'cTipTva','D')
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie','')
|
||||
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',2)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc','DVI')
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',901)
|
||||
=ADDPROPERTY(goT,'dvi_partc','DIRECTIA VAMALA')
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',1325.00)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
||||
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
||||
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
||||
=ADDPROPERTY(goT,'dvi_curs',0)
|
||||
=ADDPROPERTY(goT,'dvi_nume_val','')
|
||||
=ADDPROPERTY(goT,'dvi_valuta_proprie',1)
|
||||
=ADDPROPERTY(goT,'disc_baza_lei',0)
|
||||
=ADDPROPERTY(goT,'disc_baza_val',0)
|
||||
|
||||
LOCAL llOkAdauga
|
||||
llOkAdauga = goObj.do_adauga_factura(goT)
|
||||
=Assert3('1-do_adauga_factura(goT) reuseste', IIF(llOkAdauga,1,0), 1)
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT introdc
|
||||
SET ORDER TO
|
||||
LOCATE FOR nract = 19500 AND tip_rand == 'B'
|
||||
IF FOUND()
|
||||
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
||||
ENDIF
|
||||
SELECT introdc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO HarnessStep WITH 0, 'factura DVI creata (note initial 21%), doc_key=' + gcDocKey1
|
||||
|
||||
*========================= PAS 2: 2 ARTICOLE (21% si 11%) - defalcare pe cote la sincronizare =========================
|
||||
gcMockArtCodmat = 'ART-BULD-212'
|
||||
gcMockAcontCrt = ''
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA1
|
||||
DO TvLog WITH 'EROARE do_adauga_articol (1, 21%) ' + TRANSFORM(loExcA1.ErrorNo) + ' [' + loExcA1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 1000, pretd WITH 1000, pret WITH ROUND(1000*5,4), ;
|
||||
pret_lei WITH ROUND(1000*5,4), cota_tva WITH 21
|
||||
ENDIF
|
||||
|
||||
gcMockArtCodmat = 'ART-A8-371'
|
||||
gcMockAcontCrt = '4'
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcA2
|
||||
DO TvLog WITH 'EROARE do_adauga_articol (2, 11%) ' + TRANSFORM(loExcA2.ErrorNo) + ' [' + loExcA2.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
||||
IF FOUND()
|
||||
REPLACE cant WITH 1, pret_val WITH 500, pretd WITH 500, pret WITH ROUND(500*5,4), ;
|
||||
pret_lei WITH ROUND(500*5,4), cota_tva WITH 11
|
||||
ENDIF
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
=Assert3('2-doua articole in rul_temp (21% + 11%)', RECCOUNT_ACTIVE('rul_temp'), 2)
|
||||
|
||||
DO HarnessStep WITH 1, 'articole (21% si 11%) adaugate'
|
||||
|
||||
LOCAL llEroareSync1
|
||||
llEroareSync1 = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcS1
|
||||
llEroareSync1 = .T.
|
||||
DO TvLog WITH 'EROARE sincronizeaza() #1 ' + TRANSFORM(loExcS1.ErrorNo) + ' [' + loExcS1.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
=Assert3('3-sincronizeaza() #1 fara eroare VFP', IIF(llEroareSync1,0,1), 1)
|
||||
|
||||
*-- baseline: FO11B/FO11T LIPSESC (gol de nomenclator, deliberat) - gaseste_jtva_cota nu
|
||||
*-- gaseste perechea de 11% in familia documentului (FO), deci S(11%) ramane cu explicatia
|
||||
*-- mostenita de la baza (21%) si T(11%) e posibil sa nu existe inca - doar diagnostic aici,
|
||||
*-- fara assert-uri (starea exacta conteaza mai putin decat rezultatul dupa alegerea manuala).
|
||||
DO TvLog WITH 'familii dupa sincronizare #1 (baseline, gol de nomenclator la 11%): S(11)=' + TRANSFORM(CampRand('S',11,'id_jtva_coloana')) + ' T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' T(11).scc=[' + CampRandC('T',11,'scc') + ']'
|
||||
|
||||
DO HarnessStep WITH 2, 'sincronizare#1 (baseline, gol nomenclator): S(11)=' + TRANSFORM(CampRand('S',11,'id_jtva_coloana')) + ' T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana'))
|
||||
|
||||
*========================= PAS 3 (BRANCH A): dublu-click Explicatie TVA pe S(11%) -> familia CE (4427) =========================
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
||||
LOCAL llGasitS11
|
||||
llGasitS11 = FOUND()
|
||||
=Assert3('5-exista rand S cu ptva=11', IIF(llGasitS11,1,0), 1)
|
||||
|
||||
IF llGasitS11
|
||||
gcTestTvaAlege = 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA'
|
||||
STORE 0 TO gnButon
|
||||
TRY
|
||||
goObj.grid1.cExplicatieTva.Text1.DblClick()
|
||||
CATCH TO loExcDbl1
|
||||
DO TvLog WITH 'EROARE DblClick (CE) ' + TRANSFORM(loExcDbl1.ErrorNo) + ' [' + loExcDbl1.Message + '] in ' + loExcDbl1.Procedure + ':' + TRANSFORM(loExcDbl1.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
goObj.sincronizeaza()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO TvLog WITH 'dupa alegere CE + sincronizare#2: S(11)=' + TRANSFORM(CampRand('S',11,'id_jtva_coloana')) + ' T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' T(11).scc=[' + CampRandC('T',11,'scc') + '] T(11).ascc=[' + CampRandC('T',11,'ascc') + '] T(11).taxcode=' + TRANSFORM(CampRand('T',11,'taxcode'))
|
||||
*-- S(11%) revine la familia mostenita de la baza (220) la fiecare resincronizare (creeaza_rand_s
|
||||
*-- nu pastreaza o alegere manuala pe randul S - doar randul T are protectia expl_manual) -
|
||||
*-- comportament PREEXISTENT, nu obiectul acestui test; conteaza DOAR rezultatul pe randul T.
|
||||
=Assert3('7-T(11%) aliniat la familia CE (233/CE11CTT)', CampRand('T',11,'id_jtva_coloana'), 233)
|
||||
=Assert3('8-T(11%) familie 4427-eligibila -> scc=4427', IIF(CampRandC('T',11,'scc')=='4427',1,0), 1)
|
||||
=Assert3('9-T(11%) ascc golit cand scc=4427', IIF(EMPTY(CampRandC('T',11,'ascc')),1,0), 1)
|
||||
=Assert3('10-T(11%) taxcode recalculat (301205->300705, familia CE11)', CampRand('T',11,'taxcode'), 300705)
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 3, 'dupa alegere CE (4427): T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' scc=' + CampRandC('T',11,'scc')
|
||||
|
||||
*========================= PAS 4: editare manuala S(11%).scc/ascc (creditor diferit de 401) =========================
|
||||
*-- ca in test_tva_creditori.prg: GotFocus (retine valoarea veche in Thisform.cOldVal),
|
||||
*-- schimba Value, apoi Valid() REAL (fara replicare manuala a logicii din spate).
|
||||
IF llGasitS11
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
||||
IF FOUND()
|
||||
goObj.Grid1.cScc.Text1.Value = scc
|
||||
goObj.Grid1.cScc.Text1.GotFocus()
|
||||
goObj.Grid1.cScc.Text1.Value = '407'
|
||||
TRY
|
||||
goObj.Grid1.cScc.Text1.Valid()
|
||||
CATCH TO loExcScc
|
||||
DO TvLog WITH 'EROARE Valid scc ' + TRANSFORM(loExcScc.ErrorNo) + ' [' + loExcScc.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
||||
goObj.Grid1.cAscc.Text1.Value = ascc
|
||||
goObj.Grid1.cAscc.Text1.GotFocus()
|
||||
goObj.Grid1.cAscc.Text1.Value = '9'
|
||||
TRY
|
||||
goObj.Grid1.cAscc.Text1.Valid()
|
||||
CATCH TO loExcAscc
|
||||
DO TvLog WITH 'EROARE Valid ascc ' + TRANSFORM(loExcAscc.ErrorNo) + ' [' + loExcAscc.Message + ']'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
ENDIF
|
||||
goObj.sincronizeaza()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO TvLog WITH 'dupa editare creditor S(11%) (407/9) + sincronizare#3: S(11).scc=[' + CampRandC('S',11,'scc') + '] T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' T(11).scc=[' + CampRandC('T',11,'scc') + '] T(11).ascc=[' + CampRandC('T',11,'ascc') + ']'
|
||||
=Assert3('11-S(11%).scc editat (407)', IIF(CampRandC('S',11,'scc')=='407',1,0), 1)
|
||||
=Assert3('12-T(11%) ramane pe familia CE (233) - editarea creditorului nu schimba explicatia', CampRand('T',11,'id_jtva_coloana'), 233)
|
||||
=Assert3('13-T(11%) ramane scc=4427 (regula 4427 domina creditorul S, cat timp familia e eligibila)', IIF(CampRandC('T',11,'scc')=='4427',1,0), 1)
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 4, 'dupa editare creditor S(11%): scc S=' + CampRandC('S',11,'scc') + ' T ramane 4427=' + TRANSFORM(IIF(CampRandC('T',11,'scc')=='4427',1,0))
|
||||
|
||||
*-- "completarea nomenclatorului": FO11B/FO11T (236/237) devin disponibile - abia acum
|
||||
*-- utilizatorul poate alege familia documentului la 11% (nu exista mai devreme, vezi
|
||||
*-- comentariul de la crearea lui jtva_coloane2).
|
||||
INSERT INTO jtva_coloane2 VALUES (7, 236, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 237)
|
||||
INSERT INTO jtva_coloane2 VALUES (8, 237, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
|
||||
SELECT crsTva11cauta
|
||||
INSERT INTO crsTva11cauta VALUES (236, 'ACH. IMP. 11%', 11)
|
||||
INSERT INTO crsTva11cauta VALUES (237, 'TVA ACH. IMP. 11%', 11)
|
||||
|
||||
*========================= PAS 5 (BRANCH B): resincronizare (F5) dupa completarea nomenclatorului =========================
|
||||
*-- utilizatorul observa (cmesajsync/mesajul de nomenclator incomplet a disparut) ca lipsa a
|
||||
*-- fost rezolvata si reincearca sincronizarea (F5 - KeyPress -4 apeleaza direct sincronizeaza(),
|
||||
*-- vezi ointroduceri.vcx PROCEDURE KeyPress) - NU mai e nevoie de dublu-click, familia
|
||||
*-- documentului (FO) se rezolva acum natural pentru cota 11%, la fel ca la cota 21%.
|
||||
IF llGasitS11
|
||||
goObj.sincronizeaza()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO TvLog WITH 'dupa completare nomenclator + sincronizare#4 (F5): S(11)=' + TRANSFORM(CampRand('S',11,'id_jtva_coloana')) + ' T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' T(11).scc=[' + CampRandC('T',11,'scc') + '] T(11).ascc=[' + CampRandC('T',11,'ascc') + '] T(11).taxcode=' + TRANSFORM(CampRand('T',11,'taxcode'))
|
||||
=Assert3('14-S(11%) revine la familia documentului (236/FO11B)', CampRand('S',11,'id_jtva_coloana'), 236)
|
||||
=Assert3('15-T(11%) aliniat la familia FO (237/FO11T)', CampRand('T',11,'id_jtva_coloana'), 237)
|
||||
=Assert3('16-T(11%) familie NEeligibila 4427 -> scc revine la creditorul S(11%) (407, NU 401 fix)', IIF(CampRandC('T',11,'scc')=='407',1,0), 1)
|
||||
=Assert3('17-T(11%) ascc revine la ascc-ul S(11%) (9)', IIF(CampRandC('T',11,'ascc')=='9',1,0), 1)
|
||||
=Assert3('18-T(11%) taxcode recalculat (300705->301205, familia FO11)', CampRand('T',11,'taxcode'), 301205)
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 5, 'dupa revenire la FO: T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' scc=' + CampRandC('T',11,'scc') + ' taxcode=' + TRANSFORM(CampRand('T',11,'taxcode'))
|
||||
|
||||
*========================= PAS 6: al DOILEA dublu-click pe S(11%), familia FO (NEeligibila 4427) =========================
|
||||
*-- alegerea de pe randul S se aplica pe randurile T de ACEEASI cota si nu forteaza '401':
|
||||
*-- T(11%) isi pastreaza creditorul editat (407/9), T(21%) ramane neatins. Un creditor
|
||||
*-- suprascris aici PERSISTA - resincronizarea nu il repara, fiindca explicatia randului T
|
||||
*-- e deja cea corecta (aliniaza_tva_la_baza atinge scc doar cand schimba explicatia).
|
||||
LOCAL lnT21Expl, lcT21Scc, lnT21Taxcode
|
||||
lnT21Expl = CampRand('T',21,'id_jtva_coloana')
|
||||
lcT21Scc = CampRandC('T',21,'scc')
|
||||
lnT21Taxcode = CampRand('T',21,'taxcode')
|
||||
DO TvLog WITH 'baseline inainte de PAS 6: T(11).scc=[' + CampRandC('T',11,'scc') + '] T(21)=' + TRANSFORM(lnT21Expl) + ' T(21).scc=[' + lcT21Scc + '] T(21).taxcode=' + TRANSFORM(lnT21Taxcode)
|
||||
|
||||
IF llGasitS11
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
||||
gcTestTvaAlege = 'ACH. IMP. 11%'
|
||||
STORE 0 TO gnButon
|
||||
*-- do_termin consuma formularul dialogului: se reconstruieste inaintea fiecarei alegeri
|
||||
goDlgTva11 = CREATEOBJECT('cauta_alfa_form', 'crsTva11cauta', '', 'Explicatie TVA,Cota TVA', ;
|
||||
'denumire,cota_tva', .F., '', 1)
|
||||
goDlgTva11.crs_cursor = 'crsTva11cauta'
|
||||
goDlgTva11.cIdColumn = 'id_jtva_coloana'
|
||||
goDlgTva11.WindowType = 0
|
||||
goDlgTva11.Show()
|
||||
DOEVENTS FORCE
|
||||
TRY
|
||||
goObj.grid1.cExplicatieTva.Text1.DblClick()
|
||||
CATCH TO loExcDbl2
|
||||
DO TvLog WITH 'EROARE DblClick #2 (FO) ' + TRANSFORM(loExcDbl2.ErrorNo) + ' [' + loExcDbl2.Message + '] in ' + loExcDbl2.Procedure + ':' + TRANSFORM(loExcDbl2.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
goObj.sincronizeaza()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO TvLog WITH 'dupa dublu-click #2 (FO): T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' T(11).scc=[' + CampRandC('T',11,'scc') + '] T(11).ascc=[' + CampRandC('T',11,'ascc') + '] T(11).taxcode=' + TRANSFORM(CampRand('T',11,'taxcode')) + ' T(21)=' + TRANSFORM(CampRand('T',21,'id_jtva_coloana')) + ' T(21).scc=[' + CampRandC('T',21,'scc') + ']'
|
||||
=Assert3('19-T(11%) ramane pe perechea FO (237)', CampRand('T',11,'id_jtva_coloana'), 237)
|
||||
=Assert3('20-T(11%) pastreaza creditorul REAL al S(11%) (407, NU 401 fix)', IIF(CampRandC('T',11,'scc')=='407',1,0), 1)
|
||||
=Assert3('21-T(11%) pastreaza ascc-ul S(11%) (9)', IIF(CampRandC('T',11,'ascc')=='9',1,0), 1)
|
||||
=Assert3('22-T(11%) taxcode ramane al familiei FO11 (301205)', CampRand('T',11,'taxcode'), 301205)
|
||||
=Assert3('23-T(21%) neatins: explicatia ramane a familiei de 21%', CampRand('T',21,'id_jtva_coloana'), lnT21Expl)
|
||||
=Assert3('24-T(21%) neatins: taxcode ramane al cotei 21%', CampRand('T',21,'taxcode'), lnT21Taxcode)
|
||||
=Assert3('24a-T(21%) neatins: creditorul ramane al cotei lui, nu al randului T de 11%', IIF(CampRandC('T',21,'scc')==lcT21Scc,1,0), 1)
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 6, 'dublu-click #2 (FO): T(11).scc=' + CampRandC('T',11,'scc') + ' T(21)=' + TRANSFORM(CampRand('T',21,'id_jtva_coloana'))
|
||||
|
||||
*========================= PAS 7: al TREILEA dublu-click pe S(11%) -> familia CE (eligibila 4427) =========================
|
||||
*-- cu nomenclatorul complet, cota 11% se rezolva la resincronizare pe familia documentului,
|
||||
*-- deci alegerea CE de pe randul S nu supravietuieste (randul S nu are protectie de tip
|
||||
*-- expl_manual); conteaza ca randul T ramane coerent cu S, cu creditorul lui, si ca randul
|
||||
*-- T de 21% nu e atins de trecerea prin 4427.
|
||||
IF llGasitS11
|
||||
SELECT introdc
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
||||
gcTestTvaAlege = 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA'
|
||||
STORE 0 TO gnButon
|
||||
*-- do_termin consuma formularul dialogului: se reconstruieste inaintea fiecarei alegeri
|
||||
goDlgTva11 = CREATEOBJECT('cauta_alfa_form', 'crsTva11cauta', '', 'Explicatie TVA,Cota TVA', ;
|
||||
'denumire,cota_tva', .F., '', 1)
|
||||
goDlgTva11.crs_cursor = 'crsTva11cauta'
|
||||
goDlgTva11.cIdColumn = 'id_jtva_coloana'
|
||||
goDlgTva11.WindowType = 0
|
||||
goDlgTva11.Show()
|
||||
DOEVENTS FORCE
|
||||
TRY
|
||||
goObj.grid1.cExplicatieTva.Text1.DblClick()
|
||||
CATCH TO loExcDbl3
|
||||
DO TvLog WITH 'EROARE DblClick #3 (CE) ' + TRANSFORM(loExcDbl3.ErrorNo) + ' [' + loExcDbl3.Message + '] in ' + loExcDbl3.Procedure + ':' + TRANSFORM(loExcDbl3.LineNo)
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
goObj.sincronizeaza()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO TvLog WITH 'dupa dublu-click #3 (CE): S(11)=' + TRANSFORM(CampRand('S',11,'id_jtva_coloana')) + ' T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' T(11).scc=[' + CampRandC('T',11,'scc') + '] T(21)=' + TRANSFORM(CampRand('T',21,'id_jtva_coloana')) + ' T(21).scc=[' + CampRandC('T',21,'scc') + ']'
|
||||
=Assert3('25-T(11%) coerent cu familia S(11%) dupa resincronizare (237)', CampRand('T',11,'id_jtva_coloana'), 237)
|
||||
=Assert3('26-T(11%) pastreaza creditorul S(11%) (407) dupa trecerea prin CE', IIF(CampRandC('T',11,'scc')=='407',1,0), 1)
|
||||
=Assert3('27-T(21%) neatins de trecerea prin 4427: explicatia ramane 221', CampRand('T',21,'id_jtva_coloana'), lnT21Expl)
|
||||
=Assert3('28-T(21%) neatins de trecerea prin 4427: taxcode ramane 301204', CampRand('T',21,'taxcode'), lnT21Taxcode)
|
||||
=Assert3('28a-T(21%) neatins de trecerea prin 4427: creditorul ramane al cotei lui', IIF(CampRandC('T',21,'scc')==lcT21Scc,1,0), 1)
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 7, 'dublu-click #3 (CE): T(11).scc=' + CampRandC('T',11,'scc') + ' T(21).taxcode=' + TRANSFORM(CampRand('T',21,'taxcode'))
|
||||
|
||||
DO TvLog WITH 'dump introdc FINAL:'
|
||||
DO DumpIntrodc
|
||||
|
||||
DO TvLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
|
||||
IF pnPass = pnAsserts
|
||||
DO TvLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
||||
ELSE
|
||||
DO TvLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
||||
ENDIF
|
||||
|
||||
DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO TvLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE DumpIntrodc
|
||||
LOCAL lnSel
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
SCAN
|
||||
DO TvLog WITH ' nract=' + TRANSFORM(NVL(nract,0)) + ' tip=' + tip_rand + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' ascc=' + ALLTRIM(NVL(ascc,'')) + ' ptva=' + TRANSFORM(NVL(ptva,0)) + ' id_jtva=' + TRANSFORM(NVL(id_jtva_coloana,0)) + ' taxcode=' + TRANSFORM(NVL(taxcode,0)) + ' expl=[' + ALLTRIM(NVL(explicatie_tva,'')) + ']'
|
||||
ENDSCAN
|
||||
SELECT (lnSel)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
*-- structura reala a rul_temp (vezi ointroduceri.vc2:11030 si test_adauga_repere_212.prg) -
|
||||
*-- GridArt e legat de rul_temp prin RecordSource inca din Init, deci trebuie sa existe cu
|
||||
*-- schema completa INAINTE de CREATEOBJECT('IMPORT_nota',...), altfel bind-ul grilei ramane
|
||||
*-- pe schema minimala creata de mock (goExecutor.oExecute) si formularul nu mai ajunge la Show().
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
FUNCTION CampRand
|
||||
LPARAMETERS tcTipRand, tnCota, tcCamp
|
||||
LOCAL lnSel, lnRec, lnVal
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
lnRec = IIF(EOF() OR BOF(), 0, RECNO())
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == tcTipRand AND ptva == tnCota
|
||||
lnVal = IIF(FOUND(), NVL(EVALUATE('introdc.' + tcCamp), 0), -1)
|
||||
IF BETWEEN(lnRec, 1, RECCOUNT('introdc'))
|
||||
GO lnRec
|
||||
ENDIF
|
||||
SELECT (lnSel)
|
||||
RETURN lnVal
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION CampRandC
|
||||
*-- varianta CampRand pentru campuri caracter (scc/ascc) - NVL numeric ar da eroare de tip.
|
||||
LPARAMETERS tcTipRand, tnCota, tcCamp
|
||||
LOCAL lnSel, lnRec, lcVal
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
lnRec = IIF(EOF() OR BOF(), 0, RECNO())
|
||||
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == tcTipRand AND ptva == tnCota
|
||||
lcVal = IIF(FOUND(), ALLTRIM(NVL(EVALUATE('introdc.' + tcCamp), '')), '?')
|
||||
IF BETWEEN(lnRec, 1, RECCOUNT('introdc'))
|
||||
GO lnRec
|
||||
ENDIF
|
||||
SELECT (lnSel)
|
||||
RETURN lcVal
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert3
|
||||
LPARAMETERS tcLabel, tuActual, tuExpected
|
||||
pnAsserts = pnAsserts + 1
|
||||
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
||||
pnPass = pnPass + 1
|
||||
DO TvLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
||||
ELSE
|
||||
DO TvLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TvErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO TvLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TvLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (226, 'ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE21CTB', 21, 227, 1, 5, 300704)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (227, 'TVA ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE21CTT', 21, 1, 6, 300704)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (232, 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE11CTB', 11, 233, 1, 7, 300705)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (233, 'TVA ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE11CTT', 11, 1, 8, 300705)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (236, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 237, 1, 39, 301205)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (237, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 40, 301205)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
||||
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
||||
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
||||
INSERT INTO (m.tcCursor) VALUES ('', '')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
||||
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
||||
RETURN 1
|
||||
ENDIF
|
||||
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
|
||||
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
|
||||
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
|
||||
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
|
||||
RETURN 1
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
INDEX ON id_jtva_coloana TAG id_jtva
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
cStartupMenu = ''
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
14
utile/Teste/achizitie_import/test_taxcode_scc_aliniere.ps1
Normal file
14
utile/Teste/achizitie_import/test_taxcode_scc_aliniere.ps1
Normal file
@@ -0,0 +1,14 @@
|
||||
# test_taxcode_scc_aliniere.ps1 - wrapper subtire peste harness-ul generic vfp_ui_harness.ps1.
|
||||
# aliniaza_tva_la_baza reface taxcode (SAFT) si comutarea scc/ascc 4427/creditor S pe randurile T
|
||||
# realiniate la familia S-ului - scenariu produs prin fluxul REAL (DVI+articole+dublu-click
|
||||
# Explicatie TVA+editare creditor prin grid), ca in test_repro_tva11_explicatie.prg.
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_taxcode_scc_aliniere.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_taxcode_scc_aliniere.prg') `
|
||||
-Steps @('factura_dvi','articole_adaugate','sync1_baseline','alegere_ce_4427','editare_creditor_s','revenire_fo','dblclick_fo','dblclick_ce','final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_taxcode_scc_aliniere') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_taxcode_scc_aliniere') `
|
||||
-StepTimeoutSec 220 `
|
||||
-ReadyTimeoutSec 220
|
||||
@@ -253,7 +253,7 @@ TRY
|
||||
|
||||
*-- F1 (ointroduceri.prg): index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -541,8 +541,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaExistaS212Si371
|
||||
|
||||
@@ -643,8 +643,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DumpIntrodc
|
||||
|
||||
@@ -249,7 +249,7 @@ TRY
|
||||
*-- documente (principala+secundara) pot pierde identitatea documentului "principal" dupa
|
||||
*-- ce S-urile sunt sterse/reasezate la coada de fiecare sparge_document().
|
||||
SELECT introdc
|
||||
INDEX ON STR(NVL(nr_doc,0),8) + ICASE(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + PADR(NVL(scd,''),10) TAG ord_doc
|
||||
INDEX ON STR(NVL(nr_doc,0),8) + ICASE(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + PADR(NVL(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
*----- introdc_sablon: perechea-sablon (B 371/401 + T 4426/401) pe care do_adauga_factura o
|
||||
@@ -817,8 +817,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DumpIntrodc
|
||||
|
||||
@@ -268,7 +268,7 @@ TRY
|
||||
|
||||
*-- F1 (ointroduceri.prg): index ord_doc INAINTE de CREATEOBJECT - vezi docs/testare-ui-vfp.md capcana p.
|
||||
SELECT introdc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
||||
SET ORDER TO ord_doc
|
||||
|
||||
DO DcLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
@@ -674,8 +674,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
|
||||
@@ -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"
|
||||
|
||||
54
utile/Teste/raport_teste.ps1
Normal file
54
utile/Teste/raport_teste.ps1
Normal file
@@ -0,0 +1,54 @@
|
||||
# raport_teste.ps1 - sinteza rularilor dintr-un folder de teste: afiseaza DOAR esecurile + un total.
|
||||
# Regula din COMUN\docs\orchestrare-subagenti.md: orchestratorul nu citeste log-uri brute.
|
||||
# Tabelul complet (-Tot) se citeste o singura data, la baseline.
|
||||
#
|
||||
# powershell -ExecutionPolicy Bypass -File raport_teste.ps1 -Dir <folder> [-Tot] [-Baseline <fisier>]
|
||||
#
|
||||
# -Baseline: fisier salvat anterior cu -Tot; iesirea marcheaza NOU fata de baseline
|
||||
# (adica regresie) vs. esec preexistent.
|
||||
param(
|
||||
[string]$Dir = (Join-Path $PSScriptRoot 'achizitie_import'),
|
||||
[switch]$Tot,
|
||||
[string]$Baseline
|
||||
)
|
||||
|
||||
$vechi = @{}
|
||||
if ($Baseline -and (Test-Path $Baseline)) {
|
||||
foreach ($ln in Get-Content $Baseline) {
|
||||
if ($ln -match '^\s*(\S+?)\s+PASS=(\d+)\s+FAIL=(\d+)') { $vechi[$Matches[1]] = [int]$Matches[3] }
|
||||
}
|
||||
}
|
||||
|
||||
$rez = @()
|
||||
foreach ($lg in (Get-ChildItem $Dir -Filter '*_log.txt' -Recurse -ErrorAction SilentlyContinue | Sort-Object Name)) {
|
||||
$t = Get-Content $lg.FullName -Encoding Default -ErrorAction SilentlyContinue
|
||||
if (-not $t) { continue }
|
||||
$nume = $lg.BaseName -replace '_log$', ''
|
||||
$pass = @($t | Select-String -Pattern '^\s*PASS').Count
|
||||
$fail = @($t | Select-String -Pattern '^\s*(FAIL|BUG)\b' | Where-Object { $_.Line -notmatch '^\s*FAIL asteptat' })
|
||||
$rez += [pscustomobject]@{
|
||||
Nume = $nume; Pass = $pass; Fail = $fail.Count
|
||||
Linii = $fail | ForEach-Object { $_.Line.Trim() }
|
||||
Varsta = [int]((Get-Date) - $lg.LastWriteTime).TotalMinutes
|
||||
}
|
||||
}
|
||||
|
||||
$ok = @($rez | Where-Object { $_.Fail -eq 0 }).Count
|
||||
$ko = @($rez | Where-Object { $_.Fail -gt 0 })
|
||||
|
||||
if ($Tot) {
|
||||
foreach ($r in $rez) { "{0,-34} PASS={1,-4} FAIL={2,-3} varsta={3}min" -f $r.Nume, $r.Pass, $r.Fail, $r.Varsta }
|
||||
''
|
||||
}
|
||||
|
||||
"$ok OK, $($ko.Count) FAIL (din $($rez.Count) rulari)"
|
||||
foreach ($r in $ko) {
|
||||
$eticheta = ''
|
||||
if ($vechi.Count -gt 0) {
|
||||
if ($vechi.ContainsKey($r.Nume) -and $vechi[$r.Nume] -ge $r.Fail) { $eticheta = ' [preexistent]' }
|
||||
else { $eticheta = ' [NOU - REGRESIE]' }
|
||||
}
|
||||
" {0} ({1} esecuri){2}" -f $r.Nume, $r.Fail, $eticheta
|
||||
foreach ($x in $r.Linii) { ' ' + $x }
|
||||
}
|
||||
if ($ko.Count -eq 0) { ' (nimic de raportat)' }
|
||||
@@ -130,17 +130,26 @@ 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Clear-Dir $SyncDir
|
||||
Clear-Dir $ShotsDir
|
||||
|
||||
# 1) Precompilare izolata (proces copil complet, ca sa nu otraveasca sesiunea de lansare).
|
||||
# -WindowStyle Hidden pe consola powershell copil (sigur - e consola, nu GUI VFP).
|
||||
Write-Host "Precompilez .fxp (izolat): $Precompile -Prg $TestPrg"
|
||||
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
|
||||
Stop-VfpProprii $TestDir
|
||||
Start-Sleep -Milliseconds 500
|
||||
$pc = Start-Process powershell -WindowStyle Hidden -ArgumentList @('-ExecutionPolicy','Bypass','-File', "`"$Precompile`"", '-Prg', "`"$TestPrg`"") -Wait -PassThru
|
||||
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." }
|
||||
|
||||
@@ -175,7 +184,7 @@ foreach ($try in 1..8) {
|
||||
if ($started) { break }
|
||||
Write-Warning "Incercarea ${try}: testul nu a scris START in 30s (instanta moarta); relansez."
|
||||
if ($proc -and -not $proc.HasExited) { try { $proc.Kill() } catch {} }
|
||||
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
|
||||
Stop-VfpProprii $TestDir
|
||||
Start-Sleep -Milliseconds 1500
|
||||
$hwnd = [IntPtr]::Zero
|
||||
}
|
||||
@@ -218,5 +227,5 @@ if ($ok) {
|
||||
}
|
||||
Start-Sleep -Milliseconds 800
|
||||
if ($proc -and -not $proc.HasExited) { try { $proc.Kill() } catch {} }
|
||||
Get-Process vfp9 -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
|
||||
Stop-VfpProprii $TestDir
|
||||
Write-Host "GATA. Screenshots in $ShotsDir"
|
||||
|
||||
Reference in New Issue
Block a user