commit fab869990df84ae9b40df3d9aeee89ca417af401 Author: Marius Mutu Date: Wed Jun 10 16:01:00 2026 +0300 Initial commit — sursa ROAACNPRO Co-Authored-By: Claude Sonnet 4.6 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe5663c --- /dev/null +++ b/.gitignore @@ -0,0 +1,62 @@ +# Visual FoxPro - fisiere compilate +*.fxp +*.mpx + +# Visual FoxPro - backup-uri +*.bak +*.BAK +*.TBK + +# Visual FoxPro - fisiere memo pereche (binare generate automat) +*.pjt +*.PJT +*.sct +*.SCT +*.vct +*.VCT +*.frt +*.FRT +*.lbt +*.LBT +*.mnt +*.MNT + +# Visual FoxPro - meniuri generate (din .mnx) +*.mpr +*.MPR + +# Visual FoxPro - log-uri si erori +*.ERR +*.err +log.txt + +# Visual FoxPro - fisiere temporare +*.tmp +*.TMP +*.dct +*.DCT + +# Executabile compilate +*.exe +*.EXE + +# SVN (proiectul foloseste SVN, nu git, pentru COMUN) +.svn/ + +# COMUN este gestionat separat prin SVN +COMUN/ + +# Windows +*.lnk +Thumbs.db +Desktop.ini +bash.exe.stackdump + +# FoxPro runtime index-uri auto-generate (pastrate doar daca sunt sursa) +# Comenteaza liniile de mai jos daca .cdx/.idx sunt fisiere sursa intentionate +# *.cdx +# *.idx +FoxyPreviewer_Emails.CDX +FoxyPreviewer_Emails.DBF +FoxyPreviewer_Emails.FPT +PACK_FACTURARE.pck diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..8716aa2 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,131 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## What this is + +ROAACNPRO is a **Visual FoxPro 9** desktop application (Romanian-language) for port/lock +operations billing on the Danube. It invoices the service types defined in +`Include/roaacnpro.h`: `TRANZIT` (transit), `CHEIAJ` (wharfage), `APA` (water), `CHIRII` +(rentals), `PILOTAJ` (pilotage), `PENALITATI` (penalties), `ALTE`/`DIVERSE` (other). It is one +member of the larger "ROA" suite (ROAGEST, ROACONT, ROACASA, ROADEF, etc.) and reads vessel/ +voyage/lock data from the external **RORIS Oracle** system. + +The code, comments, menus, and changelog are all in Romanian — match that language when editing +user-facing strings, comments, and changelog entries. + +## Build, run, version control + +- **Build/run requires the Visual FoxPro 9 IDE on Windows.** There is no command-line build. + Open `roaacnpro.pjx` in the VFP IDE and use *Build > Build Executable* to produce + `roaacnpro.exe`. The startup program is `Programe/roaacnpro.prg` (set as the project main). +- **`.prg` files are source; `.fxp` are compiled, `.bak` are backups.** Edit the `.prg`. The + `.scx/.sct` (forms), `.vcx/.vct` (class libraries), `.frx/.frt` (reports), and `.mnx/.mpr` + (menus) are VFP binary/generated artifacts — **edit them in the VFP IDE, not by hand.** `.mpr` + is GENMENU-generated from `.mnx`; never hand-edit `.mpr`. +- **Version control is Subversion** (`.svn/`), not git. `COMUN/` is its own SVN working copy. +- **`config.fpw`** sets the runtime environment (CODEPAGE 1252, `EXCLUSIVE=OFF`, `SAFETY=OFF`, + `MULTILOCKS=ON`). Don't enable SAFETY — the code relies on silent overwrite. +- The compiler error log is `roaacnpro.ERR`; the runtime log is `log.txt`. Many entries in + `roaacnpro.ERR` are benign cross-references resolved at runtime from `COMUN` libraries. + +## The COMUN shared framework + +`COMUN/` (and the sibling `..\COMUNROA\`) is **shared, framework-level code used by every ROA +app** — it is not specific to ROAACNPRO. Treat it as a vendored library: + +- A change in `COMUN/` affects all ROA applications. Prefer making app-specific changes in this + repo's top-level `Programe/`, `Clase/`, `Ferestre/`, `Rapoarte/`, `Meniuri/` directories. + Only touch `COMUN/` when the fix genuinely belongs to the shared framework. +- `SET PATH` (see `Programe/roaacnpro.prg` ~line 37) makes `COMUN\CLASE`, `COMUN\FERESTRE`, + `COMUN\PROGRAME`, `COMUN\RAPOARTE`, and the `COMUN\UTILE\*` helper libraries (calendar, ctl32, + hpdf PDF, web/HTTP, nfjson, nfxml, excel, GridExtras) resolvable by bare filename. So + `SET PROCEDURE TO email.prg` resolves to `COMUN\PROGRAME\email.prg`. + +## Application architecture + +Startup flow (`Programe/roaacnpro.prg`): + +1. Sets `gcAppPath`, builds `gcComunPath`, `SET PATH`, `SET PROCEDURE TO roa.prg`. +2. `goApp = CreateObject("oApp")` — `oApp` is a thin subclass of **`RoaApp`** + (`COMUN/programe/roa.prg`, ~1200 lines). This is the application object and the backbone of + the whole framework. +3. `goApp.initializeaza(...)` runs an ordered `initializeaza*` pipeline: program check, read + login params, Win32 declares, env, paths, class libs, procedures, settings ini, **security** + (Oracle host/credentials, decrypted from `roa_security.xml`), report previewer, locale, + variables, and global objects. +4. `goApp.lanseazaAplicatie()` shows `_screen`, runs the startup menu + `fundal.scx` shell form. +5. `READ EVENTS` — VFP event loop. `onShutDown` handles exit. + +**App-specific overrides** live in `oApp` at the bottom of `Programe/roaacnpro.prg`: the empty +hook methods `initializeazaAlteClassLib` / `initializeazaAlteProceduri` are where this app loads +its own class libraries (`oacnpro.vcx`, `ofacturare_comun.vcx`, `serii_numere.vcx`, …) and +procedure files (`proceduri_acnpro.prg`, `ofacturare.prg`, `xmlefactura.prg`, …). When adding a +new class library or procedure file to the app, register it in one of these two methods — that +is the canonical extension point. + +### Globals convention + +The framework promotes the `RoaApp` properties into **public global variables** in +`initializeazaVariabileGlobale` / `initializeazaObiecteGlobale`. These are used pervasively +throughout the codebase: + +- `goApp` (the app object), `goConn`/`goExecutor` (Oracle connection + SQL executor), + `goLog`/`poLog` (logger), `goCalendar`, `goExport`, `goFundal` (shell form), `goFirma`, + `goUtilizator`. +- `gcS` = Oracle schema, `gnIdFirma`, `gnIdUtil`, `gnAn`/`gnLuna` (working year/month), + `gcAppPath`, `gcDirMare` (suite root), `gcComunPath`. +- `g`-prefix = global, `gc`/`gn`/`gl` = char/numeric/logical, `m.` = memory-variable scoping. + +### Data layer + +- Backend is **Oracle**, reached via ODBC/SQL pass-through through `goConn`/`goExecutor`. Run + queries with `SQLEXEC()` against the connection handle; results come back as VFP cursors. +- `database.txt` documents the Oracle setup: it creates **synonyms** (`ips_voyages`, + `ips_berthings`, `ips_cargoes`, …) into the external `roris` schema and `GRANT`s to the app + user. The `ips_*` tables are RORIS source data; `ips_*_vanzari` and the app's own tables hold + billing data. `versiune_db.txt` tracks the DB schema version. +- App tables and report cursors carry Romanian/domain names (`tranzit`, `cheiaj`, `factura`, + `recapitulatie`, `tarife`, `contracte`). + +## Domain quick reference + +- **Service-type constants** are in `Include/roaacnpro.h` (string `TIP_*` and numeric `NTIP_*`, + e.g. `NTIP_TRANZIT 0`, `NTIP_CHEIAJ 1`). These same defines are repeated at the top of + `Programe/proceduri_acnpro.prg`. +- **`Programe/proceduri_acnpro.prg`** — core billing procedures (`factura_salvare_db`, + `calcul_cheiaj`, `salvare_cheiaj`, `make_factura_penalitati`, TVA/VAT handling, …). The file + header is an append-only dated change journal; follow that style when adding procedures. +- **`docs/facturare.md`** — read this first for any **invoice/billing change**: it maps the + invoice flow (form `frm_factura` → `factura_salvare_db` → `PACK_FACTURARE.pck` → reports/list), + the `crsFactura` structure, the VAT formulas, and which files to touch for a given task. Key + rule: `PACK_FACTURARE.pck` is the source of truth; the `frm_factura` preview must mirror its + formulas, and reports/list only read package-computed values. +- **`Programe/proceduri_acnpro_rapoarte.prg`** — report-generation procedures feeding the + `Rapoarte/*.frx` layouts (factura, recapitulatie_cheiaj/tranzit/penalitati, registru tranzit). +- **`Programe/importroris*.prg`** + `importroris.pjx` — a *separate* small executable + (`importroris.exe`) that imports voyage/lock data from RORIS. `verificare_roris_ecluze.*` is + another standalone verification tool. These build independently of the main project. +- **VAT/TVA** is first-class and time-sensitive: the app supports multiple concurrent VAT-rate + regimes (e.g. 19/9/5% historical vs. 21/11% from 2025-08-01). Be careful that billing logic + selects rates by the document's period, not "current" rates. + +## Changelog & release convention + +`changelog_roaacnpro.txt` is the user-facing release log. **Newest entry goes at the top**, in +this exact HTML-comment block format (Romanian, `DD/MM/YYYY`): + +``` + +``` + +Tags: `:nou:` (new feature), `:modificare:` (change), `:eroare:` (bug fix). Bump the +`MAJOR.MINOR.PATCH` version when you add an entry. The app auto-updates from +`https://www.romfast.ro/...` via `COMUN/programe/actualizare_aplicatie.prg`; the runtime reads +its version from the built `.exe`. diff --git a/Clase/oacnpro.vcx b/Clase/oacnpro.vcx new file mode 100644 index 0000000..dedff4f Binary files /dev/null and b/Clase/oacnpro.vcx differ diff --git a/Clase/ofundal_facturare.vcx b/Clase/ofundal_facturare.vcx new file mode 100644 index 0000000..a8e0f2e Binary files /dev/null and b/Clase/ofundal_facturare.vcx differ diff --git a/Ferestre/fundal.scx b/Ferestre/fundal.scx new file mode 100644 index 0000000..0e206fe Binary files /dev/null and b/Ferestre/fundal.scx differ diff --git a/Ferestre/importroris.scx b/Ferestre/importroris.scx new file mode 100644 index 0000000..b3bd668 Binary files /dev/null and b/Ferestre/importroris.scx differ diff --git a/Grafice/cheiaj.png b/Grafice/cheiaj.png new file mode 100644 index 0000000..f0b3e0c Binary files /dev/null and b/Grafice/cheiaj.png differ diff --git a/Grafice/f1.jpg b/Grafice/f1.jpg new file mode 100644 index 0000000..3bff03e Binary files /dev/null and b/Grafice/f1.jpg differ diff --git a/Grafice/f2.jpg b/Grafice/f2.jpg new file mode 100644 index 0000000..8e53539 Binary files /dev/null and b/Grafice/f2.jpg differ diff --git a/Grafice/f3.jpg b/Grafice/f3.jpg new file mode 100644 index 0000000..21fd7cd Binary files /dev/null and b/Grafice/f3.jpg differ diff --git a/Grafice/icon_cheiaj1.png b/Grafice/icon_cheiaj1.png new file mode 100644 index 0000000..83d3b84 Binary files /dev/null and b/Grafice/icon_cheiaj1.png differ diff --git a/Grafice/icon_cheiaj2.png b/Grafice/icon_cheiaj2.png new file mode 100644 index 0000000..c1138cb Binary files /dev/null and b/Grafice/icon_cheiaj2.png differ diff --git a/Grafice/icon_registru1.png b/Grafice/icon_registru1.png new file mode 100644 index 0000000..2b2042d Binary files /dev/null and b/Grafice/icon_registru1.png differ diff --git a/Grafice/icon_registru2.png b/Grafice/icon_registru2.png new file mode 100644 index 0000000..5fd13c0 Binary files /dev/null and b/Grafice/icon_registru2.png differ diff --git a/Grafice/icon_tranzit1.png b/Grafice/icon_tranzit1.png new file mode 100644 index 0000000..7ac5d78 Binary files /dev/null and b/Grafice/icon_tranzit1.png differ diff --git a/Grafice/icon_tranzit2.png b/Grafice/icon_tranzit2.png new file mode 100644 index 0000000..bcf5a69 Binary files /dev/null and b/Grafice/icon_tranzit2.png differ diff --git a/Grafice/icon_utilitati1.png b/Grafice/icon_utilitati1.png new file mode 100644 index 0000000..0774927 Binary files /dev/null and b/Grafice/icon_utilitati1.png differ diff --git a/Grafice/icon_utilitati2.png b/Grafice/icon_utilitati2.png new file mode 100644 index 0000000..45b4b3a Binary files /dev/null and b/Grafice/icon_utilitati2.png differ diff --git a/Grafice/import_16.png b/Grafice/import_16.png new file mode 100644 index 0000000..7250870 Binary files /dev/null and b/Grafice/import_16.png differ diff --git a/Grafice/import_24.png b/Grafice/import_24.png new file mode 100644 index 0000000..fe3c533 Binary files /dev/null and b/Grafice/import_24.png differ diff --git a/Grafice/import_32.png b/Grafice/import_32.png new file mode 100644 index 0000000..f29f381 Binary files /dev/null and b/Grafice/import_32.png differ diff --git a/Grafice/import_roris.ico b/Grafice/import_roris.ico new file mode 100644 index 0000000..c5ed6db Binary files /dev/null and b/Grafice/import_roris.ico differ diff --git a/Grafice/registru.png b/Grafice/registru.png new file mode 100644 index 0000000..71d021e Binary files /dev/null and b/Grafice/registru.png differ diff --git a/Grafice/roaacnpro.ico b/Grafice/roaacnpro.ico new file mode 100644 index 0000000..93ba995 Binary files /dev/null and b/Grafice/roaacnpro.ico differ diff --git a/Grafice/roafacturare.jpg b/Grafice/roafacturare.jpg new file mode 100644 index 0000000..a426462 Binary files /dev/null and b/Grafice/roafacturare.jpg differ diff --git a/Grafice/tranzit.png b/Grafice/tranzit.png new file mode 100644 index 0000000..41ded12 Binary files /dev/null and b/Grafice/tranzit.png differ diff --git a/Grafice/utilitati.png b/Grafice/utilitati.png new file mode 100644 index 0000000..84c5799 Binary files /dev/null and b/Grafice/utilitati.png differ diff --git a/Include/roaacnpro.h b/Include/roaacnpro.h new file mode 100644 index 0000000..79ba20f --- /dev/null +++ b/Include/roaacnpro.h @@ -0,0 +1,17 @@ +#Define TIP_TRANZIT 'TRANZIT' +#Define TIP_CHEIAJ 'CHEIAJ' +#Define TIP_APA 'APA' +#Define TIP_CHIRII 'CHIRII' +#Define TIP_PILOTAJ 'PILOTAJ' +#Define TIP_ALTE 'ALTE' +#Define TIP_PENALITATI 'PENALITATI' +#Define TIP_DIVERSE 'DIVERSE' + +#Define NTIP_TRANZIT 0 +#Define NTIP_CHEIAJ 1 +#Define NTIP_APA 2 +#Define NTIP_CHIRII 3 +#Define NTIP_PILOTAJ 4 +#Define NTIP_ALTE 5 +#Define NTIP_PENALITATI 6 +#Define NTIP_DIVERSE 9 diff --git a/Meniuri/roaacnpro.mnx b/Meniuri/roaacnpro.mnx new file mode 100644 index 0000000..99ef535 Binary files /dev/null and b/Meniuri/roaacnpro.mnx differ diff --git a/Meniuri/situatii_venituri.mnx b/Meniuri/situatii_venituri.mnx new file mode 100644 index 0000000..d40d69f Binary files /dev/null and b/Meniuri/situatii_venituri.mnx differ diff --git a/Meniuri/tarife.mnx b/Meniuri/tarife.mnx new file mode 100644 index 0000000..c6060bd Binary files /dev/null and b/Meniuri/tarife.mnx differ diff --git a/Programe/importroris_main.prg b/Programe/importroris_main.prg new file mode 100644 index 0000000..8b01365 --- /dev/null +++ b/Programe/importroris_main.prg @@ -0,0 +1,49 @@ +Lparameters tcOptiune, tnZile +* tcOptiune: s (lanseaza import silentios) +* tnZile: nnn (numarul de zile pentru import) + +Set Century On +Set Date Dmy +Set Exact On +Set Ansi On +Set Deleted On +Set Safety Off +Set Deleted On +Set NullDisplay To '' + +PRIVATE gcMainPath, gcLogStamp +gcMainPath = UPPER(ADDBS(JUSTPATH(SYS(16,0)))) +gcMainPath = STRTRAN(m.gcMainPath,'PROGRAME\', '') +gcLogStamp = SYS(2015) +lcPath = gcMainPath + 'ferestre\;' + +SET DEFAULT TO (m.gcMainPath) +SET PATH TO (m.lcPath) ADDITIVE + +Local lcOptiune, lnOptiune, llSilentios, lnZile +lcOptiune = Lower(Alltrim(Transform(m.tcOptiune))) +llSilentios = (m.lcOptiune = 's') +lnZile = Int(Val(Transform(m.tnZile))) +lnZile = Iif(Empty(m.lnZile), 30, m.lnZile) + + +WriteLog('Start import RORIS silentios: ' + TRANSFORM(m.llSilentios) + ', zile: ' + ALLTRIM(TRANSFORM(m.lnZile))) + +If m.llSilentios + lnOptiune = 1 + Do importroris_proceduri.prg With llSilentios, m.lnOptiune, m.lnZile +Else + Do Form importroris +ENDIF + +WriteLog('End import RORIS silentios: ' + TRANSFORM(m.llSilentios) + ', zile: ' + ALLTRIM(TRANSFORM(m.lnZile))) +WriteLog('') + +PROCEDURE WriteLog + LPARAMETERS tcMesaj + lcMesaj = m.gcLogStamp + ' ' + TRANSFORM(DATETIME()) + ' ' + TRANSFORM(m.tcMesaj) + CHR(13) + lcFile = m.gcMainPath + 'log.txt' + IF FILE(m.lcFile) + STRTOFILE(m.lcMesaj, m.lcFile, .T.) + ENDIF +ENDPROC \ No newline at end of file diff --git a/Programe/importroris_proceduri.prg b/Programe/importroris_proceduri.prg new file mode 100644 index 0000000..0ca6683 --- /dev/null +++ b/Programe/importroris_proceduri.prg @@ -0,0 +1,191 @@ +Lparameters llSilentios, lnOptiune, lnZile + + +If Empty(m.lnOptiune) + lnOptiune = xmenu('Creeaza job import RORIS;Verifica log') +Endif +If Empty(m.lnOptiune) + Return +Endif + +lnHandle = SQLConnect('ROA', 'ACN', 'ROMFASTSOFT') + +If m.lnHandle <= 0 + Aerror(laEroare) + WriteLog(laEroare(3)) + IF !m.llSilentios + Messagebox(laEroare(3)) + ENDIF + Return +Endif + +Do Case + Case m.lnOptiune = 1 + IF EMPTY(m.lnZile) + lcZile = Inputbox('Numar zile de tranzit pentru import (implicit 30)', 'Nr zile', '30') + lnZile = Iif(!Empty(Val(m.lcZile)), Val(m.lcZile), 30) + ENDIF + + Private ptLastGenerationTime + ptLastGenerationTime = Date() - m.lnZile + + If m.llSilentios OR (Messagebox('Se lanseaza importul pentru tranzitele >= ' + Ttoc(m.ptLastGenerationTime) + '?',4+32,_Screen.Caption) = 6) + lcSql = [begin pack_acn_import.import_roris_job(?ptLastGenerationTime); end;] + lnSucces = SQLExec(m.lnHandle, m.lcSql) + If m.lnSucces > 0 + WriteLog('S-a creat job-ul pentru import') + + IF !m.llSilentios + Messagebox('S-a creat job-ul pentru import',0+64,_Screen.Caption,10) + ENDIF + Else + Aerror(laEroare) + WriteLog(laEroare(3)) + IF !m.llSilentios + Messagebox(laEroare(3)) + ENDIF + Endif + Endif + Case m.lnOptiune = 2 + lcSql = [select to_char(substr(info,1,200)) as info, dataora from info where locatia = 'import_roris' and trunc(dataora) = trunc(sysdate) order by dataora desc] + lnSucces = SQLExec(m.lnHandle, m.lcSql, 'crsImportTemp') + If m.lnSucces > 0 + CREATE CURSOR crsImport (info c(200) null, dataora T) + SELECT crsImport + APPEND FROM DBF('crsImportTemp') + + Select crsImport + GO TOP + BROWSE TITLE 'LOG IMPORT (ESC pentru iesire)' PREFERENCE IMPORT + USE IN (SELECT('crsImportTemp')) + USE IN (SELECT('crsImport')) + Else + Aerror(laEroare) + Messagebox(laEroare(3)) + ENDIF + + Case m.lnOptiune = 3 + TEXT TO lcsql NOSHOW +SELECT LOG_ID, + CAST(LOG_DATE AS DATE) as log_date, + JOB_NAME, + STATUS, + CAST(actual_start_date AS DATE) as start_date, + to_char(RUN_DURATION) AS duration, + additional_info as errors + FROM USER_SCHEDULER_JOB_RUN_DETAILS + WHERE TRUNC(LOG_DATE) >= TRUNC(SYSDATE) - 7 + ORDER BY LOG_ID DESC + ENDTEXT + + lnSucces = SQLExec(m.lnHandle, m.lcSql, 'crsJobTemp') + If m.lnSucces > 0 + CREATE CURSOR crsJob (log_id I, log_date T null, job_name C(200) null, status C(20) null, start_date T null, duration C(30) null, errors C(250) null) + SELECT crsJob + APPEND FROM DBF('crsJobTemp') + + Select crsJob + GO TOP + BROWSE TITLE 'Stare joburi import (ESC pentru iesire)' PREFERENCE JOB + USE IN (SELECT('crsJobTemp')) + USE IN (SELECT('crsJob')) + Else + Aerror(laEroare) + Messagebox(laEroare(3)) + ENDIF + + +Endcase + +SQLDisconnect(m.lnHandle) + + + +*------------------------------------------- +* Function...: Xmenu +* Author.....: MARTIN +* Date.......: 04/06/1997 +* Notes......: Based on an idea from Steve Zimmelman for FoxPro 2.x +* Parameters.: tcItems = Semicolon-separated String with the various options +* ...........: tnBar = Initially selected item (default=1) +* Returns....: Selected item number +* See Also...: PROMPT() [FoxPro Native] +* +Procedure xmenu + Lparameters TCITEMS, TNBAR + + Local NITEMCOUNT, AITEMS, X, NROW, NCOL, CTITLE, NLASTPOS, CCOLOR, AITEMS + + Private CPOPMENU, NSELECT && They flow into the GetChoice internal procedure + + If Pcount() < 2 + TNBAR = 1 + Endif + + Activate Screen + + * Parse every item + * + m.NITEMCOUNT = Occurs( ';', TCITEMS ) + 1 + Dimen AITEMS[ m.nItemCount ] + m.NLASTPOS = 1 + + For m.X = 1 To m.NITEMCOUNT + + If m.X < m.NITEMCOUNT + + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( At( ';', m.TCITEMS, m.X ) - 1 ) - m.NLASTPOS + 1 ) + Else + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( Len( m.TCITEMS ) - m.NLASTPOS ) + 1 ) + Endif + + If AITEMS[ m.x ] # "\-" + + AITEMS[ m.x ] = Allt( AITEMS[ m.x ] ) + Endif + + m.NLASTPOS = At( ';', m.TCITEMS, m.X ) + 1 + Next + + * Calculates the mouse pointer position + * + m.NROW = Iif( Mrow() + m.NITEMCOUNT < Srow(), Mrow() - 1, Srow() - m.NITEMCOUNT ) + m.NCOL = Iif( Mcol() + 10 < Scol(), Mcol() - 3, Mcol() - 13 ) + + * Gets an unique name for the pop-up + * + m.CPOPMENU = 'M' + Sys(3) + "_" + + Define Popup ( m.CPOPMENU ) SHORTCUT Relative From NROW, NCOL + + For m.X = 1 To m.NITEMCOUNT + + Define Bar m.X Of ( m.CPOPMENU ) Prompt AITEMS[ m.x ] + Next + + m.CANS = "" + m.NSELECT = 0 + Clear Type + + On Selection Popup ( m.CPOPMENU ) Do GETCHOICE + + Activate Popup ( m.CPOPMENU ) Bar TNBAR + + Pop Key + Release Popup ( m.CPOPMENU ) + + Return Iif( Lastkey() = 27, 0, m.NSELECT ) + +Endproc && XMENU + +*-------------------- +Procedure GETCHOICE + + m.NSELECT = Bar() + + Deactivate Popup ( m.CPOPMENU ) + +Endproc && GETCHOICE + diff --git a/Programe/ovariabile_globale.prg b/Programe/ovariabile_globale.prg new file mode 100644 index 0000000..45aebbd --- /dev/null +++ b/Programe/ovariabile_globale.prg @@ -0,0 +1 @@ +**OVARIABILE_GLOBALE.PRG \ No newline at end of file diff --git a/Programe/proceduri_acnpro.prg b/Programe/proceduri_acnpro.prg new file mode 100644 index 0000000..137a849 --- /dev/null +++ b/Programe/proceduri_acnpro.prg @@ -0,0 +1,6091 @@ +#Define TIP_TRANZIT 'TRANZIT' +#Define TIP_CHEIAJ 'CHEIAJ' +#Define TIP_APA 'APA' +#Define TIP_CHIRII 'CHIRII' +#Define TIP_PILOTAJ 'PILOTAJ' +#Define TIP_ALTE 'ALTE' +#Define TIP_PENALITATI 'PENALITATI' +#Define TIP_DIVERSE 'DIVERSE' + +#Define NTIP_TRANZIT 0 +#Define NTIP_CHEIAJ 1 +#Define NTIP_APA 2 +#Define NTIP_CHIRII 3 +#Define NTIP_PILOTAJ 4 +#Define NTIP_ALTE 5 +#Define NTIP_PENALITATI 6 +#Define NTIP_DIVERSE 9 + +*!* 29.10.2019 +*!* marius.mutu +*!* factura_salvare_db - initializeaza_date_factura(tip_factura, id_beneficiar) + +*!* 08.01.2020 +*!* marius.mutu +*!* vizualizare_tarife_contracte - se salveaza ctr_articole.valoare + +*!* 08.01.2020 +*!* marius.mutu +*!* STERG_CHEIAJ - corectare eroare la stergere din IPS_BERTHING_DETAILS_VANZARI - se stergeau toate inregistrarile +*!* vizualizare_tranzit, calcul_cheiaj, salvare_cheiaj, listeaza_recapitulatie_cheiaj - completare ips_voyages_vanzari.document + +*!* 09.01.2020 +*!* marius.mutu +*!* make_cheiaj_prestatii + id_locatia, locatia + +*!* GetObiectTVA - + tnIdJtvaColoana +*!* make_factura_penalitati - explicatia tva Neimpozabil (id_jtva_coloana = 12) + +*!* completeaza_actactan - completez partener pentru contul 419 (4111 = 419) + +*!* 03.02.2020 +*!* completeaza_regdoc_tranzit, vizualizare_tranzit_nave se tine cont ca ips_voyage_locks (ecluzarile) este acum defalcat pe membrii convoi, nu doar pe convoi + +*!* 19.03.2020 +*!* salvare_cheiaj - se salveaza numele navei suprascris de utilizator daca difera de numele din ips_vessels +*!* pentru facturarea convoiului generic "FARA" DECLARATIE + +*!* calcul_penalitati2 - s-a inclus vanzari.tip +*!* + completeaza_regdoc_penalitati - defalcare cregdoc penalitati pe locatii si articole pentru inregistrarea in contabilitate +*!* make_factura_penalitati - se completeaza data referinta in denumirea articolului + +*!* 13.04.2020 +*!* marius.mutu +*!* + CopyDeclCdtPdf - copiere declaratii comandant pdf in directorul cu facturi + +*!* 01.06.2020 +*!* completeaza_actactan - centralizare note tva pe cote tva. pentru ca la defalcarea facturilor de tranzit pe camere/sasuri se generau tva-uri individuale cu aceeasi cota, am centralizat sumele tva pe cote + +*!* 17.06.2020 +*!* completeaza_actactan - am corectat id_jtva_coloana pentru notele de TVA. Au ramas gresit Livrare in loc de TVA livrare de la modificarea din 01.06.2020 + +*!* 06.07.2020 +*!* marius.mutu +*!* completeaza_regdoc_cheiaj - in cRegdoc se salva doar ultimul voiaj, in cazul incare era o factura pentru mai multe istorice de cheiaj + + +*!* 22.09.2020 +*!* calcul_tranzit: am calculat tarifele la capacitatea totala a convoiului, nu numai la capacitatea navelor alese pentru factura curenta +*!* listeaza_recapitulatie_tranzit: +*!* Selectez capacitatea totala a convoiului, nu numai a navelor de pe factura curenta. +*!* Este posibil sa fac facturi catre clienti diferiti pe un singur convoi. + +*!* 09.10.2020 +*!* listeaza_recapitulatie_tranzit: +*!* Am luat capacitatea totala de pe toate facturile de pe un convoi, dar distinct nave. +*!* Era posibil sa am si facturi de stornare si facturi refacute pe acelasi convoi si se duplica capacitatea + +*!* 09.02.2020 +*!* calcul_penalitati2 - afisez si facturile cu sold < 0 +*!* cerere Lacramioara Guta + +*!* 28.04.2021 +*!* listeaza_recapitulatie_tranzit +*!* calcul total capacitate convoi. tratare caz in care o factura este stornata si refacturata cu barje cu corectie de TCAP + +*!* 09.06.2021 +*!* calcul_penalitati_linie, calcul_penalitati2 +*!* corectie calcul zile penalitati pentru contractele cu perioada de gratie +*!* recalculare databaza pentru contractele cu perioada de gratie astfel incat, in luna in care se incheie perioada de gratie sa se factureze penalitati si pentru perioada de gratie + +*!* 01.10.2021 +*!* calcul_penalitati2 +*!* s-au inclus incasarile din toata baza de date in loc de luna curenta, daca calculul este facut fata de data scadenta in loc de luna anterioara + +*!* 27.03.2022 +*!* completare TaxCode SAFT in factura_salvare (crsFactura), factura_salvare_bd (vanzari_detalii), completeaza_actactan (actactan) + +*!* 10.01.2023 +*!* vizualizare_regdoc (registru documente pe locatii) + document2 (numarul istoric de stationare) + + +*!* 22.01.2024 +*!* make_factura - pentru pret negativ, se face cantitate negativa si pret pozitiv, pentru eFactura + +*!* 09.04.2024 +*!* salvare_tranzit - salvare ips_voyage_members_vanzari.marfa_country_id + +*!* 21.10.2024 +*!* factura_salvare_db - INITIALIZARE_dATE_FACTURA TIP_SAFT + +*!* 23.07.2025 +*!* factura_salvare_db - tratare taxcode = NULL + +Procedure vizualizare_regdoc + Private poRegdoc + poRegdoc = Null + + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + Text To lcSchema Noshow +id N(20), id_vanzare N(20), tip N(3), cTip C(50), id_articol N(12), articol C(100), id_locatia N(12), locatia C(50), id_valuta N(12), valuta C(20), id_client N(12), client C(70), id_contract N(12), contract C(50), pret N(18,4), curs N(12,4), cantitate N(18,4), valval N(18,4), valftva N(18,4), um C(20), document C(30), data D, document2 C(30), numar_act N(14), data_act D, ctdebitor C(10), ctaideb C(10), ctaedeb C(10), ctcreditor C(10), ctaicred C(10), ctaecred C(10), ctpideb C(10), ctapideb C(10), ctpicred C(10), ctapicred C(10) + Endtext + lcOrder = [data, id] + lcFiltru = [extract(year from data) * 12 + extract(month from data) = ?gnAn*12+?gnLuna] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + Text To lcSelect Noshow +select id, + id_vanzare, + tip, + ctip, + id_articol, + articol, + id_locatia, + locatia, + id_valuta, + valuta, + id_client, + client, + id_contract, + contract, + pret, + curs, + cantitate, + valval, + valftva, + um, + document, + data, + document2, + numar_act, + data_act, + ctdebitor, + ctaideb, + ctaedeb, + ctcreditor, + ctaicred, + ctaecred, + ctpideb, + ctapideb, + ctpicred, + ctapicred + from ips_vregdoc + Endtext + + gencursor('poRegDoc', 'crsRegdoc', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poRegdoc.ca_baza1.afisare() + loFrmRegdoc = Createobject("frm_registru") && oacnpro.vcx + loFrmRegdoc.Show(1) +Endproc && vizualizare_regdoc + +****************************************** +*** Vizualizare convoaie si date facturi +****************************************** +Procedure vizualizare_tranzit_facturi + Lparameters tnTip + * tnTip: 0 = TRANZIT, 1 = CHEIAJ + Private poConvoaie + poConvoaie = Null + + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + lcSchema = [] + lcOrder = [data_act, numar_act] + lcFiltru = [1=2] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = Iif(Pcount() = 0, [], [(tip IS NULL OR ] + Iif(Empty(m.tnTip), [tip=0], [tip=1]) + [)]) + + Text To lcSelect Noshow +select 0 as ales, + vv_id, + vz_id, + vye_id, + convoy_nam, + declaratio, + document, + generation, + origin, + destinatio, + indicativ, + client, + client_id, + contract_client, + beneficiar, + beneficiar_id, + total_fara_tva, + total_tva, + total_cu_tva, + numar_act, + serie_act, + data_act, + ctip_factura + from ips_vvanzari_voyages + Endtext + + gencursor('poConvoaie', 'crsConvoaie', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poConvoaie.ca_baza1.afisare() + loFrmConvoaie = Createobject("frm_tranzit_facturi", m.tnTip) && oacnpro.vcx + loFrmConvoaie.Show(1) +Endproc && vizualizare_tranzit_facturi + +****************************************** +*** Vizualizare convoaie, nave, date facturare +****************************************** +Procedure vizualizare_tranzit_nave + Lparameters tnTip + * tnTip: 1 = selectie din ips_vanzari_voyage_members, 2 = selectie din ips_vanzari_voyage_members_n + * 1 = nu calculeaza valori pe sasn/cameran + * 2 = calculeaza valori pe sasn/cameran, nu se mai foloseste, doar pentru verificari 01/2020-05/2020 + + Private poConvoaie + poConvoaie = Null + + Local lnTip + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + + lnTip = Iif(Empty(m.tnTip), 1, m.tnTip) + + lcSchema = [] + lcOrder = [data_act, numar_act, rn, indicativ] + lcFiltru = [1=2] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + Text To lcSelect Textmerge Noshow +select vmv_id, + vv_id, + client_id, + client, + contract_client, + client_ctr_id, + beneficiar_id, + tiprecap, + beneficiar, + intern, + vz_id, + serie_act, + numar_act, + data_act, + cuplat, + arm_id, + armator, + kmi, + kmf, + rte_id, + ruta, + convoy_nam, + declaratio, + generation, + vye_id, + aviz, + data_aviz, + origin, + destinatio, + vms_id, + vsl_id, + ctt_id, + dirty_tank, + rstart_id, + rfin_id, + distanta, + distanta_cdmn, + distanta_pamn, + contact, + indicativ, + nava_country, + nava_country_id, + lbd, + trn, + hp, + tcap, + tcap_conv, + procdiv, + vtp_id, + tip_nava, + vgrp_id, + grupa_nava, + marfa, + cant_marfa, + um_marfa, + gds_id, + grp_id, + grupa_marfa, + periculos, + corect, + procdist, + id_valuta, + valuta, + tarif, + cant, + um, + marfa_country, + marfa_country_id, + valval, + tvaval, + totval, + valftva, + valtva, + valctva, + curs, + agigea, + cernavoda, + navodari, + ovidiu, + agigea_data, + cernavoda_data, + navodari_data, + ovidiu_data, + agigea_sas1, + agigea_sas2, + agigea_sasn, + cernavoda_sas1, + cernavoda_sas2, + cernavoda_sasn, + ovidiu_c1, + ovidiu_c2, + ovidiu_cn, + navodari_c1, + navodari_c2, + navodari_cn, + agigea1_valoare, + agigea2_valoare, + agigean_valoare, + cernavoda1_valoare, + cernavoda2_valoare, + cernavodan_valoare, + ovidiu1_valoare, + ovidiu2_valoare, + ovidiun_valoare, + navodari1_valoare, + navodari2_valoare, + navodarin_valoare, + senal_cdmn1_valoare, + senal_pam1_valoare, + agigea_valoare, + cernavoda_valoare, + ovidiu_valoare, + navodari_valoare, + senal_cdmn_valoare, + senal_pam_valoare, + rn, + pvalftva + from <> + Endtext + + gencursor('poConvoaie', 'crsConvoaie', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poConvoaie.ca_baza1.afisare() + + loFrmConvoaie = Createobject("frm_tranzit_nave") && oacnpro.vcx + loFrmConvoaie.Show(1) +Endproc && vizualizare_tranzit_nave + + + +****************************************** +*** Registru Cheiaj Nave. Vizualizare convoaie, nave, date facturare +****************************************** +Procedure vizualizare_cheiaj_nave + Private poCheiaje + poCheiaje = Null + + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + + lcSchema = [] + lcOrder = [an,luna,data_act,numar_act,client,contract] + lcFiltru = [1=2] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + Text To lcSelect Textmerge Noshow +select an, + luna, + serie_act, + data_act, + numar_act, + client, + contract, + beneficiar, + total_fara_tva, + port, + declaratie, + document, + vas, + tip_vas, + grupa_vas, + dana, + ctip, + cant, + um, + tarif, + articol, + datai, + datap, + durata, + valftva, + valtva, + valctva, + nume_val, + curs, + valval, + tvaval, + totval, + cap, + trn, + lung, + cp, + lbd, + zi, + cap_val, + trn_val, + lung_val, + cp_val, + lbd_val, + zi_val + from ips_vanzari_cheiaje_members + Endtext + + gencursor('poCheiaje', 'crsCheiaje', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poCheiaje.ca_baza1.afisare() + + loFrmCheiaje = Createobject("frm_cheiaje_nave") && oacnpro.vcx + loFrmCheiaje.Show(1) +Endproc && vizualizare_cheiaj_nave + +****************************************** +*** Vizualizare convoaie si selectie unul sau mai multe in scopul facturarii +*** Se apeleaza din factura +****************************************** +Procedure vizualizare_tranzit + Lparameters tnTip + * tnTip: 0 = TRANZIT, 1 = CHEIAJ + + Private poConvoaie + poConvoaie = Null + + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + lcSchema = [] + lcOrder = [declaratio] + lcFiltru = [1=2] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + Text To lcSelect Noshow +select 0 as ales, + id, + vye_id, + generation, + vms_id, + convoy_nam, + declaratio, + notificati, + data_avizare, + notificat2, + avizare, + origin, + destinatio, + mtr_name, + state, + indicativ, + cast('' as Varchar2(50)) as document + from ips_vvoyages + Endtext + + gencursor('poConvoaie', 'crsConvoaie', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poConvoaie.ca_baza1.afisare() + loFrmConvoaie = Createobject("frm_tranzit", m.tnTip) && oacnpro.vcx + loFrmConvoaie.Show(1) + + llSucces = (m.gnButon = 1) + Return m.llSucces +Endproc && vizualizare_tranzit + +****************************************** +*** Vizualizare contracte si selectie unul sau mai multe in scopul facturarii +*** Se apeleaza din factura +*** De fapt primeste din factura id_ctr si lanseaza direct calcul_contract +****************************************** +Procedure vizualizare_contract + Lparameters tnIdCtr + Local llSucces + llSucces = calcul_contract(m.tnIdCtr) + + Return m.llSucces +Endproc && vizualizare_contract + + +Procedure vizualizare_penalitati + Lparameters tnTipCalcul, tnCalculZile + * tnTipCalcul: 1 (default) = incasari si sold; 2 = incasari; 3 = sold; 4 = evaluare + * tnCalculZile: 1 (default) = calcul zile fata de luna precedenta; 2 = fata de data scadenta + + + Private pdDataReferinta, pnCalculZile, pnTipCalcul, pl4118, plFacturate, plSterse + Local loPenalitati As "frm_penalitati" + Local loRec + Local lnZileProcent1, lnZileProcent2, lnPenalitati + + pdDataReferinta = Gomonth(Date(m.gnAn, m.gnLuna, 1), 1) - 1 + pnTipCalcul = Iif(Empty(m.tnTipCalcul), 1, m.tnTipCalcul) + pnCalculZile = Iif(Empty(m.tnCalculZile), 1, m.tnCalculZile) + pl4118 = .F. + plFacturate = .F. && se includ documentele (facturi, incasari) deja facturate? ex: daca se doreste stornarea si refacturarea penalitatilor + plSterse = .F. && se includ documentele sterse de utilizator + + Private pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru + Store "" To pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru + + Do make_contracte && crsContracte + Do make_valute && crsValute + + Use In (Select('crsCalculPenalitati')) + Use In (Select('crsClientiPenalitati')) + make_cCalculPenalitati() + make_cClientiPenalitati() + + Select crsCalculPenalitati + loPenalitati = Createobject("frm_penalitati") + loPenalitati.lEvaluare = .T. + loPenalitati.dDataReferinta = m.pdDataReferinta + If m.pnTipCalcul = 3 && evaluare + loPenalitati.lb_titlu_alb_b121.Caption = 'Penalitati - evaluare la ' + Dtoc(m.pdDataReferinta) + loPenalitati.grdPenalitati.cNrDoc.Visible = .F. + loPenalitati.grdPenalitati.cSuma.Header1.Caption = 'Sold restant' + loPenalitati.grdPenalitati.cDataDoc.Header1.Caption = 'Data referinta' + loPenalitati.cmd_Executa1.Visible = .F. + Endif + + loPenalitati.Show(1) + + Use In (Select('crsCalculPenalitati')) + Use In (Select('crsClientiPenalitati')) + + Return (m.gnButon = 1) +Endproc && vizualizare_penalitati + +Procedure configurare_articole_conturi + + Local loFrmConturi As "frm_configurare_articole_conturi" + Local lcSelectV, lcSql, lcSqlDelete, lcSqlInsert, lcSqlUpdate, llScris, llSucces, llSucces2 + Local lnModificat, lnRec + Private poRec + *:Global gnButon + + lcSelectV = Select() + + Do make_locatii && crsLocatii + + lcSql = [select id_articol, codmat, denumire, descriere, um, id_grupa, grupa, id_subgrupa, subgrupa, tip from vnom_articole where inactiv = 0 and tip = 1 order by denumire] + llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticole') + + If m.llSucces + Select crsArticole + Index On denumire Tag denumire + + lcSql = [select id, id_articol, articol, id_locatia, locatia, ctdebitor, ctcreditor, ctaideb, ctaedeb, ctaicred, ctaecred, ctpideb, ctapideb, ctpicred, ctapicred, 0 as modificat from ips_vprestatii_locatii order by articol, locatia] + llSucces = goExecutor.oExecuta(m.lcSql, 'crsConturi') + Endif + + If m.llSucces + Select crsArticole + loFrmConturi = Createobject("frm_configurare_articole_conturi") && oacnpro.vcx + loFrmConturi.Show(1) + Else + gnButon = 2 + Endif + + lcSqlDelete = [DELETE from ips_prestatii_locatii WHERE id = ?poRec.Id] + + Text To lcSqlInsert Noshow + INSERT INTO ips_prestatii_locatii + (id_articol, + id_locatia, + ctdebitor, + ctcreditor, + ctaideb, + ctaedeb, + ctaicred, + ctaecred, + ctpideb, + ctapideb, + ctpicred, + ctapicred) + values + (?poRec.id_articol, + ?poRec.id_locatia, + ?poRec.ctdebitor, + ?poRec.ctcreditor, + ?poRec.ctaideb, + ?poRec.ctaedeb, + ?poRec.ctaicred, + ?poRec.ctaecred, + ?poRec.ctpideb, + ?poRec.ctapideb, + ?poRec.ctpicred, + ?poRec.ctapicred) + Endtext + + Text To lcSqlUpdate Noshow + UPDATE ips_prestatii_locatii + set id_articol = ?poRec.id_articol, + id_locatia = ?poRec.id_locatia, + ctdebitor = ?poRec.ctdebitor, + ctcreditor = ?poRec.ctcreditor, + ctaideb = ?poRec.ctaideb, + ctaedeb = ?poRec.ctaedeb, + ctaicred = ?poRec.ctaicred, + ctaecred = ?poRec.ctaecred, + ctpideb = ?poRec.ctpideb, + ctapideb = ?poRec.ctapideb, + ctpicred = ?poRec.ctpicred, + ctapicred = ?poRec.ctapicred + where id = ?poRec.id + Endtext + + * Am apasat (Terminat) sau (Renunt si am sters un articol si trebuie sa sterg si conturile asociate) + Set Deleted Off + Select Id From crsConturi Where !Empty(Id) And modificat = 2 And Deleted() Into Cursor cConturiSterse + Set Deleted On + If (m.gnButon = 2 And Reccount('cConturiSterse') > 0) + Select cConturiSterse + Scan + Scatter Name poRec + llSucces = goExecutor.oExecuta(m.lcSqlDelete) + If !m.llSucces + Exit + Endif + Endscan + Endif + Use In (Select('cConturiSterse')) + + If m.gnButon = 1 + Select crsConturi + Set Filter To + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + + If m.llSucces && transactions + *** SELECTEZ IREG STERSE + Set Deleted Off + Select Id From crsConturi Where Deleted() Into Cursor cConturiSterse + Set Deleted On + + Select cConturiSterse + Scan + Scatter Name poRec + llSucces = goExecutor.oExecuta(m.lcSqlDelete) + If !m.llSucces + Exit + Endif + Endscan + Use In (Select('cConturiSterse')) + *** STERG IN IPS_PRESTATII_LOCATII IREG STERSE + + If m.llSucces + *** MODIFIC IN ips_prestatii_locatii IREG MODIFICATE IN TEMPORAR + Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1 In crsConturi + + lnRec = 0 + Select crsConturi + Scan For Nvl(modificat, 0) = 1 + Scatter Name poRec Memo + + lnRec = m.lnRec + 1 + Wait Window 'Configurare noua/modificata ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait + + If Empty(Nvl(poRec.Id, 0)) + llSucces = goExecutor.oExecuta(m.lcSqlInsert) + Else + llSucces = goExecutor.oExecuta(m.lcSqlUpdate) + Endif + If !m.llSucces + Exit + Endif + Endscan + Endif && llSucces + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + Endif && gnButon + + If m.llSucces + amessagebox('Configurare articole/conturi modificate cu succes!', 0 + 64, _Screen.Caption) + Else + amessagebox('Articole/conturi nu s-au modificat!', 0 + 64, _Screen.Caption) + Endif + Endif && gnButon + + Use In (Select('crsLocatii')) + + Use In (Select('crsArticole')) + Use In (Select('crsConturi')) + + Select (m.lcSelectV) + Return m.llSucces +Endproc && configurare_articole_conturi + +************************************************************************************************************************** +Procedure calcul_tranzit + Lparameters tcVyeIds + + Private poVoyage, pcVyeIds, pcVyeId, pnVVId + Local lcEcluzari, lcVoyageLocksText, lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelectV, lcSql, lcTitlu, lcSelect + Local llAfiseaza, llModParam, llSucces, loFrmTranzit + Local lcDeclaratie, lcEcluzari2, lcIndicativ, lcVmsId, lnEclDif + + poVoyage = Null + pnVVId = 0 + llSucces = .F. + If Empty(Nvl(m.tcVyeIds, '')) + Return m.llSucces + Else + pcVyeIds = m.tcVyeIds + Endif + lcSelect = Select() + Do make_grupe_vase && crsGrupeVase + Do make_grupe_marfa && crsGrupeMarfa + * Do make_contracte With "1=2" && crsContracte + Do make_contacts && crsContacts + Do make_vessel_types && crsVesselTypes + Do make_routes && crsRoutes + Do make_vas_echivalent && crsVasEchivalent + Do make_vas_um && crsVasUM + Do make_grup_tip_nave && crsGrupTipNave + + * Creez cursorul crsVoyage + Select Id, vye_id, generation, vms_id, convoy_nam, declaratio, notificati, data_avizare, notificat2, avizare, origin, destinatio, mtr_name, state, indicativ, Document, ; + Cast(Null As I) As vv_id, Cast(Null As I) As client_id, Cast(Null As I) As client_ctr_id, 0 As eagent, Cast(Null As I) As beneficiar_id, 0 As tiprecap, 0 As intern, 0 As tip ; + From crsConvoaie ; + Where At(['] + Alltrim(vye_id) + ['], m.pcVyeIds) > 0 ; + Into Cursor crsVoyage Readwrite + + llSucces = (Reccount('crsVoyage') > 0) + + If m.llSucces + * pun 0 la vmv_id sa inserez de fiecare data, in loc sa suprascriu voiajul, in ips_vvoyage_members_vanzari, in salvare tranzit + Text To lcSelectV Noshow +select 0 as ales, + vv_id, + vmv_id, + tiprecap, + cuplat, + arm_id, + armator, + kmi, + kmf, + rte_id, + ruta, + convoy_nam, + declaratio, + generation, + vms_id, + vye_id, + vsl_id, + ctt_id, + dirty_tank, + rstart_id, + rfin_id, + distanta, + distanta_cdmn, + aviz, + contact, + indicativ, + lbd, + trn, + hp, + tcap, + procdiv, + vtp_id, + tip_nava, + vgrp_id, + grupa_nava, + felcargo, + cargo, + gds_id, + gdsg_id, + marfa_country_id, + marfa_country, + grupa_marfa, + periculos, + corect, + procdist, + id_valuta, + valuta, + tarif, + cant, + um, + valval, + valftva, + valtva, + valctva, + CAST(null as varchar2(200)) as ecluzari, + 0 AS elcdif + from ips_vvoyage_members_calcul + Endtext + + lcSchema = [ALES N(1), VV_ID N(20), VMV_ID N(20), TIPRECAP N(1), CUPLAT N(1), ] + ; + [ARM_ID C(36), ARMATOR C(100), KMI N(7,2), KMF N(7,2), RTE_ID N(10), RUTA C(100), CONVOY_NAM C(100), DECLARATIO C(10), GENERATION T, ] + ; + [VMS_ID C(36), VYE_ID C(36), VSL_ID C(36), CTT_ID C(36), DIRTY_TANK N(1), ] + ; + [RSTART_ID C(36), RFIN_ID C(36), DISTANTA N(12,2), DISTANTA_CDMN N(12,2), AVIZ C(20), CONTACT C(100), INDICATIV C(240), ] + ; + [LBD N(10,2), TRN N(10,2), HP N(10,2), TCAP N(10,2), PROCDIV N(8,3), VTP_ID C(36), TIP_NAVA C(100), VGRP_ID C(36), GRUPA_NAVA C(100), ] + ; + [FELCARGO C(100), CARGO N(10,2), GDS_ID C(36), GDSG_ID N(10), MARFA_COUNTRY_ID C(36) NULL, MARFA_COUNTRY C(100) NULL, GRUPA_MARFA C(240), PERICULOS N(1), CORECT N(6,3), PROCDIST N(6,3), ] + ; + [ID_VALUTA N(10), VALUTA C(20), TARIF N(20,4), CANT N(10,2), UM C(10), VALVAL N(20,4), VALFTVA N(20,4), VALTVA N(20,4), VALCTVA N(20,4), ECLUZARI V(200), ECLDIF N(1)] + + lcOrder = [] + lcFiltru = [] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [vye_id in (] + m.pcVyeIds + [)] + + gencursor('poVoyage', 'crsVoyages', m.lcSelectV, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poVoyage.ca_baza1.afisare() + llSucces = Used('crsVoyages') + Endif && llSucces + + If m.llSucces + lcTitlu = 'CALCUL TRANZIT DECLARATIE: ' + lcEcluzari = 'ECLUZARI: ' + Sele crsVoyage + Scan + * Titlu + lcDeclaratie = Alltrim(Nvl(declaratio, '')) + lcIndicativ = Alltrim(Nvl(convoy_nam, '')) + lcTitlu = lcTitlu + m.lcDeclaratie + ' - CONVOI: ' + m.lcIndicativ + Iif(Recno() <= Reccount(), '; ', '') + + pcVyeId = Alltrim(vye_id) + + * Selectez ecluzari pe convoi + Text To lcSql Noshow +select stringagg(trim(replace(upper(lock_name), 'ECLUZA', '')) || ' (' || + TO_CHAR(ldata, 'dd.mm.yyyy hh24:mi') || ')') as ecluzari + from (select lock_name, MIN("date") as ldata + from ips_vvoyage_locks + where vye_id = ?pcVyeId + group by lock_name + order by 2) + Endtext + lcVoyageLocksText = '' + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @lcVoyageLocksText) + If m.llSucces + lcEcluzari = m.lcEcluzari + m.lcDeclaratie + ' ' + Alltrim(Nvl(lcVoyageLocksText, '')) + ' ' + Else + Exit + Endif + + * Selectez camera ecluzare pe fiecare nava si completez in vrsVoyages + * atentie = 1 daca eluzarile unei nave nu sunt egale cu ecluzarile convoiului + Text To lcSql Noshow +select l1.vms_id, + l1.ecluzari, + decode(l1.lock_name, l2.lock_name, 0, 1) as ecldif + from (with lx as (select vm.id as vms_id, "date" as ldata, + vl.lock_name, + (case + when vl.chamber_name is not null then + trim(replace(upper(vl.lock_name), 'ECLUZA', '')) || '-' || + vl.chamber_name || ' (' || + TO_CHAR("date", 'dd.mm.yyyy hh24:mi') || ')' + else + '' + end) as ecluza + from ips_voyage_members vm + left join ips_voyage_locks vl + on vm.id = vl.vms_id + where vm.vye_id = ?pcVyeId + order by vms_id, "date") + select vms_id, + concatenate_list(CURSOR(select lock_name from lx lx1 where lx1.lock_name is not null and lx1.vms_id = lx2.vms_id order by ldata)) as lock_name, + concatenate_list(CURSOR(select ecluza from lx lx1 where lx1.lock_name is not null and lx1.vms_id = lx2.vms_id order by ldata)) as ecluzari + from lx lx2 + group by vms_id) l1, + (select concatenate_list(cursor(select lock_name from (select lock_name, min("date") as ldata + from ips_voyage_locks + where vye_id = ?pcVyeId + group by lock_name) order by ldata)) as lock_name from dual) l2 + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsVoyageLocksTemp') + If m.llSucces + Select crsVoyageLocksTemp + Scan + lcVmsId = vms_id + lcEcluzari2 = Alltrim(ecluzari) + lnEclDif = ecldif + + Select crsVoyages + Locate For vms_id = m.lcVmsId + If Found() + Replace ecluzari With m.lcEcluzari2, ecldif With m.lnEclDif + Endif + Endscan + Use In (Select('crsVoyageLocksTemp')) + Endif + Endscan + Endif && llSucces + + If m.llSucces + Select crsVoyages + loFrmTranzit = Crea("frm_calcul_tranzit", m.lcTitlu, m.lcEcluzari) + loFrmTranzit.Show(1) + llSucces = (m.gnButon = 1) + Endif + + Use In (Select('crsGrupeVase')) + Use In (Select('crsGrupeMarfa')) + Use In (Select('crsContacts')) + Use In (Select('crsVesselTypes')) + Use In (Select('crsRoutes')) + Use In (Select('crsVasEchivalent')) + Use In (Select('crsVasUM')) + Use In (Select('crsGrupTipNave')) + Use In (Select('crsVoyage')) + Use In (Select('crsVoyages')) + + Select (m.lcSelect) + Return m.llSucces +Endproc && calcul_tranzit + + +************************************************************************************************************************** +Procedure calcul_cheiaj + Lparameters tcVyeIds + + Private pcVyeIds, poBerthings, poBerthingDetails + Local lcEcluzari, lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelectV, lcSql, lcTitlu + Local llAfiseaza, llModParam, llSucces, loFrmTranzit, lcSelect + poBerthings = Null + poBerthingDetails = Null + llSucces = .F. + + If Empty(Nvl(m.tcVyeIds, '')) + Return m.llSucces + Else + pcVyeIds = m.tcVyeIds + Endif + lcSelect = Select() + + * Do make_contracte With "1=2" && crsContracte + Do make_aramis_tip_nave && crsAramisTipNave + Do make_locatii && crsLocatii + Do make_dane && crsDane + Do make_articole && crsArticole + Do make_valute && crsValute + Do make_cheiaj_prestati && crsCheiajPrestatii + + * Creez cursorul crsVoyage + Select Id, vye_id, generation, vms_id, convoy_nam, declaratio, notificati, data_avizare, notificat2, avizare, origin, destinatio, mtr_name, state, indicativ, Document, ; + Cast(Null As I) As client_id, Cast(Null As I) As client_ctr_id, 0 As eagent, Cast(Null As I) As beneficiar_id, 0 As tiprecap, 0 As intern, 1 As tip, ; + Cast(Null As I) As vv_id, Cast(Null As I) As bv_id ; + From crsConvoaie ; + Where At(['] + Alltrim(vye_id) + ['], m.pcVyeIds) > 0 ; + Into Cursor crsVoyage Readwrite + + llSucces = (Reccount('crsVoyage') > 0) + + *** Import din berthings dupa vye_id + If m.llSucces + Text To lcSelectV Noshow +select 0 as ales, + id, + CAST(null as NUMBER(20)) as bv_id, + vye_id, + declaratio, + ves_id, + nava, + nava as vs_name, + tipn_id, + tipn, + NVL(lbd, 0) as lbd, + NVL(trn, 0) as trn, + NVL(hp, 0) as trn, + NVL(cap, 0) as cap, + NVL(lung, 0) as cap, + CAST(null as NUMBER(12)) as id_locatia, + TIP AS dana_id, + CTIP AS cdana, + rpt_id, + rpt_name, + datai, + datap + from ips_vberthings + Endtext + + * vs_name este pentru facturarea unei declaratii generice "FARA" si trebuie completat numele navei + Text To lcSchema Noshow +ales N(1), id C(36), bv_id N(20), vye_id C(36), declaratio C(36), ves_id C(36), nava C(240), vs_name C(240), tipn_id N(7), tipn C(100), lbd N(12,2), trn N(12,2), hp N(12,2), cap N(12,2), lung N(12,2), id_locatia N(12), dana_id N(3), cdana C(20), rpt_id C(36), rpt_name C(100), datai T(8), datap T(8) + Endtext + + lcOrder = [datai desc,declaratio,nava] + lcFiltru = [] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [vye_id in (] + m.pcVyeIds + [)] + + gencursor('poBerthings', 'crsBerthings', m.lcSelectV, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poBerthings.ca_baza1.afisare() + llSucces = Used('crsBerthings') + If m.llSucces + Select crsBerthings + Scan + lcRptName = Upper(Alltrim(rpt_name)) + If Seek(m.lcRptName, 'crsLocatii', 'denumire') + Replace crsBerthings.id_locatia With crsLocatii.Id + Endif + Endscan + Go Top + Endif + Endif && llSucces + + + *** Creez cursor gol berthings_detalii_vanzari pentru completare + If m.llSucces + Text To lcSelectV Noshow +select id, + bts_id, + ves_id, + indicativ, + datai, + datap, + id_valuta, + valuta, + id_articol, + tarif, + cant, + durata, + um, + valval, + tvaval, + totval, + valftva, + valtva, + valctva, + curs + from ips_vberthing_details_vanzari + Endtext + + Text To lcSchema Noshow +id N(20), bts_id C(36), ves_id C(36), nava C(100), datai T(8), datap T(8), id_valuta N(7), valuta C(20), id_articol N(10), tarif N(18,4), cant N(12,2), durata N(10,3), um C(10), valval N(18,4), tvaval N(18,4), totval N(18,4), valftva N(18,4), valtva N(18,4), valctva N(18,4), curs N(14,6) + Endtext + + lcOrder = [] + lcFiltru = [1=2] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + gencursor('poBerthingDetails', 'crsBerthingDetails', m.lcSelectV, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poBerthingDetails.ca_baza1.afisare() + llSucces = Used('crsBerthingDetails') + + Endif && llSucces + + If m.llSucces + Sele crsVoyage + Go Top + lcTitlu = 'CALCUL CHEIAJ DECLARATIE: ' + Alltrim(Nvl(declaratio, '')) + ' - CONVOI: ' + Alltrim(Nvl(convoy_nam, '')) + + + Select crsVoyage + * Do Form frm_calcul_cheiaj Name loFrmTranzit With m.lcTitlu + loFrmTranzit = Crea("frm_calcul_cheiaj", m.lcTitlu) + loFrmTranzit.Show(1) + llSucces = (m.gnButon = 1) + Endif + + Use In (Select('crsGrupeVase')) + Use In (Select('crsGrupeMarfa')) + Use In (Select('crsContacts')) + Use In (Select('crsVesselTypes')) + Use In (Select('crsRoutes')) + Use In (Select('crsVasEchivalent')) + Use In (Select('crsVasUM')) + Use In (Select('crsGrupTipNave')) + Use In (Select('crsVoyage')) + Use In (Select('crsVoyages')) + + Select (m.lcSelect) + Return m.llSucces + +Endproc && calcul_cheiaj + +************************************************************************************************************************** +Procedure calcul_contract + Lparameters tnIdCtr + + Local lcSql, lcTitlu, llSucces, loFrmContract, lcSelect + Private pnIdCtr + llSucces = .F. + lcSelect = Select() + + pnIdCtr = Iif(!Empty(Nvl(m.tnIdCtr, 0)), m.tnIdCtr, 0) + Use In (Select('crsArticoleContract')) + Text To lcSql Textmerge Noshow +select id_part, client, contract_client, id_ctr, id_articol, articol, CAST(' ' as Varchar2(100)) as perioada, um, pret_unitar as pret, cant as cantitate, ROUND(valoare, ?gnPC) as valval, id_valuta, valuta, id_locatia, locatia, proc_tvav + from vctr_articole2 + where id_ctr = <> + order by locatia, articol + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticoleContract') + + If m.llSucces + Sele crsArticoleContract + Go Top + lcTitlu = 'CALCUL CONTRACT: ' + Alltrim(Nvl(contract_client, '')) + ' - ' + Alltrim(Nvl(client, '')) + + loFrmContract = Crea("frm_calcul_contract", m.lcTitlu) + loFrmContract.Show(1) + llSucces = (m.gnButon = 1) + Endif + + Use In (Select('crsArticoleContract')) + + Select (m.lcSelect) + Return m.llSucces + +Endproc && calcul_contract + +******************* +*** Este veche si nu se mai foloseste. Se foloseste calcul_penalitati2 +******************* +Procedure calcul_penalitati + * pnTipCalcul: 1 (default) = incasari si sold; 2 = incasari; 3 = sold; 4 = evaluare + * pnCalculZile: 1 (default) = calcul zile fata de luna precedenta; 2 = fata de data scadenta + + + Private pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru + Store "" To pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru + * 1. Se calculeaza penalitatile pentru incasari + * 2. Se calculeaza penalitatile pentru soldul facturilor + + If Inlist(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari + * INCASARILE DIN LUNA INCASATE DUPA DATA SCADENTA + DATELE DE FACTURARE + + Text To lcSql Textmerge Noshow +Select v.id_fact, v.id_part as clie_id, v.id_ctr, v.id_beneficiar, p2.denumire as beneficiar, v.numar_act as nrfact, v.data_act as datafact, v.data_scad as datascad, v.total_cu_tva as valctva, v.totval, v.Curs, v.id_Valuta, vl.nume_val as valuta, + '' as explicatia, v.id_ctr, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract, + p1.denumire As nume, i.id_doc, i.nract, i.dataact, i.suma, i.suma_val As sumaval, i.pereche, i.id_fact, + c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie, + i.dataact - v.data_scad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati, + v.data_scad As databaza, i.dataact as dataref, i.Cont + From vanzari v JOIN nom_parteneri p1 ON v.id_part = p1.id_part + left join nom_parteneri p2 ON v.id_beneficiar = p2.id_part + left join vnom_valute vl on v.id_valuta = vl.id_valuta + left join contracte c on v.id_ctr = c.id_ctr + Join (Select id_fact as id_doc, nract, dataact, id_partc as id_part, partc as nume, perechec as pereche, id_factc as id_fact, scc As cont, Sum(suma) As suma, Sum(suma_val) As suma_val + From vact Where an = <> and luna = <> and scc in ('4111', '461'<>) And scd <> '4118' + Group By id_fact, nract, dataact, id_partc, partc, perechec, id_factc, scc) i On i.id_fact = v.id_fact + Where v.tip_factura <> 6 and i.dataact > v.data_scad And i.dataact < TO_DATE('<>','YYYYMMDD') + Endtext + llSucces = goExecutor.oExecuta(m.lcSql, "cFiordIncasari") + + && nu facturez incasarile pe care utilizatorul le-a facturat deja sau incasarile pe care le-a sters manual + Text To lcSql Noshow +SELECT p.id_doc_incasare, p.id_fact FROM penalitati p join vanzari v on p.id_fact_pen = v.id_fact WHERE p.sters = 0 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = ?m.gnAn * 12 + ?m.gnLuna +union +SELECT p.id_doc_incasare, p.id_fact FROM penalitati p WHERE p.sters = 1 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = ?m.gnAn * 12 + ?m.gnLuna + Endtext + llSucces = goExecutor.oExecuta(m.lcSql, 'cPenalitatiFactSters') + If m.llSucces + Select cPenalitatiFactSters + Scan + Scatter Name loRec + Delete From cFiordIncasari Where id_fact = loRec.id_fact And id_doc = loRec.id_doc_incasare + Endscan + Endif && llSucces + + Use In (Select('cPenalitatiFactSters')) + Select * From cFiordIncasari Into Cursor cFiordTemp NOFILTER Readwrite + Use In (Select('cFiordIncasari')) + Endif && INLIST(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari + + + If Inlist(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare + + *** SELECTEZ FACTURILE DIN FACTURARE (EMISE DE COMERCIAL) DAR CU SOLD IN VANZLUN SI DEBLUN IN LUNA CURENTA + Text To lcSql Textmerge Noshow +Select v.id_fact, v.id_part as clie_id, v.id_ctr, v.id_beneficiar, p2.denumire as beneficiar, v.numar_act as nrfact, v.data_act as datafact, v.data_scad as datascad, v.total_cu_tva as valctva, v.totval, v.Curs, v.id_Valuta, vl.nume_val as valuta, + '' as EXPLICATIA, v.id_ctr, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract, + p2.denumire As nume, 0 as id_doc, 0 As nract, TO_DATE('<>','YYYYMMDD') As dataact, i.sold As suma, i.soldval As sumaval, 0 As PERECHE, 0 as id_fact, + c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie, + TO_DATE('<>','YYYYMMDD') - v.data_scad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati, + v.data_scad As databaza, TO_DATE('<>','YYYYMMDD') As dataref, i.Cont + From vanzari v join nom_parteneri p1 ON v.id_part = p1.id_part + left join vnom_valute vl on v.id_valuta = vl.id_valuta + left join nom_parteneri p2 ON v.id_beneficiar = p2.id_part + left join contracte c on v.id_ctr = c.id_ctr + Join (Select id_fact, nract, dataact, precdeb+debit-preccred-credit as sold, precvaldeb+valdebit-precvalcred-credit as soldval, Cont + From ireg_parteneri + WHERE an = <> and luna = <> and cont in ('4111', '461'<>)) i On v.id_fact = i.id_fact + Where v.tip_factura <> 6 and i.sold > 0 And v.data_scad < TO_DATE('<>','YYYYMMDD') + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, "cFiordSold") + + If Used('cFiordTemp') + Select cFiordTemp + Append From Dbf('cFiordSold') + Else + Select * From cFiordSold Into Cursor cFiordTemp NOFILTER Readwrite + Endif + Use In (Select('cFiordSold')) + Endif && INLIST(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare + + Select * From cFiordTemp Order By nume, contract, datafact, nrfact Into Cursor crsCalculPenalitatiTemp + Use In (Select('cFiordTemp')) + + Select crsCalculPenalitati + Delete All + Append From Dbf('crsCalculPenalitatiTemp') + Use In (Select('crsCalculPenalitatiTemp')) + + If m.pnCalculZile = 1 && calcul zile fata de luna precedenta, 2 = fata de data scadenta + Update crsCalculPenalitati Set databaza = Max(datascad, Date(m.gnAn, m.gnLuna, 1) - 1) + Else + Update crsCalculPenalitati Set databaza = datascad + Endif + Update crsCalculPenalitati Set dataref = Min(dataref, m.pdDataReferinta) + + *** nu calculez zile de penalitati daca numarul de zile este mai mic decat numarul de zile de gratie + Update crsCalculPenalitati Set nr_zile = Iif(dataref - databaza <= zilegratie, 0, dataref - databaza) + Update crsCalculPenalitati Set penalitati = Round(Round(ppenzi / 100 * suma, m.gnZ) * nr_zile, m.gnZ) + + * Recalculez penalitatile pentru contractele cu 2 cote de penalitati + * Poate fi folosita si pentru contractele cu o singura cota de penalitati, dar in perioada de testare verific doar contractele cu doua cote + Select crsCalculPenalitati + Scan For ppenzi2 <> 0 + lnPenalitati = penalitati + lnZileProcent1 = nr_zile + lnZileProcent2 = 0 + lnPenalitati = CalculeazaPenalitati(ppenzi, ppenzi2, penzile, penzile2, datascad, databaza, dataref, zilegratie, suma, @lnZileProcent1, @lnZileProcent2) + Replace penalitati With lnPenalitati, nr_zile1 With m.lnZileProcent1, nr_zile2 With m.lnZileProcent2 + Endscan + + Go Top In crsCalculPenalitati + +Endproc && calcul_penalitati + +**************************************** +*** TEMPORAR!!! FOLOSESC DOAR IREG_PARTENERI, FARA VANZARI, PANA IMPORT VANZARILE!!!!!! +**************************************** +Procedure calcul_penalitati2 + Lparameters tnIdClient + * pnTipCalcul: 1 (default) = incasari si sold; 2 = incasari; 3 = sold; 4 = evaluare + * pnCalculZile: 1 (default) = calcul zile fata de luna precedenta; 2 = fata de data scadenta + + *!!! De facut: facturile cu sold <> 0 in loc de sold > 0; initializare explicatie TVA; seria AVN; EXPLICATIE TVA ID_JTVA_COLOANA = 12 OPERATIUNI NEIMPOZABILE + + Local lcFiltruAIdPart, lcFiltruVIdPart, lcSql, lcSql1, lcSql2, llSucces, lnPenalitati + Local lnZileProcent1, lnZileProcent2, loRec + make_cCalculPenalitati() + make_cClientiPenalitati() + + lcFiltruVIdPart = Iif(!Empty(m.tnIdClient), [ and v.id_part = ] + Alltrim(Str(m.tnIdClient)), []) + lcFiltruAIdPart = Iif(!Empty(m.tnIdClient), [ and id_partc = ] + Alltrim(Str(m.tnIdClient)), []) + + Private pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru + Store "" To pcNumeFiltru, pcAgentFiltru, pcContractFiltru, pcExplicatiaFiltru + * 1. Se calculeaza penalitatile pentru incasari + * 2. Se calculeaza penalitatile pentru soldul facturilor + If Inlist(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari + * INCASARILE DIN LUNA INCASATE DUPA DATA SCADENTA + DATELE DE FACTURARE + * DACA CALCULUL ESTE FATA DE LUNA PRECEDENTA, INCASARILE LE IAU DIN LUNA CURENTA SI APOI SA FAC FILTRUL SA FIE DATA INCASARII > DATA SCADENTA + * DACA CALCULUL ESTE FATA DE DATA SCADENTA, INCASARILE LE IAU DIN TOATA BAZA DE DATE SI APOI SA FAC FILTRUL SA FIE DATA INCASARII > DATA SCADENTA + + *** SERIE_ACT = AVN - FACTURI DE PENALITATI, DACA IAU DIN VANZARI.TIP_FACTURA <> 6 + *** la facturile 4118 id_fact nu mai corespunde cu id_fact 4111 original si nu mai gasesc factura originala. caut id_Fact original dupa nrfact + Text To lcSql Textmerge Noshow +Select <> as id_fact, v.id_part as clie_id, v.id_ctr, 0 as id_beneficiar, '' as beneficiar, v.nract as nrfact, v.dataact as datafact, v.datascad as datascad, (v.precdeb + v.debit) as valctva, (v.precvaldeb + v.valdebit) as totval, v.Curs, v.id_Valuta, vl.nume_val as valuta, + '' as explicatia, v.id_ctr, c.numar, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract, + p1.denumire As nume, i.id_doc, i.nract, i.dataact, i.suma, i.suma_val As sumaval, i.pereche, i.id_fact, + c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie, + i.dataact - v.datascad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati, + v.datascad As databaza, i.dataact as dataref, <> as tip + From ireg_parteneri v JOIN nom_parteneri p1 ON v.id_part = p1.id_part + left join vanzari vz1 on v.cont <> '4118' and v.id_fact = vz1.id_fact and vz1.sters = 0 + <> + left join vnom_valute vl on v.id_valuta = vl.id_valuta + left join contracte c on v.id_ctr = c.id_ctr + Join (Select id_fact as id_doc, nract, dataact, id_partc as id_part, partc as nume, perechec as pereche, id_factc as id_fact, scc As cont, Sum(suma) As suma, Sum(suma_val) As suma_val + From vact Where <> <> and scc in ('4111', '461'<>) And scd <> '4118' + Group By id_fact, nract, dataact, id_partc, partc, perechec, id_factc, scc) i On i.id_fact = v.id_fact + Where v.an = <> and v.luna = <> <> and v.cont in ('4111', '461'<>) and i.dataact > v.datascad And i.dataact <= TO_DATE('<>','YYYYMMDD') + and <> <> 6 + Endtext + llSucces = goExecutor.oExecuta(m.lcSql, "cFiordIncasari") + + *!* && nu facturez incasarile pe care utilizatorul le-a facturat deja pe o factura de penalitati sau incasarile pe care le-a sters manual + *!* Text To lcSql TEXTMERGE Noshow + *!* SELECT p.id_doc_incasare, p.id_fact FROM penalitati p join ireg_parteneri v on p.id_fact_pen = v.id_fact WHERE p.sters = 0 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <> AND v.an = <> and v.luna = <> <> and v.cont in ('4111', '461'<>) + *!* union + *!* SELECT p.id_doc_incasare, p.id_fact FROM penalitati p WHERE p.sters = 2 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <> + *!* Endtext + *!* llSucces = goExecutor.oExecuta(m.lcSql, 'cPenalitatiFactSters') + *!* If m.llSucces + *!* Select cPenalitatiFactSters + *!* Scan + *!* Scatter Name loRec + *!* Delete From cFiordIncasari Where id_fact = loRec.id_fact And id_doc = loRec.id_doc_incasare + *!* Endscan + *!* Endif && llSucces + + + Select .F. as facturate, .F. as sterse, i.* From cFiordIncasari i Into Cursor cFiordTemp NOFILTER Readwrite + Use In (Select('cFiordIncasari')) + Endif && INLIST(m.pnTipCalcul, 1, 2) && 1 = incasari + sold, 2 = incasari + + + If Inlist(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare + + *** SELECTEZ FACTURILE DIN FACTURARE (EMISE DE COMERCIAL) DAR CU SOLD IN VANZLUN SI DEBLUN IN LUNA CURENTA + *** SERIE_ACT = AVN - FACTURI DE PENALITATI, DACA IAU DIN VANZARI.TIP_FACTURA <> 6 + Text To lcSql Textmerge Noshow +Select <> as id_fact, v.id_part as clie_id, v.id_ctr, 0 as id_beneficiar, '' as beneficiar, v.nract as nrfact, v.dataact as datafact, v.datascad as datascad, (v.precdeb + v.debit) as valctva, (v.precvaldeb + v.valdebit) as totval, v.Curs, v.id_Valuta, vl.nume_val as valuta, + '' as EXPLICATIA, v.id_ctr, c.numar, cast(TRIM(to_char(c.numar)) || (case when c.data_inceput is not null then '/' || to_char(c.data_inceput, 'dd.mm.yyyy') else '' end) as varchar2(100)) as contract, + p1.denumire As nume, 0 as id_doc, 0 As nract, TO_DATE('<>','YYYYMMDD') As dataact, (v.precdeb+v.debit-v.preccred-v.credit) as suma, (v.precvaldeb+v.valdebit-v.precvalcred-v.valcredit) As sumaval, 0 As PERECHE, 0 as id_fact, + c.coef_penalitati as ppenzi, c.coef_penalitati2 as ppenzi2, c.zile_penalitati as penzile, c.zile_penalitati2 as penzile2, c.descriere, c.zile_gratie_penalitati as zilegratie, + TO_DATE('<>','YYYYMMDD') - v.datascad As nr_zile, Cast(0 As number) As nr_zile1, Cast(0 As number) As nr_zile2, CAST(0 as number) As penalitati, + v.datascad As databaza, TO_DATE('<>','YYYYMMDD') As dataref, <> as tip + From ireg_parteneri v join nom_parteneri p1 ON v.id_part = p1.id_part + left join vanzari vz1 on v.cont <> '4118' and v.id_fact = vz1.id_fact and vz1.sters = 0 + <> + left join vnom_valute vl on v.id_valuta = vl.id_valuta + left join contracte c on v.id_ctr = c.id_ctr + Where v.an = <> and v.luna = <> <> and v.cont in ('4111', '461'<>) and (v.precdeb+v.debit-v.preccred-v.credit) <> 0 And v.datascad <= TO_DATE('<>','YYYYMMDD') + and <> <> 6 + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, "cFiordSold") + + If Used('cFiordTemp') + Select cFiordTemp + Append From Dbf('cFiordSold') + Else + Select .F. as facturate, .F. as sterse, s.* From cFiordSold s Into Cursor cFiordTemp NOFILTER Readwrite + Endif + Use In (Select('cFiordSold')) + Endif && INLIST(m.pnTipCalcul, 1, 3, 4) && 1 = incasari + sold, 3 = sold, 4 = evaluare + + ******************************** + * Nu includ facturile si incasarile pe care utilizatorul le-a facturat deja pe o factura de penalitati sau facturile si incasarile pe care le-a sters manual + * Daca le includ (plFacturate, plSterse), le marchez si colorez corespunzator + ******************************** + Text To lcSql Textmerge Noshow +SELECT 1 as facturate, 0 as sterse, p.id_doc_incasare, p.id_fact FROM penalitati p join ireg_parteneri v on p.id_fact_pen = v.id_fact WHERE p.sters = 0 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <> AND v.an = <> and v.luna = <> <> and v.cont in ('4111', '461'<>) +UNION +SELECT 0 as facturate, 1 as sterse, p.id_doc_incasare, p.id_fact FROM penalitati p WHERE p.sters = 2 and extract(year FROM p.dataact) * 12 + extract(MONTH FROM p.dataact) = <> + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, 'cPenalitatiFactSters') + If m.llSucces + Select cPenalitatiFactSters + Scan + Scatter Name loRec + WITH loRec + DO CASE + CASE m.plFacturate AND .facturate = 1 + UPDATE cFiordTemp SET facturate = .T. Where id_fact = .id_fact And Nvl(id_doc, 0) = Nvl(.id_doc_incasare, 0) + CASE m.plSterse AND .sterse = 1 + UPDATE cFiordTemp SET sterse = .T. Where id_fact = .id_fact And Nvl(id_doc, 0) = Nvl(.id_doc_incasare, 0) + OTHERWISE + Delete From cFiordTemp Where id_fact = .id_fact And Nvl(id_doc, 0) = Nvl(.id_doc_incasare, 0) + ENDCASE + ENDWITH + Endscan + Endif && llSucces + + Use In (Select('cPenalitatiFactSters')) + + ******************************** + + Select * From cFiordTemp Order By nume, contract, datafact, nrfact, dataact, nract Into Cursor crsCalculPenalitatiTemp + Use In (Select('cFiordTemp')) + + Select crsCalculPenalitati + Delete All + Append From Dbf('crsCalculPenalitatiTemp') + Use In (Select('crsCalculPenalitatiTemp')) + +*!* If m.pnCalculZile = 1 && calcul zile fata de luna precedenta, 2 = fata de data scadenta +*!* Update crsCalculPenalitati Set databaza = Max(datascad, Date(m.gnAn, m.gnLuna, 1) - 1) +*!* Else +*!* Update crsCalculPenalitati Set databaza = datascad +*!* Endif +*!* Update crsCalculPenalitati Set dataref = Min(dataref, m.pdDataReferinta) + + Select crsCalculPenalitati + Scan + calcul_penalitati_linie(m.pnCalculZile, m.pdDataReferinta) + Endscan + + Go Top In crsCalculPenalitati + + Use In (Select('crsClientiPenalitati')) + Create Cursor crsClientiPenalitati (nume C(100), clie_id N(12) ) + Select Distinct nume, clie_id From crsCalculPenalitati Order By nume Into Cursor cClientiTemp + If _Tally > 1 && daca vreau facturile pentru toti client nu mai adaug pentru filtrarea facturilor + Insert Into crsClientiPenalitati (nume, clie_id) Values ('Alegeti clientul...', 0) + Endif + Select crsClientiPenalitati + Append From Dbf('cClientiTemp') + Use In (Select('cClientiTemp')) + +Endproc && calcul_penalitati2 + +*********************************************** +* calculeaza numarul de zile si valoarea penalitatilor pentru documentul curent din crsCalculPenalitati +* in functie de cotele de penalitati pe perioade +* se apeleaza initial in calcul_penalitati2 si apoi la modificari din frm_penalitati +*********************************************** +Procedure calcul_penalitati_linie + LPARAMETERS tnCalculZile, tdDataReferinta, m.tdDataBaza + * tnCalculZile: 1 = calcul zile fata de luna precedenta, 2 = fata de data scadenta + * tdDataReferinta: data referinta a calculului de penalitati + * tdDataBaza: optional, daca se apeleaza din frm_penalitati si se modifica de utilizator databaza + + Select crsCalculPenalitati + ldDataScad = IIF(!EMPTY(datascad), datascad, GOMONTH(dataact,1)) + ldDataRef = MIN(dataref, m.tdDataReferinta) && daca sunt incasari, data de referinta pentru incasari este data incasarii, daca este mai mica decat data de referinta + + * Calculez data baza + DO CASE + CASE !EMPTY(m.tdDataBaza) + ldDataBaza = m.tdDataBaza + CASE m.tnCalculZile = 1 + * tnCalculZile = 1 : fata de luna precedenta + + * Data de baza este ultima zi din luna precedenta sau data scadenta, care este mai mare + ldDataBaza = Max(m.ldDataScad, Date(m.gnAn, m.gnLuna, 1) - 1) + + * Data de gratie este ultima zi in care nu se calculeaza penalitati (data scadenta + zile gratie) + ldDataGratie = m.ldDataScad + zilegratie + + * Daca data referinta > data de gratie si data gratie este in luna de referinta + * sunt in luna in care s-a sfarsit perioada de gratie si calculez penalitati inclusiv pana la data scadenta + * in loc de pana la ultima zi a lunii anterioare + IF m.tdDataReferinta > m.ldDataGratie AND YEAR(m.ldDataGratie) = year(m.tdDataReferinta) AND MONTH(m.ldDataGratie) = MONTH(m.tdDataReferinta) + ldDataBaza = m.ldDataScad + ENDIF + OTHERWISE + * tnCalculZile = 2 : fata de data scadenta + ldDataBaza = m.ldDataScad + ENDCASE + + * Recalculez penalitatile pentru contractele cu 2 cote de penalitati + * Poate fi folosita si pentru contractele cu o singura cota de penalitati, dar in perioada de testare verific doar contractele cu doua cote + Replace ppenzi With Nvl(ppenzi, 0), ppenzi2 With Nvl(ppenzi2, 0), penzile With Nvl(penzile, 0), penzile2 With Nvl(penzile2, 0), ; + nr_zile With Nvl(nr_zile, 0), nr_zile1 With Nvl(nr_zile1, 0), nr_zile2 With Nvl(nr_zile2, 0), ; + zilegratie With Nvl(zilegratie, 0), penalitati With Nvl(penalitati, 0), dataref WITH m.ldDataRef, databaza WITH m.ldDataBaza + If id_ctr = 0 + Replace id_ctr With Null + Endif + If .T. && ppenzi2 <> 0 + lnPenalitati = penalitati + lnZileProcent1 = 0 + lnZileProcent2 = 0 + lnZilePenalitati = 0 + lnPenalitati = CalculeazaPenalitati(ppenzi, ppenzi2, penzile, penzile2, datascad, databaza, dataref, zilegratie, suma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2) + Replace penalitati With lnPenalitati, nr_zile1 With m.lnZileProcent1, nr_zile2 With m.lnZileProcent2, nr_zile WITH m.lnZilePenalitati + Endif +Endproc && calcul_penalitati_linie + +********************************************************************* +*** lucreaza cu 2 procente de penalitati. un procent in primele x zile de restanta, un procent pentru restul zilelor de restanta +********************************************************************* +Function CalculeazaPenalitati + Lparameters tnProcentPenalitatiZi1, tnProcentPenalitatiZi2, tnPerioadaPenalitati1, tnPerioadaPenalitati2, tdDataScadenta, tdDataBaza, tdDataReferinta, tnZileGratie, tnSuma, lnZilePenalitati, lnZileProcent1, lnZileProcent2 + * tnProcentPenalitatiZi1: procent penalitati pentru zilele de restanta <= tnPerioadaPenalitati2-tnPerioadaPenalitati1 + * tnProcentPenalitatiZi2: procent penalitati pentru zilele de restanta > tnPerioadaPenalitati2-tnPerioadaPenalitati1 + * tnPerioadaPenalitati1: dupa cate zile fata de emiterea facturii se aplica primul procent de penalitati (egal cu zile de scadenta) + * tnPerioadaPenalitati2: dupa cate zile fata de emiterea facturii se aplica al doilea procent de penalitati + * tdDataScadenta: data scadenta a facturii + * tdDataBaza: max(sfarsitul lunii precedente, data scadenta) + * tdDataReferinta: data de referinta cand se face calculul penalitatilor = min(data incasare data de referinta pentru calculul penalitati) + * tnSuma: suma la care se calculeaza penalitati (incasare sau sold) + * tnZileGratie: zile restante pentru care NU se calculeaza penalitati + + Local lnPenalitati, lnZileProcent, lnZileRestante, lnZileProcent1, lnZileProcent2 + + lnZileProcent = m.tnPerioadaPenalitati2 - m.tnPerioadaPenalitati1 && dupa cate zile de la scadenta se schimba procentul de penalitati + lnZileRestante = m.tdDataReferinta - m.tdDataScadenta + + * nu calculez zile de penalitati in perioada de gratie (numarul de zile restante fata de data scadenta mai mic decat numarul de zile de gratie) + lnZilePenalitati = Iif(m.lnZileRestante <= m.tnZileGratie, 0, m.tdDataReferinta - m.tdDataBaza) + + * pentru cate zile de restanta se foloseste tnProcentPenalitatiZi2 + lnZileProcent2 = Iif(m.lnZileRestante <= m.tnZileGratie, 0, IIF(m.tnPerioadaPenalitati2 = 0, 0, Iif(m.lnZileRestante > m.lnZileProcent, Min(m.lnZilePenalitati, m.lnZileRestante - m.lnZileProcent), 0))) + + * pentru cate zile de restanta se foloseste tnProcentPenalitatiZi1 + lnZileProcent1 = Iif(m.lnZileRestante <= m.tnZileGratie, 0, Iif(m.lnZilePenalitati > m.lnZileProcent2, m.lnZilePenalitati - m.lnZileProcent2, 0)) + + lnPenalitati = Round(Round(m.tnProcentPenalitatiZi1 / 100 * tnSuma, m.gnZ) * m.lnZileProcent1, m.gnZ) + Round(Round(m.tnProcentPenalitatiZi2 / 100 * m.tnSuma, m.gnZ) * m.lnZileProcent2, m.gnZ) + + Return m.lnPenalitati +Endfunc && CalculeazaPenalitati + +Function TestCalculeazaPenalitati + gnZ = 2 + lnZilePenalitati = 0 + lnPenalitati = 0 + lnZileProcent1 = 0 + lnZileProcent2 = 0 + lnppenzi = 0.15 + lnppenzi2 = 0.10 + lnpenzile = 30 + lnpenzile2 = 60 + lnsuma = 100 + lnzilegratie = 0 + ldDataScad = Date(2019, 2, 21) + + * februarie + lddatabaza = Date(2019, 2, 21) + lddataref = Date(2019, 2, 28) + lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2) + Messagebox('Penalitati Februarie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 1.05)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2)) + + * martie + lddatabaza = Date(2019, 2, 28) + lddataref = Date(2019, 3, 31) + lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2) + Messagebox('Penalitati Martie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 4.25)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2)) + + * aprilie + lddatabaza = Date(2019, 3, 31) + lddataref = Date(2019, 4, 30) + lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2) + Messagebox('Penalitati Aprilie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 3.00)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2)) + + + * data scadenta 05.01.2020, data referinta 31.01.2020, zile restanta = 26, valoare penalitati 1.56 + lnPenalitati = 0 + lnZileProcent1 = 0 + lnZileProcent2 = 0 + lnppenzi = 0.06 + lnppenzi2 = 0.10 + lnpenzile = 30 + lnpenzile2 = 60 + lnsuma = 100 + lnzilegratie = 0 + ldDataScad = Date(2020, 1, 5) + lddatabaza = Date(2020, 1, 5) + lddataref = Date(2020, 1, 31) + lnPenalitati = CalculeazaPenalitati(lnppenzi, lnppenzi2, lnpenzile, lnpenzile2, ldDataScad, lddatabaza, lddataref, lnzilegratie, lnsuma, @lnZilePenalitati, @lnZileProcent1, @lnZileProcent2) + Messagebox('Penalitati ianuarie: ' + Transform(m.lnPenalitati) + ' ' + Transform((m.lnPenalitati = 1.56)) + ' | Zile Proc. Pen. 1: ' + Transform(m.lnZileProcent1) + ' | Zile Proc. Pen. 2: ' + Transform(m.lnZileProcent2)) + +Endfunc && TestCalculeazaPenalitati + + +**************************************************************************************************************************** +*** Salveaza datele calculate pentru o factura din cheiaj +**************************************************************************************************************************** +Procedure salvare_cheiaj + Private poVoyage, poRec, poRecD, pnVVId + + Local lcSql, lcSqlBDDel, lcSqlBDIns, lcSqlBVIns, lcSqlVVIns, llScris, llSucces, llSucces2 + Local lcVVIds + lcVVIds = '' + + * Completez IPS_VOYAGES_VANZARI + Text To lcSqlVVIns Noshow +INSERT INTO IPS_VOYAGES_VANZARI(vye_id,client_id,client_ctr_id,eagent,beneficiar_id,tiprecap,intern,tip,document) +VALUES (?poVoyage.vye_id,?poVoyage.client_id,?poVoyage.client_ctr_id,?poVoyage.eagent,?poVoyage.beneficiar_id,?poVoyage.tiprecap,?poVoyage.intern,?poVoyage.tip,?poVoyage.document) +RETURNING id into ?@pnVVId + Endtext + + Text To lcSqlBVIns Noshow + insert into ips_berthings_vanzari + (vv_id, + vye_id, + bts_id, + rpt_id, + ves_id, + vs_name, + cap, + lbd, + trn, + hp, + lung, + datai, + datap, + id_locatia, + dana_id) + values + (?m.pnVVId, + ?poRec.vye_id, + ?poRec.id, + ?poRec.rpt_id, + ?poRec.ves_id, + ?poRec.nava, + ?poRec.cap, + ?poRec.lbd, + ?poRec.trn, + ?poRec.hp, + ?poRec.lung, + ?poRec.datai, + ?poRec.datap, + ?poRec.id_locatia, + ?poRec.dana_id) + RETURNING id into ?@poRec.bv_id + Endtext + + * COMPLETEZ IPS_BERTHING_DETAILS_VANZARI + lcSqlBDDel = [delete from ips_berthing_details_vanzari where bv_id = ?poRec.bv_id] + + Text To lcSqlBDIns Noshow + insert into ips_berthing_details_vanzari + (bv_id, + datai, + datap, + cant, + tarif, + um, + id_valuta, + curs, + valval, + tvaval, + totval, + valftva, + valtva, + valctva, + durata, + id_articol) + values + (?poRec.bv_id, + ?poRecD.datai, + ?poRecD.datap, + ?poRecD.cant, + ?poRecD.tarif, + ?poRecD.um, + ?poRecD.id_valuta, + ?poRecD.curs, + ?poRecD.valval, + ?poRecD.tvaval, + ?poRecD.totval, + ?poRecD.valftva, + ?poRecD.valtva, + ?poRecD.valctva, + ?poRecD.durata, + ?poRecD.id_articol) + Endtext + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + + Select crsVoyage + Scan + If !m.llSucces + Exit + Endif + + Scatter Name poVoyage + poVoyage.tip = NTIP_CHEIAJ && CHEIAJ + poVoyage.client_ctr_id = Iif(!Empty(Nvl(poVoyage.client_ctr_id, 0)), poVoyage.client_ctr_id, Null) && nu exista contract cu id=0 si nu se valideaza constrangerea + poVoyage.beneficiar_id = Iif(!Empty(Nvl(poVoyage.beneficiar_id, 0)), poVoyage.beneficiar_id, Null) + poVoyage.Document = Alltrim(poVoyage.Document) + poVoyage.vye_id = Alltrim(poVoyage.vye_id) + + * Completez IPS_VOYAGES_VANZARI + * Se adauga o inreigstrare in IPS_VOYAGES_VANZARI la fiecare factura, nu se suprascrie inregistrarea curenta! + pnVVId = 0 && Nvl(poVoyage.vv_id, 0) + llSucces = goExecutor.oExecuta(m.lcSqlVVIns) + + * COMPLETEZ IPS_BERTHINGS_VANZARI + If m.llSucces + Replace vv_id With m.pnVVId In crsVoyage + lcVVIds = m.lcVVIds + ',' + Alltrim(Str(Int(m.pnVVId))) + + * Actualizez ips_berthings_vanzari + Select crsBerthings + Scan For ales = 1 And vye_id = poVoyage.vye_id + Scatter Name poRec + poRec.vye_id = Alltrim(poRec.vye_id) + poRec.Id = Alltrim(poRec.Id) + poRec.rpt_id = Alltrim(poRec.rpt_id) + poRec.ves_id = Alltrim(poRec.ves_id) + * completez ips_berthings_vanzari.vs_name doar daca este diferit de cel al navei din IPS_VESSELS + * in cazul facturarii unui convoi generic declcdt = "FARA" + * Sunt situatii cand nu exista convoiul in RORIS + poRec.nava = Iif(Alltrim(Nvl(poRec.nava, '')) <> Alltrim(Nvl(poRec.vs_name, '')), Alltrim(Nvl(poRec.nava, '')), '') + + llSucces = goExecutor.oExecuta(m.lcSqlBVIns) + If !m.llSucces + Exit + Endif + Select crsBerthings + Replace bv_id With poRec.bv_id + + * Sterg detaliile vechi + llSucces = goExecutor.oExecuta(m.lcSqlBDDel) + + * Introduc detaliile noi + Select crsBerthingDetails + Scan For bts_id = poRec.Id And ves_id = poRec.ves_id + Scatter Name poRecD + llSucces = goExecutor.oExecuta(m.lcSqlBDIns) + If !m.llSucces + Exit + Endif + Select crsBerthingDetails + Replace Id With poRecD.Id + Endscan && crsBerthingDetails + Endscan && crsBerthings + Endif && llSucces + Endscan && crsVoyage + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + + If !Empty(m.lcVVIds) + lcVVIds = Substr(m.lcVVIds, 2) + Endif + poDate.uuid = m.lcVVIds + + Return m.lcVVIds +Endproc && salvare_cheiaj + + + +**************************************************************************************************************************** +*** Salveaza datele calculate pentru factura din tranzit +*** Intoarce o lista de ips_voyage_vazari.id, corespunzatoare fiecarui convoi ales +**************************************************************************************************************************** +Procedure salvare_tranzit + Private poVoyage, poRec, pnVVId + + lcVVIds = '' + + * Completez IPS_VOYAGES_VANZARI + * Se adauga o inreigstrare in IPS_VOYAGES_VANZARI la fiecare factura, nu se suprascrie inregistrarea curenta! + * Nu are rost ramura cu Update, dar pana la stabilizarea aplicatiei, ramane + + Text To lcSqlVIns Noshow +INSERT INTO IPS_VOYAGES_VANZARI(vye_id,client_id,client_ctr_id,eagent,beneficiar_id,tiprecap,intern,tip) + VALUES (?poVoyage.vye_id,?poVoyage.client_id,?poVoyage.client_ctr_id,?poVoyage.eagent,?poVoyage.beneficiar_id,?poVoyage.tiprecap,?poVoyage.intern,?poVoyage.tip) + RETURNING id into ?@pnVVId + Endtext + + Text To lcSqlVMIns Noshow +insert into ips_voyage_members_vanzari + (vv_id, + vye_id, + vms_id, + rte_id, + kmi, + kmf, + cuplat, + corect, + periculos, + procdist, + tcap, + lbd, + trn, + hp, + distanta, + distanta_cdmn, + tarif, + um, + cant, + id_valuta, + valval, + vtp_id, + procdiv, + gds_id, + quantity, + marfa_country_id) +values + (?poRec.vv_id, + ?poRec.vye_id, + ?poRec.vms_id, + ?poRec.rte_id, + ?NVL(poRec.kmi,0), + ?NVL(poRec.kmf,0), + ?poRec.cuplat, + ?poRec.corect, + ?poRec.periculos, + ?poRec.procdist, + ?NVL(poRec.tcap,0), + ?NVL(poRec.lbd,0), + ?NVL(poRec.trn,0), + ?NVL(poRec.hp,0), + ?NVL(poRec.distanta,0), + ?NVL(poRec.distanta_cdmn,0), + ?NVL(poRec.tarif,0), + ?TRIM(poRec.um), + ?NVL(poRec.cant,0), + ?poRec.id_valuta, + ?poRec.valval, + ?poRec.vtp_id, + ?poRec.procdiv, + ?poRec.gds_id, + ?poRec.cargo, + ?poRec.marfa_country_id) + RETURNING id into ?@poRec.vmv_id + Endtext + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + + Select crsVoyage + Scan + If !m.llSucces + Exit + Endif + + Scatter Name poVoyage + poVoyage.tip = NTIP_TRANZIT + poVoyage.client_ctr_id = Iif(!Empty(Nvl(poVoyage.client_ctr_id, 0)), poVoyage.client_ctr_id, Null) && nu exista contract cu id=0 si nu se valideaza constrangerea + poVoyage.beneficiar_id = Iif(!Empty(Nvl(poVoyage.beneficiar_id, 0)), poVoyage.beneficiar_id, Null) + + pnVVId = 0 && Nvl(poVoyage.vv_id, 0) + + llSucces = goExecutor.oExecuta(m.lcSqlVIns) + If !m.llSucces + Exit + Endif + + Replace vv_id With m.pnVVId In crsVoyage + lcVVIds = m.lcVVIds + ',' + Alltrim(Str(Int(m.pnVVId))) + + * COMPLETEZ IPS_VOYAGE_MEMBERS_VANZARI + Select crsVoyages + Scan For ales = 1 And vye_id = poVoyage.vye_id + Scatter Name poRec + poRec.vv_id = m.pnVVId + llSucces = goExecutor.oExecuta(m.lcSqlVMIns) + If !m.llSucces + Exit + Endif + Select crsVoyages + Replace vmv_id With poRec.vmv_id + Endscan && crsVoyages + Endscan && crsVoyage + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + + If !Empty(m.lcVVIds) + lcVVIds = Substr(m.lcVVIds, 2) + Endif + poDate.uuid = m.lcVVIds + + Return m.lcVVIds +Endproc && salvare_tranzit + + +**************************************************************************************************************************** +*** Salveaza datele calculate pentru factura din contract +*** Intoarce o lista de ips_regdoc.id, corespunzatoare fiecarei inregistrari adaugate +**************************************************************************************************************************** +Procedure salvare_contract + Local lcRgdIds, ldData, lcDocument, lcSqlIns, lcSelect + Private poRec + lcRgdIds = '' + lcSelect = Select() + + Text To lcSqlIns Noshow +insert into ips_regdoc + (tip, + id_articol, + id_locatia, + id_valuta, + id_client, + id_contract, + pret, + cantitate, + valval, + proc_tvav, + document, + data, + perioada) +values + (?poRec.tip, + ?poRec.id_articol, + ?poRec.id_locatia, + ?poRec.id_valuta, + ?poRec.id_client, + ?poRec.id_contract, + ?poRec.pret, + ?poRec.cantitate, + ?poRec.valval, + ?poRec.proc_tvav, + ?poRec.document, + ?poRec.data, + ?poRec.perioada) + RETURNING id into ?@poRec.id + Endtext + + ldData = crsCapFactura.dataact + lcDocument = Substr(Sys(2015), 2) + Select Cast(0 As N(20, 0)) As Id, poDate.nTipFactura As tip, m.ldData As Data, m.lcDocument As Document, id_articol, id_locatia, id_valuta, id_part As id_client, id_ctr As id_contract, Pret, cantitate, valval, proc_tvav, perioada ; + From crsArticoleContract ; + With (Buffering = .T.) ; + Into Cursor crsRegDocTemp + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + + Select crsRegDocTemp + Scan + Scatter Name poRec + poRec.perioada = Alltrim(Nvl(poRec.perioada, '')) + + llSucces = goExecutor.oExecuta(m.lcSqlIns) + If !m.llSucces + Exit + Endif + + lcRgdIds = m.lcRgdIds + ',' + Alltrim(Str(Int(m.poRec.Id))) + Endscan && crsRegDocTemp + Use In (Select('crsRegDocTemp')) + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + + If !Empty(m.lcRgdIds) + lcRgdIds = Substr(m.lcRgdIds, 2) + Endif + + poDate.uuid = m.lcRgdIds + + Select (m.lcSelect) + Return m.lcRgdIds +Endproc && salvare_contract + +**************************************************************************************************************************** +*** Deocamdata nu salveaza nimic in baza de date. Salvarea recapitulatiei se face la salvarea facturii +**************************************************************************************************************************** +Procedure salvare_penalitati + Local lcSelect, lcDel + lcSelect = Select() + + Use In (Select('crsCalculPenalitatiAles')) + lcDel = Set("Deleted") + Set Deleted Off + + * Selectez inregistrarile alese si pe cele sterse, sa le marchez sterse si in penalitati + * penalitati.sters = 2 (sters explicit de utilizator, nu sters automat la stergerea unei facturi de penalitati) + Select * From crsCalculPenalitati ; + With (Buffering = .T.) ; + Where ales Or sters = 2 ; + Into Cursor crsCalculPenalitatiAles Readwrite + + Set Deleted &lcDel + + Select (m.lcSelect) + Return '0' +Endproc && salvare_penalitati + +***************************************** +*** Sterg din IPS_REGDOC inregistrarile adaugate pentru CONTRACTE (CHIRII, APA), daca dau renunt la factura +***************************************** +Procedure STERG_CONTRACT_REGDOC + Local lcRgdIds, lcSql, llSucces + lcRgdIds = poDate.uuid + llSucces = .T. + + If !Empty(m.lcRgdIds) + lcSql = [DELETE FROM IPS_REGDOC WHERE ID IN (] + m.lcRgdIds + [)] + llSucces = goExecutor.oExecuta(m.lcSql) + Endif + Return m.llSucces +Endproc && STERG_CONTRACT_REGDOC + +***************************************** +*** Sterg din IPS_VOYAGES_VANZARI inregistrarile adaugate, daca dau renunt la factura +***************************************** +Procedure STERG_TRANZIT + Local lcRgdIds, lcSql, llSucces + lcVVIds = poDate.uuid + llSucces = .T. + + If !Empty(m.lcVVIds) + Text To lcSql Textmerge Noshow +BEGIN + DELETE FROM ips_voyage_members_vanzari WHERE VV_ID IN (<>); + DELETE FROM IPS_VOYAGES_VANZARI WHERE ID IN (<>); +END; + Endtext + llSucces = goExecutor.oExecuta(m.lcSql) + Endif && lcVVIds + Return m.llSucces +Endproc && STERG_TRANZIT + +***************************************** +*** Sterg din IPS_VOYAGES_VANZARI inregistrarile adaugate, daca dau renunt la factura +***************************************** +Procedure STERG_CHEIAJ + Local lcRgdIds, lcSql, llSucces + lcVVIds = poDate.uuid + llSucces = .T. + + If !Empty(m.lcVVIds) + Text To lcSql Textmerge Noshow +BEGIN + DELETE FROM ips_berthing_details_vanzari where bv_id IN (SELECT ID FROM IPS_BERTHINGS_VANZARI WHERE VV_ID IN (<>)); + DELETE FROM ips_berthings_vanzari WHERE VV_ID IN (<>); + DELETE FROM IPS_VOYAGES_VANZARI WHERE ID IN (<>); +END; + Endtext + llSucces = goExecutor.oExecuta(m.lcSql) + Endif && lcVVIds + + Return m.llSucces +Endproc && STERG_CHEIAJ + +******************************************************************************************* +*** completez cursul valutar si valorile in lei pe barje, dupa factura, in scopul calcularii valorilor defalcate pe ecluze, senal +******************************************************************************************* +Procedure update_tranzit + Lparameters tcVVIds + + Local lcSql, llScris, llSucces, llSucces2 + Private pnVVId, pnCurs, pnIdValuta, pnProcTva + + Text To lcSql Textmerge Noshow +update ips_voyage_members_vanzari set curs = ?pnCurs, + tvaval = ROUND(valval * ?pnProcTVA, ?gnPVal), + totval = valval + ROUND(valval * ?pnProcTVA, ?gnPVal), + valftva = ROUND(valval * ?pnCurs, ?gnPC), + valtva = ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC), + valctva = ROUND(valval * ?pnCurs, ?gnPC) + ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC) + where vv_id in (<>) and id_valuta = ?pnIdValuta + Endtext + + Select Distinct Curs, id_valuta, proc_tva From crsFactura Into Cursor cValuteTemp + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + If m.llSucces + Select cValuteTemp + Scan + pnCurs = Curs + pnIdValuta = id_valuta + pnProcTva = (proc_tva - 1) + llSucces = goExecutor.oExecuta(m.lcSql) + If !m.llSucces + Exit + Endif + Endscan + Endif && llSucces + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + Use In (Select('cValuteTemp')) + Return m.llSucces +Endproc && update_tranzit + +******************************************************************************************* +*** completez in ips_berthing_details_vanzari: cursul valutar si valorile in lei pe barje, dupa factura, in scopul calcularii valorilor defalcate pe ecluze, senal +******************************************************************************************* +Procedure update_cheiaj + Lparameters tcVVIds + + Local lcSql, llScris, llSucces, llSucces2 + Private pnVVId, pnCurs, pnIdValuta, pnProcTva + + Text To lcSql Textmerge Noshow +update ips_berthing_details_vanzari set curs = ?pnCurs, + tvaval = ROUND(valval * ?pnProcTVA, ?gnPVal), + totval = valval + ROUND(valval * ?pnProcTVA, ?gnPVal), + valftva = ROUND(valval * ?pnCurs, ?gnPC), + valtva = ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC), + valctva = ROUND(valval * ?pnCurs, ?gnPC) + ROUND(ROUND(valval * ?pnCurs, ?gnPC) * ?pnProcTVA , ?gnPC) + where id_valuta = ?pnIdValuta and bv_id in (select id from ips_berthings_vanzari where vv_id in (<>)) + Endtext + + Select Distinct Curs, id_valuta, proc_tva From crsFactura Into Cursor cValuteTemp + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + If m.llSucces + Select cValuteTemp + Scan + pnCurs = Curs + pnIdValuta = id_valuta + pnProcTva = (proc_tva - 1) + llSucces = goExecutor.oExecuta(m.lcSql) + If !m.llSucces + Exit + Endif + Endscan + Endif && llSucces + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + Use In (Select('cValuteTemp')) + Return m.llSucces +Endproc && update_cheiaj + +******************************************************************************************* +*** completez in ips_regdoc: cursul valutar si valorile in lei +******************************************************************************************* +Procedure update_contracte + Lparameters tcRgdIds + + Local lcSql, llScris, llSucces, llSucces2, lcSqlValuta + Private pnVVId, pnCurs, pnIdValuta, pnProcTva, pnProcTVAV + + * Folosesc 4 zecimale la rotunjire, pentru ca in recapitulatie sa apara cu 4 zecimale, iar in factura adun toate liniile intr-una singura si rotunjesc suma totala la 2 zecimale + Text To lcSql Textmerge Noshow +update ips_regdoc set curs = ?pnCurs, + tvaval = ROUND(valval * ?pnProcTVA, ?gnPval), + totval = valval + ROUND(valval * ?pnProcTVA, ?gnPval), + valftva = ROUND(valval * ?pnCurs, ?gnPC), + valtva = ROUND(ROUND(valval * ?pnCurs, ?gnPval) * ?pnProcTVA , ?gnPC), + valctva = ROUND(valval * ?pnCurs, ?gnPval) + ROUND(ROUND(valval * ?pnCurs, ?gnPval) * ?pnProcTVA , ?gnPc) + where id_valuta = ?pnIdValuta and proc_tvav = ?pnProcTVAV and id in (<>) + Endtext + + * In crsFactura este o singura linie cu id_valuta = LEI pentru INTERN sau id_valuta distinct pentru EXTERN + * Trebuie sa iau id_valuta din IPS_REGDOC, nu din crsFactura + Text To lcSqlValuta Textmerge Noshow +SELECT distinct id_valuta, proc_tvav FROM ips_regdoc WHERE id in (<>) + Endtext + + llSucces = goExecutor.oExecuta(m.lcSqlValuta, 'cValuteRgd') + If m.llSucces + Select r.id_valuta, r.proc_tvav As proc_tva, C.Curs From cValuteRgd r Left Join crsCursuri C On r.id_valuta = C.id_valuta Into Cursor cValuteTemp + Endif + Use In (Select('cValuteRgd')) + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + If m.llSucces + Select cValuteTemp + Scan + pnCurs = Nvl(Curs, 1) && CURS LEI = 1 + pnIdValuta = id_valuta + pnProcTva = (proc_tva - 1) + pnProcTVAV = proc_tva + llSucces = goExecutor.oExecuta(m.lcSql) + If !m.llSucces + Exit + Endif + Endscan + Endif && llSucces + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + Use In (Select('cValuteTemp')) + Return m.llSucces +Endproc && update_contracte + +******************************************************************************************** +*** defalc valoarea pe ecluze si senale navigabile pentru fiecare nava din convoiul facturat pentru inregistrare in Reg. documente si apoi in contabilitate +*** Completez cursorul cRegDoc cu valori defalcate pe ecluze, senal pentru salvarea in Reg. Doc si in ontabilitate +******************************************************************************************** +Procedure completeaza_regdoc_tranzit + Lparameters tcVVIds + * tnVVId: ips_voyages_vanzari.id + + Private pnVVId, pcVyeId + Private pnIPSTranzitProcAG, pnIPSTranzitProcCV, pnIPSTranzitProcOV, pnIPSTranzitProcNV + Local lcSql, llSucces + Local lcEclC, lcEclP, lcLockName, llShowError, lnEcluzariCdmn, lnEcluzariPamn, lnProcent, lnTotValC + Local lnTotValP, lnTranzitProcCDMN, lnTranzitProcPAMN, lnTvaValC, lnTvaValP, lnValctvaC, lnValctvaP + Local lnValfftvaC, lnValfftvaP, lnValtvaC, lnValtvaP, lnValvalC, lnValvalP, loArticol, loRec, lcDeclCdt + pnVVId = 0 + pcVyeId = '' + lcDeclCdt = '' + llSucces = .T. + + Create Cursor cVoyageMembersV (vv_id I, vye_id C(36), DECLCDT C(100), vms_id C(36), ; + valftva N(18, 2), valtva N(18, 2), valctva N(18, 2), valval N(18, 2), TVAVAL N(18, 2), totval N(18, 2), id_valuta N(5), procentCDMN N(18, 4), ; + valftvaCDMN N(18, 2), valtvaCDMN N(18, 2), valctvaCDMN N(18, 2), valvalCDMN N(18, 2), tvavalCDMN N(18, 2), totvalCDMN N(18, 2), ; + valftvaPAMN N(18, 2), valtvaPAMN N(18, 2), valctvaPAMN N(18, 2), valvalPAMN N(18, 2), tvavalPAMN N(18, 2), totvalPAMN N(18, 2), ; + valftvaAG1 N(18, 2), valtvaAG1 N(18, 2), valctvaAG1 N(18, 2), valvalAG1 N(18, 2), tvavalAG1 N(18, 2), totvalAG1 N(18, 2), ; + valftvaAG2 N(18, 2), valtvaAG2 N(18, 2), valctvaAG2 N(18, 2), valvalAG2 N(18, 2), tvavalAG2 N(18, 2), totvalAG2 N(18, 2), ; + valftvaCV1 N(18, 2), valtvaCV1 N(18, 2), valctvaCV1 N(18, 2), valvalCV1 N(18, 2), tvavalCV1 N(18, 2), totvalCV1 N(18, 2), ; + valftvaCV2 N(18, 2), valtvaCV2 N(18, 2), valctvaCV2 N(18, 2), valvalCV2 N(18, 2), tvavalCV2 N(18, 2), totvalCV2 N(18, 2), ; + valftvaOV1 N(18, 2), valtvaOV1 N(18, 2), valctvaOV1 N(18, 2), valvalOV1 N(18, 2), tvavalOV1 N(18, 2), totvalOV1 N(18, 2), ; + valftvaOV2 N(18, 2), valtvaOV2 N(18, 2), valctvaOV2 N(18, 2), valvalOV2 N(18, 2), tvavalOV2 N(18, 2), totvalOV2 N(18, 2), ; + valftvaNV1 N(18, 2), valtvaNV1 N(18, 2), valctvaNV1 N(18, 2), valvalNV1 N(18, 2), tvavalNV1 N(18, 2), totvalNV1 N(18, 2), ; + valftvaNV2 N(18, 2), valtvaNV2 N(18, 2), valctvaNV2 N(18, 2), valvalNV2 N(18, 2), tvavalNV2 N(18, 2), totvalNV2 N(18, 2), ; + valftvaCDMNS N(18, 2), valtvaCDMNS N(18, 2), valctvaCDMNS N(18, 2), valvalCDMNS N(18, 2), tvavalCDMNS N(18, 2), totvalCDMNS N(18, 2), ; + valftvaPAMNS N(18, 2), valtvaPAMNS N(18, 2), valctvaPAMNS N(18, 2), valvalPAMNS N(18, 2), tvavalPAMNS N(18, 2), totvalPAMNS N(18, 2)) + + pnIPSTranzitProcAG = Iif(Type('gnIPSTranzitProcAG') = 'N', m.gnIPSTranzitProcAG, 0) + pnIPSTranzitProcCV = Iif(Type('gnIPSTranzitProcCV') = 'N', m.gnIPSTranzitProcCV, 0) + pnIPSTranzitProcOV = Iif(Type('gnIPSTranzitProcOV') = 'N', m.gnIPSTranzitProcOV, 0) + pnIPSTranzitProcNV = Iif(Type('gnIPSTranzitProcNV') = 'N', m.gnIPSTranzitProcNV, 0) + + * Pentru fiecare voiaj ales selectez ecluzarile + llSucces = goExecutor.oExecuta([select distinct vv_id, vye_id, declaratio FROM ips_vvoyages_vanzari where vv_id in (] + m.tcVVIds + [)], "cVVTemp") + If !m.llSucces + Create Cursor cVVTemp (vye_id I, declaratio C(20)) + Endif + + Select cVVTemp + Scan + pcVyeId = cVVTemp.vye_id + pnVVId = cVVTemp.vv_id + lcDeclCdt = Alltrim(Nvl(cVVTemp.declaratio, '')) + + * Selectez ecluzele AGIGEA, CERNAVODA, OVIDIU, NAVODARI prin care a ecluzat convoiul. + * In IPS_VVOYAGE_LOCKS ecluzarile sunt defalcate pe membrii convoiului si pe camerele ecluzei, nu pe convoi si pe ecluze + * De aceea selectez distinct id_lock + + * 26.05.2020 selectez si dupa vms_id (membru convoi) pentru ca inregistrez veniturile pe ecluze la nivel de camere de ecluzare + * o nava poate sa treaca printr-o camera de ecluzare, alta nava prin alta camera sau deloc prin ecluza + Text To lcSql Textmerge Noshow + Select vms_id, id_lock, + CAST(CASE WHEN UPPER(LOCK_NAME) LIKE '%AGIGEA%' THEN 'AGIGEA' + WHEN UPPER(LOCK_NAME) LIKE '%CERNAVODA%' THEN 'CERNAVODA' + WHEN UPPER(LOCK_NAME) LIKE '%OVIDIU%' THEN 'OVIDIU' + WHEN UPPER(LOCK_NAME) LIKE '%NAVODARI%' THEN 'NAVODARI' + ELSE '' END AS VARCHAR2(20)) AS lock_name, + chamber_name, + CAST(CASE WHEN UPPER(LOCK_NAME) LIKE '%AGIGEA%' THEN ?pnIPSTranzitProcAG + WHEN UPPER(LOCK_NAME) LIKE '%CERNAVODA%' THEN ?pnIPSTranzitProcCV + WHEN UPPER(LOCK_NAME) LIKE '%OVIDIU%' THEN ?pnIPSTranzitProcOV + WHEN UPPER(LOCK_NAME) LIKE '%NAVODARI%' THEN ?pnIPSTranzitProcNV + ELSE 0 END AS NUMBER(6,2)) AS PROCENT + FROM IPS_VVOYAGE_LOCKS + WHERE vye_id = ?pcVyeId + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, 'cVoyageLocksX') + + If m.llSucces + lcSql = [Select VV_ID, VYE_ID,VMS_ID,VALFTVA,VALTVA,VALCTVA,VALVAL,TVAVAL,TOTVAL,ID_VALUTA,Round(DISTANTA_CDMN / DISTANTA, 4) As procentCDMN From IPS_VOYAGE_MEMBERS_VANZARI Where VV_ID = ?pnVVId] + + llSucces = goExecutor.oExecuta(m.lcSql, 'cVoyageMembersX') + If m.llSucces + Select cVoyageMembersV + Append From Dbf('cVoyageMembersX') + Use In (Select('cVoyageMembersX')) + Endif + Endif && m.llSucces + + If m.llSucces + Select cVoyageMembersV + Scan For vv_id = m.pnVVId + lnVmsId = vms_id + Replace DECLCDT With m.lcDeclCdt + + *** Daca este o singura ecluzare, se calculeaza valoarea senalului ca procent fix, iar diferenta trece pe ecluza + *** Daca sunt mai multe ecluzari, se calculeaza valoare senalului ca diferenta dintre valoarea parcursa pe canal - valoare ecluzari + + ******************************** + *** Valori totale pe CDMN si PAMN in functie de procentul de distanta parcurs de fiecare nava pe canalul CDMN + ******************************** + * CDMN + Replace valftvaCDMN With Round(valftva * procentCDMN, 2), valctvaCDMN With Round(valctva * procentCDMN, 2) + Replace valtvaCDMN With valctvaCDMN - valftvaCDMN + Replace valvalCDMN With Round(valval * procentCDMN, 2), totvalCDMN With Round(totval * procentCDMN, 2) + Replace tvavalCDMN With totvalCDMN - valvalCDMN + + * PAMN + Replace valftvaPAMN With valftva - valftvaCDMN, valctvaPAMN With valctva - valctvaCDMN + Replace valtvaPAMN With valtva - valtvaCDMN + Replace valvalPAMN With valval - valvalCDMN, totvalPAMN With totval - totvalCDMN + Replace tvavalPAMN With TVAVAL - tvavalCDMN + + ***************************************** + * Calculez valorile pe senale navigabile + ***************************************** + lnTranzitProcCDMN = (100 - (m.pnIPSTranzitProcAG + m.pnIPSTranzitProcCV)) / 100 + lnTranzitProcPAMN = (100 - (m.pnIPSTranzitProcOV + m.pnIPSTranzitProcNV)) / 100 + + Select cVoyageMembersV + * Senal CDMN = valoarea CDMN * procent senal CDMN + Replace valftvaCDMNS With Round(valftvaCDMN * m.lnTranzitProcCDMN, 2), valctvaCDMNS With Round(valctvaCDMN * lnTranzitProcCDMN, 2) + Replace valtvaCDMNS With valctvaCDMNS - valftvaCDMNS + + Replace valvalCDMNS With Round(valvalCDMN * m.lnTranzitProcCDMN, 2), totvalCDMNS With Round(totvalCDMN * m.lnTranzitProcCDMN, 2) + Replace tvavalCDMNS With totvalCDMNS - valvalCDMNS + + * Senal PAMN WITH valoarea PAMN * procent senal PAMN + Replace valftvaPAMNS With Round(valftvaPAMN * m.lnTranzitProcPAMN, 2), valctvaPAMNS With Round(valctvaPAMN * lnTranzitProcPAMN, 2) + Replace valtvaPAMNS With valctvaPAMNS - valftvaPAMNS + + Replace valvalPAMNS With Round(valvalPAMN * m.lnTranzitProcPAMN, 2), totvalPAMNS With Round(totvalPAMN * m.lnTranzitProcPAMN, 2) + Replace tvavalPAMNS With totvalPAMNS - valvalPAMNS + + lnEcluzariCdmn = 0 + lnEcluzariPamn = 0 + lcEclC = "" + lcEclP = "" + lcChamberC = "" + lcChamberP = "" + + * Ecluze + Select cVoyageLocksX + Scan For vms_id = m.lnVmsId + lnProcent = procent / 100 + lcLockName = Alltrim(lock_name) + lcChamberName = Alltrim(chamber_name) + + Select cVoyageMembersV + Do Case + Case m.lcLockName = 'AGIGEA' And m.lcChamberName = 'SAS1' + Replace valftvaAG1 With Round(valftvaCDMN * lnProcent, 2), valctvaAG1 With Round(valctvaCDMN * lnProcent, 2) + Replace valtvaAG1 With valctvaAG1 - valftvaAG1 + + Replace valvalAG1 With Round(valvalCDMN * lnProcent, 2), totvalAG1 With Round(totvalCDMN * lnProcent, 2) + Replace tvavalAG1 With totvalAG1 - valvalAG1 + + lnEcluzariCdmn = lnEcluzariCdmn + 1 + lcEclC = m.lcLockName + lcChamberC = m.lcChamberName + Case m.lcLockName = 'AGIGEA' And m.lcChamberName = 'SAS2' + Replace valftvaAG2 With Round(valftvaCDMN * lnProcent, 2), valctvaAG2 With Round(valctvaCDMN * lnProcent, 2) + Replace valtvaAG2 With valctvaAG2 - valftvaAG2 + + Replace valvalAG2 With Round(valvalCDMN * lnProcent, 2), totvalAG2 With Round(totvalCDMN * lnProcent, 2) + Replace tvavalAG2 With totvalAG2 - valvalAG2 + + lnEcluzariCdmn = lnEcluzariCdmn + 1 + lcEclC = m.lcLockName + lcChamberC = m.lcChamberName + Case m.lcLockName = 'CERNAVODA' And m.lcChamberName = 'SAS1' + Replace valftvaCV1 With Round(valftvaCDMN * lnProcent, 2), valctvaCV1 With Round(valctvaCDMN * lnProcent, 2) + Replace valtvaCV1 With valctvaCV1 - valftvaCV1 + + Replace valvalCV1 With Round(valvalCDMN * lnProcent, 2), totvalCV1 With Round(totvalCDMN * lnProcent, 2) + Replace tvavalCV1 With totvalCV1 - valvalCV1 + + lcEclC = m.lcLockName + lnEcluzariCdmn = lnEcluzariCdmn + 1 + lcChamberC = m.lcChamberName + Case m.lcLockName = 'CERNAVODA' And m.lcChamberName = 'SAS2' + Replace valftvaCV2 With Round(valftvaCDMN * lnProcent, 2), valctvaCV2 With Round(valctvaCDMN * lnProcent, 2) + Replace valtvaCV2 With valctvaCV2 - valftvaCV2 + + Replace valvalCV2 With Round(valvalCDMN * lnProcent, 2), totvalCV2 With Round(totvalCDMN * lnProcent, 2) + Replace tvavalCV2 With totvalCV2 - valvalCV2 + + lcEclC = m.lcLockName + lnEcluzariCdmn = lnEcluzariCdmn + 1 + lcChamberC = m.lcChamberName + Case m.lcLockName = 'OVIDIU' And m.lcChamberName = 'C1' + Replace valftvaOV1 With Round(valftvaPAMN * lnProcent, 2), valctvaOV1 With Round(valctvaPAMN * lnProcent, 2) + Replace valtvaOV1 With valctvaOV1 - valftvaOV1 + + Replace valvalOV1 With Round(valvalPAMN * lnProcent, 2), totvalOV1 With Round(totvalPAMN * lnProcent, 2) + Replace tvavalOV1 With totvalOV1 - valvalOV1 + + lcEclP = m.lcLockName + lnEcluzariPamn = lnEcluzariPamn + 1 + lcChamberP = m.lcChamberName + Case m.lcLockName = 'OVIDIU' And m.lcChamberName = 'C2' + Replace valftvaOV2 With Round(valftvaPAMN * lnProcent, 2), valctvaOV2 With Round(valctvaPAMN * lnProcent, 2) + Replace valtvaOV2 With valctvaOV2 - valftvaOV2 + + Replace valvalOV2 With Round(valvalPAMN * lnProcent, 2), totvalOV2 With Round(totvalPAMN * lnProcent, 2) + Replace tvavalOV2 With totvalOV2 - valvalOV2 + + lcEclP = m.lcLockName + lnEcluzariPamn = lnEcluzariPamn + 1 + lcChamberP = m.lcChamberName + Case m.lcLockName = 'NAVODARI' And m.lcChamberName = 'C1' + Replace valftvaNV1 With Round(valftvaPAMN * lnProcent, 2), valctvaNV1 With Round(valctvaPAMN * lnProcent, 2) + Replace valtvaNV1 With valctvaNV1 - valftvaNV1 + + Replace valvalNV1 With Round(valvalPAMN * lnProcent, 2), totvalNV1 With Round(totvalPAMN * lnProcent, 2) + Replace tvavalNV1 With totvalNV1 - valvalNV1 + + lcEclP = m.lcLockName + lnEcluzariPamn = lnEcluzariPamn + 1 + lcChamberP = m.lcChamberName + Case m.lcLockName = 'NAVODARI' And m.lcChamberName = 'C2' + Replace valftvaNV2 With Round(valftvaPAMN * lnProcent, 2), valctvaNV2 With Round(valctvaPAMN * lnProcent, 2) + Replace valtvaNV2 With valctvaNV2 - valftvaNV2 + + Replace valvalNV2 With Round(valvalPAMN * lnProcent, 2), totvalNV2 With Round(totvalPAMN * lnProcent, 2) + Replace tvavalNV2 With totvalNV2 - valvalNV2 + + lcEclP = m.lcLockName + lnEcluzariPamn = lnEcluzariPamn + 1 + lcChamberP = m.lcChamberName + Endcase + Endscan && cVoyageLocksX + + *** Diferenta (tranzit CDMN/PAMN - senal CDMN/PAMN - ecluzari (AG,CV/OV,NV) trece pe ecluzare pe fiecare canal, daca exista, altfel pe senal + Select cVoyageMembersV + lnValfftvaC = valftvaCDMN - (valftvaCDMNS + valftvaAG1 + valftvaCV1 + valftvaAG2 + valftvaCV2) + lnValctvaC = valctvaCDMN - (valctvaCDMNS + valctvaAG1 + valctvaCV1 + valctvaAG2 + valctvaCV2) + lnValtvaC = m.lnValctvaC - m.lnValfftvaC + + lnValvalC = valvalCDMN - (valvalCDMNS + valvalAG1 + valvalCV1 + valvalAG2 + valvalCV2) + lnTotValC = totvalCDMN - (totvalCDMNS + totvalAG1 + totvalCV1 + totvalAG2 + totvalCV2) + lnTvaValC = m.lnTotValC - m.lnValvalC + + lnValfftvaP = valftvaPAMN - (valftvaPAMNS + valftvaOV1 + valftvaNV1 + valftvaOV2 + valftvaNV2) + lnValctvaP = valctvaPAMN - (valctvaPAMNS + valctvaOV1 + valctvaNV1 + valctvaOV2 + valctvaNV2) + lnValtvaP = m.lnValctvaP - m.lnValfftvaP + + lnValvalP = valvalPAMN - (valvalPAMNS + valvalOV1 + valvalNV1 + valvalOV2 + valvalNV2) + lnTotValP = totvalPAMN - (totvalPAMNS + totvalOV1 + totvalNV1 + totvalOV2 + totvalNV2) + lnTvaValP = m.lnTotValP - m.lnValvalP + + Select cVoyageMembersV + If m.lnEcluzariCdmn = 0 + * Senal CDMN = valoarea CDMN - (AG + CV) + Replace valftvaCDMNS With valftvaCDMNS + m.lnValfftvaC, valctvaCDMNS With valctvaCDMNS + m.lnValctvaC, valtvaCDMNS With valtvaCDMNS + lnValtvaC + Replace valvalCDMNS With valvalCDMNS + m.lnValvalC, totvalCDMNS With totvalCDMNS + m.lnTotValC, tvavalCDMNS With tvavalCDMNS + m.lnTvaValC + Else + Do Case + Case m.lcEclC = 'AGIGEA' And m.lcChamberC = 'SAS1' && pun diferenta pe ultima ecluza + Replace valftvaAG1 With valftvaAG1 + m.lnValfftvaC, valctvaAG1 With valctvaAG1 + m.lnValctvaC, valtvaAG1 With valtvaAG1 + m.lnValtvaC + Replace valvalAG1 With valvalAG1 + m.lnValvalC, totvalAG1 With totvalAG1 + m.lnTotValC, tvavalAG1 With tvavalAG1 + m.lnTvaValC + + Case m.lcEclC = 'AGIGEA' And m.lcChamberC = 'SAS2' && pun diferenta pe ultima ecluza + Replace valftvaAG2 With valftvaAG2 + m.lnValfftvaC, valctvaAG2 With valctvaAG2 + m.lnValctvaC, valtvaAG2 With valtvaAG2 + m.lnValtvaC + Replace valvalAG2 With valvalAG2 + m.lnValvalC, totvalAG2 With totvalAG2 + m.lnTotValC, tvavalAG2 With tvavalAG2 + m.lnTvaValC + + Case m.lcEclC = 'CERNAVODA' And m.lcChamberC = 'SAS1' && pun diferenta pe ultima ecluza + Replace valftvaCV1 With valftvaCV1 + m.lnValfftvaC, valctvaCV1 With valctvaCV1 + m.lnValctvaC, valtvaCV1 With valtvaCV1 + m.lnValtvaC + Replace valvalCV1 With valvalCV1 + m.lnValvalC, totvalCV1 With totvalCV1 + m.lnTotValC, tvavalCV1 With tvavalCV1 + m.lnTvaValC + + Otherwise && CASE m.lcEclC = 'CERNAVODA' AND m.lcChamber = 'SAS2' && pun diferenta pe ultima ecluza + Replace valftvaCV2 With valftvaCV2 + m.lnValfftvaC, valctvaCV2 With valctvaCV2 + m.lnValctvaC, valtvaCV2 With valtvaCV2 + m.lnValtvaC + Replace valvalCV2 With valvalCV2 + m.lnValvalC, totvalCV2 With totvalCV2 + m.lnTotValC, tvavalCV2 With tvavalCV2 + m.lnTvaValC + Endcase + Endif + + If m.lnEcluzariPamn = 0 + * Senal PAMN = valoarea PAMN - (OV + NV) + Replace valftvaPAMNS With valftvaPAMNS + m.lnValfftvaP, valctvaPAMNS With valctvaPAMNS + m.lnValctvaP, valtvaPAMNS With valtvaPAMNS + lnValtvaP + Replace valvalPAMNS With valvalPAMNS + m.lnValvalP, totvalPAMNS With totvalPAMNS + m.lnTotValP, tvavalPAMNS With tvavalPAMNS + m.lnTvaValP + Else + Do Case + Case m.lcEclP = 'OVIDIU' And m.lcChamberP = 'C1' && pun diferenta pe ultima ecluza + Replace valftvaOV1 With valftvaOV1 + m.lnValfftvaP, valctvaOV1 With valctvaOV1 + m.lnValctvaP, valtvaOV1 With valtvaOV1 + m.lnValtvaP + Replace valvalOV1 With valvalOV1 + m.lnValvalP, totvalOV1 With totvalOV1 + m.lnTotValP, tvavalOV1 With tvavalOV1 + m.lnTvaValP + + Case m.lcEclP = 'OVIDIU' And m.lcChamberP = 'C2' && pun diferenta pe ultima ecluza + Replace valftvaOV2 With valftvaOV2 + m.lnValfftvaP, valctvaOV2 With valctvaOV2 + m.lnValctvaP, valtvaOV2 With valtvaOV2 + m.lnValtvaP + Replace valvalOV2 With valvalOV2 + m.lnValvalP, totvalOV2 With totvalOV2 + m.lnTotValP, tvavalOV2 With tvavalOV2 + m.lnTvaValP + + Case m.lcEclP = 'NAVODARI' And m.lcChamberP = 'C1' && pun diferenta pe ultima ecluza + Replace valftvaNV1 With valftvaNV1 + m.lnValfftvaP, valctvaNV1 With valctvaNV1 + m.lnValctvaP, valtvaNV1 With valtvaNV1 + m.lnValtvaP + Replace valvalNV1 With valvalNV1 + m.lnValvalP, totvalNV1 With totvalNV1 + m.lnTotValP, tvavalNV1 With tvavalNV1 + m.lnTvaValP + + Otherwise && m.lcEclP = 'NAVODARI' AND m.lcChamber = 'C2' + Replace valftvaNV2 With valftvaNV2 + m.lnValfftvaP, valctvaNV2 With valctvaNV2 + m.lnValctvaP, valtvaNV2 With valtvaNV2 + m.lnValtvaP + Replace valvalNV2 With valvalNV2 + m.lnValvalP, totvalNV2 With totvalNV2 + m.lnTotValP, tvavalNV2 With tvavalNV2 + m.lnTvaValP + Endcase + Endif + Endscan && cVoyageMembersV + Endif && llSucces + + Use In (Select('cVoyageLocksX')) + Endscan && cVVTemp + Use In (Select('cVVTemp')) + + Select vye_id, DECLCDT, id_valuta, ; + Sum(valftvaAG1) As valftvaAG1, Sum(valtvaAG1) As valtvaAG1, Sum(valctvaAG1) As valctvaAG1, Sum(valvalAG1) As valvalAG1, Sum(tvavalAG1) As tvavalAG1, Sum(totvalAG1) As totvalAG1, ; + Sum(valftvaCV1) As valftvaCV1, Sum(valtvaCV1) As valtvaCV1, Sum(valctvaCV1) As valctvaCV1, Sum(valvalCV1) As valvalCV1, Sum(tvavalCV1) As tvavalCV1, Sum(totvalCV1) As totvalCV1, ; + Sum(valftvaOV1) As valftvaOV1, Sum(valtvaOV1) As valtvaOV1, Sum(valctvaOV1) As valctvaOV1, Sum(valvalOV1) As valvalOV1, Sum(tvavalOV1) As tvavalOV1, Sum(totvalOV1) As totvalOV1, ; + Sum(valftvaNV1) As valftvaNV1, Sum(valtvaNV1) As valtvaNV1, Sum(valctvaNV1) As valctvaNV1, Sum(valvalNV1) As valvalNV1, Sum(tvavalNV1) As tvavalNV1, Sum(totvalNV1) As totvalNV1, ; + Sum(valftvaAG2) As valftvaAG2, Sum(valtvaAG2) As valtvaAG2, Sum(valctvaAG2) As valctvaAG2, Sum(valvalAG2) As valvalAG2, Sum(tvavalAG2) As tvavalAG2, Sum(totvalAG2) As totvalAG2, ; + Sum(valftvaCV2) As valftvaCV2, Sum(valtvaCV2) As valtvaCV2, Sum(valctvaCV2) As valctvaCV2, Sum(valvalCV2) As valvalCV2, Sum(tvavalCV2) As tvavalCV2, Sum(totvalCV2) As totvalCV2, ; + Sum(valftvaOV2) As valftvaOV2, Sum(valtvaOV2) As valtvaOV2, Sum(valctvaOV2) As valctvaOV2, Sum(valvalOV2) As valvalOV2, Sum(tvavalOV2) As tvavalOV2, Sum(totvalOV2) As totvalOV2, ; + Sum(valftvaNV2) As valftvaNV2, Sum(valtvaNV2) As valtvaNV2, Sum(valctvaNV2) As valctvaNV2, Sum(valvalNV2) As valvalNV2, Sum(tvavalNV2) As tvavalNV2, Sum(totvalNV2) As totvalNV2, ; + Sum(valftvaCDMNS) As valftvaCDMNS, Sum(valtvaCDMNS) As valtvaCDMNS, Sum(valctvaCDMNS) As valctvaCDMNS, Sum(valvalCDMNS) As valvalCDMNS, Sum(tvavalCDMNS) As tvavalCDMNS, Sum(totvalCDMNS) As totvalCDMNS, ; + Sum(valftvaPAMNS) As valftvaPAMNS, Sum(valtvaPAMNS) As valtvaPAMNS, Sum(valctvaPAMNS) As valctvaPAMNS, Sum(valvalPAMNS) As valvalPAMNS, Sum(tvavalPAMNS) As tvavalPAMNS, Sum(totvalPAMNS) As totvalPAMNS ; + From cVoyageMembersV ; + Group By vye_id, DECLCDT, id_valuta ; + Into Cursor cVoyagesValori + + Use In (Select('cVoyageMembersV')) + + Delete From cRegDoc && curat cRegDoc + + Select cVoyagesValori + Scan + Scatter Name loRec + lnCantitate = Iif(valctvaAG1 < 0 Or valctvaCV1 < 0 Or valctvaOV1 < 0 Or valctvaNV1 < 0 Or valctvaCDMNS < 0 Or valctvaPAMNS < 0 Or valctvaAG2 < 0 Or valctvaCV2 < 0 Or valctvaOV2 < 0 Or valctvaNV2 < 0, -1, 1) + With loRec + If .valftvaAG1 <> 0 Or .valtvaAG1 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'AGIGEA-SAS1', .valftvaAG1, .valtvaAG1, .valctvaAG1, .valvalAG1, .valvalAG1, .id_valuta, m.lnCantitate) + Endif + If .valftvaCV1 <> 0 Or .valtvaCV1 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'CERNAVODA-SAS1', .valftvaCV1, .valtvaCV1, .valctvaCV1, .valvalCV1, .valvalCV1, .id_valuta, m.lnCantitate) + Endif + If .valftvaOV1 <> 0 Or .valtvaOV1 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'OVIDIU-C1', .valftvaOV1, .valtvaOV1, .valctvaOV1, .valvalOV1, .valvalOV1, .id_valuta, m.lnCantitate) + Endif + If .valftvaNV1 <> 0 Or .valtvaNV1 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'NAVODARI-C1', .valftvaNV1, .valtvaNV1, .valctvaNV1, .valvalNV1, .valvalNV1, .id_valuta, m.lnCantitate) + Endif + + If .valftvaAG2 <> 0 Or .valtvaAG2 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'AGIGEA-SAS2', .valftvaAG2, .valtvaAG2, .valctvaAG2, .valvalAG2, .valvalAG2, .id_valuta, m.lnCantitate) + Endif + If .valftvaCV2 <> 0 Or .valtvaCV2 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'CERNAVODA-SAS2', .valftvaCV2, .valtvaCV2, .valctvaCV2, .valvalCV2, .valvalCV2, .id_valuta, m.lnCantitate) + Endif + If .valftvaOV2 <> 0 Or .valtvaOV2 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'OVIDIU-C2', .valftvaOV2, .valtvaOV2, .valctvaOV2, .valvalOV2, .valvalOV2, .id_valuta, m.lnCantitate) + Endif + If .valftvaNV2 <> 0 Or .valtvaNV2 <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'NAVODARI-C2', .valftvaNV2, .valtvaNV2, .valctvaNV2, .valvalNV2, .valvalNV2, .id_valuta, m.lnCantitate) + Endif + + If .valftvaCDMNS <> 0 Or .valtvaCDMNS <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'SENAL CDMN', .valftvaCDMNS, .valtvaCDMNS, .valctvaCDMNS, .valvalCDMNS, .valvalCDMNS, .id_valuta, m.lnCantitate) + Endif + If .valftvaPAMNS <> 0 Or .valtvaPAMNS <> 0 + Insert Into cRegDoc(Document, locatia, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.DECLCDT, 'SENAL PAM', .valftvaPAMNS, .valtvaPAMNS, .valctvaPAMNS, .valvalPAMNS, .valvalPAMNS, .id_valuta, m.lnCantitate) + Endif + Endwith + Endscan && cVoyagesValori + Use In (Select('cVoyagesValori')) + + loArticol = GetPrestatieByTip(TIP_TRANZIT) + + Update cRegDoc Set id_articol = GetIdPrestatieByArticol(GetPrestatieByTip(TIP_TRANZIT)), id_locatia = GetIdLocatieByName(Alltrim(locatia)) + Return m.llSucces +Endproc && completeaza_regdoc_tranzit + +******************************************************************************************** +*** defalc valoarea pe locatii pentru fiecare nava din convoiul facturat pentru inregistrare in Reg. documente si apoi in contabilitate +*** Completez cursorul cRegDoc cu valori defalcate pe ecluze, senal pentru salvarea in Reg. Doc si in ontabilitate +******************************************************************************************** +Procedure completeaza_regdoc_cheiaj + Lparameters tcVVIds + * tnVVId: ips_voyages_vanzari.id + + Private pnVVId + Local lcSql, llSucces, lcDeclCdt + + pnVVId = 0 + llSucces = .T. + lcDeclCdt = '' + + llSucces = goExecutor.oExecuta([select distinct vv_id, declaratio FROM ips_vvoyages_vanzari where vv_id in (] + m.tcVVIds + [)], "cVVTemp") + If !m.llSucces + Create Cursor cVVTemp (vye_id I, declaratio C(20)) + Endif + + Delete From cRegDoc && curat cRegdoc + + Select cVVTemp + Scan + lcDeclCdt = Alltrim(Nvl(cVVTemp.declaratio, '')) + pnVVId = cVVTemp.vv_id + + Text To lcSql Noshow +Select b.vv_id, b.id_locatia, bd.id_articol, bd.id_valuta, Sum(bd.valftva) As valftva, Sum(bd.valtva) As valtva, Sum(bd.valctva) As valctva, Sum(bd.valval) As valval, Sum(bd.valval) As Pret + From ips_berthing_details_vanzari bd Join ips_berthings_vanzari b On bd.bv_id = b.Id + where b.vv_id = ?pnVVId + Group By b.vv_id, b.id_locatia, bd.id_articol, bd.id_valuta + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, 'cCheiajValori') + + If m.llSucces + Select cCheiajValori + Scan + Scatter Name loRec + AddProperty(loRec, 'articol', GetArticolById(loRec.id_articol)) + AddProperty(loRec, 'locatia', GetLocatieById(loRec.id_locatia)) + AddProperty(loRec, 'document', m.lcDeclCdt) + AddProperty(loRec, 'cantitate', Iif(loRec.valctva < 0, -1, 1)) + With loRec + Insert Into cRegDoc(Document, id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate) Values (.Document, .id_locatia, .locatia, .id_articol, .articol, .valftva, .valtva, .valctva, .valval, .valval, .id_valuta, .cantitate) + Endwith + Endscan + Endif && llSucces + Use In (Select('cCheiajValori')) + Endscan && cVVTemp + + Use In (Select('cVVTemp')) + + Return m.llSucces +Endproc && completeaza_regdoc_cheiaj + + +******************************************************************************************** +*** completez cRegdoc pe locatii din ips_regdoc +******************************************************************************************** +Procedure completeaza_regdoc_contracte + Lparameters tcRgdIds + Local llSucces, loRec, llIntern + + Select crsCapFactura + Go Top + llIntern = (crsCapFactura.intern = 1) + + Text To lcSql Textmerge Noshow +SELECT id, document, id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate, id_valuta, proc_tvav, CAST(0 as NUMBER(20)) as id_jtva_coloana, CAST(0 as NUMBER(20)) as id_jtva_coloana_ex FROM ips_vregdoc WHERE id in (<>) + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, 'cContractValori') + + If m.llSucces + * Completez id_jtva_coloana din crsFactura + Select id_valuta, proc_tva, id_jtva_coloana, id_jtva_coloana_ex From crsFactura Into Cursor cCoteFacturaTemp + + Select cCoteFacturaTemp + Scan + Scatter Name loRec + * Factura intern are toate articolele modificate in LEI si nu mai corespund fata de regdoc + If m.llIntern + Update cContractValori Set id_jtva_coloana = loRec.id_jtva_coloana, id_jtva_coloana_ex = loRec.id_jtva_coloana_ex Where proc_tvav = loRec.proc_tva + Else + Update cContractValori Set id_jtva_coloana = loRec.id_jtva_coloana, id_jtva_coloana_ex = loRec.id_jtva_coloana_ex Where id_valuta = loRec.id_valuta And proc_tvav = loRec.proc_tva + Endif + Endscan + + Use In (Select('cCoteFacturaTemp')) + + Delete From cRegDoc && curat cRegDoc + + Select cContractValori + Scan + Scatter Name loRec + With loRec + Insert Into cRegDoc(Id, id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, cantitate, id_jtva_coloana, id_jtva_coloana_ex) ; + Values (.Id, .id_locatia, .locatia, .id_articol, .articol, .valftva, .valtva, .valctva, .valval, .valval, .id_valuta, .cantitate, .id_jtva_coloana, .id_jtva_coloana_ex) + Endwith + Endscan + Endif && llSucces + Use In (Select('cContractValori')) + + llSucces = .T. + + Return m.llSucces +Endproc && completeaza_regdoc_contracte + + +******************************************************************************************** +*** completez cRegdoc pe locatii din ips_regdoc +******************************************************************************************** +Procedure completeaza_regdoc_penalitati + Lparameters tcRgdIds + + + Local lcSql, llSucces, lnCantitate, lnDiferenta, lnFactId, lnIdJtva, lnIdJtvaEx, lnIdMonedaNationala, loMonedaNationala + Local lnPrestatieIdCheiaj, lnPrestatieIdTranzit, lnProcTva, lnValTvaF, lnValTvaR, lnValctvaF, lnValctvaR, lnValftvaF, lnValftvaR + Local lcListaIdFact + + Select * From crsCalculPenalitatiAles Where sters = 0 Into Cursor cFacturiPenalitati NOFILTER + + *** REGDOC pentru facturile originale + Select Distinct id_fact From cFacturiPenalitati Into Cursor cFacturiTemp + lcListaIdFact = '' + Select cFacturiTemp + Scan + lcListaIdFact = lcListaIdFact + ',' + Alltrim(Str(id_fact)) + Endscan + lcListaIdFact = Iif(!Empty(m.lcListaIdFact), Substr(m.lcListaIdFact, 2), '') + Use In (Select('cFacturiTemp')) + + lcSql = [SELECT v.id_fact, r.id, r.id_locatia, r.id_articol, r.id_valuta, r.valftva, r.valval FROM ips_regdoc r join vanzari v on r.id_vanzare = v.id_vanzare WHERE v.id_fact in (] + m.lcListaIdFact + [)] + llSucces = goExecutor.oExecuta(m.lcSql, 'cRegdocPenalitati') + If !m.llSucces + Exit + Endif + + + *** selectez prestatiile facturate pentru tip 2,3,5,9 alte prestatii, chirii, livrare apa, facturi diverse + *** trebuie sa defalc suma de penalitati dupa cont, analitic pentru fiecare prestatie, + + *** calculez suma totala facturata pe fiecare document din regdoc, pentru calcularea proportiilor fiecarei prestatii + Select id_fact, Sum(valftva) As valftva, Sum(valval) As valval ; + From cRegdocPenalitati ; + Group By id_fact ; + Into Cursor cRegDocFacturi + + Select fp.id_fact, Cast(Nvl(r.id_articol, 0) As N(12)) As id_articol, Cast(Nvl(r.id_locatia, 0) As N(12)) As id_locatia, ; + Cast(Iif(fp.suma <> 0 And Nvl(r.valftva, 0) <> 0 And Nvl(rf.valftva, 0) <> 0, Round((r.valftva / rf.valftva) * fp.penalitati, m.gnPC), Iif(Empty(Nvl(rf.id_fact, 0)), fp.penalitati, 0.00)) As N(16, 2)) As suma, ; + fp.penalitati As psuma, Nvl(fp.tip, 0) As tip, fp.nrfact, fp.id_contract, fp.contract ; + From (Select id_fact, Max(id_ctr) As id_contract, Max(numar) As contract, Max(nrfact) As nrfact, Max(Nvl(tip, 0)) As tip, Sum(suma) As suma, Sum(sumaval) As sumaval, Sum(penalitati) As penalitati ; + From cFacturiPenalitati ; + Where Inlist(tip, NTIP_TRANZIT, NTIP_CHEIAJ, NTIP_APA, NTIP_CHIRII, NTIP_ALTE, NTIP_DIVERSE) ; + Group By id_fact) fp Left Join cRegdocPenalitati r On r.id_fact = fp.id_fact ; + Left Join cRegDocFacturi rf On rf.id_fact = fp.id_fact ; + Order By fp.id_fact, r.valftva Desc ; + Into Cursor cRegDocTemp Readwrite + + * Completez prestatia pentru cheiaj, daca nu o are completata + lnPrestatieIdCheiaj = GetIdPrestatieByArticol(GetPrestatieByTip(TIP_CHEIAJ)) + lnPrestatieIdTranzit = GetIdPrestatieByArticol(GetPrestatieByTip(TIP_TRANZIT)) + Update cRegDocTemp Set id_articol = m.lnPrestatieIdCheiaj Where tip = NTIP_CHEIAJ And Empty(Nvl(id_articol, 0)) + Update cRegDocTemp Set id_articol = m.lnPrestatieIdTranzit Where tip = NTIP_TRANZIT And Empty(Nvl(id_articol, 0)) + + Use In (Select('cFacturiPenalitati')) + Use In (Select('cRegDocFacturi')) + + *** Completez diferentele de zecimale dintre suma globala de penalitati pe factura si sumele defalcate pe prestatii + Select id_fact, Sum(suma) As suma, Min(psuma) As psuma ; + From cRegDocTemp ; + Group By id_fact ; + Into Cursor cRegDocSume NOFILTER + + Select cRegDocSume + Scan + lnFactId = id_fact + lnDiferenta = psuma - suma + If m.lnDiferenta <> 0 + Select cRegDocTemp + Locate For id_fact = m.lnFactId + If Found() + Replace suma With suma + m.lnDiferenta + Endif + Endif + Endscan + Use In (Select('cRegDocSume')) + + Select crsFactura + Go Top + lnIdJtva = id_jtva_coloana + lnIdJtvaEx = id_jtva_coloana_ex + lnCantitate = 1 + lnProcTva = proc_tva && 1,00 + loMonedaNationala = GetMonedaNationala() + lnIdMonedaNationala = loMonedaNationala.id_valuta + + Delete From cRegDoc && curat cRegdoc la Facturi diverse + + Insert Into cRegDoc(id_locatia, locatia, id_articol, articol, valftva, valval, Pret, id_valuta, id_jtva_coloana, id_jtva_coloana_ex, cantitate, Document, id_contract, contract) ; + Select id_locatia, GetLocatieById(id_locatia), id_articol, GetArticolById(id_articol), suma, suma, suma, m.lnIdMonedaNationala, m.lnIdJtva, m.lnIdJtvaEx, m.lnCantitate As cantitate, Alltrim(Str(nrfact)) As Document, id_contract, contract ; + From cRegDocTemp + + Update cRegDoc Set valtva = Round(valftva * (m.lnProcTva - 1), m.gnPC), TVAVAL = Round(valval * (m.lnProcTva - 1), m.gnPC) + Update cRegDoc Set valctva = valftva + valtva, totval = valval + TVAVAL + + * Ajustez diferenta dintre valoarea de pe factura si total valoare defalcata pe locatii si articole + Calculate Sum(valftva), Sum(valtva), Sum(valctva) To lnValftvaF, lnValTvaF, lnValctvaF In crsFactura + Calculate Sum(valftva), Sum(valtva), Sum(valctva) To lnValftvaR, lnValTvaR, lnValctvaR In cRegDoc + + Select cRegDoc + Go Top + Replace valftva With valftva + (m.lnValftvaF - m.lnValftvaR), valtva With valtva + (lnValTvaF - m.lnValTvaR), valctva With (lnValctvaF - m.lnValctvaR) + Replace valval With valftva, TVAVAL With valtva, totval With valctva + + Use In (Select('cRegDocTemp')) + + llSucces = .T. + + Return m.llSucces +Endproc && completeaza_regdoc_penalitati + +******************************************************************************************** +*** facturi diverse. se iau articolele direct din factura +*** scriu valoarea pe locatii pentru fiecare articol din factura pentru inregistrare in Reg. documente si apoi in contabilitate +******************************************************************************************** +Procedure completeaza_regdoc_alte + Lparameters tuUid + * Nu folosesc tuUid, pentru ca nu se completeaza intr-un formular distinct. + * Apelez procedura la salvarea facturilor diverse si completez cRegdoc direct din crsFactura + Local llSucces + + llSucces = .F. + Delete From cRegDoc && curat cRegdoc la Facturi diverse + + Select crsFactura + Scan + Scatter Name loRec + AddProperty(loRec, 'document', '') + AddProperty(loRec, 'articol', GetArticolById(loRec.id_articol)) + AddProperty(loRec, 'locatia', GetLocatieById(loRec.id_locatia)) + + With loRec + Insert Into cRegDoc(id_locatia, locatia, id_articol, articol, valftva, valtva, valctva, valval, Pret, id_valuta, id_jtva_coloana, id_jtva_coloana_ex, cantitate) ; + Values (.id_locatia, .locatia, .id_articol, .articol, .valftva, .valtva, .valctva, .valval, .pretval, .id_valuta, .id_jtva_coloana, .id_jtva_coloana_ex, .cantitate) + Endwith + + Endscan + llSucces = .T. + + Return m.llSucces +Endproc && completeaza_regdoc_alte + +************************************************** +*** Completeaza cursul valutar in cRegdoc din crsFactura +************************************************** +Procedure completeaza_regdoc_curs + Local lcSelect, lnCurs, lnIdValuta, llSucces + llSucces = .T. + + lcSelect = Select() + Select Distinct id_valuta, Curs From crsFactura Into Cursor cValuteTemp + Select cValuteTemp + Scan + lnCurs = Curs + lnIdValuta = id_valuta + Update cRegDoc Set Curs = m.lnCurs Where id_valuta = m.lnIdValuta + Endscan + + Use In (Select('cValuteTemp')) + Select (m.lcSelect) + + Return m.llSucces +Endproc && completeaza_regdoc_curs + +************************************ +*** Completeaza notele contabile in actactan pentru salvarea in contabilitate +************************************ +Procedure completeaza_actactan + Lparameters tcTip + + Local lcAscc, lcAscd, lcExplicatia, lcScc, lcScd, lcTip, llIntern, llPenalitati, llSucces, lnIdJTvaColoana, lcSelect + Local llTVAIncasare, lnIdArticol, lnIdLocatia, loFactura, loJTVA, loJtvaA, lnFacturaFaraTVA, lnFacturaTVA, lnFacturaFaraTVAVal, lnFacturaTVAVal, lnIdSet + Local lcContTva, lcAcontTva + Local llFurnizorRTVAI, lnActBaza, lnActBazaVal, lnActTVA, lnActTVAVal, lnDiferentaBaza + Local lnDiferentaBazaVal, lnDiferentaTVA, lnDiferentaTVAVal, lnIdJtva, lnTaxCode + + lcTip = m.tcTip + lnIdSet = 50200 + llSucces = .T. + lcSelect = Select() + + Select crsCapFactura + Go Top + Scatter Name loFactura + + Select crsFactura + Go Top + loJTVA = GeJtvaColoana(crsFactura.id_jtva_coloana, goCalendar.tva_incasare, "JV") + AddProperty(loFactura, "id_jtva_coloana", loJTVA.id_jtva_coloana) + AddProperty(loFactura, "id_tva", loJTVA.id_tva) + AddProperty(loFactura, "proc_tva", crsFactura.proc_tva) + + llIntern = (loFactura.intern = 1) + llTVAIncasare = (goCalendar.tva_incasare = 1) + + Select id_articol, id_locatia, Cast(Iif(m.llIntern, 0, id_valuta) As N(5)) As id_valuta, Cast(Iif(m.llIntern, 0, Curs) As N(12, 6)) As Curs, ; + Cast(0 As N(5, 2)) As proc_tva, id_jtva_coloana, Cast(0 As N(10)) As id_tva, CAST(null as N(9)) as taxcode, ; + Space(4) As scd, Space(4) As ascd, Space(4) As scc, Space(4) As ascc, Space(100) As explicatia, ; + Sum(valftva) As suma, Sum(valtva) As valtva, Sum(valctva) As valctva, ; + Sum(valval) As suma_val, Cast(0 As N(20, 4)) As TVAVAL, Cast(0 As N(20, 4)) As totval ; + From cRegDoc ; + Group By 1, 2, 3, 4, 5, 6, 7 ; + Into Cursor cActTemp Readwrite + + *** Completez conturi si analitice in functie de locatie si articol + Sele cActTemp + Scan + llPenalitati = (m.lcTip = TIP_PENALITATI) + lcScd = '' + lcAscd = '' + lcScc = '' + lcAscc = '' + lcExplicatia = '' + lnIdArticol = id_articol + lnIdLocatia = id_locatia + lnIdJTvaColoana = Nvl(id_jtva_coloana, 0) + llSucces = GetCont(m.lcTip, m.lnIdLocatia, m.lnIdArticol, m.llIntern, m.llPenalitati, @m.lcScd, @m.lcAscd, @m.lcScc, @m.lcAscc, @m.lcExplicatia) + If !m.llSucces + If amessagebox('Doriti sa continuati fara conturi configurate?', 4 + 32, _Screen.Caption) = 6 + llSucces = .T. + Else + Exit + Endif + Endif + + If !Empty(m.lnIdJTvaColoana) + loJtvaA = GeJtvaColoana(m.lnIdJTvaColoana, goCalendar.tva_incasare, "JV") + Else + loJtvaA = loJTVA && Explicatie TVA din prima linie din factura + Endif + + lnTaxCode = NULL + IF m.gl406 + llFurnizorRTVAI = .F. + lnIdJtva = Nvl(loJtvaA.id_jtva_coloana, 0) + lnTaxCode = GetTaxCode(m.gnAn, m.gnLuna, loFactura.dataact, m.lnIdJtva, m.llFurnizorRTVAI) + ENDIF + + Select cActTemp + Replace id_jtva_coloana With Nvl(loJtvaA.id_jtva_coloana, 0), id_tva With Nvl(loJtvaA.id_tva, 0), proc_tva With Round(1 + loJtvaA.cota_tva / 100, 2) + Replace scd With m.lcScd, ascd With m.lcAscd, scc With m.lcScc, ascc With m.lcAscc, TVAVAL With Round(suma_val * proc_tva / 100, m.gnPVal), totval With suma_val + Round(suma_val * proc_tva / 100, m.gnPVal) + REPLACE taxcode WITH m.lnTaxCode + Endscan && cActTemp + + If m.llSucces + Select id_valuta, Curs, proc_tva, id_jtva_coloana, id_tva, taxcode, scd, ascd, scc, ascc, explicatia, ; + Sum(suma) As suma, Sum(valtva) As valtva, Sum(valctva) As valctva, ; + Sum(suma_val) As suma_val, Sum(TVAVAL) As TVAVAL, Sum(totval) As totval ; + From cActTemp ; + Group By 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ; + Into Cursor cAct Readwrite + + * Calculez totalul de pe factura si corectez diferente de zecimale fata de selectia din REGDOC (mai multe randuri defalcate dupa locatii) + Calculate Sum(suma), Sum(valtva), Sum(suma_val), Sum(TVAVAL) To lnActBaza, lnActTVA, lnActBazaVal, lnActTVAVal In cAct + Calculate Sum(valftva), Sum(valtva), Sum(valval), Sum(TVAVAL) To lnFacturaFaraTVA, lnFacturaTVA, lnFacturaFaraTVAVal, lnFacturaTVAVal In crsFactura + lnDiferentaBaza = (m.lnFacturaFaraTVA - m.lnActBaza) + lnDiferentaTVA = (lnFacturaTVA - m.lnActTVA) + lnDiferentaBazaVal = (m.lnFacturaFaraTVAVal - m.lnActBazaVal) + lnDiferentaTVAVal = (lnFacturaTVAVal - m.lnActTVAVal) + + * Completez diferenta fata de factura pe primul rand din notele contabile + Select cAct + Go Top + Replace suma With suma + m.lnDiferentaBaza, valtva With valtva + m.lnDiferentaTVA, valctva With m.lnDiferentaBaza + m.lnDiferentaTVA + Replace suma_val With suma_val + m.lnDiferentaBazaVal, TVAVAL With TVAVAL + m.lnDiferentaTVAVal, totval With m.lnDiferentaBazaVal + m.lnDiferentaTVAVal + + Select actactan + Delete All + Append From Dbf('cAct') + + *** TVA + * Totalizez sumele in cursorul cActTVA astfel incat sa am o singura linie de TVA 27.05.2020 + *!* Select * From cAct Where valtva <> 0 Into Cursor cActTVA Readwrite + *!* Update cActTVA Set scc = Iif(m.llTVAIncasare, '4428', '4427'), ascc = '', suma = valtva, suma_val = TVAVAL, id_jtva_coloana = id_tva + lcContTva = Iif(m.llTVAIncasare, '4428', '4427') + lcAcontTva = '' + Select id_valuta, Curs, proc_tva, id_tva As id_jtva_coloana, id_tva, taxcode, scd, ascd, m.lcContTva As scc, m.lcAcontTva As ascc, explicatia, ; + Sum(valtva) As suma, ; + Sum(TVAVAL) As suma_val ; + From cAct ; + Group By 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ; + Into Cursor cActTVA Readwrite + + Delete From cActTVA Where suma = 0 + + Use In (Select('cAct')) + + Select actactan + Append From Dbf('cActTVA') + Use In (Select('cActTVA')) + + Update actactan Set id_partd = loFactura.client_id, id_fdoc = loFactura.id_fdoc, id_ctr = loFactura.client_ctr_id, contract = loFactura.contract_client, ; + dataact = loFactura.dataact, datascad = loFactura.datascad, dataireg = loFactura.dataact, nract = loFactura.nract, serie_act = loFactura.serie_act, id_set = m.lnIdSet, ; + explicatia = m.lcTip + + * Completez partener credit contul 472 venituri in avans (4111 = 472) + Update actactan Set id_partc = loFactura.client_id Where Inlist(Left(scc, 3), '472', '419', '411') + If m.llIntern + Update actactan Set suma_val = 0 + Endif + Endif && llSucces + Use In (Select('cActTemp')) + + Select (m.lcSelect) + Return m.llSucces +Endproc && completeaza_actactan + + +*********************************** +*** Obiect cu date aditionale pentru initializarea facturii +*********************************** +Define Class oDateFacturaACN As Custom + nIntern = 1 + cDenumireClient = '' + nIdClient = Null + cContractClient = '' + nIdContractClient = Null + lImportFactura = .F. && daca se apeleaza importul la intrarea in factura +Enddefine && oDateFacturaACN + + +**************************************************************************************************************************** +*** creeaza cursoarele si obiectele necesare pentru facturare +*** procedura de facturare se lanseaza din formularul frm_factura2, in loc sa se porneasca din tranzit, cheiaj, contracte +*** in formularul de facturare se importa date de tranzit, cheiaj, contracte +**************************************************************************************************************************** +Procedure factura_acn + Lparameters tcTip, toDateAditionale + * tcTip: tranzit/cheiaj/chirii/apa/diverse/penalitati + + * FACTURA TRANZIT, CHEIAJ, CHIRII, APA si PENALITATI genereaza o singura linie in crsFactura, prin import din formularele specifice de calcul + *** Nu se pot adauga linii suplimentare in factura + * FACTURA DIVERSE - se adauga liber linii in crsFactura + + Private poDate + Private poGeneratorNumere As "oGeneratorNumere" + Local llSucces, llSuucces, lnIdJtva, lnIdJTVAExpl, lnIdSet, lnProcTva, lnTip, loTVAStandard + Local lcTip, lcSelect + + If m.glLunaInchisa + amessagebox("Nu puteti emite documente, deoarece aceasta luna este inchisa!", 0 + 48, "Luna inchisa") + Return .F. + Endif + + If Empty(m.tcTip) + Return .F. + Endif + lcTip = Upper(Alltrim(m.tcTip)) + + make_ccapfactura() && crsCapFactura + make_cfactura() && crsFactura + + make_cregdoc() && cursor cRegDoc gol + make_actactan() && cursor actactan gol + + make_jtva_explicatii() && crsJTVA + make_cote_tva() && crsCoteTVA + make_articole() && crsArticole + make_locatii() && crsLocatii + make_articole_locatii() && crsArticoleLocatii + make_valute() && crsValute + make_tipfactura() && crsTipFactura + make_um() && crsUM + Do make_contracte With "1=2" && crsContracte + + loTVAStandard = GetTVAStandard() && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva + lnIdJTVAExpl = loTVAStandard.IdJtvaExpl + lnIdJtva = loTVAStandard.IdJtva + lnProcTva = loTVAStandard.ProcTva + + lnTip = 51 && FACTURA ROAACNPRO + lnIdSet = 50200 + + If Type('poDate') <> 'O' + poDate = Createobject("oDateFactura", m.lnIdSet, m.lnTip) + Endif + If Type('poGeneratorNumere') <> 'O' + poGeneratorNumere = Createobject("oGeneratorNumere") + Endif + poDate.nIdTipDoc = 5 && FACTURA + poGeneratorNumere.ResetNumere() + + poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) + + AddProperty(poDate, 'IdJTVAExpl', m.lnIdJTVAExpl) + AddProperty(poDate, 'IdJTVA', m.lnIdJtva) + AddProperty(poDate, 'ProcTVA', m.lnProcTva) + AddProperty(poDate, 'uuid', '') + AddProperty(poDate, 'document', '') && documentul pentru cheiaj se completeaza in frm_calcul_cheiaj + AddProperty(poDate, 'cTip', m.lcTip) + poDate.nTipFactura = cTip2nTip(m.lcTip) && tip intern factura 0=TRANZIT,1=CHEIAJ, 2=APA, 3=CHIRII, 4=PILOTAJ, 5=ALTE, 6=PENALITATI, 9=DIVERSE + * AddProperty(poDate, 'nIdBeneficiar', NULL) && am adaugat in oDate + + + Select crsFactura + loFrmFactura = Createobject("frm_factura", toDateAditionale) + * DO FORM frm_factura NAME loFrmFactura LINKED NOSHOW + loFrmFactura.Show(1) + + Release poDate, poGeneratorNumere + Use In (Select('crsJTVA')) + Use In (Select('crsCoteTVA')) + Use In (Select('crsArticole')) + Use In (Select('cRegDoc')) + Use In (Select('actactan')) + Use In (Select('crsLocatii')) + Use In (Select('crsArticoleLocatii')) + Use In (Select('crsValute')) + Use In (Select('crsTipFactura')) + Use In (Select('crsFactura')) + Use In (Select('crsCapFactura')) +Endproc && factura_acn + +Procedure factura_import + Lparameters tlImportCalculat + * tlImportCalculat (optional, default .F.): daca s-au calculat deja datele pentru import intr-un formular de calcul si din formularul de calcul s-a lansat factura + + Local lcTip, lcSelect, llSucces, lnIdCtr, lnIdClient + llSucces = .F. + + lcTip = Upper(Alltrim(poDate.cTip)) + lnIdCtr = crsCapFactura.client_ctr_id + lnIdClient = crsCapFactura.client_id + + If Empty(m.lcTip) Or !Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ, TIP_CHIRII, TIP_APA, TIP_PENALITATI) + Return m.llSucces + Endif + + * Nu mai intru in vizualizare daca este deja calculat + If m.tlImportCalculat + llSucces = .T. + Else + Do Case + Case m.lcTip = TIP_TRANZIT + * vizualizare tranzit (alegere convoi) > calcul tranzit , salvare tarife si completare poDate.uUId CU VYE_ID's) + llSucces = vizualizare_tranzit(NTIP_TRANZIT) && proceduri_acnpro.prg + Case m.lcTip = TIP_CHEIAJ + * vizualizare tranzit (alegere convoi) > calcul cheiaj , salvare tarife si completare poDate.uUId CU VYE_ID's) + llSucces = vizualizare_tranzit(NTIP_CHEIAJ) && proceduri_acnpro.prg + Case Inlist(m.lcTip, TIP_CHIRII, TIP_APA) + * vizualizare chirii, apa (calcul articole contract, salvare tarife si completare poDate.uUId cu IPS_REGDOC.ID's) + * adaug articolele din ctr_articole in ips_regdoc + llSucces = vizualizare_contract(m.lnIdCtr) && proceduri_acnpro.prg + Case m.lcTip = TIP_PENALITATI + * vizualizare calcul penalitati + * adaug articolele din ctr_articole in ips_regdoc + llSucces = vizualizare_penalitati() && proceduri_acnpro.prg + Otherwise + llSucces = .T. + Endcase + If !m.llSucces + Return m.llSucces + Endif + Endif && tlImportCalculat + + * Completez crsCapFactura si crsFactura + llSucces = .F. + Do Case + Case m.lcTip = TIP_TRANZIT + * Completeaza crsCapFactura, crsFactura cu date din tranzit pentru poDate.uUid + llSucces = make_factura_tranzit() + Case m.lcTip = TIP_CHEIAJ + * Completeaza crsCapFactura, crsFactura cu date din tranzit pentru poDate.uUid + llSucces = make_factura_cheiaj() + Case m.lcTip = TIP_PENALITATI + llSucces = make_factura_penalitati(m.tlImportCalculat) + Case Inlist(m.lcTip, TIP_CHIRII, TIP_APA) + * Completeaza crsFactura cu date din contracte pentru contractul selectat. initializeaza poDate.uUid = crsCapFactura.ctr_id + llSucces = make_factura_contracte() + Otherwise + llSucces = .T. + Endcase + + Return m.llSucces +Endproc && factura_import + +Procedure factura_salvare + Local lcTip, llSucces, luId, loEx As Exception + llSucces = .F. + luId = poDate.uuid + lcTip = Upper(Alltrim(poDate.cTip)) + + If Empty(m.luId) And Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ, TIP_CHIRII, TIP_APA) + amessagebox(Iif(Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ), 'Alegeti convoiul', 'Adaugati prestatii') + '!', 0 + 48, _Screen.Caption) + Return m.llSucces + Endif +SET STEP ON + * Completex taxcode in crsFactura bazat pe id_jtva_coloana + IF m.gl406 + SELECT crsFactura + llFurnizorRTVAI = .F. + SCAN + lnTaxCode = NULL + lnIdJtva = Nvl(crsFactura.id_jtva_coloana, 0) + lnTaxCode = GetTaxCode(m.gnAn, m.gnLuna, poDate.dataact, m.lnIdJtva, m.llFurnizorRTVAI) + SELECT crsFactura + REPLACE taxcode WITH m.lnTaxCode + ENDSCAN + ENDIF + + Try + Do Case + Case m.lcTip = TIP_TRANZIT + llSucces = update_tranzit(m.luId) && completez data, nr, total cu tva pe convoi ips_voyages_vanzari, completez cursul valutar si valorile in lei pe barje ips_voyage_members_vanzari + If m.llSucces + llSucces = completeaza_regdoc_tranzit(m.luId) && completez cursorul cRegDoc cu valori defalcate pe ecluze, senale + Endif + + Case m.lcTip = TIP_CHEIAJ + llSucces = update_cheiaj(m.luId) && completez data, nr, total cu tva pe convoi ips_voyages_vanzari, completez cursul valutar si valorile in lei pe barje ips_berthing_details_vanzari + If m.llSucces + llSucces = completeaza_regdoc_cheiaj(m.luId) && completez cursorul cRegDoc cu valori defalcate pe locatii + Endif + Case Inlist(m.lcTip, TIP_CHIRII, TIP_APA) + llSucces = update_contracte(m.luId) && completez curs, valftva in ips_regdoc + If m.llSucces + llSucces = completeaza_regdoc_contracte(m.luId) && nu completez cursorul cRegDoc. Este scris in ips_regdoc din salvare_contract + Endif + Case m.lcTip = TIP_PENALITATI + llSucces = completeaza_regdoc_penalitati(m.luId) && completez cursorul cRegDoc cu valori defalcate pe locatii direct din crsFactura + Otherwise && TIP_DIVERSE + llSucces = completeaza_regdoc_alte(m.luId) && completez cursorul cRegDoc cu valori defalcate pe locatii direct din crsFactura + Endcase && m.lcTip + + + If m.llSucces + llSucces = completeaza_regdoc_curs() && completez cursul valutar in cursorul cRegDoc + Endif + + If m.llSucces + llSucces = completeaza_actactan(m.lcTip) && completez cursorul actactan din cRegDoc + Endif + + If m.llSucces + llSucces = factura_salvare_db(m.lcTip) && salvez factura in contabilite, vanzari si regdoc folosind datele din cFactura (vanzari), cRegDoc , actactan + Endif + + If m.llSucces + poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract) + Else + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) + Endif + Catch To loEx + goApp.ShowErrorEx(loEx) + llSucces = .F. + Endtry + + Return m.llSucces + +Endproc && factura_salvare + +**************************************************************************************************************************** +Procedure factura_salvare_db + Lparameters tcTip + *lcTip = poDate.cTip && TRANZIT/CHEIAJ/CHIRII/APA/DIVERSE/PENALITATI + Private pnCod, pnVVId, poRec, pnIdFact + poRec = Null + pnIdFact = 0 + Local lcSql, lcTabelFisiere, lcTip, llScris, llSucces, llSucces2, lnIdJTvaColoana, lcCont + Local lnProcTvav, lnSucces, lnSucces2, loRec, ltDataOra, loMonedaNationala, lnIdMonedaNationala + pnCod = 0 + pnVVId = 0 + lcTip = m.tcTip + + llScris = .F. + lnProcTvav = 0 + lnIdJTvaColoana = Null + lcCont = '' + + ********************* + *** actactan + ********************* + + Use In (Select('crsvanztemp')) + + + ltDataOra = Get_Ora() + poDate.dataora_exp = ltDataOra + Create Cursor crsvanztemp(id_articol N(20), explicatie C(240), Pret N(20, 4), proc_tvav N(7, 3), id_jtva_coloana N(10), id_jtva_coloana_ex N(10) Null, cantitate N(20, 4), discount_unitar N(20, 4), ; + id_gestiune N(20), Cont C(4), pret_cu_tva N(1), serie C(100), id_valuta N(10), codmat C(50), Curs N(20, 6), multiplicator N(10), pret_achizitie N(20, 4), ; + pretd N(20, 4), id_valuta_d N(10), taxcode N(6) null) + + Insert Into crsvanztemp(id_articol, explicatie, Pret, proc_tvav, id_jtva_coloana, id_jtva_coloana_ex, cantitate, discount_unitar, pret_cu_tva, ; + serie, codmat, id_valuta, Curs, multiplicator, pret_achizitie, pretd, id_valuta_d, taxcode) ; + Select id_articol, denumire As explicatie, pretval As Pret, proc_tva As proc_tvav, id_jtva_coloana, id_jtva_coloana_ex, cantitate, ; + 0 As discount_unitar, Nvl(pret_cu_tva, 0) As pret_cu_tva, Space(100) As serie, Space(50) As codmat, ; + Cast(Nvl(id_valuta, 0) As N(5)) As id_valuta, Curs, 1 As multiplicator, 0 As pret_achizitie, 0 As pretd, Cast(0 As N(5)) As id_valuta_d, taxcode ; + From crsFactura + + lnSucces = SQLSetprop(gnHandle, "Transactions", 2) + llSucces = (m.lnSucces >= 0) + + If m.llSucces + * Generez pack_contafin.nCod + lcSql = [begin pack_facturare.initializeaza_scriere_actrul(NULL,1); end;] + llSucces = goExecutor.oExecuta(lcSql) + If m.llSucces + llSucces = goExecutor.oSelecteaza2Value([SELECT pack_contafin.get_cod() FROM dual], @pnCod) + If m.llSucces + Update actactan Set cod = m.pnCod + Endif + Endif + Endif + + If m.llSucces + lcSql = [begin pack_facturare.initializeaza_date_factura(] + ; + [to_date('] + Alltrim(Dtoc(poDate.dataireg, 2)) + [','YYYYMMDD'),] + ; + Nvl(Alltrim(Str(poDate.id_fdoc)), [NULL]) + [,to_date('] + Alltrim(Dtoc(poDate.dataact, 2)) + [','YYYYMMDD'),] + ; + [to_date('] + Alltrim(Dtoc(poDate.datascad, 2)) + [','YYYYMMDD'),'] + Nvl(poDate.serie_act, []) + [',] + ; + Alltrim(Str(poDate.nract, 14, 0)) + [,] + ; + Iif(Isnull(poDate.id_client), [NULL], Alltrim(Str(poDate.id_client))) + [,] + ; + Iif(Isnull(poDate.id_lucrare), [NULL], Alltrim(Str(poDate.id_lucrare))) + [,] + ; + Iif(Isnull(poDate.id_sectie), [NULL], Alltrim(Str(poDate.id_sectie))) + [,] + ; + Iif(Isnull(poDate.id_venchelt), [NULL], Alltrim(Str(poDate.id_venchelt))) + [,] + ; + Iif(Isnull(poDate.id_responsabil), [NULL], Alltrim(Str(poDate.id_responsabil))) + [,] + ; + Iif(Empty(Nvl(poDate.explicatia4, [])), [NULL], ['] + Strtran(Alltrim(poDate.explicatia4), ['], ['']) + [']) + [,] + ; && modificare v 2.0.33 + Iif(Empty(Nvl(poDate.id_ordl, 0)), [NULL], Alltrim(Str(poDate.id_ordl))) + [,NULL,] + ; + ['] + Strtran(Alltrim(Nvl(poDate.descriere, [])), ['], ['']) + [',] + ; + Alltrim(Str(poDate.tip)) + [,] + Alltrim(Str(poDate.id_set)) + [,] + ; + [to_date('] + Dtoc(poDate.zi_curs, 2) + [','YYYYMMDD'),] + Alltrim(Str(poDate.id_valuta)) + [,] + ; + Alltrim(Str(poDate.in_valuta)) + [,] + ; + Alltrim(Str(poDate.tva_incasare)) + [,] + ; && modificare ROAAUTO v 2.1.0 + Iif(Isnull(gnIdSucursala), [NULL], Alltrim(Str(gnIdSucursala))) + [,] + ; + Alltrim(Str(gnIdUtil)) + [,] + ; + Alltrim(Str(poDate.nTipFactura)) + [,] + ; + Iif(Isnull(poDate.nIdBeneficiar), [NULL], Alltrim(Str(poDate.nIdBeneficiar))) + [,] + ; + Iif(Isnull(poDate.tip_saft), [NULL], Alltrim(Str(poDate.tip_saft))) + [); end;] + + llSucces = goExecutor.oExecuta(lcSql) + + * Salvez articole + If m.llSucces + Private poArticol + Select crsvanztemp + Scan + Scatter Name poArticol + * Nu se completeaza articolul in factura pentru ca cumulez mai multe prestatii/locatii + * Completez contul articolului din ips_prestatii_locatii + IF EMPTY(NVL(poArticol.cont,'')) + lcCont = '' + lcSql = [SELECT MAX(DECODE(CTDEBITOR, '4111', CTCREDITOR, '461', CTCREDITOR, '4118', CTCREDITOR, CTDEBITOR)) as cont FROM ips_vprestatii_locatii WHERE ID_ARTICOL = ?poArticol.id_articol] + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @lcCont) + poArticol.cont = m.lcCont + ENDIF + lcSql = [begin pack_facturare.adauga_articol_factura_deviz(] + ; + Alltrim(Str(poArticol.id_articol)) + [,] + ; + ['] + Strtran(Alltrim(Nvl(poArticol.explicatie, [])), ['], ['']) + [',] + ; + ['] + Strtran(Alltrim(Nvl(poArticol.serie, [])), ['], ['']) + [',] + ; + Alltrim(Str(poArticol.pret_achizitie, 18, gnPPret)) + [,] + ; + Alltrim(Str(poArticol.pretd, 18, gnPVal)) + [,] + ; + Alltrim(Str(poArticol.id_valuta_d)) + [,] + ; + Alltrim(Str(poArticol.Pret, 18, gnPPretV)) + [,] + ; + Alltrim(Str(poArticol.id_valuta)) + [,] + ; + Alltrim(Str(poArticol.Curs, 18, 6)) + [,] + ; + Alltrim(Str(poArticol.multiplicator)) + [,] + ; + Alltrim(Str(poArticol.proc_tvav, 18, 2)) + [,] + ; + Alltrim(Str(poArticol.id_jtva_coloana)) + [,] + ; + Alltrim(Str(poArticol.cantitate, 18, gnPCant)) + [,] + ; + Alltrim(Str(poArticol.discount_unitar, 18, gnPPretV)) + [,] + ; + Alltrim(Str(poArticol.id_gestiune)) + [,] + ; + ['] + Alltrim(Nvl(poArticol.Cont, '')) + [',] + ; + Alltrim(Str(poArticol.pret_cu_tva)) + [,] + ; + Alltrim(Str(poArticol.id_jtva_coloana_ex)) + [,] + ; + Iif(Empty(Nvl(poDate.listaId, 0)), 'NULL', Alltrim(Str(poDate.listaId))) + [,] + ; + Iif(Empty(Nvl(poArticol.taxcode, 0)), 'NULL', Alltrim(Str(poArticol.taxcode))) + [); end;] + llSucces = goExecutor.oExecuta(lcSql) + If !m.llSucces + Exit + Endif + Endscan + Endif && salvez articole + + If m.llSucces + * Salvez Vanzari + lcSql = [begin pack_facturare.scrie_in_vanzari(0,] + ; + Iif(Isnull(poDate.id_delegat), [NULL], Alltrim(Str(poDate.id_delegat))) + [,] + ; + Iif(Isnull(poDate.id_masina), [NULL], Alltrim(Str(poDate.id_masina))) + [,] + ; + Iif(Isnull(poDate.id_facturare), [NULL], Alltrim(Str(poDate.id_facturare))) + [,] + ; + Iif(Isnull(poDate.nListareDetaliata), [0], Alltrim(Str(poDate.nListareDetaliata))) + [,] + ; + [?poDate.dataora_exp,] + ; + Iif(Isnull(poDate.id_agent), [NULL], Alltrim(Str(poDate.id_agent))) + [,] + ; + ['] + Strtran(Alltrim(Nvl(poDate.text_aditional, [])), ['], ['']) + [',?@poDate.nid_vanzare); end;] + llSucces = goExecutor.oExecuta(lcSql) + Endif && salvez vanzari + + * Salvez Reg. Doc. + If m.llSucces + Update cRegDoc Set id_vanzare = poDate.nid_vanzare, id_client = poDate.id_client, Data = poDate.dataact, tip = cTip2nTip(m.lcTip) + Update cRegDoc Set id_contract = poDate.listaId Where Empty(Nvl(id_contract, 0)) && de ex: la penalitati, contractul este completat pe fiecare factura din calcul penalitati si nu trebuie sa il suprascriu cu contractul din factura de penalitati + loMonedaNationala = GetMonedaNationala() + lnIdMonedaNationala = loMonedaNationala.id_valuta + + lcSql = [begin pack_acn.salveaza_regdoc(?.id, ?.id_vanzare, ?.tip, ?.id_articol, ?.id_locatia, ?.id_valuta, ?.id_client, ?.id_contract, ?.pret, ?.curs, ?.cantitate, ?.valval, ?.tvaval, ?.totval, ?.valftva, ?.valtva, ?.valctva, ?.document, ?.data); end;] + + Select cRegDoc + Scan + Scatter Name loRec + loRec.Document = Alltrim(Nvl(loRec.Document, '')) + loRec.id_valuta = Iif(Empty(loRec.id_valuta), m.lnIdMonedaNationala, loRec.id_valuta) + loRec.id_client = Iif(Empty(loRec.id_client), Null, loRec.id_client) + loRec.id_contract = Iif(Empty(loRec.id_contract), Null, loRec.id_contract) + With loRec + llSucces = goExecutor.oExecuta(m.lcSql) + If !m.llSucces + Exit + Endif + Endwith + Endscan + Endif && m.llSucces Reg Doc + + If m.llSucces And Inlist(m.lcTip, TIP_TRANZIT, TIP_CHEIAJ) + * completez ips_voyages_vanzari.vz_id + llSucces = goExecutor.oExecuta([UPDATE ips_voyages_vanzari SET vz_id = ?poDate.nid_vanzare WHERE id in (] + poDate.uuid + [)]) + Endif + + + If m.llSucces + * Salvez contabilitate + If !Used('INFISIERE') + lcTabelFisiere = gcAppPath + [\COMUN\DATEMENU\infisiere.dbf] + Use (m.lcTabelFisiere) In 0 Alias INFISIERE + Endif + lnSucces = oscrie_in_fisiere(0, .F., .F., .T.) && nu suprascriu codul pentru ca l-am generat la inceput si l-am completat in VANZARI + llSucces = (m.lnSucces > 0) + Endif + + * Completez VANZARI.ID_FACT DUPA SCRIEREA IN ACT + If m.llSucces + pnIdFact = 0 + llSucces = goExecutor.oSelecteaza2Value ([select pack_contafin.get_idFact() from dual], @pnIdFact) + Endif + If m.llSucces + llSucces = goExecutor.oExecuta([update vanzari set id_fact = ?pnIdFact where id_vanzare = ?poDate.nid_vanzare]) + Endif + + * Salvez PENALITATI + If m.llSucces And m.lcTip = TIP_PENALITATI + Text To lcSql Noshow +insert into penalitati (id_ctr, id_part, id_fact_pen, id_fact, nrfact, datafact, datascad, valctva, id_doc_incasare, nract, dataact, suma, databaza, dataref, coef_penalitati, coef_penalitati2, nr_zile, nr_zile1, nr_zile2, nr_zile_gratie, penalitati, sters) +values (?poRec.id_ctr, ?poRec.clie_id, ?pnIdFact, ?poRec.id_fact, ?poRec.nrfact, ?poRec.datafact, ?poRec.datascad, ?poRec.valctva, ?poRec.id_doc, ?poRec.nract, ?poRec.dataact, ?poRec.suma, ?poRec.databaza, ?poRec.dataref, ?poRec.ppenzi, ?poRec.ppenzi2, ?poRec.nr_zile, ?poRec.nr_zile1, ?poRec.nr_zile2, ?poRec.zilegratie, ?poRec.penalitati, ?poRec.sters); + Endtext + + Select crsCalculPenalitatiAles + Scan + Scatter Name poRec + llSucces = goExecutor.oExecuta(m.lcSql) + If !m.llSucces + Exit + Endif + Endscan + Endif && PENALITATI + + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llSucces2 = goExecutor.oExecuta(lcSql) + + lnSucces2 = SQLSetprop(gnHandle, "Transactions", 1) + If lnSucces2 < 0 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + Endif && tranzactie manuala + + Use In (Select('crsvanztemp')) + Use In (Select('crsFacturaACN')) + *!* Use In (Select('crsfacturaX')) + + Return m.llScris +Endproc && factura_salvare_db + + +**************************************************************************************************************************** +*** Completez crsFactura cu valoarea tranzitului +**************************************************************************************************************************** +Procedure make_factura_tranzit + * tnVVId: ips_voyage_vanzari.id + + Private pcVVIds, pnVVId, pcConvoyName + Local loFrmFactura As "frm_factura" + Local lcSql, llSucces, lnCantitate, lnIdJtva, lnIdJTVAExpl, lnPret, lnProcTva, loArticol, loRec, loMonedaNationala, lnIdMonedaNationala + Local lcNumeConvoi, lcDataConvoi, lcContract, llExplicatieEN, lcDenumireArticol, lnIntern, loTVAStandard + pcVVIds = poDate.uuid + pnVVId = 0 + llSucces = .T. + pcConvoyName = '' + + If Empty(m.pcVVIds) + amessagebox('Alegeti un convoi!', 0 + 48, _Screen.Caption) + llSucces = .F. + Endif + + If m.llSucces + lnIntern = crsCapFactura.intern + loTVAStandard = GetTVAStandard(m.lnIntern) && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva + lnIdJTVAExpl = loTVAStandard.IdJtvaExpl + lnIdJtva = loTVAStandard.IdJtva + lnProcTva = loTVAStandard.ProcTva + + llExplicatieEN = (crsCapFactura.intern = 0) + loArticol = GetPrestatieByTip(TIP_TRANZIT, m.llExplicatieEN) && C/V TRANZITARE CDMN PENTRU CONVOIUL/BARJA [INDICATIV], DIN [DATA] CONFORM [CONTRACT] / TRANSIT FOR [INDICATIV], IN [DATA] ACCORDING TO THE [CONTRACT] + lcDenumireArticol = loArticol.denumire + + loMonedaNationala = GetMonedaNationala() + lnIdMonedaNationala = loMonedaNationala.id_valuta + + Text To lcSql Textmerge Noshow +select stringagg(convoy_nam) as convoy_nam + from ips_vvoyages v + join (SELECT distinct vye_id + FROM ips_voyage_members_vanzari + WHERE vv_id in (<>)) vm + on v.id = vm.vye_id + Endtext + + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pcConvoyName) + + If m.llSucces + Text To lcSql Textmerge Noshow +SELECT vmv.id_valuta, + v.nume_val as valuta, + ROUND(SUM(vmv.valval), 2) as valval + FROM ips_voyage_members_vanzari vmv + JOIN vnom_valute v ON vmv.id_valuta = v.id_valuta + WHERE vmv.vv_id in (<>) + GROUP BY vmv.id_valuta, v.nume_val + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, "crsValoareTemp") + + Endif + + If m.llSucces + Select crsValoareTemp + Scan + Scatter Name loRec + lnCantitate = 1 + lnPret = 0 + loRec.valval = Round(loRec.valval, m.gnPC) && rotunjesc la 2 zecimale + If loRec.id_valuta = m.lnIdMonedaNationala + lnPret = loRec.valval + Endif + + lcNumeConvoi = Alltrim(Nvl(pcConvoyName, '')) + lcDataConvoi = Dtoc(poDate.zi_curs) && Dtoc(Ttod(Nvl(generation, {//::}))) + lcContract = Alltrim(Nvl(crsCapFactura.contract_client, '')) + + loArticol.denumire = Strtran(m.lcDenumireArticol, '[INDICATIV]', m.lcNumeConvoi, 1, 10, 1) + loArticol.denumire = Strtran(loArticol.denumire, '[DATA]', m.lcDataConvoi, 1, 10, 1) + loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1) + + * Daca am factura storno cu pret -, fac cantitatea - si pretul + + * La eFactura nu se valideaza cu pret - + IF m.lnPret < 0 + lnCantitate = -m.lnCantitate + lnPret = -m.lnPret + loRec.valval = -loRec.valval + ENDIF + + Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) Values (1, loArticol.id_articol, loArticol.denumire, loRec.id_valuta, loRec.valval, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva) + Endscan && crsValoareTemp + Use In (Select('crsValoareTemp')) + Endif && llSucces + Use In (Select('cDateConvoiTemp')) + Endif && m.llSucces + + Return m.llSucces + +Endproc && make_factura_tranzit + +**************************************************************************************************************************** +*** Completez crsFactura cu valoarea cheiajului +**************************************************************************************************************************** +Procedure make_factura_cheiaj + * tnVVId: ips_voyage_vanzari.id + + Private pcVVIds, pnVVId + Local loFrmFactura As "frm_factura" + Local lcSql, llSucces, lnCantitate, lnIdJtva, lnIdJTVAExpl, lnPret, lnProcTva, loArticol, loRec, loMonedaNationala, lnIdMonedaNationala, lcDenumire, lcPort, lcDataP, lcContract, lnIntern, loTVAStandard + Local llExplicatieEN + pcVVIds = poDate.uuid + pnVVId = 0 + + lcPort = '' + lnIntern = crsCapFactura.intern + loTVAStandard = GetTVAStandard(m.lnIntern) && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva + lnIdJTVAExpl = loTVAStandard.IdJtvaExpl + lnIdJtva = loTVAStandard.IdJtva + lnProcTva = loTVAStandard.ProcTva + + llExplicatieEN = (crsCapFactura.intern = 0) + loArticol = GetPrestatieByTip(TIP_CHEIAJ, m.llExplicatieEN) && *C/V SERVICII PORTUARE IN PORTUL [PORT], DIN [DATA] CONFORM [CONTRACT] + lcDenumire = loArticol.denumire + + loMonedaNationala = GetMonedaNationala() + lnIdMonedaNationala = loMonedaNationala.id_valuta + + lcDataP = Dtoc(poDate.zi_curs) && Dtoc(Ttod(Nvl(datap, {//::}))) + lcContract = Alltrim(Nvl(crsCapFactura.contract_client, '')) + + * Port(uri) + llSucces = goExecutor.oExecuta([select stringagg(locatia) as port from (SELECT distinct locatia FROM ips_vberthing_details_vanzari WHERE VV_ID in (] + m.pcVVIds + [))], [cDateCheiajTemp]) + If m.llSucces + Select cDateCheiajTemp + Go Top + lcPort = Alltrim(Nvl(port, '')) + + Use In (Select('cDateCheiajTemp')) + Endif + + loArticol.denumire = Strtran(m.lcDenumire, '[PORT]', m.lcPort, 1, 10, 1) + loArticol.denumire = Strtran(loArticol.denumire, '[DATA]', m.lcDataP, 1, 10, 1) + loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1) + + lcSql = [SELECT id_valuta, valuta, SUM(valval) as valval FROM ips_vberthing_details_vanzari WHERE VV_ID in (] + m.pcVVIds + [) GROUP BY id_valuta, valuta] + llSucces = goExecutor.oExecuta(m.lcSql, "crsValoareTemp") + If m.llSucces + Select crsValoareTemp + Scan + Scatter Name loRec + lnCantitate = 1 + lnPret = 0 + loRec.valval = Round(loRec.valval, m.gnPC) && rotunjesc la 2 zecimale + If loRec.id_valuta = m.lnIdMonedaNationala + lnPret = loRec.valval + ENDIF + + * Daca am factura storno cu pret -, fac cantitatea - si pretul + + * La eFactura nu se valideaza cu pret - + IF m.lnPret < 0 + lnCantitate = -m.lnCantitate + lnPret = -m.lnPret + loRec.valval = -loRec.valval + ENDIF + + Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) ; + Values (1, loArticol.id_articol, loArticol.denumire, loRec.id_valuta, loRec.valval, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva) + Endscan && crsValoareTemp + Endif && llSucces + Use In (Select('crsValoareTemp')) + + + Return m.llSucces +Endproc +************************************************** +Procedure make_factura_contracte + + Private pnIdCtr + Local lcSql, llSucces, lnIdJtva, lnIdJTVAExpl, lnNrCrt, lnPret, lnProcTva, loRec, loMonedaNationala, lnIdMonedaNationala, lcSelect, lnIntern, loTVA, lcTipFactura, lnTipFactura, lcRegDocIds + Local lnCotaTVA, lnNrCrt + + lcSelect = Select() + llSucces = .F. + + Select crsCapFactura + lcRegDocIds = poDate.uuid + lcTipFactura = poDate.cTip && TRANZIT, CHEIAJ, CHIRII, APA, DIVERSE + lnTipFactura = poDate.nTipFactura && tip intern factura 0=TRANZIT,1=CHEIAJ, 2=APA, 3=CHIRII, 4=PILOTAJ, 5=ALTE, 6=PENALITATI, 9=DIVERSE + + lnIntern = intern + llExplicatieEN = (crsCapFactura.intern = 0) + lcDataP = Dtoc(crsCapFactura.dataact) && Dtoc(Ttod(Nvl(datap, {//::}))) + lcContract = Alltrim(Nvl(crsCapFactura.contract_client, '')) + + loArticol = GetPrestatieByTip(m.lcTipFactura, m.llExplicatieEN) && un articol generic care cumuleaza toata valoarea + lnIdArticol = loArticol.id_articol + loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1) + + loMonedaNationala = GetMonedaNationala() + lnIdMonedaNationala = loMonedaNationala.id_valuta + + * Factura INTERN se transforma valorile in valuta in lei, fara TVA, si se cumuleaza valorile in lei + * Factura EXTERN sunt defalcate pe valuta + * crsCursuri este deja creat in formularul de factura + * pun acelasi articol pe toate liniile (trebuie sa fie un articol oarecare pe toate liniile). as putea sa pun si un articol generic sau un articol de pe contract + + lcSql = [SELECT id_valuta, proc_tvav, id_articol, valval FROM ips_vregdoc WHERE id in (] + m.lcRegDocIds + [)] + llSucces = goExecutor.oExecuta(m.lcSql, "crsValoareTemp2") + If m.llSucces And Reccount('crsValoareTemp2') > 0 + Select crsValoareTemp2 + Go Top + *!* lnIdArticol = id_articol + + If m.lnIntern = 1 + Select m.lnIdMonedaNationala As id_valuta, v.proc_tvav, ; + Iif(v.id_valuta = m.lnIdMonedaNationala, Round(v.valval, m.gnPC), Round(v.valval * C.Curs, gnPC)) As valval ; + From crsValoareTemp2 v Left Join crsCursuri C On v.id_valuta = C.id_valuta ; + Into Cursor crsValoareTemp3 + + Select id_valuta, proc_tvav, lnIdArticol As id_articol, Sum(valval) As valval From crsValoareTemp3 Group By id_valuta, proc_tvav Into Cursor crsValoareTemp + Use In (Select('crsValoareTemp3')) + Else + Select id_valuta, proc_tvav, lnIdArticol As id_articol, Sum(valval) As valval From crsValoareTemp2 Group By id_valuta, proc_tvav Into Cursor crsValoareTemp + Endif + Use In (Select('crsValoareTemp2')) +SET STEP ON + Select crsValoareTemp + Scan + Scatter Name loRec + *!* loArticol = GetPrestatieById(loRec.id_articol) + *!* loArticol.denumire = loArticol.denumire + [ ] + Iif(!Empty(m.lcContract), Iif(m.llExplicatieEN, 'ACCORDING TO THE CONTRACT ', 'CONFORM CONTRACT ') + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')) + lnNrCrt = Recno('crsValoareTemp') + lnCantitate = 1 + lnPret = 0 + loRec.valval = Round(loRec.valval, m.gnPC) && rotunjesc la 2 zecimale + If loRec.id_valuta = m.lnIdMonedaNationala + lnPret = loRec.valval + Endif + lnCotaTVA = (loRec.proc_tvav - 1) * 100 + loTVA = GetObiectTVA(m.lnIntern, m.lnCotaTVA) && GetTVAStandard(m.lnIntern) && obiect TVA standard cu proprietatile: IdJtvaExpl, IdJtva, ProcTva + lnIdJTVAExpl = loTVA.IdJtvaExpl + lnIdJtva = loTVA.IdJtva + lnProcTva = loTVA.ProcTva + + * Daca am factura storno cu pret -, fac cantitatea - si pretul + + * La eFactura nu se valideaza cu pret - + IF m.lnPret < 0 + lnCantitate = -m.lnCantitate + lnPret = -m.lnPret + loRec.valval = -loRec.valval + ENDIF + + Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) ; + Values (m.lnNrCrt, loArticol.id_articol, loArticol.denumire, loRec.id_valuta, loRec.valval, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva) + Endscan && crsValoareTemp + Endif && llSucces + Use In (Select('crsValoareTemp')) + + Select (m.lcSelect) + Return m.llSucces +Endproc + +************************************************** +Procedure make_factura_penalitati + Lparameters tlImportCalculat + * tlImportCalculat (optional, default .F.): daca s-au calculat deja datele pentru import intr-un formular de calcul si din formularul de calcul s-a lansat factura + + Local lcContract, lcFiltru, lcRegDocIds, lcSelect, lcTipFactura, llExplicatieEN, llSucces + Local lnIdArticol, lnIdJtva, lnIdJTVAExpl, lnIdMonedaNationala, lnIntern, lnPenalitati, lnProcTva + Local lnTipFactura, loArticol, loMonedaNationala, loTVAStandard, ldDataReferinta, lnPret, lnPretVal, lnCantitate + lcSelect = Select() + llSucces = .T. + + * lcRegDocIds = poDate.uuid + lcTipFactura = TIP_PENALITATI && poDate.cTip && TRANZIT, CHEIAJ, CHIRII, APA, DIVERSE + lnIntern = crsCapFactura.intern + + lnCotaTVA = 0 + lnIdJTvaColoana = 12 && Neimpozabil + loTVA = GetObiectTVA(m.lnIntern, m.lnCotaTVA, m.lnIdJTvaColoana) + lnIdJTVAExpl = loTVA.IdJtvaExpl + lnIdJtva = loTVA.IdJtva + lnProcTva = loTVA.ProcTva + + loMonedaNationala = GetMonedaNationala() + lnIdMonedaNationala = loMonedaNationala.id_valuta + + llExplicatieEN = (m.lnIntern = 0) + lcContract = '' + Select Distinct contract From crsCalculPenalitatiAles Where sters = 0 Order By contract Into Cursor cContracteTemp + Select cContracteTemp + Scan + lcContract = lcContract + Iif(!Empty(Nvl(contract, '')), ', ' + Alltrim(contract), '') + Endscan + If !Empty(m.lcContract) + lcContract = Substr(m.lcContract, 3) + Endif + Use In (Select('cContracteTemp')) + + * crsCalculPenalitati este filtrat pe un client + Select crsCalculPenalitatiAles + Calculate Sum(penalitati), Min(dataref) For sters = 0 To lnPenalitati, ldDataReferinta + + loArticol = GetPrestatieByTip(m.lcTipFactura, m.llExplicatieEN) && un articol generic care cumuleaza toata valoarea + lnIdArticol = loArticol.id_articol + loArticol.denumire = Strtran(loArticol.denumire, '[CONTRACT]', Iif(!Empty(m.lcContract), 'CONTRACT ' + m.lcContract, Iif(m.llExplicatieEN, 'BOOKING', 'COMANDA')), 1, 10, 1) + loArticol.denumire = Strtran(loArticol.denumire, '[DATA]', Dtoc(m.ldDataReferinta), 1, 10, 1) + + * Daca am factura storno cu pret -, fac cantitatea - si pretul + + * La eFactura nu se valideaza cu pret - + lnCantitate = 1 + lnPret = m.lnPenalitati + lnPretVal = m.lnPenalitati + IF m.lnPret < 0 + lnCantitate = -m.lnCantitate + lnPret = -m.lnPret + lnPretVal = m.lnPret && factura de penalitati este in RON, Pretval = Pret + ENDIF + + Insert Into crsFactura(nrcrt, id_articol, denumire, id_valuta, pretval, Curs, Pret, cantitate, valftva, valtva, valctva, um, id_jtva_coloana_ex, id_jtva_coloana, proc_tva) ; + Values (1, loArticol.id_articol, loArticol.denumire, m.lnIdMonedaNationala, m.lnPret, 0, m.lnPret, m.lnCantitate, 0, 0, 0, '', m.lnIdJTVAExpl, m.lnIdJtva, m.lnProcTva) + + Select (m.lcSelect) + Return m.llSucces +Endproc + +Procedure make_ccapfactura + * IF !USED('crsCapFactura') + Create Cursor crsCapFactura(uuid N(20) Null, dataact D, datascad D, nract N(20), serie_act C(10), client_id N(10) Null, client C(100) Null, client_ctr_id N(10) Null, contract_client C(250) Null, nr_zile_scadenta N(5) Null, tip_curs N(1) Null, eagent N(1) Null, intern N(1) Null, beneficiar_id N(10) Null, beneficiar C(100) Null, id_set N(10), id_fdoc N(5)) + * ENDIF +Endproc + +Procedure make_cfactura + * IF !USED('crsFactura') + Create Cursor crsFactura (nrcrt N(5), id_articol N(20), denumire M, id_locatia N(12) Null, um C(20) Null, cantitate N(10, 4), Pret N(20, 4), valftva N(20, 4), valtva N(20, 4), valctva N(20, 4), pretval N(20, 4), valval N(20, 4), TVAVAL N(20, 4), totval N(20, 4), Curs N(12, 4), id_valuta N(10), id_jtva_coloana_ex N(10), id_jtva_coloana N(10), proc_tva N(5,2), pret_cu_tva N(1), taxcode N(6) null) + * ENDIF +Endproc + +Procedure make_cCalculPenalitati + Create Cursor crsCalculPenalitati(ales L, facturate L, sterse L, clie_id N(12) Null, nrfact N(16) Null, datafact D Null, datascad D Null, valctva N(18, 4) Null, totval N(18, 4) Null, Curs N(18, 6) Null, id_valuta N(12) Null, valuta C(20) Null, ; + explicatia C(100) Null, id_ctr N(12) Null, numar C(100) Null, contract C(100) Null, nume C(100) Null, id_doc N(20) Null, nract N(16) Null, dataact D Null, suma N(18, 4) Null, sumaval N(18, 4) Null, ; + pereche N(16) Null, id_fact N(20) Null, ppenzi N(8, 2) Null, ppenzi2 N(8, 2) Null, penzile N(6) Null, penzile2 N(6) Null, descriere C(250) Null, zilegratie N(6) Null, ; + nr_zile I Null, nr_zile1 I Null, nr_zile2 I Null, penalitati N(18, 4) Null, databaza D Null, dataref D Null, tip N(2) Null, sters N(1)) +Endproc && make_cCalculPenalitati + +Procedure make_cClientiPenalitati + Create Cursor crsClientiPenalitati (nume C(100), clie_id N(12) ) +Endproc && make_cClientiPenalitati + +******************************* +Procedure make_grupe_vase + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsGrupeVase") + lcSql = [select id, grupa from ips_vgrupe_vase order By grupa] + llSucces = goExecutor.oExecuta(m.lcSql, "crsGrupeVase") + If !m.llSucces + Create Cursor crsGrupeVase(Id I, GRUPA C(100)) + Endif + Select crsGrupeVase + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_grupe_vase + +Procedure make_grupe_marfa + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsGrupeMarfa ") + Create Cursor crsGrupeMarfa (Id N(10), GRUPA C(100), nstr_code C(6) Null) + Insert Into crsGrupeMarfa (Id, GRUPA, nstr_code) Values (-1, 'FARA MARFA', '') + Insert Into crsGrupeMarfa (Id, GRUPA, nstr_code) Values (0, '', '') + + lcSql = [Select id, nume, nstr_code From ips_vgoods_groups] + llSucces = goExecutor.oExecuta(m.lcSql, "crsGrupeMarfaTemp") + If m.llSucces + Insert Into crsGrupeMarfa (Id, GRUPA, nstr_code) ; + Select Id, Padr(Id, 3, ' ') + nume As GRUPA, Cast(Nvl(nstr_code, '') As C(6)) From crsGrupeMarfaTemp Order By Id + Use In (Select('crsGrupeMarfaTemp')) + + Select crsGrupeMarfa + Index On Id Tag Id + Endif + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_grupe_marfa + +Procedure make_marfa + Lparameters tnGrpId + * tnGrpId (optional) : Numeric = grupa de marfa, Logic T = cu grupa de marfa, F/empty = toate + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsMarfa ") + Create Cursor crsMarfa (Id C(36) Null, MARFA C(100), GRP_ID N(10) Null) + Insert Into crsMarfa (Id, MARFA, GRP_ID) Values ('', '', - 1) && -1 = GRUPA FARA MARFA + + lcSql = [Select id, name as marfa, un_number as grp_id From ips_vgoods] + ; + Iif(!Empty(m.tnGrpId), Iif(Type('tnGrpId') = 'N', [ where un_number = ] + Alltrim(Str(m.tnGrpId)), [ where NVL(un_number,0) <> 0]), []) + ; + [ order by name] + llSucces = goExecutor.oExecuta(m.lcSql, "crsMarfaTemp") + If m.llSucces + Select crsMarfa + Append From Dbf('crsMarfaTemp') + Use In (Select('crsMarfaTemp')) + + Select crsMarfa + Index On Id Tag Id + Endif + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_marfa + + +***---------------------------------------------------------------------------------------- +*creeaza un tabel crsContracte din contractele active si numele clientului cu conditie (ex: clie_id=2) +Procedure make_contracte + Lparameters tcCond, tnIdCtr, tlToateInregistrarile + + && tnIdCtr: daca dau id_ctr direct (facturile de penalitati) selectez numai acest contractul indiferent de iscontract_valid() + && tlToateInregistrarile: daca in tabelul cu contracte este o inregistrare "Toate contractele" cu id_ctr = 0 (pentru raport situatie tranzit toti clientii) + Local lcWhere + + lcWhere = [incetat = 0] + m.gcCondSucursala + + If Type('tnIdCtr') = 'N' And !Empty(m.tnIdCtr) + lcWhere = m.lcWhere + [ and (id_ctr = ] + Alltrim(Str(m.tnIdCtr)) + [)] + Else + lcAnLuna = Alltrim(Str(m.gnAn)) + Padl(m.gnLuna, 2, '0') + lcWhere = m.lcWhere + [ and (] + Iif(!Empty(m.tcCond), m.tcCond + [ and ], "") + Alltrim(Str(m.gnAn * 12 + m.gnLuna)) + [ between extract(year from data_inceput) * 12 + extract(month from data_inceput) and ] + ; + [extract(year from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm'))) * 12 + extract(month from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm'))))] + Endif + + lcSql = [select id_ctr, id_part, denumire, data, numar, data_inceput, data_sfarsit, scadenta_incasare as nr_zile_scadenta, tip_curs from vcontracte where ] + m.lcWhere + [ order by denumire, data_inceput] + llSucces = goExecutor.oExecuta(m.lcSql, 'crsContracteTemp') + + Use In (Select('crsContracte')) + + If m.tlToateInregistrarile + Select * From crsContracteTemp Into Cursor crsContracte Where 1 = 2 NOFILTER Readwrite + Insert Into tcontracte (denumire) Values ('TOATE CONTRACTELE') + Select crsContracte + Append From Dbf('crsContracteTemp') + Else + Select * From crsContracteTemp Into Cursor crsContracte NOFILTER Readwrite + Endif + Use In (Select('crsContracteTemp')) + + Return "crsContracte" +Endproc && make_contracte + +***---------------------------------------------------------------------------------------- +Procedure make_contacts + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsContacts") + lcSql = [Select id, name From IPS_VCONTACTS Order By Name] + llSucces = goExecutor.oExecuta(m.lcSql, "crsContacts") + If !m.llSucces + Create Cursor crsContacts(Id I, Name C(100)) + Endif + Select crsContacts + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_contacts + + +***---------------------------------------------------------------------------------------- +Procedure make_vessel_types + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsVesselTypes") + lcSql = [Select id, name From ips_vvessel_types Order By Name] + llSucces = goExecutor.oExecuta(m.lcSql, "crsVesselTypes") + If !m.llSucces + Create Cursor crsVesselTypes(Id I, Name C(100)) + Endif + Select crsVesselTypes + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_vessel_types + +***---------------------------------------------------------------------------------------- +Procedure make_routes + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsRoutes") + lcSql = [select id, acronym, name, destinatio, rpt_id, rpt_id_has, rty_id, sens, distanta, ckmi, ckmf, kmi, kmf, orig, intern from ips_vroutes order by name] + llSucces = goExecutor.oExecuta(m.lcSql, "crsRoutes") + If !m.llSucces + Create Cursor crsRoutes(Id I, Name C(100), distanta N(10, 2)) + Endif + Select crsRoutes + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_vessel_types + +***---------------------------------------------------------------------------------------- +Procedure make_vas_echivalent + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsVasEchivalent") + lcSql = [select id, vtp_id, vum_id, id_grup from ips_vvas_echivalent] + llSucces = goExecutor.oExecuta(m.lcSql, "crsVasEchivalent") + If !m.llSucces + Create Cursor crsVasEchivalent(Id I, VTP_ID I, vum_id I, id_grup I) + Endif + Select crsVasEchivalent + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_vas_echivalent + +***---------------------------------------------------------------------------------------- +Procedure make_vas_um + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsVasUM") + lcSql = [select id, um from ips_vvas_um order by um] + llSucces = goExecutor.oExecuta(m.lcSql, "crsVasUM") + If !m.llSucces + Create Cursor crsVasUM(Id I, um C(20)) + Endif + Select crsVasUM + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_vas_um + + +***---------------------------------------------------------------------------------------- +Procedure make_um + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsUM") + lcSql = [select id, um from vnom_um order by um] + llSucces = goExecutor.oExecuta(m.lcSql, "crsUM") + If !m.llSucces + Create Cursor crsUM(Id I, um C(20)) + Endif + Select crsUM + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_um + +***---------------------------------------------------------------------------------------- +*** crsGrupTipNave pentru tarife tranzit +Procedure make_grup_tip_nave + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsGrupTipNave") + lcSql = [select id, nume from ips_vgrup_tip_nave] + llSucces = goExecutor.oExecuta(m.lcSql, "crsGrupTipNave") + If !m.llSucces + Create Cursor crsGrupTipNave(Id I, nume C(20)) + Endif + Select crsGrupTipNave + Index On Id Tag Id + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_grup_tip_nave + +***---------------------------------------------------------------------------------------- +Procedure make_aramis_tip_nave + Local lcSelect, lcSql, llSucces + + lcSelect = Select() + llSucces = .T. + If !Used("crsAramisTipNave") + lcSql = [select id, nume from ips_varamis_tip_nave] + llSucces = goExecutor.oExecuta(m.lcSql, "crsAramisTipNave") + If !m.llSucces + Create Cursor crsAramisTipNave(Id I, nume C(20)) + Endif + Select crsAramisTipNave + Index On Id Tag Id + Index On nume Tag nume + Set Order To nume + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_aramis_tip_nave + +***---------------------------------------------------------------------------------------- +Procedure make_dane + lcSelect = Select() + llSucces = .T. + + If !Used('crsDane') + lcSql = [select id, descriere as dana, dana as cod from ips_dane] + llSucces = goExecutor.oExecuta(m.lcSql, "crsDane") + If !m.llSucces + Create Cursor crsDane(Id N(1), dana C(20), cod C(5)) + Insert Into crsDane (Id, dana, cod) Values (1, 'OPERARE/PORT', 'OP') + Insert Into crsDane (Id, dana, cod) Values (2, 'ASTEPTARE', 'AS') + Insert Into crsDane (Id, dana, cod) Values (3, 'IERNAT', 'IE') + Insert Into crsDane (Id, dana, cod) Values (4, 'REPARATII', 'RE') + Insert Into crsDane (Id, dana, cod) Values (5, 'PESCUIT', 'PE') + Insert Into crsDane (Id, dana, cod) Values (9, 'ALTE', 'AL') + ENDIF + + Select crsDane + Index On Id Tag Id + Index On dana Tag dana + Set Order To Id + Endif + Select (m.lcSelect) + Return m.llSucces +Endproc && make_dane + +**************************************************** +*** creeaza cursor crsJTVA +**************************************************** +Procedure make_jtva_explicatii + Local lcSql, llSucces + llSucces = .T. + If !Used('crsJTVA') + lcSql = [select id, denumire, id_jtva_coloana, id_tva, explicatie, ordine, cota_tva, coloana_jv, coloana_jc from vjtva_coloane_explicatii where inactiv = 0] + llSucces = goExecutor.oExecuta(m.lcSql, "crsJTVA") + If m.llSucces + Select crsJtva + Index On Id Tag Id + Endif + Endif + Return m.llSucces +Endproc && make_jtva_explicatii + +**************************************************** +*** creeaza cursor crsCoteTVA +**************************************************** +Procedure make_cote_tva + Local lcSql, llSucces + llSucces = .T. + If !Used('crsCoteTVA') + Text To lcSql Noshow + select rpad(trim(TO_CHAR(procent, '999')),25, ' ') as procent, proc_tva + from vcote_tva + where an = ?gnAn and luna = ?gnLuna + order by proc_tva desc + Endtext + *!* UNION + *!* SELECT ' < ALES LA FACTURARE > ' AS procent, -1 AS proc_tva FROM dual + + llSucces = goExecutor.oExecuta(m.lcSql, "crsCoteTVA") + If m.llSucces + Index On proc_tva Tag proc_tva Descending + Endif && llSucces + Endif && used + + Return m.llSucces +Endproc && make_cote_tva + +**************************************************** +*** creeaza cursor crsCheiajPrestatii +**************************************************** +Procedure make_cheiaj_prestati + Local lcSql, llSucces, lcSelect + lcSelect = Select() + m.llSucces = .T. + If !Used('crsCheiajPrestatii') + lcSql = [select id, dana_id, dana, tipn_id, tipn, id_articol, articol, id_locatia, locatia from ips_vcheiaj_prestatii] + llSucces = goExecutor.oExecuta(m.lcSql, "crsCheiajPrestatii") + Endif + Select (m.lcSelect) + Return m.llSucces +Endproc && make_cheiaj_prestati + + +**************************************************** +*** creeaza cursor crsArticole +**************************************************** +Procedure make_articole + Local lcSql, llSucces, lcSelect + lcSelect = Select() + m.llSucces = .T. + If !Used('crsArticole') + lcSql = [select id_articol, codmat, denumire, descriere, um, id_grupa, grupa, id_subgrupa, subgrupa from vnom_articole where inactiv = 0 and tip = 1 order by denumire] && manopera + llSucces = goExecutor.oExecuta(m.lcSql, "crsArticole") + If m.llSucces + Select crsArticole + Index On id_articol Tag id_articol + Index On denumire Tag denumire + Endif + Endif + Select (m.lcSelect) + Return m.llSucces +Endproc && make_articole + +**************************************************** +*** creeaza cursor crsLocatii +**************************************************** +Procedure make_locatii + Local lcSql, llSucces, lcSelect + lcSelect = Select() + llSucces = .T. + If !Used('crsLocatii') + lcSql = [select id, denumire from vnom_locatii where inactiv = 0 order by denumire] + llSucces = goExecutor.oExecuta(m.lcSql, "crsLocatii") + If m.llSucces + Select crsLocatii + Index On Id Tag Id + Index On denumire Tag denumire + Endif && llSucces + Endif && used + Select (m.lcSelect) + Return m.llSucces +Endproc && make_locatii + +**************************************************** +*** creeaza cursor crsArticoleLocatii +**************************************************** +Procedure make_articole_locatii + Local lcSql, llSucces, lcSelect + lcSelect = Select() + Use In (Select('crsArticoleLocatii')) + + llSucces = .T. + If !Used('crsArticoleLocatii') + lcSql = [select id_articol, id_locatia, ctdebitor, ctcreditor, ctaideb, ctaedeb, ctaicred, ctaecred, ctpideb, ctapideb, ctpicred, ctapicred from ips_vprestatii_locatii] + llSucces = goExecutor.oExecuta(m.lcSql, "crsArticoleLocatii") + If m.llSucces + Select crsArticoleLocatii + Index On id_articol Tag id_articol + Index On id_locatia Tag id_locatia + Endif + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && crsArticoleLocatii + +**************************************************** +*** creeaza cursor crsValute +**************************************************** +Procedure make_valute + Local lcSql, llSucces, lcSelect + lcSelect = Select() + llSucces = .T. + If !Used('crsValute') + lcSql = [select id_valuta, nume_val, moneda_nationala from vnom_valute where inactiv = 0 order by nume_val] + llSucces = goExecutor.oExecuta(m.lcSql, "crsValute") + If m.llSucces + Select crsValute + Index On id_valuta Tag id_valuta + Endif + Endif + + Select (m.lcSelect) + Return m.llSucces +Endproc && make_valute + + +*!* **************************************************** +*!* *** creeaza cursor crsTarifeDiverseContract pentru contractul dat si tarifele generale pentru clientii fara contract +*!* **************************************************** +*!* Procedure make_tarife_diverse_contract +*!* Lparameters tnIdCtr, tnIdCtrFara +*!* * tnIdCtrFara (optional) + +*!* Local lcSql, lnIdCtr, lnIdCtr2, lcSelect, llSucces +*!* lcSelect = Select() +*!* lnIdCtr = m.tnIdCtr +*!* lnIdCtr2 = Iif(!Empty(m.tnIdCtrFara), m.tnIdCtrFara, m.tnIdCtr) + +*!* && selectez tarifele de pe contract si pe cele generale +*!* Text To lcSql Textmerge Noshow +*!* select id, id_articol, lim1, lim2, umlim, corect, tar_prest, tar_furn, tar_total, numevaluta, ctr_id, tip, intern, loc_id, cant, um, plus, arebaza, baza, valval, ediscount, id_valuta +*!* from ips_tarife_diverse +*!* WHERE ctr_id in (<>, <>) +*!* Endtext +*!* llSucces = goExecutor.oExecuta(m.lcSql, 'crsTarifeDiverseContract') + +*!* Select (m.lcSelect) +*!* Return m.llSucces +*!* Endproc + +**************************************************** +*** creeaza cursor crsTarifeCheiajContract pentru contractul dat si tarifele generale pentru clientii fara contract +**************************************************** +Procedure make_tarife_cheiaj_contract + Lparameters tnIdCtr, tnIdCtrFara + * tnIdCtrFara (optional) + + Local lcSql, lnIdCtr, lnIdCtr2, lcSelect, llSucces + lcSelect = Select() + lnIdCtr = m.tnIdCtr + lnIdCtr2 = Iif(!Empty(m.tnIdCtrFara), m.tnIdCtrFara, m.tnIdCtr) + + && selectez tarifele de pe contract si pe cele generale + Text To lcSql Textmerge Noshow +select id, id_articol, lim1, lim2, um, corect, valoare as tarif, valoare, ctr_id, intern, plus, arebaza, baza, id_valuta + from ips_tarife_cheiaj + WHERE ctr_id in (<>, <>) + Endtext + llSucces = goExecutor.oExecuta(m.lcSql, 'crsTarifeDiverseContract') + + Select (m.lcSelect) + Return m.llSucces +Endproc + +Procedure make_tipfactura + If !Used('crsTipFactura') + Create Cursor crsTipFactura (tip C(100)) + + Insert Into crsTipFactura (tip) Values ('TRANZIT') + Insert Into crsTipFactura (tip) Values ('CHEIAJ') + Insert Into crsTipFactura (tip) Values ('CHIRII') + Insert Into crsTipFactura (tip) Values ('APA') + Insert Into crsTipFactura (tip) Values ('DIVERSE') + Insert Into crsTipFactura (tip) Values ('PENALITATI') + Insert Into crsTipFactura (tip) Values ('PROFORMA') + Endif +Endproc + +***---------------------------------------------------------------------------------------- +*** intoarce id contract pentru clientul "FARA CONTRACT", pentru calcularea valorii facturii din tarifele pentru clientul FARA CONTRACT valabil in luna curenta +Function get_ctr_id_fara_contract + Private pnId + Local lnId, lcAnLuna, lcSelect, llSucces, llShowError + lcSelect = Select() + lnId = -3 + llShowError = .T. + + lcAnLuna = Alltrim(Str(Int(m.gnAn))) + Padl(Int(m.gnLuna), 2, '0') + lcSql = [SELECT ID_CTR FROM VCONTRACTE WHERE DENUMIRE = 'FARA CONTRACT' and ] + Alltrim(Str(m.gnAn * 12 + m.gnLuna)) + [ between extract(year from data_inceput) * 12 + extract(month from data_inceput) and ] + ; + [extract(year from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm'))) * 12 + extract(month from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm')))] + + pnId = 0 + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pnId) + + If Empty(m.pnId) + Do Case + Case Val(m.an) < 2006 + lnId = -1 + Case Val(m.an) = 2006 + lnId = -2 + Otherwise && >= 2007 + lnId = -3 + Endcase + Else + lnId = m.pnId + Endif + + Select (m.lcSelect) + + Return m.lnId +Endfunc && get_ctr_id_fara_contract + +**************************************************** +*** Intoarce un obiect cu id-ul si denumirea articolulul tranzit/cheiaj/penalitati +**************************************************** +Function GetPrestatieByTip + Lparameters tcTip, tlExplicatieEN + * tcTip: Tranzit, Cheiaj, Penalitati + * tlExplicatieEN: explicatia in engleza + Local lcTip, loArticol, lcSelect, lcDescriere1, lcDescriere2, lcDescriereRO, lcDescriereEN + Private pnId, pcDenumire + pnId = 0 + lcSelect = Select() + lcTip = m.tcTip + loArticol = Createobject("empty") + AddProperty(loArticol, "id_articol", 0) + AddProperty(loArticol, "denumire", "") + AddProperty(loArticol, "descriere", "") + + pcDenumire = '*' + m.lcTip && *TRANZIT/*CHEIAJ/*PENALITATI/*APA/*CHIRII + lcSql = [SELECT id_articol, denumire, descriere FROM nom_articole WHERE denumire = ?pcDenumire] + llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticolTemp') + If m.llSucces + Select crsArticolTemp + Go Top + loArticol.id_articol = id_articol + lcDescriere = Alltrim(Nvl(descriere, '')) && RO::C/V TRANZITARE CDMN PENTRU CONVOIUL/BARJA [INDICATIV], DIN [DATA] CONFORM [CONTRACT]|EN::TRANSIT FOR [INDICATIV], IN [DATA] ACCORDING TO THE [CONTRACT] + lcDescriere1 = Getwordnum(m.lcDescriere, 1, '|') + lcDescriere2 = Getwordnum(m.lcDescriere, 2, '|') + If Left(m.lcDescriere1, 4) = 'RO::' + lcDescriereRO = Strtran(m.lcDescriere1, 'RO::', '', 1, 1, 1) + lcDescriereEN = Strtran(m.lcDescriere2, 'EN::', '', 1, 1, 1) + Else + lcDescriereRO = Strtran(m.lcDescriere2, 'RO::', '', 1, 1, 1) + lcDescriereEN = Strtran(m.lcDescriere1, 'EN::', '', 1, 1, 1) + Endif + + loArticol.denumire = Iif(m.tlExplicatieEN, m.lcDescriereEN, m.lcDescriereRO) + loArticol.descriere = Iif(m.tlExplicatieEN, m.lcDescriereEN, m.lcDescriereRO) + Use In (Select('crsArticolTemp')) + Endif + + Select (m.lcSelect) + Return loArticol +Endfunc && GetPrestatieByTip +**************************************************** + +**************************************************** +*** Intoarce un obiect cu id-ul si denumirea articolulul cu id_articol din parametru +**************************************************** +Function GetPrestatieById + Lparameters tnIdArticol, tlExplicatieEN + + Private pnIdArticol + Local loArticol As "empty" + Local lcDescriere, lcDescriere1, lcDescriere2, lcDescriereEN, lcDescriereRO, lcSelect, lcSql + Local llSucces + pnIdArticol = tnIdArticol + lcSelect = Select() + + loArticol = Createobject("empty") + AddProperty(loArticol, "id_articol", 0) + AddProperty(loArticol, "denumire", "") + AddProperty(loArticol, "descriere", "") + + lcSql = [SELECT id_articol, denumire, descriere FROM nom_articole WHERE id_articol = ?pnIdArticol] + llSucces = goExecutor.oExecuta(m.lcSql, 'crsArticolTemp') + If m.llSucces + Select crsArticolTemp + Go Top + loArticol.id_articol = id_articol + loArticol.denumire = Alltrim(Nvl(denumire, '')) + lcDescriere = Alltrim(Nvl(descriere, '')) && RO::C/V TRANZITARE CDMN PENTRU CONVOIUL/BARJA [INDICATIV], DIN [DATA] CONFORM [CONTRACT]|EN::TRANSIT FOR [INDICATIV], IN [DATA] ACCORDING TO THE [CONTRACT] + lcDescriere1 = Getwordnum(m.lcDescriere, 1, '|') + lcDescriere2 = Getwordnum(m.lcDescriere, 2, '|') + If Left(m.lcDescriere1, 4) = 'RO::' + lcDescriereRO = Strtran(m.lcDescriere1, 'RO::', '', 1, 1, 1) + lcDescriereEN = Strtran(m.lcDescriere2, 'EN::', '', 1, 1, 1) + Else + lcDescriereRO = Strtran(m.lcDescriere2, 'RO::', '', 1, 1, 1) + lcDescriereEN = Strtran(m.lcDescriere1, 'EN::', '', 1, 1, 1) + Endif + + loArticol.descriere = Iif(m.tlExplicatieEN, m.lcDescriereEN, m.lcDescriereRO) + Use In (Select('crsArticolTemp')) + Endif + + Select (m.lcSelect) + Return loArticol +Endfunc && GetPrestatieId +**************************************************** + +**************************************************** +*** Intoarce id_Articol din obiectul articol.id_articol, denumire +**************************************************** +Function GetIdPrestatieByArticol + Lparameters toArticol + + Return Iif(Type('toArticol.id_articol') = 'N', toArticol.id_articol, 0) +Endfunc && GetIdPrestatieByArticol + +**************************************************** +*** Intoarce numele unui articol dupa Id din cursorul crsArticole sau din baza de date +**************************************************** +Function GetArticolById + Lparameters tnId + + Local llSucces, llShowError, lcSelect + Private pnId, pcDenumire + pnId = m.tnId + pcDenumire = '' + lcSelect = Select() + If Used('crsArticole') + If Seek(m.pnId, 'crsArticole', 'id_articol') + pcDenumire = Alltrim(crsArticole.denumire) + Endif + Endif && USED + + If Empty(m.pcDenumire) + llShowError = .T. + llSucces = goExecutor.oSelecteaza2Value([SELECT denumire FROM vnom_articole WHERE id_articol = ?pnId], @pcDenumire) + Endif + Select (m.lcSelect) + + Return m.pcDenumire +Endfunc + +**************************************************** +*** Intoarce numele unei locatii dupa Id din cursorul crsLocatii sau din baza de date +**************************************************** +Function GetLocatieById + Lparameters tnId + + Local llSucces, llShowError, llSelect + Private pnIdLocatie, pcLocatie + pnId = m.tnId + pcDenumire = '' + lcSelect = Select() + If Used('crsLocatii') + If Seek(m.pnId, 'crsLocatii', 'id') + pcDenumire = Alltrim(crsLocatii.denumire) + Endif + Endif && USED + + If Empty(m.pcDenumire) + llShowError = .T. + llSucces = goExecutor.oSelecteaza2Value([SELECT denumire FROM vnom_locatii WHERE id = ?pnId], @pcDenumire) + Endif + Select (m.lcSelect) + + Return m.pcDenumire +Endfunc + +************************************ +*** Intoarce id locatie dupa denumirea locatiei din cursorul crsLocatii sau din baza de date +************************************ +Function GetIdLocatieByName + Lparameters tcDenumire + Private pcDenumire, pnId + Local llShowError, lcSelect + lcSelect = Select() + pcDenumire = Upper(Alltrim(Nvl(m.tcDenumire, ''))) + pnId = 0 + + If Used('crsLocatii') + If Seek(m.pcDenumire, 'crsLocatii', 'denumire') + pnId = crsLocatii.Id + Endif + Endif && USED + + If Empty(m.pnId) + llShowError = .T. + llSucces = goExecutor.oSelecteaza2Value([select id from vnom_locatii where denumire = ?pcDenumire], @pnId) + Endif + Select (m.lcSelect) + + Return m.pnId +Endfunc && GetIdLocatieByName + + + + +**************************************************** +*** intoarce procent TVA standard 19/20/24 +**************************************************** +Function GetCotaTVAStandard + Local lcSql, llSucces, lnProcTva, lcSelect + lcSelect = Select() + lnProcTva = Iif(m.gnAn*12+m.gnLuna >= 2025*12+8, 21, Iif(m.gnAn >= 2017, 19, Iif(m.gnAn >= 2016, 20, Iif(m.gnAn >= 2015, 24, 21)))) + + lcSql = [select procent from cote_tva where an=?m.gnAn and luna = ?m.gnLuna and descriere = 'STANDARD'] + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsCoteTemp') + + If m.llSucces + Select crsCoteTemp + Go Top + If Reccount() >= 1 + lnProcTva = crsCoteTemp.procent + Endif + Use In (Select('crsCoteTemp')) + Endif + Select (m.lcSelect) + Return m.lnProcTva +Endfunc && GetCotaTVAStandard + + +**************************************************** +*** intoarce obiect procent TVA standard (IdJtvaExpl, IdJtva, ProcTva) +*** trebuie sa existe crsJTVA: make_jtva_explicatii() +**************************************************** +Function GetTVAStandard + Lparameters tnIntern + * tnIntern (optional): 1 = intern, 0 = extern, implicit 1 + Local lnInter, loTVA As "empty" + + lnIntern = Iif(Type('tnIntern') = 'N', m.tnIntern, 1) + loTVA = GetObiectTVA(m.lnIntern) + Return loTVA +Endfunc && GetTVAStandard + +**************************************************** +*** intoarce obiect procent TVA standard (IdJtvaExpl, IdJtva, ProcTva) +*** trebuie sa existe crsJTVA: make_jtva_explicatii() +**************************************************** +Function GetObiectTVA + Lparameters tnIntern, tnCotaTVA, tnIdJtvaColoana + * tnIntern (optional): 1 = intern, 0 = extern, implicit .T. + * tnCotaTVA (optional, default COTA STANDARD): 19/20/24 + * tnIdJtvaColoana (optional) - intorc obiect tva cu id_jtva_coloana = tnIdJtvaColoana + + Local llIntern, lnCotaTVA, lcSelect, lnCotaTVAStandard, loTVA As "empty" + lcSelect = Select() + loTVA = Createobject("empty") + AddProperty(loTVA, "IdJTVAExpl", 0) + AddProperty(loTVA, "IdJTVA", 0) + AddProperty(loTVA, "ProcTVA", 0) + + lnCotaTVAStandard = GetCotaTVAStandard() + llIntern = Iif(Pcount() >= 1, Iif(m.tnIntern = 1, .T., .F.), .T.) + Do Case + Case !Empty(m.tnIdJtvaColoana) + Select crsJtva + Locate For id_jtva_coloana = m.tnIdJtvaColoana + Otherwise + If m.llIntern + lnCotaTVA = Iif(Type('tnCotaTVA') = 'N', m.tnCotaTVA, m.lnCotaTVAStandard) + Select crsJtva + Locate For cota_tva = m.lnCotaTVA + If !Found() + Locate For cota_tva = m.lnCotaTVAStandard + Endif + Else + Select crsJtva + Locate For coloana_jv = 'WRSCDD' && alte livrari scutite cu drept de deducere + Endif + Endcase + If Found() + loTVA.IdJtvaExpl = Id + loTVA.IdJtva = id_jtva_coloana + loTVA.ProcTva = Round(1 + cota_tva / 100, 2) + Endif + + Select (m.lcSelect) + Return loTVA +Endfunc && GetObiectTVA + +**************************************************** +*** Creeaza cursorul cRegDoc pentru inregistrarea in Reg Doc. +*** Se inregistreaza factura in vanzari si apoi in Reg. Doc. +**************************************************** +Procedure make_cregdoc + Private poRegdoc + poRegdoc = Null + + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + Text To lcSchema Noshow +id N(20), id_vanzare N(12), tip N(1), id_articol N(10), articol C(100), id_locatia N(5), locatia C(100), id_valuta N(5), valuta C(50), id_client N(10), client C(100), id_contract N(10), contract C(100), pret N(16,4), curs N(12, 4), cantitate N(10,3), valval N(20,4), tvaval N(20,4), totval N(20,4), valftva N(20,4), valtva N(20,4), valctva N(20,4), um C(20), document C(100), data D, id_jtva_coloana N(10), id_jtva_coloana_ex N(10) Null + Endtext + lcOrder = [] + lcFiltru = [1=2] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + Text To lcSelect Noshow +select id, id_vanzare, tip, id_articol, articol, id_locatia, locatia, id_valuta, valuta, id_client, client, id_contract, contract, pret, curs, cantitate, valval, tvaval, totval, valftva, valtva, valctva, um, document, data, 0 as id_jtva_coloana, 0 as id_jtva_coloana_ex from ips_vregdoc + Endtext + gencursor('poRegDoc', 'cRegDoc', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poRegdoc.ca_baza1.afisare() +Endproc && make_cregdoc + + +**************************************************** +*** Creeaza cursorul gol actactan +*** Intoarce .T. daca s-a creat cursorul actactan +**************************************************** +Procedure make_actactan + Private poAct + poAct = Null + + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + + Text To lcSchema Noshow + serie_act C(10),id_act N(20),luna N(4),an N(6),cod N(20),dataireg T,nract N(16),dataact T,suma N(20,4),explicatia C(100),scd C(4),ascd C(4),scc C(4),ascc C(4),pereched N(16),perechec N(16),suma_val N(20,4),explicatia2 C(100),explicatia3 C(100),curs N(14,6),datascad T,neimpozab N(20,4),nnir N(16),id_util N(7),util C(30),dataora T,id_utils N(7),utils C(30),dataoras T,id_respons N(12),nresp C(30),id_venchel N(7),dst_chlt C(100),id_lucrare N(12),nrord C(50),id_ctr N(10),contract C(61),id_sectie N(7),sectie C(50),proc_tva N(7,2),id_set N(20),id_fact N(20),id_factd N(20),id_factc N(20),id_partd N(12),partd C(70),id_partc N(12),partc C(70),id_sucursala N(7),sucursala C(30),id_fdoc N(7),fdoc C(30),id_gestin N(7),id_jtva_coloana N(6),gestin C(50),id_gestout N(7),gestout C(50),id_valuta N(7),nume_val C(20),id_pol N(10),nume_lista C(30),tva_incasare N(1),id_instiintare N(20),numar_instiintare N(16),nr_nota N(6),taxcode N(6),paymentcode V(9) + Endtext + + lcOrder = [] + lcFiltru = [1=2] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + Text To lcSelect Noshow + select serie_act, id_act, luna, an, cod, dataireg, nract, dataact, suma, explicatia, scd, ascd, scc, ascc, pereched, perechec, suma_val, explicatia4, explicatia5, curs, datascad, neimpozab, nnir, id_util, util, dataora, id_utils, utils, dataoras, id_responsabil, nresp, id_venchelt, dst_chlt, id_lucrare, nrord, id_ctr, contract, id_sectie, sectie, proc_tva, id_set, id_fact, id_factd, id_factc, id_partd, partd, id_partc, partc, id_sucursala, sucursala, id_fdoc, fdoc, id_gestin, id_jtva_coloana, gestin, id_gestout, gestout, id_valuta, nume_val, id_pol, nume_lista_preturi, tva_incasare, id_instiintare, numar_instiintare, nr_nota, taxcode, paymentcode from vactan + Endtext + + gencursor('poAct', 'actactan', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poAct.ca_baza1.afisare() + + Return Used('actactan') +Endproc && make_actactan + + +************************************************** +*** Intoarce conturi, analitice pentru o prestatie/activitate din crsArticoleLocatii (ips_varticole_locatii) +************************************************** +Procedure GetCont + Lparameters tcTip, tnIdLocatia, tnIdArticol, tlIntern, tlPenalitati, tcScd, tcAscd, tcScc, tcAscc, tcExplicatia + + Local lcSelect, lcGrupa, llFound, llIntern, llPenalitati, lnTip, lnIdArticol, lnIdLocatia, lcTip, llSucces + lcSelect = Select() + llSucces = .F. + tcScd = '' + tcScc = '' + tcAscd = '' + tcAscc = '' + tcExplicatia = '' + + lcTip = m.tcTip + llIntern = m.tlIntern + llPenalitati = m.tlPenalitati + lnIdArticol = m.tnIdArticol + lnIdLocatia = m.tnIdLocatia + lcGrupa = '' + + llFound = .F. + + * Inca nu este implementat penalitati pentru facturi de tranzit pe locatii din ips_regdoc + * pun penalitati tranzit pe locatia SEDIU + If m.llPenalitati And Empty(Nvl(m.lnIdLocatia, 0)) + lnIdLocatia = GetIdLocatieByName('SEDIU') + Endif + + *** caut prestatia pentru tipul respectiv. + *** Daca este facturi diverse TIP = 9 sau alte prestatii TIP = 2, caut doar prestatia. La diverse, pot sa aleg prestatie de orice tip + If !Empty(m.lnIdArticol) And !Empty(m.lnIdLocatia) + Select crsArticoleLocatii + Locate For id_articol = m.lnIdArticol And id_locatia = m.lnIdLocatia + llFound = Found() + Endif + + If !m.llFound + lcGrupa = Iif(m.lcTip = TIP_TRANZIT, 'TRANZIT', Iif(m.lcTip = TIP_CHEIAJ, 'CHEIAJ', Iif(m.lcTip = TIP_PILOTAJ, 'PILOTAJ', Iif(m.lcTip = TIP_APA, 'LIVAPA', Iif(m.lcTip = TIP_DIVERSE, 'DIVERSE', '*'))))) + *** nu am gasit prestatia dupa ID, sau este o activitate fara prestatii - caut configurari generice dupa CAT = *, SUBCAT = TRANZIT/CHEIAJ/PILOTAJ/LIVAPA + If m.llPenalitati + Select crsArticole + Locate For GRUPA = TIP_PENALITATI And subgrupa = m.lcTip + Else + Select crsArticole + Locate For GRUPA = m.lcTip And subgrupa = '*' + Endif + + If Found() + lnIdArticol = crsArticole.id_articol + + Select crsArticoleLocatii + Locate For id_articol = m.lnIdArticol And id_locatia = m.lnIdLocatia + llFound = Found() + Endif + Endif + + If m.llFound + Select crsArticoleLocatii + If !m.llPenalitati + tcScd = Allt(Nvl(CTDEBITOR, '')) + tcScc = Allt(Nvl(CTCREDITOR, '')) + tcAscd = Alltrim(Iif(m.llIntern, Nvl(ctaideb, ''), Nvl(ctaedeb, ''))) + tcAscc = Alltrim(Iif(m.llIntern, Nvl(ctaicred, ''), Nvl(ctaecred, ''))) + Else + tcScd = Allt(Nvl(CTPIDEB, '')) + tcScc = Allt(Nvl(CTPICRED, '')) + tcAscd = Alltrim(Nvl(CTAPIDEB, '')) + tcAscc = Alltrim(Nvl(CTAPICRED, '')) + Endif + tcExplicatia = '' + + If Empty(tcScd) Or Empty(tcScc) + lctext = 'Nu sunt completate conturile la prestatia ID: ' + Alltrim(Transform(lnIdArticol)) + ' ' + GetArticolById(m.lnIdArticol) + ' locatia ID: ' + Alltrim(Transform(m.lnIdLocatia)) + ' ' + GetLocatieById(m.lnIdLocatia) + Iif(m.lnIdLocatia <> m.tnIdLocatia, '(' + Alltrim(Str(m.tnIdLocatia)) + ' ' + GetLocatieById(m.tnIdLocatia) + ')', '') + ' GRUPA: ' + m.lcGrupa + poLog.Log(m.lctext, Program()) + amessagebox(m.lctext, 0 + 48, _Screen.Caption) + Endif + Else + + lctext = 'Nu exista configurari pentru conturi la prestatia ID: ' + Alltrim(Transform(lnIdArticol)) + ' ' + GetArticolById(m.lnIdArticol) + ' locatia ID: ' + Alltrim(Transform(m.lnIdLocatia)) + ' ' + GetLocatieById(m.lnIdLocatia) + Iif(m.lnIdLocatia <> m.tnIdLocatia, '(' + Alltrim(Str(m.tnIdLocatia)) + ' ' + GetLocatieById(m.tnIdLocatia) + ')', '') + ' GRUPA: ' + m.lcGrupa + poLog.Log(m.lctext, Program()) + amessagebox(m.lctext, 0 + 48, _Screen.Caption) + Endif + + llSucces = !(Empty(m.tcScd) Or Empty(m.tcScc)) + + Select (m.lcSelect) + Return m.llSucces +Endproc && GetCont + + +************************************************************** +*** vizualizare tarife tranzit +************************************************************** +Procedure vizualizare_tarife_tranzit + Local loFrmTarife As "frm_tarife_tranzit" + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, lcSql, lcSqlDelete + Local lcSqlInsert, lcSqlUpdate, llAfiseaza, llModParam, llScris, llSucces, llSucces2, lnModificat + Local lnRec + Private pnId, poRec, poTarife + poTarife = Null + + + Do make_contracte && crsContracte + Do make_grupe_marfa && crsGrupeMarfa + Do make_marfa With .T. && crsMarfa + Do make_valute && crsValute + Do make_vas_um && crsVasUM + Do make_routes && crsRoutes + Do make_grup_tip_nave && crsGrupTipNave + + Text To lcSchema Noshow +id N(10) null, intern N(1), ctr_id N(10) null, rte_id N(20) null, vum_id N(10), gtn_id N(10), gdsg_id N(10) NULL, gds_id C(36) null, id_valuta N(7), valoare N(20,4), tcap1 N(5), tcap2 N(5), tccap1 N(12), tccap2 N(12), modificat N(1) + Endtext + + lcOrder = [intern desc, gtn_id, tcap1, tcap2, gdsg_id] + lcFiltru = [] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + Text To lcSelect Noshow +select id, + intern, + ctr_id, + rte_id, + vum_id, + gtn_id, + decode(gdsg_id, -1, 999888, gdsg_id) as gdsg_id, + gds_id, + id_valuta, + valoare, + tcap1, + tcap2, + tccap1, + tccap2, + 0 as modificat + from ips_vtarife_tranzit + Endtext + + Update crsGrupeMarfa Set Id = Iif(Id = -1, 999888, Id) && nu se afisa corect grupa de marfa cu id = -1, am pus id = 999888, apoi l-am modificat in -1 + + gencursor('poTarife', 'crsTarife', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poTarife.ca_baza1.afisare() + Select crsTarife + loFrmTarife = Createobject("frm_tarife_tranzit") && oacnpro.vcx + * DO FORM frm_tarife_tranzit NAME loFrmTarife NOSHOW + loFrmTarife.Show(1) + + If m.gnButon = 1 + lcSqlDelete = [DELETE from ips_tarife_tranzit WHERE id = ?pnId] + + Text To lcSqlInsert Noshow + insert into ips_tarife_tranzit + (intern, ctr_id, rte_id, tcap1, tcap2, vum_id, valoare, tccap1, tccap2, gdsg_id, gtn_id, gds_id, id_valuta) +values +(?poRec.intern, ?poRec.ctr_id, ?poRec.rte_id, ?poRec.tcap1, ?poRec.tcap2, ?poRec.vum_id, ?poRec.valoare, ?poRec.tccap1, ?poRec.tccap2, ?poRec.gdsg_id, ?poRec.gtn_id, ?poRec.gds_id, ?poRec.id_valuta) + Endtext + + Text To lcSqlUpdate Noshow +update ips_tarife_tranzit + set intern = ?poRec.intern, + ctr_id = ?poRec.ctr_id, + rte_id = ?poRec.rte_id, + tcap1 = ?poRec.tcap1, + tcap2 = ?poRec.tcap2, + vum_id = ?poRec.vum_id, + valoare = ?poRec.valoare, + tccap1 = ?poRec.tccap1, + tccap2 = ?poRec.tccap2, + gdsg_id = ?poRec.gdsg_id, + gtn_id = ?poRec.gtn_id, + gds_id = ?poRec.gds_id, + id_valuta = ?poRec.id_valuta + where id = ?poRec.id; + Endtext + + Select crsTarife + Set Filter To + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + + If m.llSucces && transactions + *** SELECTEZ IREG STERSE + Set Deleted Off + Sele Id From crsTarife Where Deleted() Into Cursor cTarifeSterse + Set Deleted On + + Select cTarifeSterse + Scan + pnId = Id + llSucces = goExecutor.oExecuta(m.lcSqlDelete) + If !m.llSucces + Exit + Endif + Endscan + Use In (Select('cTarifeSterse')) + *** STERG IN TARIFE_DIVERSE IREG STERSE + + If m.llSucces + *** MODIFIC IN TARIFE IREG MODIFICATE IN TEMPORAR + Sele crsTarife + Set Filter To + Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1 + + lnRec = 0 + Sele crsTarife + Scan For Nvl(modificat, 0) = 1 + Scatter Name poRec Memo + poRec.gdsg_id = Iif(poRec.gdsg_id = 999888, -1, poRec.gdsg_id) && nu se afisa corect grupa de marfa cu id = -1, am pus id = 999888, apoi l-am modificat in -1 + lnRec = m.lnRec + 1 + Wait Window 'Tarif nou/modificat ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait + + If Empty(Nvl(poRec.Id, 0)) + llSucces = goExecutor.oExecuta(m.lcSqlInsert) + Else + llSucces = goExecutor.oExecuta(m.lcSqlUpdate) + Endif + If !m.llSucces + Exit + Endif + Endscan + Endif && llSucces + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + Endif && gnButon + + If m.llSucces + amessagebox('Tarife modificate cu succes!', 0 + 64, _Screen.Caption) + Else + amessagebox('Tarifele nu s-au modificat!', 0 + 64, _Screen.Caption) + Endif + Endif && gnButon + + Use In (Select('crsContracte')) + Use In (Select('crsGrupeMarfa')) + Use In (Select('crsMarfa')) + Use In (Select('crsValute')) + Use In (Select('crsVasUM')) + Use In (Select('crsRoutes')) + Use In (Select('crsGrupTipNave')) + + Return m.llSucces +Endproc && vizualizare_tarife_tranzit + + +************************************************************** +*** vizualizare tarife cheiaj +************************************************************** +Procedure vizualizare_tarife_cheiaj + Local loFrmTarife As "frm_tarife_tranzit" + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, lcSql, lcSqlDelete + Local lcSqlInsert, lcSqlUpdate, llAfiseaza, llModParam, llScris, llSucces, llSucces2, lnModificat + Local lnRec + Private pnId, poRec, poTarife + poTarife = Null + + Do make_contracte && crsContracte + Do make_articole && crsArticole + Do make_valute && crsValute + + Text To lcSchema Noshow +id N(10) null, intern N(1), ctr_id N(10), id_articol N(12), articol C(100), id_valuta N(7), lim1 N(12,2), lim2 N(12,2), um C(10), corect N(2), valoare N(20,4), plus N(1), arebaza N(1), baza N(1), modificat N(1) + Endtext + + lcOrder = [intern desc, articol, lim1, lim2] + lcFiltru = [] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + Text To lcSelect Noshow +select id, + intern, + ctr_id, + id_articol, + articol, + id_valuta, + lim1, + lim2, + um, + corect, + valoare, + plus, + arebaza, + baza, + 0 as modificat + from ips_vtarife_cheiaj + Endtext + + gencursor('poTarife', 'crsTarife', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poTarife.ca_baza1.afisare() + Select crsTarife + loFrmTarife = Createobject("frm_tarife_cheiaj") && oacnpro.vcx + loFrmTarife.Show(1) + + If m.gnButon = 1 + lcSqlDelete = [DELETE from ips_tarife_cheiaj WHERE id = ?pnId] + + Text To lcSqlInsert Noshow + insert into ips_tarife_cheiaj + (id_articol, lim1, lim2, um, corect, valoare, ctr_id, intern, plus, arebaza, baza, id_valuta) +values +(?poRec.id_articol, ?poRec.lim1, ?poRec.lim2, ?poRec.um, ?poRec.corect, ?poRec.valoare, ?poRec.ctr_id, ?poRec.intern, ?poRec.plus, ?poRec.arebaza, ?poRec.baza, ?poRec.id_valuta) + Endtext + + Text To lcSqlUpdate Noshow +update ips_tarife_cheiaj + set id_articol = ?poRec.id_articol, + lim1 = ?poRec.lim1, + lim2 = ?poRec.lim2, + um = ?poRec.um, + corect = ?poRec.corect, + valoare = ?poRec.valoare, + ctr_id = ?poRec.ctr_id, + intern = ?poRec.intern, + plus = ?poRec.plus, + arebaza = ?poRec.arebaza, + baza = ?poRec.baza, + id_valuta = ?poRec.id_valuta + where id = ?poRec.id; + Endtext + + Select crsTarife + Set Filter To + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + + If m.llSucces && transactions + *** SELECTEZ IREG STERSE + Set Deleted Off + Sele Id From crsTarife Where Deleted() Into Cursor cTarifeSterse + Set Deleted On + + Select cTarifeSterse + Scan + pnId = Id + llSucces = goExecutor.oExecuta(m.lcSqlDelete) + If !m.llSucces + Exit + Endif + Endscan + Use In (Select('cTarifeSterse')) + *** STERG IN TARIFE_DIVERSE IREG STERSE + + If m.llSucces + *** MODIFIC IN TARIFE IREG MODIFICATE IN TEMPORAR + Sele crsTarife + Set Filter To + Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1 + + lnRec = 0 + Sele crsTarife + Scan For Nvl(modificat, 0) = 1 + Scatter Name poRec Memo + lnRec = m.lnRec + 1 + Wait Window 'Tarif nou/modificat ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait + + If Empty(Nvl(poRec.Id, 0)) + llSucces = goExecutor.oExecuta(m.lcSqlInsert) + Else + llSucces = goExecutor.oExecuta(m.lcSqlUpdate) + Endif + If !m.llSucces + Exit + Endif + Endscan + Endif && llSucces + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + Endif && gnButon + + If m.llSucces + amessagebox('Tarife modificate cu succes!', 0 + 64, _Screen.Caption) + Else + amessagebox('Tarifele nu s-au modificat!', 0 + 64, _Screen.Caption) + Endif + Endif && gnButon + + Use In (Select('crsContracte')) + Use In (Select('crsGrupeMarfa')) + Use In (Select('crsMarfa')) + Use In (Select('crsValute')) + Use In (Select('crsVasUM')) + Use In (Select('crsRoutes')) + Use In (Select('crsGrupTipNave')) + + Return m.llSucces +Endproc && vizualizare_tarife_cheiaj + +************************************************************** +*** vizualizare tarife contracte +************************************************************** +Procedure vizualizare_tarife_contracte + + Local loFrmTarife As "frm_tarife_contracte" + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfiseaza, llModParam + Local lcSql, lcSqlDelete, lcSqlInsert, lcSqlUpdate, llScris, llSucces, llSucces2, lnModificat, lnRec + Private poRec, poTarife, pnPretftva, pnPretctva + poTarife = Null + poRec = Null + pnPretftva = 0 + pnPretctva = 0 + + Do make_contracte && crsContracte + Do make_locatii && crsLocatii + Do make_articole && crsArticole + Do make_valute && crsValute + Do make_um && crsUM + make_cote_tva() && crsCoteTVA + + Text To lcSchema Noshow +id_ctr_art N(7) null, id_ctr N(7) null, id_articol N(20) null, articol C(100) null, um C(10) null, pret_cu_tva N(1) null, proc_tvav N(10,2) null, pret_unitar N(20,4) null, cant N(12,4) null, valoare N(20,4) null, coef_discount N(12,4) null, val_discount N(20,4) null, id_valuta N(7) null, explicatie C(100) null, nume_val C(20) null, moneda_nationala N(1) null, id_locatia N(5), locatia C(100), modificat N(1) + Endtext + + lcOrder = [articol] + lcFiltru = [] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + Text To lcSelect Noshow +select id_ctr_art, + id_ctr, + id_articol, + articol, + um, + NVL(pret_cu_tva,0) AS pret_cu_tva, + NVL(proc_tvav, -1) as proc_tvav, + pret_unitar, + cant, + ROUND(valoare, ?gnPC) as valoare, + coef_discount, + val_discount, + id_valuta, + explicatie, + valuta, + moneda_nationala, + id_locatia, + locatia, + 0 as modificat + from vctr_articole2 + Endtext + + gencursor('poTarife', 'crsTarife', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poTarife.ca_baza1.afisare() + Select crsTarife + loFrmTarife = Createobject("frm_tarife_contracte") && oacnpro.vcx + loFrmTarife.Show(1) + + If m.gnButon = 1 + lcSqlDelete = [DELETE from ctr_articole WHERE id_ctr_art = ?pnIdCtrArt] + + Text To lcSqlInsert Noshow + insert into ctr_articole + (id_ctr, pret_unitar, cant, valoare, coef_discount, val_discount, id_valuta, explicatie, um, id_articol, pret_cu_tva, proc_tvav, id_locatia) +values +(?poRec.id_ctr, ?poRec.pret_unitar, ?poRec.cant, ?poRec.valoare, ?poRec.coef_discount, ?poRec.val_discount, ?poRec.id_valuta, ?poRec.explicatie, ?poRec.um, ?poRec.id_articol, ?poRec.pret_cu_tva, ?poRec.proc_tvav, ?poRec.id_locatia) + Endtext + + Text To lcSqlUpdate Noshow +update ctr_articole + set id_ctr_art = ?poRec.id_ctr_art, + id_ctr = ?poRec.id_ctr, + pret_unitar = ?poRec.pret_unitar, + cant = ?poRec.cant, + valoare = ?poRec.valoare, + coef_discount = ?poRec.coef_discount, + val_discount = ?poRec.val_discount, + id_valuta = ?poRec.id_valuta, + explicatie = ?poRec.explicatie, + um = ?poRec.um, + id_articol = ?poRec.id_articol, + pret_cu_tva = ?poRec.pret_cu_tva, + proc_tvav = ?poRec.proc_tvav, + id_locatia = ?poRec.id_locatia + where id_ctr_art = ?poRec.id_ctr_art + Endtext + + Select crsTarife + Set Filter To + + llSucces = (SQLSetprop(gnHandle, "Transactions", 2) >= 0) + + If m.llSucces && transactions + *** SELECTEZ IREG STERSE + Set Deleted Off + Sele id_ctr_art From crsTarife Where Deleted() Into Cursor cTarifeSterse + Set Deleted On + + Select cTarifeSterse + Scan + pnIdCtrArt = id_ctr_art + llSucces = goExecutor.oExecuta(m.lcSqlDelete) + If !m.llSucces + Exit + Endif + Endscan + Use In (Select('cTarifeSterse')) + *** STERG IN TARIFE_DIVERSE IREG STERSE + + If m.llSucces + *** MODIFIC IN TARIFE IREG MODIFICATE IN TEMPORAR + Sele crsTarife + Set Filter To + Calculate Cnt() To m.lnModificat For Nvl(modificat, 0) = 1 + + lnRec = 0 + Sele crsTarife + Scan For Nvl(modificat, 0) = 1 + Scatter Name poRec Memo + poRec.proc_tvav = Iif(poRec.proc_tvav = -1, Null, poRec.proc_tvav) + poRec.pret_cu_tva = Nvl(poRec.pret_cu_tva, 0) + + lnRec = m.lnRec + 1 + Wait Window 'Tarif nou/modificat ' + Alltrim(Str(m.lnRec)) + '/' + Alltrim(Str(m.lnModificat)) Nowait + + If Empty(Nvl(poRec.id_ctr_art, 0)) + llSucces = goExecutor.oExecuta(m.lcSqlInsert) + Else + llSucces = goExecutor.oExecuta(m.lcSqlUpdate) + Endif + If !m.llSucces + Exit + Endif + Endscan + Endif && llSucces + + If !m.llSucces + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + llScris = goExecutor.oExecuta(m.lcSql) + + llSucces2 = (SQLSetprop(gnHandle, "Transactions", 1) >= 0) + If !m.llSucces2 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 48, 'Atentie!') + Endif + + llSucces = m.llSucces And m.llScris + Endif && gnButon + + If m.llSucces + amessagebox('Tarife modificate cu succes!', 0 + 64, _Screen.Caption) + Else + amessagebox('Tarifele nu s-au modificat!', 0 + 64, _Screen.Caption) + Endif + Endif && gnButon + + Use In (Select('crsTarife')) + Use In (Select('crsContracte')) + Use In (Select('crsArticole')) + Use In (Select('crsLocatii')) + Use In (Select('crsValute')) + Use In (Select('crsUM')) + Use In (Select('crsCoteTVA')) + + Return m.llSucces +Endproc && vizualizare_tarife_contracte + +******************************************** +*** Genereaza data act din luna contabila curenta +******************************************** +Function GenDataAct + Local ldData, ldDataCurenta + ldData = Gomonth(Date(m.gnAn, m.gnLuna, 1), 1) - 1 && ultima zi din luna contabila curenta + ldDataCurenta = Date() + If !(Year(m.ldDataCurenta) = Year(m.ldData) And Month(m.ldDataCurenta) = Month(m.ldData)) + m.ldDataCurenta = m.ldData + Endif + Return m.ldDataCurenta +Endfunc && GenDataAct + +******************************************** +*** Intoarce numarul tipului de prestatie din numele tipului +******************************************** +Function cTip2nTip + Lparameters tcTip + Local lcTip, lnTip + lcTip = Upper(Alltrim(tcTip)) + lnTip = NTIP_TRANZIT + + Do Case + Case m.lcTip = TIP_TRANZIT + lnTip = NTIP_TRANZIT + Case m.lcTip = TIP_CHEIAJ + lnTip = NTIP_CHEIAJ + Case m.lcTip = TIP_APA + lnTip = NTIP_APA + Case m.lcTip = TIP_CHIRII + lnTip = NTIP_CHIRII + Case m.lcTip = TIP_PILOTAJ + lnTip = NTIP_PILOTAJ + Case m.lcTip = TIP_ALTE + lnTip = NTIP_ALTE + Case m.lcTip = TIP_PENALITATI + lnTip = NTIP_PENALITATI + Case m.lcTip = TIP_DIVERSE + lnTip = NTIP_DIVERSE + Endcase + Return m.lnTip +Endfunc && cTip2nTip + +******************************************************** +*** listare recapitulatie cheiaj +*** se apeleaza din frm_facturi +******************************************************** +Procedure listeaza_recapitulatie_cheiaj + + Private pnIdVanzare, pnTotalValoare, pnTotalValoareVal + pnTotalValoare = 0 + pnTotalValoareVal = 0 + + pnIdVanzare = poDate.nid_vanzare + poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_cheiaj') + * Selectez membri convoaielor + + Text To lcSelect Textmerge Noshow +select vye_id, + vz_id, + numar_act, + data_act, + client_id, + client, + contract_client, + client_ctr_id, + beneficiar_id, + beneficiar, + intern, + document, + declcdt, + nava, + tipn_id, + tipn, + lbd, + trn, + hp, + cap, + lung, + id_locatia, + locatia, + id_dana, + dana, + datai, + datap, + nrore, + id_valuta, + valuta, + id_articol, + articol, + tarif, + cant, + durata, + um, + valval, + tvaval, + totval, + valftva, + valtva, + valctva, + curs + from ips_vberthing_members_vanzari + where vz_id = ?pnIdVanzare + Endtext + + llSucces = goExecutor.oExecuta(m.lcSelect, 'crsBerthingMembersVanzari') + + If !m.llSucces + Return + Endif + + Select vye_id, ; + vz_id, ; + numar_act As nrfact, ; + data_act As datafact, ; + client_id, ; + client, ; + contract_client, ; + client_ctr_id, ; + beneficiar_id, ; + beneficiar, ; + (Nvl(intern, 0) = 1) As intern, ; + Document, ; + DECLCDT, ; + nava, ; + tipn_id, ; + tipn, ; + lbd, ; + trn, ; + hp, ; + cap, ; + lung, ; + id_locatia, ; + locatia, ; + id_dana, ; + dana, ; + datai, ; + datap, ; + nrore, ; + id_valuta, ; + valuta, ; + id_articol, ; + articol, ; + tarif, ; + cant, ; + durata, ; + um, ; + valval, ; + TVAVAL, ; + totval, ; + valftva, ; + valtva, ; + valctva, ; + Curs ; + From crsBerthingMembersVanzari ; + Order By DECLCDT, nava ; + Into Cursor crsRecapitulatie + Use In (Select('crsBerthingMembersVanzari')) + + Select crsRecapitulatie + Go Top + llIntern = intern + * Total valoare + Select Max(Curs) As Curs, Sum(valval) As valval From crsRecapitulatie Into Cursor crsTotalTemp + Select crsTotalTemp + Go Top + pnTotalValoare = Iif(m.llIntern, Round(Round(crsTotalTemp.valval, m.gnPC) * crsTotalTemp.Curs, m.gnPC), Round(crsTotalTemp.valval, m.gnPC)) && intern lei, extern valuta + pnTotalValoareVal = Round(crsTotalTemp.valval, m.gnPC) + + Use In (Select('crsTotalTemp')) + + Select crsRecapitulatie + lcRaport = 'recapitulatie_cheiaj.frx' + Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg + + Use In (Select('crsRecapitulatie')) + +Endproc && listeaza_recapitulatie_cheiaj + +******************************************************** +*** listare recapitulatie tranzit +*** se apeleaza din frm_facturi +******************************************************** +Procedure listeaza_recapitulatie_tranzit + + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcRaport, lcSchema, lcSelect, llAfiseaza + Local llModParam, llSucces + Local lcModCalcul, lcVyeId + Private pnIdVanzare, pnTotalValoare + + pnTotalValoare = 0 + pnIdVanzare = poDate.nid_vanzare + poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_tranzit') + * Selectez membri convoaielor + Text To lcSelect Textmerge Noshow +select vmv_id, + vv_id, + client_id, + client, + contract_client, + client_ctr_id, + beneficiar_id, + tiprecap, + beneficiar, + intern, + vz_id, + numar_act, + data_act, + cuplat, + arm_id, + armator, + kmi, + kmf, + rte_id, + ruta, + convoy_nam, + declaratio, + generation, + vye_id, + aviz, + data_aviz, + origin, + destinatio, + vms_id, + vsl_id, + ctt_id, + dirty_tank, + rstart_id, + rfin_id, + distanta, + distanta_cdmn, + contact, + indicativ, + lbd, + trn, + hp, + tcap, + procdiv, + vtp_id, + tip_nava, + vgrp_id, + grupa_nava, + felcargo, + cargo, + gds_id, + grp_id, + grupa_marfa, + periculos, + corect, + procdist, + id_valuta, + valuta, + tarif, + cant, + um, + valval, + tvaval, + totval, + valftva, + valtva, + valctva, + curs + from ips_vvoyage_members_vanzari + where vz_id = ?pnIdVanzare + Endtext + * from ips_vvoyage_members_vanzari3 ia o singura inregistrare din ips_cargoes, ca sa nu faca full scan pe ips_cargoes, dar trebuie cumulata cantitatea de marfa!!! + * trebuie sa salvez cargo in ips_voyage_members_vanzari + + llSucces = goExecutor.oExecuta(m.lcSelect, 'crsVoyageMembers') + + If !m.llSucces + Return + Endif + + * Selectez capacitatea totala a convoiului, nu numai a navelor de pe factura curenta. + * Este posibil sa fac facturi catre clienti diferiti pe un singur convoi. + * Este posibil sa stornez factura si apoi sa o refacturez cu barje cu TCAP corectat + * Daca o barja apare cu mai multe TCAP, din mai multe facturi, iau TCAP de la aceeasi barja de pe factura curenta + Text To lcSql Noshow +Select vye_id, Sum(tcap) As tcap +from (select distinct vye_id, + vms_id, + LAST_VALUE(tcap) OVER(PARTITION BY vms_id ORDER BY fact ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS tcap + from (Select vmv.vye_id, + vmv.vms_id, + vmv.tcap, + decode(vv.vz_id, ?pnIdVanzare, 1, 0) as fact + From IPS_VOYAGE_MEMBERS_VANZARI vmv + join IPS_VOYAGES_VANZARI vv + On vmv.vv_id = vv.id + where vmv.vye_id in (SELECT distinct vmv1.vye_id + FROM ips_voyage_members_vanzari vmv1 + join ips_voyages_vanzari vv1 + on vmv1.vv_id = vv1.id + WHERE vv1.vz_id = ?pnIdVanzare))) + GROUP By vye_id + Endtext + * Select vye_id, Sum(tcap) As tcap From crsVoyageMembers Group By vye_id Into Cursor cCapacitateTemp + + llSucces = goExecutor.oExecuta(m.lcSql, 'cCapacitateTemp') + + If !m.llSucces + Use In (Select('crsVoyageMembers')) + Return + Endif + + Select vm.vye_id, ; + vm.armator, ; + vm.declaratio As DECLCDT, ; + vm.origin, ; + vm.destinatio, ; + vm.aviz, ; + vm.data_aviz, ; + vm.convoy_nam As numeconvoi, ; + vm.client, ; + vm.contract_client, ; + (Nvl(vm.intern, 1) = 1) As intern, ; + vm.beneficiar, ; + vm.numar_act As nrfact, ; + vm.data_act As datafact, ; + vm.vv_id, ; + vm.vmv_id, ; + vm.tiprecap, ; + vm.cuplat, ; + vm.kmi, ; + vm.kmf, ; + vm.rte_id, ; + vm.ruta, ; + vm.vms_id, ; + vm.vsl_id, ; + vm.ctt_id, ; + vm.dirty_tank, ; + vm.rstart_id, ; + vm.rfin_id, ; + vm.distanta, ; + vm.distanta_cdmn, ; + vm.contact, ; + vm.indicativ, ; + vm.lbd, ; + vm.trn, ; + vm.hp, ; + vm.tcap, ; + vm.procdiv, ; + vm.VTP_ID, ; + vm.tip_nava, ; + vm.vgrp_id, ; + vm.grupa_nava, ; + vm.felcargo, ; + vm.cargo, ; + vm.gds_id, ; + vm.GRP_ID, ; + vm.grupa_marfa, ; + vm.periculos, ; + vm.corect, ; + vm.procdist, ; + vm.id_valuta, ; + vm.valuta, ; + vm.Curs, ; + vm.tarif, ; + vm.cant, ; + vm.um, ; + vm.valval, ; + vm.TVAVAL, ; + vm.totval, ; + vm.valftva, ; + vm.valtva, ; + vm.valctva, ; + Cast(Nvl(C.tcap, 0) As N(20, 2)) As convoi_t, ; + Cast('' As M) As mod_calcul ; + From crsVoyageMembers vm Join cCapacitateTemp C On vm.vye_id = C.vye_id ; + Order By vm.declaratio, vm.indicativ ; + Into Cursor crsRecapitulatie Readwrite + + Select crsRecapitulatie + Go Top + llIntern = intern + * Total valoare + Select Max(Curs) As Curs, Sum(valval) As valval From crsRecapitulatie Into Cursor crsTotalTemp + Select crsTotalTemp + Go Top + pnTotalValoare = Iif(m.llIntern, Round(crsTotalTemp.valval * crsTotalTemp.Curs, m.gnPC), crsTotalTemp.valval) && intern lei, extern valuta + + Use In (Select('crsTotalTemp')) + + Select Distinct vye_id From crsRecapitulatie Into Cursor cModCalcul + + Select cModCalcul + Scan + lcVyeId = Alltrim(cModCalcul.vye_id) + lcModCalcul = mod_calcul_tranzit('crsRecapitulatie', m.lcVyeId) + Update crsRecapitulatie Set mod_calcul = m.lcModCalcul Where vye_id = m.lcVyeId + Endscan + + Use In (Select('cModCalcul')) + Use In (Select('crsVoyageMembers')) + Use In (Select('cCapacitateTemp')) + + lcRaport = 'recapitulatie_tranzit.frx' + Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg + + Use In (Select('crsRecapitulatie')) +Endproc && listeaza_recapitulatie_tranzit + +******************************************* +*** se apeleaza din recapitulatie_tranzit.frx +*** intorce text cu modul de calcul valoare tranzit +******************************************* +Procedure mod_calcul_tranzit + Lparameters tcTabel, tcVyeId + Local lcModCalcul, llIntern, lnCurs, lnOldDecimals, lcSelect + Local lnValftva, lnValval, lcValuta + lcSelect = Select() + llIntern = .F. + + lcModCalcul = ; + [TARIF * CANT * %DIST * (%COR + %SUPL) = TOTAL ] + Chr(13) + Chr(10) + + lnValval = 0 + lnValftva = 0 + lnOldDecimals = Set("Decimals") + lcValuta = '' + Set Decimals To 4 + Select vye_id, intern, indicativ, tarif, valuta, cant, um, procdist, corect, procdiv, valval, Curs, valftva From (m.tcTabel) Where vye_id = m.tcVyeId Order By indicativ Into Cursor cModCalculTemp + Select cModCalculTemp + Scan + lcModCalcul = lcModCalcul + Alltrim(Transform(tarif, GET_MASK(10, 4))) + [ ] + Allt(valuta) + [ * ] + Allt(Str(cant, 8, 2)) + [ ] + Allt(um) + [ * ] + Allt(Str(procdist, 6, 2)) + [ * ] + Allt(Str(corect + procdiv, 5, 2)) + [ = ] + Alltrim(Transform(valval, GET_MASK(16, 2))) + [ ] + Allt(valuta) + llIntern = intern + lnCurs = Curs + If m.llIntern + * nu mai adaug contravaloarea in lei pentru ca totalul nu este suma la valorile individuale in lei, ci este valoarea totala in valuta * curs + *!* lcModCalcul = lcModCalcul + " * " + Alltrim(Str(Curs, 10, gnPcurs)) + " LEI/" + Allt(valuta) + " = " + Alltrim(Transform(valftva, GET_MASK(12, gnPC))) + " LEI" + Endif + lcModCalcul = lcModCalcul + Chr(13) + lnValval = lnValval + valval + lnValftva = lnValftva + valftva + lcValuta = Alltrim(valuta) + Endscan && cModCalculTemp + Use In (Select('cModCalculTemp')) + + lnValftva = Round(m.lnValval * m.lnCurs, m.gnPC) && totalul in lei = total in valuta * curs, nu suma totalurilor in lei + + If m.llIntern + lcModCalcul = lcModCalcul + [TOTAL ] + Alltrim(Transform(lnValval, GET_MASK(13, 2))) + [ ] + Allt(m.lcValuta) + IIF(inlist(UPPER(allt(nvl(m.lcValuta, 'LEI'))), 'LEI', 'RON'), " ", " * " + Alltrim(Str(lnCurs, 10, gnPcurs)) + " LEI/" + Allt(m.lcValuta) + " = " + Alltrim(Transform(lnValftva, GET_MASK(12, gnZ))) + " LEI") + Else + lcModCalcul = lcModCalcul + [TOTAL ] + Alltrim(Transform(lnValval, GET_MASK(14, 2))) + [ ] + Allt(m.lcValuta) + Endif + + Set Decimals To (lnOldDecimals) + Select (m.lcSelect) + Return lcModCalcul + +Endproc && mod_calcul_tranzit + +********************************************* +** Listeaza recapitulatie penalitati apelata din frm_facturi sau din formularul de penalitati, caz in care exista cursorul recapitulatie +********************************************* +Procedure listeaza_recapitulatie_penalitati + Lparameters tlEvaluare, tcTitlu + * tlEvaluare (optional): Default .F., daca se listeaza recapitulatia fara factura, din formularul de calcul. + * tcTitlu (optional), daca se listeaza recapitulatia fara factura, din formularul de calcul + + Private pnIdVanzare, pcTitlu, pnNrFactPenalitati, pdDataFactPenalitati, pnIdFact + Local lcSelect + + lcSelect = Select() + pnIdVanzare = 0 + pcTitlu = Iif(!Empty(m.tcTitlu), m.tcTitlu, '') + pnNrFactPenalitati = 0 + pdDataFactPenalitati = {} + pnIdFact = 0 + + If !m.tlEvaluare + pnIdVanzare = poDate.nid_vanzare + + poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_penalitati') + + lcSql = [select v.id_fact, v.numar_act, v.data_act, p.denumire from vanzari v join nom_parteneri p on v.id_part = p.id_part WHERE v.id_vanzare = ?pnIdVanzare] + llSucces = goExecutor.oExecuta(m.lcSql, 'cFacturaRTemp') + If m.llSucces + Select cFacturaRTemp + Go Top + pnIdFact = id_fact + pnNrFactPenalitati = cFacturaRTemp.numar_act + pdDataFactPenalitati = Ttod(cFacturaRTemp.data_act) + pcTitlu = 'Situatia calculului penalitatilor de intarziere la ' + Alltrim(Transform(pdDataFactPenalitati)) + Chr(13) + Chr(10) + ' pentru ' + Alltrim(cFacturaRTemp.denumire) + Endif && llSucces + Use In (Select('cFacturaRTemp')) + + Text To lcSql Noshow + select id, + id_ctr, + contract, + id_part, + denumire as nume, + cod_fiscal, + nrfact, + datafact, + valctva, + nract, + dataact, + suma, + databaza, + dataref, + coef_penalitati as ppenzi, + coef_penalitati2 as ppenzi2, + nr_zile, + nr_zile1, + nr_zile2, + nr_zile_gratie, + penalitati, + datascad + from vpenalitati + where id_fact_pen = ?pnIdFact + Endtext + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsRecapitulatie') + Endif + + + If Used('crsRecapitulatie') + Select crsRecapitulatie + lcRaport = 'recapitulatie_penalitati.frx' + Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg + Use In (Select('crsRecapitulatie')) + Endif + Select (m.lcSelect) +Endproc && listeaza_recapitulatie_penalitati + +Procedure listeaza_recapitulatie_alte + + Private pnIdVanzare, pcValoareValute, pcCursValute + pcValoareValute = '' + pcCursValute = '' + + pnIdVanzare = poDate.nid_vanzare + poLog.Log('id_vanzare=' + Alltrim(Str(Nvl(m.pnIdVanzare, 0))), 'listeaza_recapitulatie_alte') + + Text To lcSelect Textmerge Noshow +select id, + id_vanzare, + tip, + id_articol, + articol, + id_locatia, + locatia, + id_valuta, + valuta, + moneda_nationala, + id_client, + client, + id_contract, + contract as contract_client, + pret as tarif, + curs, + cantitate, + valval, + valftva, + um, + document, + data, + perioada, + numar_act as nrfact, + data_act as datafact, + ctdebitor, + ctaideb, + ctaedeb, + ctcreditor, + ctaicred, + ctaecred + from ips_vregdoc + where id_vanzare = ?pnIdVanzare + order by id + Endtext + + llSucces = goExecutor.oExecuta(m.lcSelect, 'crsRecapitulatie') + + If !m.llSucces + Return + Endif + + * pcValoareValute - il scriu la total in raport + Select valuta, moneda_nationala, Curs, Sum(valval) As valval From crsRecapitulatie Group By valuta, Curs, moneda_nationala Order By moneda_nationala Desc, valuta Into Cursor cTotalTemp + + * daca nu are alte valute decat lei, nu il mai scriu + Select cTotalTemp + Locate For moneda_nationala = 0 + If Found() + Scan + pcValoareValute = pcValoareValute + ', ' + Alltrim(Str(valval, 16, m.gnPC)) + ' ' + Alltrim(valuta) + If moneda_nationala = 0 + pcCursValute = pcCursValute + ', ' + Alltrim(Str(Curs, 12, m.gnPcurs)) + " LEI/" + Alltrim(valuta) + Endif + Endscan + If !Empty(m.pcValoareValute) + pcValoareValute = Alltrim(Substr(m.pcValoareValute, 2)) + pcCursValute = Alltrim(Substr(m.pcCursValute, 2)) + Endif + Endif + Use In (Select('cTotalTemp')) + + Select crsRecapitulatie + lcRaport = 'recapitulatie_alte.frx' + Do listeaza_recapitulatie With 'crsRecapitulatie', m.lcRaport In ofacturare.prg + + Use In (Select('crsRecapitulatie')) +Endproc && listeaza_recapitulatie_alte + + +*------------------------------------- +* meniu suplimentar pentru butonul Borderou din frm_facturi +Procedure meniu_borderou_plus + Lparameters tcListaMeniu, tcListaProceduri + * tcListaMeniu: titlurile optiunilor din meniu separate prin | + * tcListaProceduri: numele procedurilor corespunzatoare optiunilor din meniu separate prin | + * Procedurile primesc ca parametru tcVanzareIds (lista id_vanzare) si intorc llSucces + Local lnNumarOptiuni + lnNumarOptiuni = 1 + tcListaMeniu = 'Copiere declaratii comandant si istorice cheiaj in directorul cu facturi' + tcListaProceduri = 'CopyDeclCdtPdf' + + Return lnNumarOptiuni +Endproc && meniu_borderou_plus + +*------------------------------------- +* Copie (muta) declaratii comandant si istoricele de cheiaj pdf in directorul facturi pdf si redenumeste declaratiile cu data_nr_factura_declaratie.pdf +* Nu suprascrie +* Pentru a fi atasate la emailul cu borderou facturi +Procedure CopyDeclCdtPdf + Lparameters tcVanzareIds + * tcVanzareIds: lista id_vanzare facturi + + Local lcDeclPath, lcDeclaratie, lcDeclaratiiCopiate, lcDeclaratiiNecopiate, lcDeclaratiiNuExista, lcDeclaratiiExistaDeja + Local lcDestinationFile, lcFacturaPath, lcFacturaPdf, lcSourceFile, lcSql, lcSufixDecl + Local ldDataFactura, llSucces, lnNumarFactura, lnPos, lcCursor, lcSelect + lcSelect = Select() + lcDeclaratiiCopiate = '' + lcDeclaratiiNecopiate = '' + lcDeclaratiiNuExista = '' + lcDeclaratiiExistaDeja = '' + + llSucces = .T. + lcSufixDecl = 'DEC' + + lcDeclPath = GetDocumentPath('declcdt') && [pdf_declcdt_acn] + lcFacturaPath = GetDocumentPath('factura') && [pdf_factura_acn] + + If Empty(m.lcDeclPath) Or !Directory(m.lcDeclPath) + amessagebox('Directorul declaratii/istorice: ' + m.lcDeclPath + ' nu exista!') + llSucces = .F. + Endif + If Empty(m.lcFacturaPath) Or !Directory(m.lcFacturaPath) + amessagebox('Directorul facturi: ' + m.lcFacturaPath + ' nu exista!') + llSucces = .F. + Endif + + If Empty(m.tcVanzareIds) + amessagebox('Selectati facturile de tranzit/cheiaj pentru care doriti sa copiati declaratiile/istoricele!', 0 + 48, _Screen.Caption) + Return m.llSucces + Endif + + * Selectez facturi, declaratii pentru tip_factura 0 = tranzit, , document stationare pentru tip_factura 1 = cheiaj + Text To lcSql Textmerge Noshow +SELECT V.DATA_ACT, V.NUMAR_ACT, VYE.DECLARATIO AS DECLCDT, V.TIP_FACTURA, VV.DOCUMENT as ISTORIC, COUNT(*) OVER (PARTITION BY V.TIP_FACTURA, VYE.DECLARATIO) AS NR + FROM VANZARI V JOIN IPS_VOYAGES_VANZARI VV ON V.ID_VANZARE = VV.VZ_ID JOIN IPS_VOYAGES VYE ON VV.VYE_ID = VYE.ID + WHERE V.ID_VANZARE IN (<>) AND V.TIP_FACTURA IN (0,1) + ORDER BY V.DATA_ACT, V.NUMAR_ACT + Endtext + lcCursor = Sys(2015) + + If m.llSucces + llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursor) + Endif && llSucces + + If m.llSucces + If Reccount(m.lcCursor) = 0 + amessagebox('Nu exista rezultate. Alegeti facturi de tranzit!', 0 + 48, _Screen.Caption) + llSucces = .F. + Endif + Endif + + If m.llSucces + * O declaratie poate aparea pe mai multe facturi + * Sterg declaratia pdf doar dupa ce am copiat declaratia pentru toate facturile + Select Distinct Upper(DECLCDT) As DECLCDT, nr From (m.lcCursor) Into Cursor cDeclTemp Readwrite + Select cDeclTemp + Index On DECLCDT Tag DECLCDT + + Select Distinct Upper(istoric) As istoric, nr From (m.lcCursor) Into Cursor cIstoricTemp Readwrite + Select cIstoricTemp + Index On istoric Tag istoric + + * Scanez cursorul cu facturi si copiez fiecare declaratie din directorul declaratii in directorul facturi cu redenumirea declaratiei + Select (m.lcCursor) + Scan + ldDataFactura = Ttod(data_act) + lnNumarFactura = numar_act + lcDeclaratie = Upper(Alltrim(DECLCDT)) && 20A0041 + lcIstoric = Upper(Alltrim(istoric)) + lnTipFactura = tip_factura + + lcFacturaPdf = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) && 20200410_123456_factura.pdf + lnPos = At('_', Juststem(m.lcFacturaPdf), 2) && caut a doua aparitie a '_' din 20200410_123456_factura + If m.lnTipFactura = 0 + lcDestinationFileName = Left(Juststem(m.lcFacturaPdf), m.lnPos) + 'dec_' + m.lcDeclaratie + '.pdf' && 20200410_123456_dec_20A0041.pdf + lcSourceFile = Addbs(m.lcDeclPath) + m.lcDeclaratie + '.pdf' && 20A0041.pdf + Else + lcDestinationFileName = Left(Juststem(m.lcFacturaPdf), m.lnPos) + 'ist_' + m.lcIstoric + '.pdf' && 20200410_123456_ist_20M271.pdf + lcSourceFile = Addbs(m.lcDeclPath) + m.lcIstoric + '.pdf' && 20M271.pdf + Endif + + lcDestinationFile = Addbs(m.lcFacturaPath) + m.lcDestinationFileName + + If goApp.FileExist(m.lcSourceFile) + llCopie = .T. + If goApp.FileExist(m.lcDestinationFile) + llCopie = (amessagebox('Exista fisierul ' + m.lcDestinationFile + Chr(13) + 'Doriti sa il suprascrieti?', 4 + 32, _Screen.Caption) = 6) + Endif + If m.llCopie + llSucces = goApp.CopyFile(m.lcSourceFile, m.lcDestinationFile) && override + Else + llSucces = .T. + Endif + If m.llSucces + If m.lnTipFactura = 0 + * Sterg declaratia pdf daca a fost ultima aparitie a declaratiei pe o factura + Select cDeclTemp + If Seek(m.lcDeclaratie) + Replace nr With nr - 1 + If nr = 0 + llSucces = goApp.DeleteFile(m.lcSourceFile) + Endif + Endif + Else + * Sterg istoric pdf daca a fost ultima aparitie a declaratiei pe o factura + Select cIstoricTemp + If Seek(m.lcIstoric) + Replace nr With nr - 1 + If nr = 0 + llSucces = goApp.DeleteFile(m.lcSourceFile) + Endif + Endif + Endif + + lcDeclaratiiCopiate = lcDeclaratiiCopiate + Justfname(m.lcSourceFile) + ' - ' + Justfname(m.lcDestinationFile) + Chr(13) + Chr(10) + Else + lcDeclaratiiNecopiate = lcDeclaratiiNecopiate + Justfname(m.lcSourceFile) + Chr(13) + Chr(10) + Endif + Else + * Daca nu exista deja in destinatie de la o copiere anterioara declar declaratia ca nu exista + If goApp.FileExist(m.lcDestinationFile) + lcDeclaratiiExistaDeja = m.lcDeclaratiiExistaDeja + Justfname(m.lcDestinationFile) + Chr(13) + Chr(10) + Else + lcDeclaratiiNuExista = m.lcDeclaratiiNuExista + Justfname(m.lcSourceFile) + Chr(13) + Chr(10) + Endif + Endif + Endscan && lcCursor + Use In (Select(m.lcCursor)) + Use In (Select('cDeclTemp')) + Use In (Select('cIstoricTemp')) + Endif && llSucces + + amessagebox('Declaratii/istorice copiate din ' + m.lcDeclPath + ' in ' + m.lcFacturaPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiCopiate + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ; + 'Declaratii/istorice necopiate (eroare) din ' + m.lcDeclPath + ' in ' + m.lcFacturaPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiNecopiate + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ; + 'Declaratii/istorice care nu exista in ' + m.lcDeclPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiNuExista + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ; + 'Declaratii/istorice existente deja in ' + m.lcFacturaPath + ':' + Chr(13) + Chr(10) + m.lcDeclaratiiExistaDeja, 0 + 64, _Screen.Caption) + + Select (m.lcSelect) + + llSucces = Empty(m.lcDeclaratiiNecopiate) + Return m.llSucces +Endproc && CopyDeclCdtPdf \ No newline at end of file diff --git a/Programe/proceduri_acnpro_rapoarte.prg b/Programe/proceduri_acnpro_rapoarte.prg new file mode 100644 index 0000000..411e5d2 --- /dev/null +++ b/Programe/proceduri_acnpro_rapoarte.prg @@ -0,0 +1,1253 @@ +#Define TIP_TRANZIT 'TRANZIT' +#Define TIP_CHEIAJ 'CHEIAJ' +#Define TIP_APA 'APA' +#Define TIP_CHIRII 'CHIRII' +#Define TIP_PILOTAJ 'PILOTAJ' +#Define TIP_ALTE 'ALTE' +#Define TIP_PENALITATI 'PENALITATI' +#Define TIP_DIVERSE 'DIVERSE' + +#Define NTIP_TRANZIT 0 +#Define NTIP_CHEIAJ 1 +#Define NTIP_APA 2 +#Define NTIP_CHIRII 3 +#Define NTIP_PILOTAJ 4 +#Define NTIP_ALTE 5 +#Define NTIP_PENALITATI 6 +#Define NTIP_DIVERSE 9 + +*!* 08.07.2020 +*!* Raport1_Concordanta se verifica diferentele registru documente pe locatii - contabilitate la nivel de document si conturi + +*!* 24.11.2022 +*!* GET_DATE_VENITURI - situatie venituri tranzit. la facturile cu valoare -, scad si indicatorii fizici. + +*!* 19.08.2024 +*!* GET_DATE_VENITURI - situatie venituri cheiaj - corectare UM LBD/LBP + +******************************************************************************* +*** concordanta facturi comercial-contabilitate zilnic (numar facturi, valoare) +******************************************************************************* +Procedure Raport1_Concordanta + Local lcAn, lcLuna, lcRaport, lcSqlAct, lcSqlComercial, lcSqlNotInAct, lcSqlNotInComercial + Local lcSqlTVAAct, lcSqlTVAComercial, lcSqlVanzariSterse, lcdata, ldDataI, llSucces, lnAn, lnLuna + Local lnNrfact2, lnUltimazi, lnZi, lnvalftvaE_tot, lnvalftvaI_tot, lnvalftva_tot + Local lnvaltva_tot, lnvalftvacont_tot, lnvaltvacont_tot, loCom + Private pdData, pdData1, pdData2, pnTVA, pnTVARJ + + lnAn = Int(m.gnAn) + lnLuna = Int(m.gnLuna) + lcAn = Alltrim(Str(m.lnAn)) + lcLuna = Padl(m.lnLuna, 2, '0') + + lcdata = '01/' + lcLuna + '/' + lcAn + ldDataI = Date(m.lnAn, m.lnLuna, 1) + pdData = m.ldDataI + lnUltimazi = Day(Gomonth(ldDataI, 1) - 1) + pdData1 = Date(m.gnAn, m.gnLuna, 1) + pdData2 = Gomonth(m.pdData1, 1) - 1 + + lnvalftva_tot = 0 + lnvalftvaI_tot = 0 + lnvalftvaE_tot = 0 + lnvaltva_tot = 0 + lnvalftvacont_tot = 0 + lnvaltvacont_tot = 0 + + lcRaport = gcTempPath + [raport_] + Sys(2) + [.txt] + lcRaportXls = Forceext(m.lcRaport, 'xls') + + CREATE CURSOR cFacturiTemp (ddata T NULL, nrfact1 I NULL, nrfact2 I NULL, ; + valftvai1 N(20,2) NULL, valftvae1 N(20,2) NULL, ; + valftva1 N(20,2) NULL, valftva2 N(20,2) NULL, difvalftva N(20,2) NULL, ; + valtva1 N(20,2) NULL, valtva2 N(20,2) NULL, difvaltva N(20,2) NULL, ; + nract I NULL, nract1 I NULL, nract2 I NULL, dataact1 D NULL, dataact2 D NULL, ; + client C(100) NULL, tip_factura C(100) NULL, ; + cont C(4) NULL, acont C(4) NULL, suma1 N(20,2) NULL, suma2 N(20,2) NULL, difcont N(20,2) NULL) + + * Facturi din Vanzari si din Act + TEXT TO lcSqlVanzariAct TEXTMERGE NOSHOW + select nvl(v.ddata, a.ddata) as ddata, + nvl(v.nract, a.nract) as nract, + v.client, + v.ddata as dataact1, + a.ddata as dataact2, + v.nract as nract1, + a.nract as nract2, + v.valftvai1, + v.valftvae1, + v.valftva1, + a.valftva2, + nvl(v.valftva1,0) - nvl(a.valftva2,0) as difvalftva, + v.valtva1, + a.valtva2, + nvl(v.valtva1,0) - nvl(a.valtva2,0) as difvaltva from +(Select numar_act as nract, data_act as ddata, p.denumire as client, + Sum(total_fara_tva) As valftva1, + Sum(total_tva) As valtva1, + SUM(case + when in_valuta = 0 then + total_fara_tva + else + 0 + end) As valftvai1, + Sum(case + when in_valuta = 1 then + total_fara_tva + else + 0 + end) As valftvae1 + FROM vanzari vz join nom_parteneri p on vz.id_part = p.id_part + WHERE vz.data_act between ?pdData1 and ?pdData2 + and vz.sters = 0 + GROUP by vz.numar_act, vz.data_act, p.denumire) v +full join (select nract, ddata, sum(baza) as valftva2, sum(tva) as valtva2 + from (Select dataact as ddata, nract, sum(decode(scc, '4427', 0, suma)) as baza, sum(decode(scc, '4427', suma, 0)) as tva + FROM act + WHERE an = ?gnAn + and luna = ?gnLuna + and sters = 0 + and id_set = 50200 + and to_char(nract) || '/' || + to_char(dataact, 'yyyymmdd') In + (Select to_char(numar_act) || '/' || to_char(data_act, 'yyyymmdd') + FROM vanzari + WHERE data_act between ?pdData1 and ?pdData2 + and sters = 0) + group by dataact, nract) + group by nract, ddata) a + on v.ddata = a.ddata and v.nract = a.nract + order by 1,2 + ENDTEXT + + * Selectie din Vanzari si Act pe zile + Wait Window 'Selectie facturi si valori...' Nowait + llSucces = goExecutor.oExecuta(m.lcSqlVanzariAct, 'cFacturiTemp2') + + + * Centralizez valorile pe zile + Select ddata, ; + SUM(Iif(!Empty(Nvl(nract1, 0)), 1, 0)) As nrfact1, ; + SUM(Iif(!Empty(Nvl(nract2, 0)), 1, 0)) As nrfact2, ; + SUM(valftvai1) As valftvai1, ; + SUM(valftvae1) As valftvae1, ; + SUM(valftva1) As valftva1, ; + SUM(valftva2) As valftva2, ; + SUM(difvalftva) As difvalftva, ; + SUM(valtva1) As valtva1, ; + SUM(valtva2) As valtva2, ; + SUM(difvaltva) As difvaltva, ; + CAST(Null As N(20)) As nract, ; + CAST(Null As N(20)) As nract1, ; + CAST(Null As N(20)) As nract2, ; + CAST(Null As D) As dataact1, ; + CAST(Null As D) As dataact2, ; + CAST(Null As C(100)) As client, ; + CAST(Null As C(100)) As tip_factura ; + from cFacturiTemp2 ; + group By 1 ; + order By 1 ; + into Cursor cFacturiTemp3 + + SELECT cFacturiTemp + APPEND FROM DBF('cFacturiTemp3') + USE IN (SELECT('cFacturiTemp3')) + + * Selectez facturile cu diferente comercial-contabilitate + Select C.*, 'Diferente Comercial - Contabilitate' As tip_factura ; + FROM cFacturiTemp2 C ; + WHERE Nvl(valftva1, 0) <> Nvl(valftva2, 0) Or Nvl(valftva2, 0) <> Nvl(valftva2, 0) ; + ORDER By ddata, nract ; + INTO Cursor cFacturiDifTemp + + Select cFacturiTemp + Append From Dbf('cFacturiDifTemp') + Use In (Select('cFacturiDifTemp')) + Use In (Select('cFacturiTemp2')) + + *** Facturi sterse din Vanzari, care nu sunt refacute cu acelasi numar si data + TEXT TO lcSqlVanzariSterse TEXTMERGE NOSHOW +Select distinct v.numar_act as nract, + 'Sterse' as tip_factura + FROM vanzari v + WHERE v.data_act between ?pdData1 and ?pdData2 And v.sters = 1 + and v.numar_act Not In + (Select numar_act + FROM vanzari + WHERE data_act between ?pdData1 and ?pdData2 And sters = 0) + order by v.numar_act + ENDTEXT + + Wait Window 'Selectie facturi sterse din comercial...' Nowait + llSucces = goExecutor.oExecuta(m.lcSqlVanzariSterse, 'cFacturiSterseTemp') + + Select cFacturiTemp + Append From Dbf('cFacturiSterseTemp') + Use In (Select('cFacturiSterseTemp')) + + + *** facturi cu diferente pe conturi din Regdoc fata de contabilitate + TEXT TO lcSqlRegdocAct TEXTMERGE NOSHOW +select nvl(a1.dataact, a2.dataact) as ddata, + nvl(a1.nract, a2.nract) as nract, + nvl(a1.denumire, p2.denumire) as client, + NVL(a1.cont, a2.cont) as cont, + NVL(a1.acont, a2.acont) as acont, + a1.suma as suma1, + a2.suma as suma2, + nvl(a2.suma, 0) - nvl(a1.suma, 0) as difcont, + 'Diferente Reg. Documente - Contabilitate' as tip_factura + from (select a11.id_fact, + a11.nract, + a11.dataact, + p.denumire, + decode(e1.exceptie, 1, a11.scd, a11.scc) as cont, + decode(e1.exceptie, 1, a11.ascd, a11.ascc) as acont, + sum(decode(e1.exceptie, 1, -a11.suma, a11.suma)) as suma + from (select v.id_fact, + v.id_part, + v.numar_act as nract, + v.data_act as dataact, + trim(decode(r.tip, 6, pl.ctpideb, pl.ctdebitor)) as scd, + trim(decode(r.tip, + 6, + pl.ctapideb, + decode(v.in_valuta, + 1, + pl.ctaedeb, + pl.ctaideb))) as ascd, + trim(decode(r.tip, 6, pl.ctpicred, pl.ctcreditor)) as scc, + trim(decode(r.tip, + 6, + pl.ctapicred, + decode(v.in_valuta, + 1, + pl.ctaecred, + pl.ctaicred))) as ascc, + r.valftva as suma + from ips_regdoc r + join vanzari v + on r.id_vanzare = v.id_vanzare + left join ips_prestatii_locatii pl + on r.id_articol = pl.id_articol + and r.id_locatia = pl.id_locatia + where extract(year from v.data_act) = ?gnAn + and extract(month from v.data_act) = ?gnLuna + and v.sters = 0) a11 + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS SCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1) e1 + ON trim(a11.scd) = trim(e1.scd) + AND trim(a11.scc) = trim(e1.scc) + left join nom_parteneri p + on a11.id_part = p.id_part + group by a11.id_fact, + a11.nract, + a11.dataact, + p.denumire, + decode(e1.exceptie, 1, a11.scd, a11.scc), + decode(e1.exceptie, 1, a11.ascd, a11.ascc)) a1 + full join (select a.id_fact, + a.nract, + a.dataact, + decode(e.exceptie, 1, a.id_partc, a.id_partd) as id_part, + decode(e.exceptie, 1, a.scd, a.scc) as cont, + decode(e.exceptie, 1, a.ascd, a.ascc) as acont, + sum(decode(e.exceptie, 1, -a.suma, a.suma)) as suma + from act a + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS SCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1) E + ON trim(A.SCD) = trim(E.SCD) + AND trim(A.SCC) = trim(E.SCC) + where a.an = ?gnAn + and a.luna = ?gnLuna + and a.sters = 0 + and a.id_Set = 50200 + AND a.scc not in ('4427', '4428') + group by a.id_fact, + a.nract, + a.dataact, + decode(e.exceptie, 1, a.id_partc, a.id_partd), + decode(e.exceptie, 1, a.scd, a.scc), + decode(e.exceptie, 1, a.ascd, a.ascc)) a2 + on (a1.id_fact = a2.id_fact and a1.nract = a2.nract and + a1.dataact = a2.dataact and trim(a1.cont) = trim(a2.cont) and + trim(nvl(a1.acont, 'x')) = trim(nvl(a2.acont, 'x'))) + left join nom_parteneri p2 + on a2.id_part = p2.id_part + where abs(nvl(a1.suma, 0) - nvl(a2.suma, 0)) > 0.05 + order by 1, 2 +ENDTEXT + + * Selectie din Regdoc si Act pe zile si conturi + Wait Window 'Selectie Reg. Documente si valori...' Nowait + llSucces = goExecutor.oExecuta(m.lcSqlRegdocAct, 'cFacturiTemp4') + + Select cFacturiTemp + Append From Dbf('cFacturiTemp4') + USE IN (SELECT('cFacturiTemp4')) + + *********************************** + Set Textmerge On To (lcRaport) Noshow + Select cFacturiTemp + Scan For Isnull(tip_factura) + pdData = Ttod(ddata) + + lnvalftva_tot = lnvalftva_tot + valftva1 + lnvalftvaI_tot = lnvalftvaI_tot + valftvai1 + lnvalftvaE_tot = lnvalftvaE_tot + valftvae1 + lnvaltva_tot = lnvaltva_tot + valtva1 + lnvalftvacont_tot = lnvalftvacont_tot + valftva2 + lnvaltvacont_tot = lnvaltvacont_tot + valtva2 + + \zi: <> <> + \Nr. fact. comercial : <> + \Nr. fact. contabilitate : <> + \Val. fara TVA comercial INTERN : <> + \Val. fara TVA comercial EXTERN : <> + \Val. fara TVA comercial TOTAL : <> + \Val. fara TVA contabilitate TOTAL : <> <> + \Val. TVA comercial : <> + \Val. TVA contabilitate : <> <> + \------------------------------------------------------------------------- + Endscan + \ + \ + \TOTAL PERIOADA + \Val. fara TVA comercial INTERN : <> + \Val. fara TVA comercial EXTERN : <> + \Val. fara TVA comercial TOTAL : <> + \Val. fara TVA contabilitate TOTAL : <> <> + \Val. TVA comercial : <> + \Val. TVA contabilitate : <> <> + \------------------------------------------------------------------------- + + * Facturile cu diferente din Vanzari care nu sunt in Registrul Jurnal + Wait Window 'Facturi cu diferente Comercial - Contabilitate...' Nowait + \ + \Facturi cu diferente in comercial fata de contabilitate in perioada <> - <> + Sele cFacturiTemp + Scan For Alltrim(tip_factura) = 'Diferente Comercial - Contabilitate' + \Nr. fact. <> Data fact. <> Client <> + \Val. fara TVA comercial : <> + \Val. fara TVA contabilitate : <> <> + \Val. TVA comercial : <> + \Val. TVA contabilitate : <> <> + Endscan + + * Facturi sterse + \ + \ + \Numere de facturi sterse in comercial si nereutilizate in perioada <> - <> + Sele cFacturiTemp + Scan For Alltrim(tip_factura) = 'Sterse' + \Nr. fact. <> + Endscan + + * Facturile cu diferente Reg. documente pe locatii fata de Contabilitate pe conturi + Wait Window 'Facturi cu diferente Reg. Documente pe locatii - Contabilitate...' Nowait + \ + \Facturi cu diferente Reg. Documente pe locatii fata de contabilitate in perioada <> - <> + Sele cFacturiTemp + Scan For Alltrim(tip_factura) = 'Diferente Reg. Documente - Contabilitate' + \Nr. fact: <> Data fact: <> Client: <> + \\ Cont: <> ; Contabilitate: <> + \\ - Reg. Doc: <> + \\ = Diferenta: <> + Endscan + + Set Textmerge To + + Select Ttod(ddata) As Data, ; + nrfact1 As nr_facturi_com, ; + nrfact2 As nr_facturi_cont, ; + valftvai1 As valoare_fara_tva_int_com, ; + valftvae1 As valoare_fara_tva_ext_com, ; + valftva1 As valoare_fara_tva_com, ; + valftva2 As valoare_fara_tva_cont, ; + difvalftva As diferenta_valoare_fara_tva, ; + valtva1 As valoare_tva_com, ; + valtva2 As valoare_tva_cont, ; + difvaltva As diferenta_valoare_tva, ; + PADR(ALLTRIM(NVL(cont, '')) + IIF(!EMPTY(NVL(acont,'')), '.' + ALLTRIM(acont), ''), 10, ' ') as cont, ; + suma1 as regdoc_suma, ; + suma2 as conta_suma, ; + difcont as diferenta_regdoc_conta, ; + nract, Ttod(ddata) As dataact, client, tip_factura ; + FROM cFacturiTemp ; + INTO Cursor cFacturiXLS + + Select cFacturiXLS + Copy To (lcRaportXls) Type Xl5 + + Use In (Select('cFacturiTemp')) + Use In (Select('cFacturiXLS')) + + + open_default_app(m.lcRaport) + open_default_app(m.lcRaportXls) + + *!* lcRun = [run /N notepad.exe "] + lcRaport + ["] + *!* &lcRun + +Endproc +&& --SFARSIT: Raport1_Concordanta -- + +********************************* +*** Lanseaza formularul frm_situatie_venituri +********************************* +Procedure situatii_venituri + loSituatieVenituri = Createobject("frm_situatii_venituri") + loSituatieVenituri.Show(1) +Endproc && situatii_venituri + +Procedure GET_DATE_VENITURI + Parameters toDate, tcTabel, tcColoane + * tcTabel OUT: numele cursorului rezultat + * tcColoane OUT: lista coloane din cursorul rezultat, separate prin | + + * tnTip: 0 = TRANZIT, 1 = CHEIAJ, 2 = ALTE (NU SE MAI FOLOSESTE), 3 = CHIRII, 4 = PILOTAJ (NU SE MAI FOLOSESTE), 5 = APA, 6 = PENALITATI, 9 = DIVERSE + * toDate.nNrRaport: numarul situatiei de venituri + * toDate.dData1, toDate.dData2: perioada pentru raport + * toDate.nIdClient, toDate.nIdCtrClient (OPTIONAL): id contract client, daca se doreste raportul pentru un singur contract + + Local lcPrestatia, lcSql, lcValfTVA, ldData1, llSucces, lnNrRaport, lnTip, lnTotalCumulat, lnvaloare + *:Global B, I, LCFIELD, LPRESTATIA, NVENITURI, OClient, OTOTAL, T, X, pdData1, pdData2, pnIdClient + *:Global pnIdCtrClient, taHeader[1] + lnTip = toDate.nTip + lnNrRaport = toDate.nNrRaport + pdData1 = toDate.dData1 + pdData2 = toDate.dData2 + pnIdClient = Nvl(toDate.nIdClient, 0) + pnIdCtrClient = Nvl(toDate.nIdCtrClient, 0) + + Do Case + Case m.lnTip = NTIP_TRANZIT And m.lnNrRaport = 3 && TRANZIT: CLIENT,INT/EXT, CAP., TRN, CP, LBP + + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT p1.denumire As client, + c.numar as contract, + p2.denumire as beneficiar, + decode(v.in_valuta, 1, 0, 1) as intern, + vmv.um as ct, + ROUND(sum(SIGN(vmv.valftva)*vmv.quantity),0) as cargo, + ROUND(sum(case when vmv.um = 'TON' then SIGN(vmv.valftva)*vmv.tcap else 0 end),0) as tcap, + ROUND(sum(case when vmv.um = 'TRN' then SIGN(vmv.valftva)*vmv.trn else 0 end),0) as trn, + ROUND(sum(case when vmv.um = 'LBD' then SIGN(vmv.valftva)*vmv.lbd else 0 end),0) as lbd, + ROUND(sum(case when vmv.um = 'HP' then SIGN(vmv.valftva)*vmv.hp else 0 end),0) as hp, + ROUND(sum(vmv.valval),0) as valval, + ROUND(sum(vmv.valftva),0) as valftva + From vanzari v + join ips_voyages_vanzari vv + on v.id_vanzare = vv.vz_id + join ips_voyage_members_vanzari vmv on vv.id = vmv.vv_id + join nom_parteneri p1 + on v.id_part = p1.id_part + left join nom_parteneri p2 + on v.id_beneficiar = p2.id_part + left join contracte c + on v.id_ctr = c.id_ctr + Where v.data_act between ?pdData1 and ?pdData2 and v.tip_factura = <> <> <> + Group By p1.denumire, c.numar, p2.denumire, v.in_valuta, vmv.um + Order By 1, 2, 3, 4, 5 + ENDTEXT + + tcTabel = "cRaportTranzit" + tcColoane = [Client|Client ctr.|Beneficiar|Intern|UM|Cargo|CAP|TRN|LBD|HP|Valoare valuta|Valoare lei] + llSucces = goExecutor.oExecuta(m.lcSql, m.tcTabel) + + Case m.lnTip = NTIP_CHEIAJ And m.lnNrRaport = 5 && CHEIAJ: 3 = Clienti - venituri pe locatii (lei) + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT p1.denumire As client, v.id_part as client_id, + Round(Sum(CASE WHEN r.id_locatia = 5 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P1, + Round(Sum(CASE WHEN r.id_locatia = 5 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P2, + Round(Sum(CASE WHEN r.id_locatia = 1 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P3, + Round(Sum(CASE WHEN r.id_locatia = 1 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P4, + Round(Sum(CASE WHEN r.id_locatia = 4 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P5, + Round(Sum(CASE WHEN r.id_locatia = 4 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P6, + Round(Sum(CASE WHEN r.id_locatia = 2 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P7, + Round(Sum(CASE WHEN r.id_locatia = 2 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P8, + Round(Sum(CASE WHEN r.id_locatia = 3 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P9, + Round(Sum(CASE WHEN r.id_locatia = 3 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P10, + Round(Sum(CASE WHEN r.id_locatia = 6 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P11, + Round(Sum(CASE WHEN r.id_locatia = 6 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P12, + Round(Sum(CASE WHEN r.id_locatia = 7 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P13, + Round(Sum(CASE WHEN r.id_locatia = 7 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P14, + Round(Sum(CASE WHEN r.id_locatia = 23 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P15, + Round(Sum(CASE WHEN r.id_locatia = 23 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P16, + Round(Sum(CASE WHEN r.id_locatia = 26 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P17, + Round(Sum(CASE WHEN r.id_locatia = 26 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P18, + Round(Sum(r.valftva), 0) As TOTAL, CAST(0 as NUMBER(20)) AS TOTALCUMUL, 0 AS TIP + From ips_regdoc r Join vanzari v on r.id_vanzare = v.id_vanzare + join nom_parteneri p1 on v.id_part = p1.id_part + Where v.data_act between ?pdData1 and ?pdData2 and v.tip_factura = <> <> <> + Group By p1.denumire, v.id_part + ENDTEXT + + llSucces = goExecutor.oExecuta(m.lcSql, "xTabx") + + If m.llSucces + *!* TOTAL CUMULAT DE LA INCEPUTUL ANULUI + ldData1 = m.pdData1 + pdData1 = Date(Year(m.ldData1), 1, 1) + llSucces = goExecutor.oExecuta(m.lcSql, "xTabCumulat") + pdData1 = m.ldData1 + Endif + + IF m.llSucces + * Totaluri cumulat de la inceputul anului pe linii (clienti) + Sele xTabCumulat + Scan + Scatter Name loClient + With loClient + Select xTabx + Locate For client_id = .client_id + If !Found() + Insert Into xTabx (client, client_id, totalcumul) Values (.client, .client_id, .total) + Else + Replace totalcumul With .total + Endif + Endwith + Sele xTabCumulat + ENDSCAN + + * Totaluri perioada pe coloane (locatii) + SELECT "TOTAL" as client, 0 as client_id, 1 as tip, 0 as totalcumul, SUM(total) as total, ; + SUM(p1) as p1,SUM(p2) as p2,SUM(p3) as p3,SUM(p4) as p4,SUM(p5) as p5,SUM(p6) as p6, ; + SUM(p7) as p7,SUM(p8) as p8,SUM(p9) as p9,SUM(p10) as p10,SUM(p11) as p11,SUM(p12) as p12, ; + SUM(p13) as p13,SUM(p14) as p14,SUM(p15) as p15,SUM(p16) as p16,SUM(p17) as p17,SUM(p18) as p18 ; + from xTabx ; + into cursor cTabPerioada + SELECT cTabPerioada + SCATTER NAME loTabPerioada + INSERT INTO xTabx FROM NAME loTabPerioada + USE IN (SELECT('cTabPerioada')) + + * Totaluri cumulat de la inceputul anului pe coloane (locatii) + SELECT "TOTAL CUMULAT" as client, 0 as client_id, 2 as tip, SUM(total) as totalcumul, 0 as total, ; + SUM(p1) as p1,SUM(p2) as p2,SUM(p3) as p3,SUM(p4) as p4,SUM(p5) as p5,SUM(p6) as p6, ; + SUM(p7) as p7,SUM(p8) as p8,SUM(p9) as p9,SUM(p10) as p10,SUM(p11) as p11,SUM(p12) as p12, ; + SUM(p13) as p13,SUM(p14) as p14,SUM(p15) as p15,SUM(p16) as p16,SUM(p17) as p17,SUM(p18) as p18 ; + from xTabCumulat ; + into cursor cTabCumulat + SELECT cTabCumulat + SCATTER NAME loTabCumulat + INSERT INTO xTabx FROM NAME loTabCumulat + USE IN (SELECT('cTabCumulat')) + + ENDIF && llSuccess + + SELECT * FROM xTabx ORDER BY tip, client INTO CURSOR xTaby + USE IN (SELECT('xTabx')) + tcTabel = "XTABY" + tcColoane = [Client|Client Id|Agigea extern|Agigea intern|Basarabi extern|Basarabi intern|Luminita extern|Luminita intern|Medgidia extern|Medgidia intern|Ovidiu extern|Ovidiu intern|] + ; + [Cernavoda extern|Cernavoda intern|Navodari extern|Navodari intern|Front asteptare extern|Front asteptare intern|Senal extern|Senal intern|] + ; + [Total perioada|Total cumulat de la inceputul anului|Tip] + + Case m.lnTip = NTIP_TRANZIT And m.lnNrRaport = 13 && TRANZIT: CLIENT, TCAP TRANSE PLIN, TCAP TRANSE GOL, TCAP TOTAL, TON MARFA + + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT client, contract, beneficiar, SUM(cargo) as cantitate_marfa, + SUM(CASE WHEN cargo <> 0 AND tcap < 2500 THEN tcap ELSE 0 END) as tcap_plin_0_2499, + SUM(CASE WHEN cargo <> 0 AND tcap between 2500 and 5999 THEN tcap ELSE 0 END) as tcap_plin_2500_5999, + SUM(CASE WHEN cargo <> 0 AND tcap between 6000 and 8999 THEN tcap ELSE 0 END) as tcap_plin_6000_8999, + SUM(CASE WHEN cargo <> 0 AND tcap between 9000 and 11999 THEN tcap ELSE 0 END) as tcap_plin_9000_11999, + SUM(CASE WHEN cargo <> 0 AND tcap >= 12000 THEN tcap ELSE 0 END) as tcap_plin_12000_99000, + SUM(CASE WHEN cargo = 0 AND tcap < 2500 THEN tcap ELSE 0 END) as tcap_plin_0_2499, + SUM(CASE WHEN cargo = 0 AND tcap between 2500 and 5999 THEN tcap ELSE 0 END) as tcap_plin_2500_5999, + SUM(CASE WHEN cargo = 0 AND tcap between 6000 and 8999 THEN tcap ELSE 0 END) as tcap_plin_6000_8999, + SUM(CASE WHEN cargo = 0 AND tcap between 9000 and 11999 THEN tcap ELSE 0 END) as tcap_plin_9000_11999, + SUM(CASE WHEN cargo = 0 AND tcap >= 12000 THEN tcap ELSE 0 END) as tcap_plin_12000_99000, + SUM(tcap) as total_tone_capacitate +FROM (SELECT p1.denumire As client, + c.numar as contract, + p2.denumire as beneficiar, + vmv.vye_id, + ROUND(sum(vmv.quantity),2) as cargo, + ROUND(sum(case when vmv.um = 'TON' then vmv.tcap else 0 end),2) as tcap + From vanzari v + join ips_voyages_vanzari vv + on v.id_vanzare = vv.vz_id + join ips_voyage_members_vanzari vmv on vv.id = vmv.vv_id + join nom_parteneri p1 + on v.id_part = p1.id_part + left join nom_parteneri p2 + on v.id_beneficiar = p2.id_part + left join contracte c + on v.id_ctr = c.id_ctr + Where v.data_act between ?pdData1 and ?pdData2 and v.tip_factura = <> <> <> + Group By p1.denumire, c.numar, p2.denumire, vmv.vye_id) + WHERE tcap <> 0 + GROUP BY client, contract, beneficiar + Order By client, contract, beneficiar + ENDTEXT + + tcTabel = "cRaportTranzit" + tcColoane = [Client|Client ctr.|Beneficiar|Cantitate marfa|Plin 0-2499|Plin 2500-5999|Plin 6000-8999|Plin 9000-11999|Plin 12000-99000|Gol 0-2499|Gol 2500-5999|Gol 6000-8999|Gol 9000-11999|Gol 12000-99000|Total tone capacitate] + llSucces = goExecutor.oExecuta(m.lcSql, m.tcTabel) + + Case m.lnTip = NTIP_CHEIAJ And m.lnNrRaport = 5 && CHEIAJ: 3 = Clienti - venituri pe locatii (lei) + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT p1.denumire As client, v.id_part as client_id, + Round(Sum(CASE WHEN r.id_locatia = 5 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P1, + Round(Sum(CASE WHEN r.id_locatia = 5 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P2, + Round(Sum(CASE WHEN r.id_locatia = 1 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P3, + Round(Sum(CASE WHEN r.id_locatia = 1 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P4, + Round(Sum(CASE WHEN r.id_locatia = 4 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P5, + Round(Sum(CASE WHEN r.id_locatia = 4 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P6, + Round(Sum(CASE WHEN r.id_locatia = 2 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P7, + Round(Sum(CASE WHEN r.id_locatia = 2 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P8, + Round(Sum(CASE WHEN r.id_locatia = 3 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P9, + Round(Sum(CASE WHEN r.id_locatia = 3 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P10, + Round(Sum(CASE WHEN r.id_locatia = 6 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P11, + Round(Sum(CASE WHEN r.id_locatia = 6 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P12, + Round(Sum(CASE WHEN r.id_locatia = 7 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P13, + Round(Sum(CASE WHEN r.id_locatia = 7 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P14, + Round(Sum(CASE WHEN r.id_locatia = 23 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P15, + Round(Sum(CASE WHEN r.id_locatia = 23 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P16, + Round(Sum(CASE WHEN r.id_locatia = 26 and v.in_valuta = 1 THEN r.valftva ELSE 0 END), 0) As P17, + Round(Sum(CASE WHEN r.id_locatia = 26 and v.in_valuta = 0 THEN r.valftva ELSE 0 END), 0) As P18, + Round(Sum(r.valftva), 0) As TOTAL, CAST(0 as NUMBER(20)) AS TOTALCUMUL, 0 AS TIP + From ips_regdoc r Join vanzari v on r.id_vanzare = v.id_vanzare + join nom_parteneri p1 on v.id_part = p1.id_part + Where v.data_act between ?pdData1 and ?pdData2 and v.tip_factura = <> <> <> + Group By p1.denumire, v.id_part + ENDTEXT + + llSucces = goExecutor.oExecuta(m.lcSql, "xTabx") + + If m.llSucces + *!* TOTAL CUMULAT DE LA INCEPUTUL ANULUI + ldData1 = m.pdData1 + pdData1 = Date(Year(m.ldData1), 1, 1) + llSucces = goExecutor.oExecuta(m.lcSql, "xTabCumulat") + pdData1 = m.ldData1 + Endif + + IF m.llSucces + * Totaluri cumulat de la inceputul anului pe linii (clienti) + Sele xTabCumulat + Scan + Scatter Name loClient + With loClient + Select xTabx + Locate For client_id = .client_id + If !Found() + Insert Into xTabx (client, client_id, totalcumul) Values (.client, .client_id, .total) + Else + Replace totalcumul With .total + Endif + Endwith + Sele xTabCumulat + ENDSCAN + + * Totaluri perioada pe coloane (locatii) + SELECT "TOTAL" as client, 0 as client_id, 1 as tip, 0 as totalcumul, SUM(total) as total, ; + SUM(p1) as p1,SUM(p2) as p2,SUM(p3) as p3,SUM(p4) as p4,SUM(p5) as p5,SUM(p6) as p6, ; + SUM(p7) as p7,SUM(p8) as p8,SUM(p9) as p9,SUM(p10) as p10,SUM(p11) as p11,SUM(p12) as p12, ; + SUM(p13) as p13,SUM(p14) as p14,SUM(p15) as p15,SUM(p16) as p16,SUM(p17) as p17,SUM(p18) as p18 ; + from xTabx ; + into cursor cTabPerioada + SELECT cTabPerioada + SCATTER NAME loTabPerioada + INSERT INTO xTabx FROM NAME loTabPerioada + USE IN (SELECT('cTabPerioada')) + + * Totaluri cumulat de la inceputul anului pe coloane (locatii) + SELECT "TOTAL CUMULAT" as client, 0 as client_id, 2 as tip, SUM(total) as totalcumul, 0 as total, ; + SUM(p1) as p1,SUM(p2) as p2,SUM(p3) as p3,SUM(p4) as p4,SUM(p5) as p5,SUM(p6) as p6, ; + SUM(p7) as p7,SUM(p8) as p8,SUM(p9) as p9,SUM(p10) as p10,SUM(p11) as p11,SUM(p12) as p12, ; + SUM(p13) as p13,SUM(p14) as p14,SUM(p15) as p15,SUM(p16) as p16,SUM(p17) as p17,SUM(p18) as p18 ; + from xTabCumulat ; + into cursor cTabCumulat + SELECT cTabCumulat + SCATTER NAME loTabCumulat + INSERT INTO xTabx FROM NAME loTabCumulat + USE IN (SELECT('cTabCumulat')) + + ENDIF && llSuccess + + SELECT * FROM xTabx ORDER BY tip, client INTO CURSOR xTaby + USE IN (SELECT('xTabx')) + tcTabel = "XTABY" + tcColoane = [Client|Client Id|Agigea extern|Agigea intern|Basarabi extern|Basarabi intern|Luminita extern|Luminita intern|Medgidia extern|Medgidia intern|Ovidiu extern|Ovidiu intern|] + ; + [Cernavoda extern|Cernavoda intern|Navodari extern|Navodari intern|Front asteptare extern|Front asteptare intern|Senal extern|Senal intern|] + ; + [Total perioada|Total cumulat de la inceputul anului|Tip] + + Case m.lnTip = NTIP_CHEIAJ And m.lnNrRaport = 4 && CHEIAJ: CLIENT,PORT, CAP., TRN, CP, LBP + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT p1.denumire As client, MAX(TRIM(c.numar)) as contract, p2.denumire as beneficiar, l.denumire As port, + Round(Sum(CASE WHEN bd.um like '%TC%' then bv.CAP else 0 end), 0) As CAP, + Round(Sum(CASE WHEN bd.um like '%TRN%' then bv.TRN else 0 end), 0) As TRN, + Round(Sum(CASE WHEN bd.um like '%ML%' then bv.LUNG else 0 end), 0) As LUNG, + Round(Sum(CASE WHEN bd.um like '%CP%' then bv.HP else 0 end), 0) As CP, + Round(Sum(CASE WHEN bd.um like '%LBD%' or bd.um like '%LBP%' then bv.LBD else 0 end), 0) As LBD, + Round(Sum(CASE WHEN TRIM(bd.um) = 'ZI' then 1 else 0 end), 0) As ZI, + Round(Sum(CASE WHEN bd.um like '%TC%' then bd.valftva else 0 end), 0) As cap_val, + Round(Sum(CASE WHEN bd.um like '%TRN%' then bd.valftva else 0 end), 0) As trn_val, + Round(Sum(CASE WHEN bd.um like '%ML%' then bd.valftva else 0 end), 0) As lung_val, + Round(Sum(CASE WHEN bd.um like '%CP%' then bd.valftva else 0 end), 0) As cp_val, + Round(Sum(CASE WHEN bd.um like '%LBD%' or bd.um like '%LBP%' then bd.valftva else 0 end), 0) As lbd_val, + Round(Sum(CASE WHEN TRIM(bd.um) = 'ZI' then bd.valftva else 0 end), 0) As zi_val + From vanzari v join ips_voyages_vanzari vv on v.id_vanzare = vv.vz_id + join ips_berthings_vanzari bv on vv.id = bv.vv_id + join ips_berthing_details_vanzari bd on bv.id = bd.bv_id + join nom_parteneri p1 on v.id_part = p1.id_part + left join nom_parteneri p2 on v.id_beneficiar = p2.id_part + left join contracte c on v.id_ctr = c.id_ctr + left join nom_locatii l on bv.id_locatia = l.id + Where v.data_act between ?pdData1 and ?pdData2 and v.tip_factura = <> <> <> + Group By p1.denumire, p2.denumire, l.denumire + Order By 1, 2, 3, 4 + ENDTEXT + + tcTabel = "cRaportCheiaj" + tcColoane = [Client|Client ctr.|Beneficiar|Port|CAP|TRN|LUNG|CP|LBD|ZI|Valoare CAP|Valoare TRN|Valoare LUNG|Valoare CP|Valoare LBD|Valoare ZI] + llSucces = goExecutor.oExecuta(m.lcSql, m.tcTabel) + + + Case Inlist(m.lnTip, NTIP_APA, NTIP_CHIRII, NTIP_ALTE, NTIP_DIVERSE) And m.lnNrRaport = 1 && valori facturate pe client/prestatii (clienti pe randuri, prestatii pe coloane) + + TEXT TO lcSql TEXTMERGE NOSHOW +Select p1.denumire As client, c.numar as contract, 'P' || TO_CHAR(r.id_articol) As id_articol, a.denumire As prestatia, + ROUND(Sum(r.valftva),0) As valtot_lei, Round(SUM(decode(v.in_valuta,1, r.valval, 0)), 0) As val_val + From ips_regdoc r Join vanzari v On r.id_vanzare = v.id_vanzare + join nom_parteneri p1 on v.id_part = p1.id_part + left join nom_parteneri p2 on v.id_beneficiar = p2.id_part + left join contracte c on v.id_ctr = c.id_ctr + Join nom_articole a On r.id_articol = a.id_articol + Where v.data_act between ?pdData1 and ?pdData2 and v.tip_factura = <> <> <> + Group By p1.denumire, c.numar, 'P' || TO_CHAR(r.id_articol), a.denumire + Order By 2, 3, 4 + ENDTEXT + + llSucces = goExecutor.oExecuta(m.lcSql, "cRaportVenituri1") + If m.llSucces + *!* TOTAL CUMULAT DE LA INCEPUTUL ANULUI + ldData1 = m.pdData1 + pdData1 = Date(Year(m.ldData1), 1, 1) + llSucces = goExecutor.oExecuta(m.lcSql, "cRaportVenituri2") + pdData1 = m.ldData1 + Endif + + If m.llSucces + Select client, contract, Sum(valtot_lei) As valoare ; + From cRaportVenituri2 ; + Group By client, contract ; + Into Cursor totclient + + Select id_articol, prestatia, Sum(valtot_lei) As valoare ; + From cRaportVenituri2 ; + Group By id_articol, prestatia ; + Into Cursor totprestatie + + *!* lc_outfile, lu_struct, ll_closein, ll_therm, ln_rowfld, ; + *!* ln_colhead, ln_cellfld, ll_xtotal, ln_extfld1, ln_extfld2, ; + *!* ln_extfld3, ln_extfld4, ll_cnt, ll_avg, ll_min, ll_max, ; + *!* la_uniqcol, ln_rowcol, ln_colsort, ln_rowsort + + Sele cRaportVenituri1 + X = MATXTAB("XTABX", 2, .F., .F., 1, 3, 5, .T., 2) + Use In (Select('cRaportVenituri1')) + Use In (Select('cRaportVenituri2')) + Endif && llSuccess + + If Used('XTABX') + *!* MARESC TOATE COLOANELE DE TIP NUMERIC LA N(16,2) + ALTER_TABLE_INCREASE_NUM('XTABX', 'N(16,2)') + + Sele TOTPRESTATIE + Scan + lcField = Allt(TOTPRESTATIE.id_articol) + Select xtabx + If TYPE('xtabx.' + m.lcField) = 'U' + Alter Table xtabx Add Column &lcField N(16, 2) + Replace All &lcField With 0 + Endif + Sele TOTPRESTATIE + Endscan + + + *!* TOTAL CUMULAT PE CLIENTI + Select xtabx + Alter Table xtabx Add Column totalcumul N(20, 2) Add Column tip N(1) + Sele totclient + Scan + Scatter Name OClient + With OClient + Select xtabx + Locate For Alltrim(client) = Alltrim(OClient.client) AND ALLTRIM(contract) = ALLTRIM(oclient.contract) + If !Found() + Insert Into xtabx (client, contract, totalcumul) Values (.client, .contract, .valoare) + Else + Replace totalcumul With .valoare + Endif + Endwith + Sele totclient + Endscan + + + *!* TOTAL PRESTATII DIN PERIOADA DATA + Sele xtabx + Scat Name OTOTAL Blank + For I = 3 To Fcount() + T = Field(I) + Calc Sum(&T)To OTOTAL.&T + Endfor + Appe Blank + Gath Name OTOTAL + Repl client With "TOTAL", totalcumul With 0, tip With 1 + + + *!* TOTAL CUMULAT DE LA INCEPUTUL ANULUI PE PRESTATII + Select xtabx + Append Blank + Replace client With "TOTAL CUMULAT", tip With 2 + + Select totprestatie + lnTotalCumulat = 0 + Scan + lnvaloare = valoare + lnTotalCumulat = lnTotalCumulat + lnvaloare + lcField = 'xtabx.' + Alltrim(id_articol) + Replace &lcField With m.lnValoare In xtabx + Endscan + Replace totalcumul With lnTotalCumulat In xtabx + + tcColoane = '' + + Sele xtabx + For I = 1 To Fcount() + LCFIELD = Uppe(Allt(Field(I))) + LPRESTATIA = LCFIELD + Sele TOTPRESTATIE + Loca For id_articol = LPRESTATIA + If Found() + LPRESTATIA = Alltrim(prestatia) + Else + If LCFIELD = 'XTOT' + LPRESTATIA = 'TOTAL PERIOADA' + Endif + If LCFIELD = 'TOTALCUMUL' + LPRESTATIA = 'TOTAL CUMULAT DE LA INCEPUTUL ANULUI' + Endif + Endif + tcColoane = tcColoane + Iif(I > 1, '|', '') + Alltrim(m.LPRESTATIA) + Sele xtabx + Endfor + + tcTabel = "XTABY" + Select * From xtabx Order By tip, client Into Cursor XTABY + + Use In (Select('XTABX')) + Use In (Select('TVENITURI')) + Use In (Select('TOTPRESTATIE')) + Use In (SELECT('totclient')) + Endif + + + + + Otherwise + AMESSAGEBOX("Nu este inca implementat.", 0 + 64, _Screen.Caption) + Endcase + + * RETURN taHeader +Endproc && GET_DATE_VENITURI + +Procedure DECO_LIST_VENITURI + Parameters tnTip, tnNrRaport, TEXCEL, TTITLU + && tip prestatie, nr. situatie,daca e in excel, data1, data2, titlu + lcPerioada = GET_PERIOADA() + ldData1 = Ctod(Substr(lcPerioada, 1, 10)) + ldData2 = Ctod(Substr(lcPerioada, At(";", lcPerioada) + 1)) + + lnIdCtrClient = 0 + lcClient = '' + + TTITLU = Iif(Empty(TTITLU), "SITUATIE VENITURI", TTITLU) + " DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Do Case + Case tnTip = 0 + If Inlist(tnNrRaport, 2, 3, 4, 5, 8, 9, 10, 11, 12) && TRANZIT > 2 DETALIU UN CLIENT, 3. TOTI CLIENTII, 4 PLATITOR/GRUPA MARFA, 5 PLATITOR/RELATIE/GRUPA MARFA, 8 PLATITOR/MARFA, 10 SELECTIE CONVOAIE XLS, 11 Indicatori fizici pe \ INDICATORI,VALORI + loCauta = caut_client_contract_activ() + lcClient = loCauta.denumire + lnIdClient = loCauta.id_part + lcContractClient = Alltrim(loCauta.numar) + lnIdCtrClient = loCauta.id_ctr + + TTITLU = "SITUATIE INDICATORI SI VALORI CHEIAJ " + lcClient + " DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Endif + + Case Inlist(tnTip, 2, 3, 5, 9) + If Inlist(m.tnNrRaport, 2, 3, 4) && raport facturat pe locatii, ani, doar anumite categorii de prestatii + ALEG_PRESTATII(m.tnTip) && creeaza cursor crsNomPrest + Endif + Endcase + + Dimension LAHEADER[1] && HEADERUL CARE CONTINE NUMELE TABELULUI SI TITLURILE COLOANELOR PT AFISAREA IN EXCEL + = GET_DATE_VENITURI(tnTip, tnNrRaport, ldData1, ldData2, lnIdCtrClient, @LAHEADER) + lcTabel = LAHEADER[1] + + If TEXCEL + If Used(m.lcTabel) + If m.tnTip = 0 && tranzit + lnReturn = LIST_VENITURI_EXCEL_XLSX(m.tnTip, m.lcTabel, @LAHEADER, m.TTITLU) + If m.lnReturn = 0 + = LIST_VENITURI_EXCEL(m.tnTip, m.lcTabel, @LAHEADER, m.TTITLU) + Endif + Else + = LIST_VENITURI_EXCEL(tnTip, m.lcTabel, @LAHEADER, TTITLU) + Endif + Endif + Else + Do Case + Case tnTip = 0 + Do Case + Case tnNrRaport = 2 + + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE PLATITOR "] + lcClient + ["] + PTITLU2 = " DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Set Cent Off + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + Set Order To Ct + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_TRANZIT2") + Set Cent On + Release PTITLU1, PTITLU2 + Endif + Case tnNrRaport = 3 + + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE VENITURI TRANZIT] + PTITLU2 = "DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Set Cent Off + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_TRANZIT3") + + Set Cent On + Release PTITLU1, PTITLU2 + Endif + Case Inlist(tnNrRaport, 4, 8) + + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE PLATITORI - MARFA] + PTITLU2 = "DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Set Cent Off + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_TRANZIT4") + + Set Cent On + Release PTITLU1, PTITLU2 + Endif + Case Inlist(tnNrRaport, 5, 9) + + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE PLATITORI - MARFA - RELATIA] + PTITLU2 = "DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Set Cent Off + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_TRANZIT5") + + Set Cent On + Release PTITLU1, PTITLU2 + Endif + + Case tnNrRaport = 7 + + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE PLATITORI - RELATIE - TONE CAPACITATE] + PTITLU2 = "DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Set Cent Off + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_TRANZIT7") + + Set Cent On + Release PTITLU1, PTITLU2 + Endif + + Case tnNrRaport = 11 + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE VENITURI TRANZIT] + PTITLU2 = "DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Set Cent Off + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_TRANZIT11") + Set Cent On + Release PTITLU1, PTITLU2 + Endif + + Case tnNrRaport = 12 + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE VENITURI TRANZIT] + PTITLU2 = "DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + Set Cent Off + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_TRANZIT12") + Set Cent On + Release PTITLU1, PTITLU2 + Endif + + + Other + * + Endcase + Case tnTip = 1 + + Do Case + Case tnNrRaport = 4 + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE INDICATORI SI VALORI CHEIAJ ] + + lcClient + PTITLU2 = " DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_CHEIAJ_INDICATORI") + Endif + Case Inlist(tnNrRaport, 1, 2, 3) + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE VENITURI DIN CHEIAJ] + PTITLU2 = " DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_CHEIAJ2") + Endif + Case tnNrRaport = 5 + If !Empty(m.lcTabel) + Public PTITLU1, PTITLU2 + PTITLU1 = [SITUATIE VENITURI DIN CHEIAJ] + PTITLU2 = " DE LA " + Dtoc(ldData1) + " LA " + Dtoc(ldData2) + + Keyboard'{CTRL+F10}' + Sele (m.lcTabel) + = LISTAREUSERREPORT(m.lcTabel, "FRX", "SIT_CHEIAJ5") + + Endif + + Other + * + Endcase + Endcase + Endif + If Used(m.lcTabel) + Use In (m.lcTabel) + Endif +Endproc && DECO_LIST_VENITURI + +***----------------------------------------------------------------------------------------------- +Procedure DECO_LIST_VENITURI_EXCEL + && perioada pe care vreau veniturile + lcPerioada = GET_PERIOADA() + ldData1 = Ctod(Left(lcPerioada, At(";", lcPerioada) - 1)) + ldData2 = Ctod(Right(lcPerioada, At(";", lcPerioada) - 1)) + + OPRESTATIA = GET_PRESTATIA() && 0,1,2,3,4,5 + LITIP = OPRESTATIA.tip + lcTitlu = "VENITURI " + Allt(OPRESTATIA.prestatia) + " " + Strtran(lcPerioada, ";", " - ") + LNRRAP = 1 + + Dime LAHEADER[1] + LNRAP = 1 && tipul 1 de situatie + = GET_DATE_VENITURI(LITIP, LNRRAP, ldData1, ldData2, 0, @LAHEADER) + + lcTabel = LAHEADER[1] + + + Release OPRESTATIA + If !Empty(m.lcTabel) + * list_venituri_excel_xlsx nu face xlsx pentru ca nu gaseste driverul x86 si intra pe ramura copy to xls5 fara header + * nu pune headerul in fisier + *!* lnReturn = LIST_VENITURI_EXCEL_XLSX(LITIP, m.lcTabel, @LAHEADER, lcTitlu) + *!* IF m.lnReturn = 0 + = LIST_VENITURI_EXCEL(LITIP, m.lcTabel, @LAHEADER, lcTitlu) + *!* Endif + Endif + + If Used(m.lcTabel) + Use In (m.lcTabel) + Endif + +Endproc && DECO_LIST_VENITURI_EXCEL + +Procedure LIST_VENITURI_EXCEL + Param tnTip, TTABEL, taHeader, TTITLU + + Local I, laFields[1], LCFIELD, lcFormat, lcType, lnDecimals, lnField, lnFields, lnSize, luValue + *:Global I, LCANTET, LCFIS, LCHEADER, LDATE, NRCOL, TTITLU + LCFIS = Allt(LOC) + "\" + Allt(NFSCURT) + "\TEMPO\VENITURI_" + Sys(2) + ".XLS" + LCFIS = Strtran(LCFIS, '\\', '\') + + Set Textmerge On To (LCFIS) Noshow + If Empty(TTITLU) + TTITLU = "" + Endif + + LCANTET = Uppe(Allt(TTITLU)) + CRLF +\ +\\<> +\ + LCHEADER = "" + NRCOL = 0 + If !Empty(taHeader) + NRCOL = Alen(taHeader, 1) + Endif + Sele (TTABEL) + If NRCOL - 1 < Fcount() + + For I = 1 To Fcount() + LCHEADER = LCHEADER + Upper(Allt(Field(I))) + Tab + Endfor + Else + + For I = 2 To NRCOL + LCHEADER = LCHEADER + Uppe(Allt(taHeader[I])) + Tab + Endfor + Endif + LCHEADER = LCHEADER + CRLF + +\\<> + + Sele (TTABEL) + lnFields = Afields(laFields, m.TTABEL) + Scan + LDATE = "" + For lnField = 1 To m.lnFields + LCFIELD = laFields[m.lnField, 1] + luValue = Evaluate(m.LCFIELD) + lcType = laFields[m.lnField, 2] + lnSize = laFields[m.lnField, 3] + lnDecimals = laFields[m.lnField, 4] + Do Case + Case lcType = 'C' + LDATE = LDATE + m.luValue + Tab + Case lcType = 'N' + LDATE = LDATE + Str(m.luValue, m.lnSize, m.lnDecimals) + Tab + Otherwise + LDATE = LDATE + Transform(m.luValue, "") + Tab + Endcase + Endfor + LDATE = LDATE + CRLF + \\<> + Endscan + Set Textmerge To + + Wait Window "Se deschide Excel..." Nowait + + + open_default_app(m.LCFIS) + +Endproc && list_venituri_excel + + +************************************************************************************************ +Procedure GET_PERIOADA + Local LD1, LD2 + + LRET = ";" + LD1 = Date() - 7 + LD2 = Date() + OBD = Crea("frm_GET_perioada") + With OBD + .TXTDATA1.ControlSource = "LD1" + .TXTDATA2.ControlSource = "LD2" + Endwith + OBD.Show(1) + + LRET = Dtoc(LD1) + ";" + Dtoc(LD2) + + Return LRET + +Endproc && get_perioada + +************************************************************************************************ +Procedure GET_PRESTATIA + + Create Cursor TPRESTATIA (tip I(6), prestatia C(30)) + Insert Into TPRESTATIA (tip, prestatia) Values (0, "Tranzit") + + Insert Into TPRESTATIA (tip, prestatia) Values(1, "Cheiaj nave") + Insert Into TPRESTATIA (tip, prestatia) Values(2, "Diverse") + Insert Into TPRESTATIA (tip, prestatia) Values(3, "Chirii si utilitati") + *!* INSERT INTO CURSOR VALUES(4,"Pilotaj") + Insert Into TPRESTATIA (tip, prestatia) Values(5, "Furnizare apa") + *WAIT WIND '1' + Sele TPRESTATIA + Go Top + *BROW + + OBP = Crea("FRM_GET_PRESTATIA") + With OBP.GRID1 + .RecordSource = "tprestatia" + .CPRESTATIA.ControlSource = "prestatia" + Endwith + OBP.Show(1) + + *WAIT WIND '2' + Sele TPRESTATIA + Scat Name OPRESTATIA + LTIP = tip + Use In TPRESTATIA + + Return OPRESTATIA && tipul prestatiei alese +Endproc && get_prestatia + + +*!* MARESC TOATE COLOANELE DE TIP NUMERIC LA N(16,2) +*!* MARIUS MUTU +*!* 04.05.2006 +Procedure ALTER_TABLE_INCREASE_NUM + Lparameters tcAlias, tcPrecision + + Local lnFields, I, LCFIELD, lcAlter + Declare laFields[1, 1] + + If Used(tcAlias) + lnFields = Afields(laFields, tcAlias) + For I = 1 To lnFields + If Inlist(laFields[i, 2], 'N', 'F', 'I', 'B', 'Y') + LCFIELD = laFields[i, 1] + lcAlter = [alter table ] + tcAlias + [ alter column ] + LCFIELD + + [ ] + tcPrecision + &lcAlter + Endif + Endfor + Endif + +Endproc && ALTER_TABLE_INCREASE_NUM \ No newline at end of file diff --git a/Programe/roaacnpro.prg b/Programe/roaacnpro.prg new file mode 100644 index 0000000..614e599 --- /dev/null +++ b/Programe/roaacnpro.prg @@ -0,0 +1,146 @@ +Parameters tParametri +*!* obiecte globale +Private poLog, goLog, oTool, oHelp, goExecutor, goConn, goMyXMLHTTP, goCalendar, goExport, goUtilizator, goFundal, goFirma, goApp +Store "" To poLog, goLog, oTool, oHelp, goExecutor, goConn, goMyXMLHTTP, goCalendar, goExport, goUtilizator, goFundal, goFirma + +*!* Private gcLocalePath, goLocale +*!* STORE "" TO gcLocalePath, goLocale + +*!* variabile globale +Public CRLF,CR,LF,Tab +Public gcNumeProgram, NUMEPROGRAM, MENIUPROGRAM, FUNDALPROGRAM +Public pcNl, pcAn, gcAcces, gcAppPath, gcAppName, gcUtilizatoriPath, gcDirMare, DIRGEN, gcTempPath, ; + glParametri, gcHost, gcUsername, gcPassword, gcUserNameApp, gcPasswordApp, gnIdUtil, gnIdProgram, ; + gnAn, gnLuna, gcS, gnIdFirma, gcGeneralIniFile, gcSecurityFile, gnHandle, gnButon, BUTON, gcFirma, gcBasePath, gcComunPath, ; + gnTipGest, gcGestPermis, glFontCharSet, gcReportPreviewer, gcReportPreviewerPath, gcLocale, gcSettingsFile +Public gcAntet,gcCopyRight, pcTitlu +gcAntet = '' +pcTitlu = '' +gcCopyRight = '© ROA Romfast SRL' +Public glUltimaLuna, glPrimaLuna, glLunaBuna, glLuna_neplatita, glLunaInchisa +Public glQuit, pl_verificat +Public gnewcryptfll, gnewcryptxml, gTransferTotal +Private gnId_Prg_Owner +gnId_Prg_Owner = 0 +*!* altele +Declare nror[65000] +Declare RTVA[22,2] +Public luna_inchisa, luna_neplatita, PRIMADATA, m.ctva, m.ctvam, m.ctvai, antet, m.nivel +Public OStart,OSETVIZ,OSETTULBAR,OSETINSTRUM,orm,OTEXT,OJUR,osetgest,tlbr_INSTR,tlbr_VIZ,oprinc +Public pcapsocsub,pcapsocvar + +_screen.Icon = 'D:\ROA\ROAACNPRO\GRAFICE\ROAACNPRO.ICO' + + +gcAppPath = UPPER(Addbs(Justpath(Sys(16,0)))) +gcAppPath = STRTRAN(m.gcAppPath, 'PROGRAME\', '') +gcComunPath = gcAppPath + 'COMUN\CLASE;' + ; + gcAppPath + 'COMUN\FERESTRE;' + ; + gcAppPath + 'COMUN\PROGRAME;' + ; + gcAppPath + 'COMUN\GRAFICE;' + ; + gcAppPath + 'COMUN\RAPOARTE;' + ; + gcAppPath + 'COMUN\UTILE\CALENDAR;' + ; + gcAppPath + 'COMUN\UTILE\CTL32;' + ; + gcAppPath + 'COMUN\UTILE\HPDF;' + ; + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ; + gcAppPath + 'COMUN\UTILE\WEB;' + ; + gcAppPath + 'COMUN\UTILE\NFJSON;' + ; + gcAppPath + 'COMUN\UTILE\NFXML;' + ; + gcAppPath + 'COMUN\UTILE\EXCEL;' + ; + gcAppPath + 'COMUN\UTILE\GridExtras ;' + ; + Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2)))+[COMUNROA\] + +Set Default To (m.gcAppPath) + +SET PATH to (m.gcComunPath) ADDITIVE +Set Procedure To roa.prg Additive +Private goApp + +On Shutdown do onShutDown + +goApp = Createobject("oApp") +If goApp.initializeaza(tParametri,[ROAACNPRO]) + goApp.lanseazaAplicatie() + + * STATUSBAR APLICATIE + If Not Pemstatus(_Screen,"StatusBar", 5) Then + _Screen.Newobject("StatusBar","ctl32_statusbar", "ctl32_statusbar.vcx", null, 3) + * _Screen.Newobject("StatusBar","ctl32_statusbar", "ctl32_statusbar_fals.vcx", null, 3) && inlocuieste cu ctl_32_statusbar_fals.vcx daca sunt probleme + ENDIF + IF TYPE('goFundal') = 'O' + IF NOT PEMSTATUS(goFundal, "oStatusBar", 5) then + ADDPROPERTY(goFundal, "oStatusBar", Null) + ENDIF + goFundal.oStatusBar = _Screen.StatusBar + goFundal.oStatusBar.ctlIcon="roastartmic.ico" + goFundal.oStatusBar.ctlMessage = _Screen.Caption + * formularul fundal.scx trebuie sa aiba o metoda StatusBarClick + BindEvent(goFundal.oStatusBar, [ctlClick], goFundal, [StatusBarClick]) && Thisform.oStatusBar.newtooltip() + ENDIF +Endif + +READ EVENTS + +*Release goApp + + + +Define Class oApp As RoaApp + + Procedure initializeazaAlteCai + Endproc + + Procedure initializeazaAlteClassLib + SET CLASSLIB TO ofacturare_comun.vcx ADDITIVE + SET CLASSLIB TO onom_curs.vcx ADDITIVE + SET CLASSLIB TO oacnpro.vcx ADDITIVE + SET CLASSLIB TO comun.vcx ADDITIVE + SET CLASSLIB TO serii_numere.vcx ADDITIVE + SET CLASSLIB TO onom_articole.vcx ADDITIVE + SET CLASSLIB TO overificari.vcx ADDITIVE + Endproc + + Procedure initializeazaAlteProceduri + SET PROCEDURE TO proceduri_acnpro.prg ADDITIVE + SET PROCEDURE TO proceduri_acnpro_rapoarte.prg ADDITIVE + SET PROCEDURE TO ofacturare.prg ADDITIVE + SET PROCEDURE TO ofacturare_comun ADDITIVE + SET PROCEDURE TO oserii_numere ADDITIVE + SET PROCEDURE TO oproceduri_curs ADDITIVE + SET PROCEDURE TO odocumente.prg ADDITIVE + SET PROCEDURE TO email.prg ADDITIVE + SET PROCEDURE TO oproceduri_rapoarte_fact.prg ADDITIVE + SET PROCEDURE TO matxtab.prg ADDITIVE + SET PROCEDURE TO nfxmlread.prg ADDITIVE + SET PROCEDURE TO nfjsonread.prg ADDITIVE + SET PROCEDURE TO xmlefactura.prg ADDITIVE + Endproc + + Procedure initializeazaAlteVariabileGlobale + Endproc + + Procedure initializeazaAlteObiecteGlobale + Endproc + +ENDDEFINE + +*!* Function Shutdown +*!* If Type("goApp")=="O" And Not Isnull(goApp) +*!* Return goApp.OnShutDown() +*!* Endif +*!* Cleanup() +*!* Quit +*!* Endfunc + + +*-- Occurs when the user attempts to exit Visual FoxPro. +Procedure onShutDown + IF AMESSAGEBOX('Doriti sa iesiti din program?',4+32, goApp.cNumeProgram) = 6 + On Shutdown + On Error + Clear Events + If _vfp.StartMode <> 0 + Quit + Endif + Endif +ENDPROC && onShutDown \ No newline at end of file diff --git a/Programe/update_nomenclator.prg b/Programe/update_nomenclator.prg new file mode 100644 index 0000000..62f8239 --- /dev/null +++ b/Programe/update_nomenclator.prg @@ -0,0 +1,30 @@ +********************************************************** +Procedure update_nomenclator + +Do update_lunilean + +*** tabele meniu deschise din proiect +Local lcCaleDateMenu + +lcCaleDateMenu=gcAppPath+[\COMUN\DATEMENU\] + +lnSucces = xdate() + +If !Used('menu1') + Use &lcCaleDateMenu.menu1 In 0 Alias menu1 Excl +Endif + +If !Used('INFISIERE') + Use &lcCaleDateMenu.INFISIERE In 0 Alias INFISIERE +Endif + +If !Used('selectii') + Use &lcCaleDateMenu.gest_selectii In 0 Alias selectii +Endif + +*!* modificare v 2.1.1 +If !Used('mila1') + Use &lcCaleDateMenu.mila1 In 0 Alias mila1 +endif + +Endproc && update_nomenclator \ No newline at end of file diff --git a/Programe/verificare_roris_ecluze.prg b/Programe/verificare_roris_ecluze.prg new file mode 100644 index 0000000..c52f487 --- /dev/null +++ b/Programe/verificare_roris_ecluze.prg @@ -0,0 +1,1352 @@ +Close Databases All +Set Century On +Set Date Dmy +Set Exact On +Set Ansi On +Set Deleted Off +Set Safety Off + +* Clasa oEmail +* oEmail > oThunderbirdEmailCmd +* oEmail > oCDO +* oEmail > oOutlook +* oEmail > oMapi + +* getoEmail: citeste optiunile de email din ROA\settings.ini si intoarce obiectul oMail +* loMail = getoEmail() +* loMail.cTo = 'test@test.ro' +* loMail.EmailSetAttachment('c:\factura.pdf') +* lnErrors = loMail.Send() +* if lnErrors > 0 +* messageb(loMail.GetErrorMessage) +* end if + +*!* 07.04.2020 +*!* Am adaugat clasa trimiterea de email prin client Mapi + + +#Define oAnonymous 0 && Perform no authentication (anonymous) +#Define oBasic 1 && Use the basic (clear text) authentication mechanism. + +* https://www.berezniker.com/content/pages/visual-foxpro/cdo-2000-class-sending-emails + +#Define cdoSendPassword "http://schemas.microsoft.com/cdo/configuration/sendpassword" +#Define cdoSendUserName "http://schemas.microsoft.com/cdo/configuration/sendusername" +#Define cdoSendUsingMethod "http://schemas.microsoft.com/cdo/configuration/sendusing" +#Define cdoSMTPAuthenticate "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" +#Define cdoSMTPConnectionTimeout "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" +#Define cdoSMTPServer "http://schemas.microsoft.com/cdo/configuration/smtpserver" +#Define cdoSMTPServerPort "http://schemas.microsoft.com/cdo/configuration/smtpserverport" +#Define cdoSMTPUseSSL "http://schemas.microsoft.com/cdo/configuration/smtpusessl" +#Define cdoURLGetLatestVersion "http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion" +#Define cdoAnonymous 0 && Perform no authentication (anonymous) +#Define cdoBasic 1 && Use the basic (clear text) authentication mechanism. +#Define cdoSendUsingPort 2 && Send the message using the SMTP protocol over the network. +#Define cdoXMailer "urn:schemas:mailheader:x-mailer" + +#Define xlCellTypeVisible 12 +#Define xlSourceRange 4 +#Define xlHtmlStatic 0 + +#Define olFolderSentMail 5 +#Define olFormatHTML 2 + +#Define wdFormatOriginalFormatting 16 && Preserves original formatting of the pasted material + +#Define SUCCESS_SUCCESS 0 +#Define MAPI_DIALOG 8 +#Define MAPI_ORIG 0 +#Define MAPI_TO 1 +#Define MAPI_CC 2 +#Define MAPI_BCC 3 +*-------------------------------------------------------------------------------------------- + +************************************************ +*** Verificare ecluzare sas-uri/camere ecluze RORIS +************************************************ +lcDirector = ADDBS(JUSTPATH(SYS(16,0))) + + +lcConvoaie = m.lcDirector + 'convoaie.dbf' +IF !FILE(m.lcConvoaie) + CREATE TABLE (m.lcConvoaie) (vye_id C(36), declaratie C(8), ; + ag N(1), cv N(1), ov N(1), nv N(1), ; + ag_sasn N(1), cv_sasn N(1), ov_cn N(1), nv_cn N(1), ; + ag_data T NULL, cv_data T NULL, ov_data T NULL, nv_data T NULL) + SELECT convoaie + INDEX on declaratie TAG declaratie + USE IN (SELECT('convoaie')) +ENDIF +USE (m.lcConvoaie) IN 0 SHARED ALIAS convoaie + +* transmit doar ecluzarile mai noi decat ultima data de ecluzare +CALCULATE MAX(ag_data), MAX(cv_data), MAX(ov_data), MAX(nv_data) TO lnAgData, lnCVData, lnOVData, lnNVData IN convoaie +ldDataOra = MAX(lnAgData, lnCVData, lnOVData, lnNVData) + +lnHandle = SQLConnect("roa", "acn","ROMFASTSOFT") +If m.lnHandle <= 0 + Aerror(laEroare) + WriteLog(laEroare(3)) + Return +Endif + +TEXT TO lcsql TEXTMERGE noshow +select distinct vye_id, declaratio as declaratie, agigea as ag, cernavoda as cv, navodari as nv, ovidiu as ov, + agigea_data as ag_data, cernavoda_data as cv_data, navodari_data as nv_data, ovidiu_data as ov_data, + agigea_sasn as ag_sasn, cernavoda_sasn as cv_sasn, ovidiu_cn as ov_cn, navodari_cn as nv_cn from +(select v.vye_id, v.declaratio, v.generation, + nvl(vlt.AGIGEA,0) as AGIGEA, + nvl(vlt.CERNAVODA,0) as CERNAVODA, + nvl(vlt.NAVODARI,0) as NAVODARI, + nvl(vlt.OVIDIU,0) as OVIDIU, + vlt.AGIGEA_DATA, + vlt.CERNAVODA_DATA, + vlt.OVIDIU_DATA, + vlt.NAVODARI_DATA, + (case when nvl(vlt.AGIGEA,0) = 1 and nvl(vltm.AGIGEA_SAS1,0) = 0 and nvl(vltm.AGIGEA_SAS2,0) = 0 then 1 else 0 end) as AGIGEA_SASN, + (case when nvl(vlt.CERNAVODA,0) = 1 and nvl(vltm.CERNAVODA_SAS1,0) = 0 and nvl(vltm.CERNAVODA_SAS2,0) = 0 then 1 else 0 end) as CERNAVODA_SASN, + (case when nvl(vlt.OVIDIU,0) = 1 and nvl(vltm.OVIDIU_C1,0) = 0 and nvl(vltm.OVIDIU_C2,0) = 0 then 1 else 0 end) as OVIDIU_CN, + (case when nvl(vlt.NAVODARI,0) = 1 and nvl(vltm.NAVODARI_C1,0) = 0 and nvl(vltm.NAVODARI_C2,0) = 0 then 1 else 0 end) as NAVODARI_CN + From IPS_VVOYAGES v + join IPS_VVOYAGE_MEMBERS vm + On v.id = vm.VYE_ID + left join ips_vvoyage_locks_tab vlt + on v.id = vlt.vye_id + left join ips_vvoyage_locks_vms_tab vltm + on vm.vye_id = vltm.vye_id and vm.id = vltm.vms_id) + where <= ' + ALLTRIM(STR(YEAR(m.ldDataOra)-1)) + ' and ', '')>>(agigea_sasn = 1 or cernavoda_sasn = 1 or ovidiu_cn = 1 or navodari_cn = 1) + order by declaratio; +ENDTEXT + +lnSucces = SQLExec(m.lnHandle, m.lcSql, 'crsConvoaie') +SQLDISCONNECT(m.lnHandle) + +lcText = '' +lnConvoaie = 0 +If m.lnSucces < 0 + Aerror(laEroare) + WriteLog(laEroare(3)) +Else + + + SELECT convoaie + SET ORDER TO declaratie + + lcText = 'Lista convoaie cu ecluzare, mai noi decat ' + TRANSFORM(m.ldDataOra) + ', care nu au inregistrate sas-ul/camera ecluzei:' + CHR(13) + CHR(10) + Select crsConvoaie + SCAN + SCATTER NAME loRec + lcDeclaratie = PADR(loRec.declaratie, 8, ' ') + + SELECT convoaie + IF !SEEK(m.lcDeclaratie) + APPEND BLANK + ENDIF + GATHER NAME loRec + WITH loRec + IF (.ag_data > m.ldDataOra AND .ag_sasn = 1) OR (.cv_data > m.ldDataOra AND .cv_sasn = 1) OR ; + (.ov_data > m.ldDataOra AND .ov_cn = 1) OR (.nv_data > m.ldDataOra AND .nv_cn = 1) + lcText = lcText + m.lcDeclaratie + lnConvoaie = lnConvoaie + 1 + + IF .ag_data > m.ldDataOra AND .ag_sasn = 1 + lcText = lcText + ', AG (' + TRANSFORM(.ag_data) + ')' + ENDIF + IF .cv_data > m.ldDataOra AND .cv_sasn = 1 + lcText = lcText + ', CV (' + TRANSFORM(.cv_data) + ')' + ENDIF + IF .ov_data > m.ldDataOra AND .ov_cn = 1 + lcText = lcText + ', OV (' + TRANSFORM(.ov_data) + ')' + ENDIF + IF .nv_data > m.ldDataOra AND .nv_cn = 1 + lcText = lcText + ', NV (' + TRANSFORM(.nv_data) + ')' + ENDIF + lcText = lcText + CHR(13) + CHR(10) + ENDIF + ENDWITH + ENDSCAN + + lcImportFile = Addbs(Justpath(Sys(16,0))) + 'verificare_roris_ecluze_' + DTOC(DATE(),1) + '.txt' + Strtofile(m.lcText, m.lcImportFile,1) +ENDIF + +USE IN (SELECT('crsConvoaie')) +USE IN (SELECT('convoaie')) + +************************************************ +lcSetariFile = m.lcDirector + 'settings.ini' +IF !FILE(m.lcSetariFile) + TEXT TO lcSettings noshow +[email] +mailserver = mail.acn.ro +port = 25 +username = facturare@acn.ro +password = fe1VLsNMZDZVJKW +from = compania@acn.ro +to = +cc = +bcc = +sendwithoutresults = 1 + ENDTEXT + STRTOFILE(m.lcSettings,m.lcSetariFile) +ENDIF +SET STEP ON +lcSetari = FILETOSTR(m.lcSetariFile) +lnLinii = ALINES(laLinii, lcSetari) +lcMailServer = '' +lcPort = '' +lcUsername = '' +lcPassword = '' +lcFrom = '' +lcTo = '' +lcCC = '' +lcBCC = '' +llSSL = .F. +llSendWithoutResults = .T. +FOR lnLinie = 1 TO lnLinii + lcLinie = laLinii(m.lnLinie) + IF AT('=', m.lcLinie) = 0 + LOOP + ENDIF + lcVariabila = LOWER(ALLTRIM(GETWORDNUM(m.lcLinie, 1, '='))) + lcValoare = ALLTRIM(GETWORDNUM(m.lcLinie, 2, '=')) + IF m.lcVariabila = 'mailserver' + lcMailServer = m.lcValoare + ENDIF + IF m.lcVariabila = 'port' + lcPort = m.lcValoare + ENDIF + IF m.lcVariabila = 'username' + lcUsername = m.lcValoare + ENDIF + IF m.lcVariabila = 'password' + lcPassword = m.lcValoare + ENDIF + IF m.lcVariabila = 'from' + lcFrom = m.lcValoare + ENDIF + IF m.lcVariabila = 'to' + lcTo = m.lcValoare + ENDIF + IF m.lcVariabila = 'cc' + lcCC = m.lcValoare + ENDIF + IF m.lcVariabila = 'bcc' + lcBCC = m.lcValoare + ENDIF + IF m.lcVariabila = 'ssl' + llSSL = (INT(VAL(m.lcValoare)) = 1) + ENDIF + IF m.lcVariabila = 'sendwithoutresults' + llSendWithoutResults = (INT(VAL(m.lcValoare)) = 1) + ENDIF +ENDFOR + +* Trimit email doar daca sunt rezultate? +IF m.lnConvoaie = 0 AND !m.llSendWithoutResults + WriteLog('0 convoaie. Nu se trimite email.') + RETURN +ENDIF + +llThunderbirdCMD = .F. +llCDO = .T. +llOutlook = .F. +llMapi = .F. +Do Case +Case m.llThunderbirdCMD + loEmail = Createobject("oThunderbirdEmailCmd") +Case m.llCDO + loEmail = Createobject("oCDO") +Case m.llOutlook + loEmail = Createobject("oOutlook") +Case m.llMapi + loEmail = Createobject("oMapi") +Otherwise + Return +Endcase + + +************************** +* CDO Specific +loEmail.cServer = m.lcMailServer +loEmail.nServerPort = INT(VAL(m.lcPort)) +loEmail.cUserName = m.lcUsername +loEmail.cPassword = m.lcPassword +loEmail.lUseSSL = m.llSSL +loEmail.nAuthenticate = Iif(Empty(loEmail.cUserName), oAnonymous, oBasic) +************************** + +************************** +* Thunderbird Specific +loEmail.EmailSetExePath('C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe') +loEmail.EmailSetWait() +************************** + +************************** +* Outlook Specific +loEmail.EmailSetPreview(.F.) +loEmail.EmailSetDisplayWithoutInfo(.T.) +************************** + +loEmail.cFrom = lcFrom +loEmail.cTo = m.lcTo +loEmail.cCC = m.lcCC +loEmail.cBCC = m.lcBCC +loEmail.cSubject = ALLTRIM(STR(m.lnConvoaie)) + ' convoaie cu ecluzare, mai noi decat ' + TRANSFORM(m.ldDataOra) + ', care nu au inregistrate sas-ul/camera ecluzei:' + +loEmail.cHtmlBody = STRTRAN(m.lcText, CHR(13) + CHR(10),'
' + CHR(13)+CHR(10),1,10000,1) +loEmail.cTextBody = '' && m.lcText +loEmail.EmailSendWithoutAttachments(.T.) + +SET STEP ON +lnErrors = loEmail.Send() +ltDataEmail = Datetime() +llSucces = (m.lnErrors = 0) +lcEroare = Iif(!m.llSucces, loEmail.GetErrorMessage(), '') +WriteLog('Email trimis la ' + m.lcTo + ' : ' + IIF(m.llSucces, 'Succes', lcEroare)) + +* ----------------------------------- +* oEmail.Send +* > EmailSend +* >> EmailCreateCfg +* >> EmailSetConfiguration +* >> EmailSetHeader +* >> EmailSetParameters +Define Class oEmail As Custom + + Protected aErrors[1], nErrorCount, oMsg, oCfg, cXMailer + + nErrorCount = 0 + +* Message attributes + oMsg = Null + + cFrom = "" + cFromName = "" + cReplyTo = "" + cTo = "" + cCC = "" + cBCC = "" + cAttachment = "" && attachment file list separated by comma + nAttachments = 0 && number of attachment files + + cSubject = "" && subiect email factura + cHtmlBody = "" && continut email factura + cTextBody = "" + cHtmlBodyUrl = "" + + cBorderouSubject = "" && subiect email borderou + cBorderouBody = "" && continut email borderou + + cCharset = "" + +* Priority: Normal, High, Low or empty value (Default) + cPriority = "" + +* Configuration object fields values + oCfg = Null + cServer = "" + nServerPort = 25 +* Use SSL connection + lUseSSL = .F. + nConnectionTimeout = 30 && Default 30 sec's + nAuthenticate = oAnonymous + cUserName = "" + cPassword = "" +* Do not use cache for cHtmlBodyUrl + lURLGetLatestVersion = .T. + +* Optional. Creates your own X-MAILER field in the header + cXMailer = "" + + cEmailExePath = '' + cEmailProfile = '' + + lEmailWait = .F. && wait for the email to be sent, to advance to the next email + + lEmailPreview = .F. && preview each mail (default .F.) + lDisplayEmailWithoutInfo = .F. && display mail without from, to, subject, body, attachment + lCanDisplayEmailWithoutInfo = .T. && can the email without from, to, subject, body be displayed to user? (CDO does not display anything, for now) + + lFirstEmail = .T. && after the first email becomes .F., in case you want to do some things only the first time (eg: show the Sent folder in Outlook) + lSendWithoutAttachments = .F. && if email can be sent without attachment (Default = .F.) + + Protected Procedure Init + This.ClearErrors() + Endproc + + +* Send message +* Return Number of Errors (0 = succes) + Procedure Send + + Local lnErrorCount + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount > 0 + This.ClearMessage() + Return m.lnErrorCount + Endif + + With This + .ClearErrors() + .EmailCreateCfg() && abstract, to be implemented + Endwith + +* Check server, user, password + lnErrorCount = This.SetConfiguration() + + If m.lnErrorCount = 0 +* If email without info doesn't display to the user, add error + If !(This.lDisplayEmailWithoutInfo And This.lCanDisplayEmailWithoutInfo) + If Empty(This.cFrom) + This.AddError("ERROR : From is empty.") + Endif + If Empty(This.cSubject) + This.AddError("ERROR : Subject is empty.") + Endif + + If Empty(This.cTo) && And Empty(This.cCC) And Empty(This.cBCC) +* This.AddError("ERROR : To, CC and BCC are all empty.") +* Nu permit trimiterea de emailuri (cu facturi) fara TO. +* Altfel le trimite doar la CC/BCC, adica trimite copia inapoi. +* CC/BCC sunt fixe in settings.ini si nu ma intereseaza daca sunt sau nu completate + This.AddError("ERROR : To is empty.") + Endif + Endif + Endif && SetConfiguration + + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount = 0 + This.EmailSetHeader() + This.EmailSetParameters() + Endif + + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount = 0 + This.AddAttachments() + +* If email without attachment doesn't display to the user, add error + If !(This.lDisplayEmailWithoutInfo And This.lCanDisplayEmailWithoutInfo) + If !This.lSendWithoutAttachments And Empty(This.EmailGetAttachmentsNumber()) + This.AddError("ERROR : There are no attachments.") + Endif + Endif + Endif + +* Send Email + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount = 0 + This.EmailSend() + lnErrorCount = This.GetErrorCount() + Endif + + This.lFirstEmail = .F. + This.ClearMessage() + + Return m.lnErrorCount + Endproc + +* Clear errors collection + Procedure ClearErrors() + This.nErrorCount = 0 + Dimension This.aErrors[1] + This.aErrors[1] = Null + Return This.nErrorCount + Endproc + +* Return # of errors in the error collection + Procedure GetErrorCount + Return This.nErrorCount + Endproc + +* Return error by index + Procedure Geterror + Lparameters tnErrorno + If tnErrorno <= This.GetErrorCount() + Return This.aErrors[tnErrorno] + Else + Return Null + Endif + Endproc + +* Return all error messages into one message + Procedure GetErrorMessage + Lparameters tlClearErrors +* tlClearErrors (optional): clear all error messages + + Local lcErrorMessage, lnError, lnErrors + lnErrors = This.GetErrorCount() + lcErrorMessage = '' + For lnError = 1 To m.lnErrors + lcErrorMessage = m.lcErrorMessage + This.Geterror(m.lnError) + '***' + Endfor + +* Clear errors + If m.tlClearErrors + This.ClearErrors() + Endif + + Return m.lcErrorMessage + Endproc && GetErrorMessage + +* Populate configuration object + Protected Procedure SetConfiguration + +* Validate supplied configuration values + If Empty(This.cServer) + This.AddError("ERROR: SMTP Server isn't specified.") + Endif + If Not Inlist(This.nAuthenticate, oAnonymous, oBasic) + This.AddError("ERROR: Invalid Authentication protocol ") + Endif + If This.nAuthenticate = oBasic ; + AND (Empty(This.cUserName) Or Empty(This.cPassword)) + This.AddError("ERROR: User name/Password is required for basic authentication") + Endif + + If This.GetErrorCount() > 0 + Return This.GetErrorCount() + Endif + +* Populate configuration objects + This.EmailSetConfiguration() + + Return This.GetErrorCount() + + Endproc + +*---------------------------------------------------- +* Add message to the error collection + Protected Procedure AddError + Lparameters tcErrorMsg + This.nErrorCount = This.nErrorCount + 1 + Dimension This.aErrors[This.nErrorCount] + This.aErrors[This.nErrorCount] = tcErrorMsg + Return This.nErrorCount + Endproc + +*---------------------------------------------------- +* Format an error message and add to the error collection + Protected Procedure AddOneError + Lparameters tcPrefix, tnError, tcMethod, tnLine + Local lcErrorMsg, laList[1] + If Inlist(tnError, 1427, 1429) + Aerror(laList) + lcErrorMsg = Transform(laList[7], "@0") + " " + laList[3] + Else + lcErrorMsg = Message() + Endif + This.AddError(tcPrefix + ":" + Transform(tnError) + " # " + ; + tcMethod + " # " + Transform(tnLine) + " # " + lcErrorMsg) + Return This.nErrorCount + Endproc + +*---------------------------------------------------- +* Simple Error handler. Adds VFP error to the objects error collection + Protected Procedure Error + Lparameters tnError, tcMethod, tnLine + This.AddOneError("ERROR: ", tnError, tcMethod, tnLine ) + Return This.nErrorCount + Endproc + + Procedure EmailSetProfile + Lparameters tcProfile + This.cEmailProfile = m.tcProfile + Endproc + + Procedure EmailSetExePath + Lparameters tcExePath + This.cEmailExePath = m.tcExePath + Endproc + + Procedure EmailSetWait + Lparameters tlWait + This.lEmailWait = m.tlWait + Endproc && EmailSetWait + + +*------------------------------------------------------- +* Add a file to the attachement list + Procedure EmailSetAttachment + Lparameters tcFile + If !Empty(m.tcFile) And Type('tcFile') = 'C' + This.cAttachment = This.cAttachment + Iif(!Empty(This.cAttachment), ",", "") + m.tcFile + Endif + Endproc && SetAttachment + +*------------------------------------------------------- +* Overwrite the attachement list with a list of files + Procedure EmailSetAttachments + Lparameters tcFiles + If !Empty(m.tcFiles) And Type('tcFiles') = 'C' + This.cAttachment = m.tcFiles + Endif + Endproc && SetAttachment + +*------------------------------------------------------- +* Empty the recipient list in subclass + Procedure EmailClearMessage +* To be implemented + Endproc && EmailClearMessage + + Procedure ClearMessage + This.EmailClearMessage() + This.cTo = "" + This.cHtmlBody = "" + This.cSubject = "" + This.cAttachment = "" + Endproc && ClearMessage + + Procedure EmailSendWithoutAttachments + Lparameters tlSendWithoutAttachments + This.lSendWithoutAttachments = m.tlSendWithoutAttachments + Endproc + + + Procedure AddAttachments + Local laList[1], laDummy[1] + Local lcAttachment, lnAttachment, lnAttachments + +* Process attachments + If Not Empty(This.cAttachment) +* Accepts comma or semicolon + lnAttachments = Alines(laList, This.cAttachment, [,], [;]) + For lnAttachment = 1 To m.lnAttachments + lcAttachment = Alltrim(laList[m.lnAttachment]) +* Ignore empty values + If Empty(laList[m.lnAttachment]) + Loop + Endif + +* Make sure that attachment exists + If Adir(laDummy, lcAttachment) = 0 + This.AddError("ERROR: Attachment not Found - " + lcAttachment) + Else +* The full path is required. + If Upper(lcAttachment) <> Upper(Fullpath(lcAttachment)) + lcAttachment = Fullpath(lcAttachment) + Endif + This.EmailAddAttachment(lcAttachment) + Endif + Endfor + Endif + Endproc && AddAttachments + + Procedure EmailAddAttachment + Lparameters tcAttachment +* To be implemented + Endproc && EmailAddAtachment + + Procedure EmailGetAttachmentsNumber + Return Getwordcount(This.cAttachment, [,]) + Endproc + + Procedure EmailSetPreview + Lparameters tlSetPreview + This.lEmailPreview = m.tlSetPreview + Endproc && EmailSetPreview + + Procedure EmailSetDisplayWithoutInfo + Lparameters tlSetDisplay + This.lDisplayEmailWithoutInfo = m.tlSetDisplay + Endproc && EmailSetDisplayWithoutInfo + +*------------------------------------------------------- +* Create configuration objects + Procedure EmailCreateCfg +* to be implemented + Endproc + +*------------------------------------------------------- +* Set mail header fields, if necessary. For now sets X-MAILER, if specified + Procedure EmailSetHeader +* to be implemented + Endproc + +*------------------------------------------------------- +* Set to, from, atachments.. + Procedure EmailSetParameters +* to be implemented + Endproc + +*------------------------------------------------------- +* Set server, username, password +* Return Number of Errors (0 = success) + Procedure EmailSetConfiguration() +* to be implemented + Return 0 + Endproc + + +*------------------------------------------------------- +* Send email + Procedure EmailSend +* to be implemented + Endproc + +*------------------------------------------------------- +* Add Error + Procedure EmailAddError + Lparameters tcErrorMessage + This.AddError("ERROR : " + Transform(m.tcErrorMessage)) + Endproc + +*---------------------------------------------------- +* + Protected Procedure cPriority_assign(tvVal) +* Check for incorrect values + If Inlist("~" + Proper(tvVal) + "~", "~High~", "~Normal~", "~Low~") Or Empty(tvVal) + This.cPriority = Proper(Alltrim(tvVal)) + Else + This.AddError("ERROR: Invalid value for cPriority property.") + Endif + Endproc + +Enddefine && oEmail + +*----------------------------------------------------------- +*!* oEmail.Send +*!* > EmailCreateCfg +*!* > EmailSetConfiguration +*!* > EmailSetHeader +*!* > EmailSetParameters +*!* > EmailSend +Define Class oThunderbirdEmailCmd As oEmail + Procedure EmailSend + + Local loRun As 'api_apprun' Of 'process.vcx' + Local lcBody, lcCommandLine, lcExePath, lcProfile + + lcProfile = This.cEmailProfile + lcExePath = This.cEmailExePath + lcBody = Iif(!Empty(This.cHtmlBody), This.cHtmlBody, This.cTextBody) + + If Empty(This.cHtmlBody) + lcBody = Strtran(m.lcBody, Chr(13) + Chr(10), [
], 1, 1000, 1) + lcBody = Strtran(m.lcBody, Chr(13), [
], 1, 1000, 1) + Else + lcBody = Strtran(m.lcBody, Chr(13) + Chr(10), [], 1, 1000, 1) + lcBody = Strtran(m.lcBody, Chr(13), [], 1, 1000, 1) + Endif + lcBody = Strtran(m.lcBody, [,], [,], 1, 1000, 1) + + lcCommandLine = ["] + m.lcExePath + ["] + ; + IIF(!Empty(m.lcProfile), [-profile "] + m.lcProfile + ["], []) + ; + [ -compose ] + ; + IIF(!Empty(This.cFrom), [from="] + This.cFrom + ["], []) + ; + IIF(!Empty(This.cTo), [,to="] + This.cTo + ["], []) + ; + IIF(!Empty(This.cCC), [,cc="] + This.cCC + ["], []) + ; + IIF(!Empty(This.cBCC), [,bcc="] + This.cBCC + ["], []) + ; + IIF(!Empty(This.cSubject), [,subject="] + This.cSubject + ["], []) + ; + IIF(!Empty(m.lcBody), [,body="] + m.lcBody + ["], []) + ; + IIF(!Empty(This.cAttachment), [,attachment='] + This.cAttachment + ['], []) + + If !'process.vcx' $ Lower(Set("Classlib")) + Set Classlib To 'D:\ROA\ROAACNPRO\COMUN\clase\process.vcx' Additive + Endif + + loRun = Createobject('api_apprun') + + If File (m.lcExePath) + loRun.iccommandline = m.lcCommandLine + If This.lEmailWait + loRun.launchappandwait() + Else + loRun.launchapp() + Endif + Else + This.EmailAddError('Thunderbird exe path ' + m.lcExePath + ' does not exist!') + Endif + + Endproc && EmailSend +Enddefine && ThunderbirdEmailCMD + +*----------------------------------------------------------- +*!* oEmail.Send +*!* > EmailCreateCfg +*!* > EmailSetConfiguration +*!* > EmailSetHeader +*!* > EmailSetParameters +*!* > EmailSend +Define Class oCDO As oEmail + + Protected oMsg, oCfg + + +* Message attributes + oMsg = Null +* Configuration object fields values + oCfg = Null + + Procedure Init + DoDefault() + Local loEx As Exception + + This.lCanDisplayEmailWithoutInfo = .F. + +* Optional. Creates your own X-MAILER field in the header + This.cXMailer = "VFP CDO 2000 mailer Ver 1.1.100 2010" + Endproc +*------------------------------------------------------- + Procedure EmailCreateCfg + Local loEx As Exception + Try + This.oMsg = Createobject("CDO.Message") + This.oCfg = Createobject("CDO.Configuration") + This.oMsg.Configuration = This.oCfg + Catch To loEx + This.AddError('ERROR: CDO Configuration could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + Endproc + +*------------------------------------------------------- +* Populate configuration object + Procedure EmailSetConfiguration + With This.oCfg.Fields +* Send using SMTP server + .Item(cdoSendUsingMethod) = cdoSendUsingPort + .Item(cdoSMTPServer) = This.cServer + .Item(cdoSMTPServerPort) = This.nServerPort + .Item(cdoSMTPConnectionTimeout) = This.nConnectionTimeout + + .Item(cdoSMTPAuthenticate) = This.nAuthenticate + If This.nAuthenticate = cdoBasic + .Item(cdoSendUserName) = This.cUserName + .Item(cdoSendPassword) = This.cPassword + Endif + .Item(cdoURLGetLatestVersion) = This.lURLGetLatestVersion + .Item(cdoSMTPUseSSL) = This.lUseSSL + + .Update() + Endwith + Endproc + +*------------------------------------------------------- +* Set mail header fields, if necessary. For now sets X-MAILER, if specified + Procedure EmailSetHeader + Local loHeader + If Not Empty(This.cXMailer) + loHeader = This.oMsg.Fields + With loHeader + .Item(cdoXMailer) = This.cXMailer + .Update() + Endwith + Endif + Endproc + +*------------------------------------------------------- + Procedure EmailSetParameters +* Fill message attributes + Local lcMailHeader + With This.oMsg + + .From = This.cFrom + .ReplyTo = This.cReplyTo + + .To = This.cTo + .CC = This.cCC + .BCC = This.cBCC + .Subject = This.cSubject + +* Create HTML body from external HTML (file, URL) + If Not Empty(This.cHtmlBodyUrl) + .CreateMHTMLBody(This.cHtmlBodyUrl) + Endif + +* Send HTML body. Creates TextBody as well + If Not Empty(This.cHtmlBody) + .HtmlBody = This.cHtmlBody + Endif + +* Send Text body. Could be different from HtmlBody, if any + If Not Empty(This.cTextBody) + .TextBody = This.cTextBody + Endif + + If Not Empty(This.cCharset) + If Not Empty(.HtmlBody) + .HtmlBodyPart.Charset = This.cCharset + Endif + + If Not Empty(.TextBody) + .TextBodyPart.Charset = This.cCharset + Endif + Endif + + If Not Empty(This.cCharset) + .BodyPart.Charset = This.cCharset + Endif + +* Priority + If Not Empty(This.cPriority) + lcMailHeader = "urn:schemas:mailheader:" + .Fields(lcMailHeader + "Priority") = Lower(This.cPriority) + .Fields(lcMailHeader + "Importance") = Lower(This.cPriority) + Do Case + Case This.cPriority = "High" + .Fields(lcMailHeader + "X-Priority") = 1 && 5=Low, 3=Normal, 1=High + Case This.cPriority = "Normal" + .Fields(lcMailHeader + "X-Priority") = 3 && 5=Low, 3=Normal, 1=High + Case This.cPriority = "Low" + .Fields(lcMailHeader + "X-Priority") = 5 && 5=Low, 3=Normal, 1=High + Endcase + .Fields.Update() + Endif + Endwith + Endproc + + Procedure EmailAddAttachment + Lparameters tcAttachment + + This.oMsg.AddAttachment(m.tcAttachment) + Endproc + +*------------------------------ + Procedure EmailClearMessage + This.oMsg = Null + This.oCfg = Null + Endproc && EmailClearMessage + +*---------------------------------------------------- +* Send message + Procedure EmailSend + This.oMsg.Send() + Endproc + +Enddefine && oCDO + +Define Class oOutlook As oEmail + oOutlook = Null + oMailItem = Null + + Procedure Init + DoDefault() + Local loEx As Exception + Try + This.oOutlook = Createobject('outlook.application') + Catch To loEx + This.AddError('ERROR: OUTLOOK could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + + Endproc && Init +************************************ + Procedure EmailCreateCfg + Local loEx As Exception + + If !Isnull(This.oOutlook) + Try +* Create Mail Item + This.oMailItem = This.oOutlook.CreateItem(0) + Catch To loEx + This.AddError('ERROR: OUTLOOK MailItem could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + Endif + Endproc && EmailCreateCfg + +************************************ + Procedure EmailSetParameters + Local lcAttachment, lnAttachment + With This.oMailItem + .To = This.cTo + .Subject = This.cSubject + .CC = This.cCC + .BCC = This.cBCC + .BodyFormat = olFormatHTML + .HtmlBody = This.cHtmlBody + Endwith + Endproc && EmailSetParameters + + Procedure EmailAddAttachment + Lparameters tcAttachment + + This.oMailItem.Attachments.Add(m.tcAttachment) + Endproc + +*------------------------------ + Procedure EmailClearMessage + This.oMailItem = Null + Endproc && EmailClearMessage + +*------------------------------ + Procedure EmailSend + Local llEmailDisplay, llEmailPreview, loDefaultFolder, loMailItem, loNameSpace + loMailItem = This.oMailItem +* Display Sent folder only for the first email, so that the emails will get send + If This.lFirstEmail + loNameSpace = This.oOutlook.getnamespace('MAPI') + loDefaultFolder = loNameSpace.GetDefaultFolder(olFolderSentMail) && SentMail + loDefaultFolder.Display() + Endif + +* Daca nu sunt completate toate informatiile arat emailul utilizatorului + llEmailDisplay = This.lDisplayEmailWithoutInfo And (Empty(This.cTo) Or Empty(This.cSubject) Or (!This.lSendWithoutAttachments And Empty(This.EmailGetAttachmentsNumber()))) + llEmailPreview = This.lEmailPreview + +&& Daca nu arat fiecare email, il trimit automat + If m.llEmailPreview Or m.llEmailDisplay + loMailItem.Display + Else + loMailItem.Send + Endif + + This.oMailItem = Null + loMailItem = "" + Endproc && EmailSend + +Enddefine &&oOutlook + +*--------------------------------- +Define Class oMapi As oEmail + snd = .F. + rcp = .F. + att = .F. + +*------------------------------------------------------- + Procedure EmailCreateCfg + Local loEx As Exception + Try + This.snd = Createobject("TRecipients") + This.rcp = Createobject("TRecipients") + This.att = Createobject("TAttachments") + Catch To loEx + This.AddError('ERROR: Mapi Configuration could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + Endproc + +*------------------------------------------------------- + Procedure EmailSetParameters + Local lcRecipient, lnRecipient, lnRecipients + + This.AddSender(This.cFromName, This.cFrom) + This.AddRecipient(This.cTo, MAPI_TO) + This.AddRecipient(This.cCC, MAPI_CC) + This.AddRecipient(This.cBCC, MAPI_BCC) + Endproc + + Procedure AddSender(lcSndName, lcSndAddr) + Local lnClass + lnClass = MAPI_ORIG + If Type("lcSndAddr") <> "C" + lcSndAddr = lcSndName + Endif + + This.snd.AppendItem(m.lnClass, lcSndName, lcSndAddr) + Endproc && AddSender + +* --------------------------- +* Fill To, CC, BCC + Procedure AddRecipient + Lparameters tcRecipientList, tnClass +* tcRecipientpList: comma delimited list of recipients +* tnClass: MAPI_TO, MAPI_CC, MAPI_BCC + + Local lcRecipientAddress, lcRecipientList, lcRecipientName, lnClass, lnRecipient, lnRecipients + lnClass = Iif(Type('tnClass') = 'N', m.tnClass, MAPI_TO) + lcRecipientList = Iif(Type('tcRecipientList') = 'C', m.tcRecipientList, '') + lnRecipients = Getwordcount(m.lcRecipientList, [,]) + For lnRecipient = 1 To m.lnRecipients + lcRecipientAddress = Getwordnum(m.lcRecipientList, m.lnRecipient, [,]) + lcRecipientName = m.lcRecipientAddress + This.rcp.AppendItem(m.lnClass, m.lcRecipientName, m.lcRecipientAddress) + Endfor + Endproc && AddRecipient + + Procedure EmailAddAttachment + Lparameters tcAttachment + Return This.att.AppendItem(m.tcAttachment) + Endproc + + Procedure EmailClearMessage + This.rcp.ClearItems + This.att.ClearItems + Endproc && EmailClearMessage + + +*---------------------------------------------------- +* Send message + Procedure EmailSend + + Local lcMapiMessage, loSubject, loBody, ii, lnResult, lcStoredPath + loSubject = Createobject("PChar", This.cSubject) + loBody = Createobject("PChar", This.cHtmlBody) + lcStoredPath = Sys(5) + Sys(2003) + +* assembling MapiMessage structure + lcMapiMessage = num2dword(0) + ; + num2dword(loSubject.getAddr()) + num2dword(loBody.getAddr()) + ; + num2dword(0) + num2dword(0) + num2dword(0) + num2dword(0) + ; + num2dword(This.snd.getAddr()) + ; + num2dword(This.rcp.ItemCount) + num2dword(This.rcp.getAddr()) + ; + num2dword(This.att.ItemCount) + ; + num2dword(Iif(This.att.ItemCount = 0, 0, This.att.getAddr())) + + Declare Integer MAPISendMail In mapi32; + INTEGER lhSession, Integer ulUIParam, String @lpMessage, ; + INTEGER flFlags, Integer ulReserved + + +* Daca nu sunt completate toate informatiile arat emailul utilizatorului + llEmailDisplay = This.lDisplayEmailWithoutInfo And (Empty(This.cTo) Or Empty(This.cSubject) Or (!This.lSendWithoutAttachments And Empty(This.EmailGetAttachmentsNumber()))) + llEmailPreview = This.lEmailPreview + Set Step On +&& Daca nu arat fiecare email, il trimit automat + If m.llEmailPreview Or m.llEmailDisplay + lnResult = MAPISendMail(0, 0, @lcMapiMessage, MAPI_DIALOG, 0) + Else + lnResult = MAPISendMail(0, 0, @lcMapiMessage, 0, 0) + Endif + If (m.lnResult <> 0) + This.AddError("ERROR : Message not sent.") + Endif + + Set Default To (lcStoredPath) + Return (lnResult = 0) && sendmessage + Endproc + +Enddefine && oMapi + +*------------------------------------------------------ +* oMapi helper classes +Define Class TRecipients As Custom && array of recipients + ItemCount = 0 + Dimen arrRecip[1] + RcpsBuffer = .F. + + Procedure Destroy + This.UnlockData + This.ClearItems + + Procedure getAddr + This.LockData + Return This.RcpsBuffer.getAddr() + + Procedure LockData + This.UnlockData + + Local lcBuffer, ii + lcBuffer = "" + For ii = 1 To This.ItemCount + lcBuffer = lcBuffer + This.arrRecip[ii].GetValue() + Endfor + This.RcpsBuffer = Createobject("PChar", lcBuffer) + + Procedure UnlockData + If Type("THIS.RcpsBuffer") = "O" + This.RcpsBuffer.ReleaseString + This.RcpsBuffer = .F. + Endif + + Procedure AppendItem(lnClass, lcName, lcAddress) + This.ItemCount = This.ItemCount + 1 + Dimen This.arrRecip[THIS.ItemCount] + This.arrRecip[THIS.ItemCount] = Createobject("TRecipient", lnClass, lcName, lcAddress) + + Procedure ClearItems + Local ii + For ii = 1 To This.ItemCount + This.arrRecip[ii].ReleaseRecipient + This.arrRecip[ii] = .F. + Endfor + This.ItemCount = 0 + Dimen This.arrRecip[1] +Enddefine && trecipients + +Define Class TRecipient As Custom + RcpClass = 0 && 0-sender, 1-primary rec., 2-copy rec., 3-blind copy rec. + RcpName = .F. + RcpAddress = .F. + RcpBuffer = "" + + Procedure Init(lnClass, lcName, lcAddress) + This.InitRecipient(lnClass, lcName, lcAddress) + + Procedure Destroy + This.ReleaseRecipient + + Procedure ReleaseRecipient + If Type("THIS.RcpAddress") = "O" + This.RcpAddress.ReleaseString + This.RcpAddress = .F. + Endif + If Type("THIS.RcpName") = "O" + This.RcpName.ReleaseString + This.RcpName = .F. + Endif + + Procedure InitRecipient(lnClass, lcName, lcAddress) + This.ReleaseRecipient + This.RcpName = Createobject("PChar", lcName) + This.RcpAddress = Createobject("PChar", lcAddress) + + This.RcpBuffer = num2dword(0) + ; + num2dword(lnClass) + ; + num2dword(This.RcpName.getAddr()) + ; + num2dword(This.RcpAddress.getAddr()) + ; + num2dword(0) + num2dword(0) + + Function GetValue + Return This.RcpBuffer +Enddefine && trecipient + +Define Class TAttachments As Custom + ItemCount = 0 + Dimen arrAttach[1] + AttsBuffer = .F. + + Procedure Destroy + This.UnlockData + This.ClearItems + + Procedure getAddr + This.LockData + Return This.AttsBuffer.getAddr() + + Procedure LockData + This.UnlockData + + Local lcBuffer, ii + lcBuffer = "" + For ii = 1 To This.ItemCount + lcBuffer = lcBuffer + This.arrAttach[ii].GetValue() + Endfor + This.AttsBuffer = Createobject("PChar", lcBuffer) + + Procedure UnlockData + If Type("THIS.AttsBuffer") = "O" + This.AttsBuffer.ReleaseString + This.AttsBuffer = .F. + Endif + + Procedure AppendItem(lcFilename) + If File(lcFilename) + This.ItemCount = This.ItemCount + 1 + Dimen This.arrAttach[THIS.ItemCount] + + This.arrAttach[THIS.ItemCount] = ; + CREATEOBJECT("TAttachment", lcFilename, This.ItemCount) + + Return Type("THIS.arrAttach[THIS.ItemCount]") = "O" + Else + Return .F. + Endif + + Procedure ClearItems + Local ii + For ii = 1 To This.ItemCount + This.arrAttach[ii].ReleaseAttachment + This.arrAttach[ii] = .F. + Endfor + This.ItemCount = 0 + Dimen This.arrAttach[1] +Enddefine && tattachments + +Define Class TAttachment As Custom + AttBuffer = "" + AttFilename = .F. + + Procedure Init(lcFilename, nPosition) + This.InitAttachment(m.lcFilename, m.nPosition) + + Procedure Destroy + This.ReleaseAttachment + + Procedure InitAttachment(lcFilename, nPosition) +*!* typedef struct { +*!* ULONG ulReserved; +*!* ULONG flFlags; +*!* ULONG nPosition; +*!* LPTSTR lpszPathName; +*!* LPTSTR lpszFileName; +*!* LPVOID lpFileType; +*!* } MapiFileDesc, FAR *lpMapiFileDesc; + + This.ReleaseAttachment + This.AttFilename = Createobject("PChar", lcFilename) + + This.AttBuffer = num2dword(0) + num2dword(0) + ; + num2dword(m.nPosition) + ; + num2dword(This.AttFilename.getAddr()) + ; + num2dword(0) + num2dword(0) + + Procedure ReleaseAttachment + If Type("THIS.AttFilename") = "O" + This.AttFilename.ReleaseString + This.AttFilename = .F. + Endif + + Function GetValue + Return This.AttBuffer +Enddefine && tattachment + +Define Class PChar As Custom + Protected Hmem + + Procedure Init(lcString) + This.Hmem = 0 + This.setValue(lcString) + + Procedure Destroy + This.ReleaseString + + Function getAddr && returns a pointer to the string + Return This.Hmem + + Function GetValue && returns string value + Local lnSize, lcBuffer + lnSize = This.getAllocSize() + lcBuffer = Space(lnSize) + + If This.Hmem <> 0 + Declare RtlMoveMemory In kernel32 As MemToStr; + STRING @, Integer, Integer + = MemToStr(@lcBuffer, This.Hmem, lnSize) + Endif + Return lcBuffer + + Function getAllocSize && returns allocated memory size (string length) + Declare Integer GlobalSize In kernel32 Integer Hmem + Return Iif(This.Hmem = 0, 0, GlobalSize(This.Hmem)) + + Procedure setValue(lcString) && assigns new string value + #Define GMEM_FIXED 0 + This.ReleaseString + + Declare Integer GlobalAlloc In kernel32 Integer, Integer + Declare RtlMoveMemory In kernel32 As StrToMem; + INTEGER, String @, Integer + + Local lnSize + lcString = lcString + Chr(0) + lnSize = Len(lcString) + This.Hmem = GlobalAlloc(GMEM_FIXED, lnSize) + If This.Hmem <> 0 + = StrToMem(This.Hmem, @lcString, lnSize) + Endif + + Procedure ReleaseString && releases allocated memory + If This.Hmem <> 0 + Declare Integer GlobalFree In kernel32 Integer + = GlobalFree(This.Hmem) + This.Hmem = 0 + Endif +Enddefine && pchar + +Function num2dword(lnValue) +#Define m0 256 +#Define m1 65536 +#Define m2 16777216 +Local b0, b1, b2, b3 +b3 = Int(lnValue / m2) +b2 = Int((lnValue - b3 * m2) / m1) +b1 = Int((lnValue - b3 * m2 - b2 * m1) / m0) +b0 = Mod(lnValue, m0) +Return Chr(b0) + Chr(b1) + Chr(b2) + Chr(b3) +Endfunc && num2dword + + + +Procedure WriteLog + Lparameters tcMesaj + lcLogFile = Addbs(Justpath(Sys(16,0))) + 'verificare_roris_ecluze.log' + Strtofile(Transform(Datetime()) + ' ' + Transform(m.tcMesaj) + Chr(13), lcLogFile, 1) +Endproc && WriteLog diff --git a/Rapoarte/factura_acn.frx b/Rapoarte/factura_acn.frx new file mode 100644 index 0000000..f25bb8f Binary files /dev/null and b/Rapoarte/factura_acn.frx differ diff --git a/Rapoarte/factura_acn_orig.frx b/Rapoarte/factura_acn_orig.frx new file mode 100644 index 0000000..c147bc2 Binary files /dev/null and b/Rapoarte/factura_acn_orig.frx differ diff --git a/Rapoarte/iso2007.jpg b/Rapoarte/iso2007.jpg new file mode 100644 index 0000000..860e6e3 Binary files /dev/null and b/Rapoarte/iso2007.jpg differ diff --git a/Rapoarte/logo.jpg b/Rapoarte/logo.jpg new file mode 100644 index 0000000..232c1d7 Binary files /dev/null and b/Rapoarte/logo.jpg differ diff --git a/Rapoarte/logo.png b/Rapoarte/logo.png new file mode 100644 index 0000000..7c10660 Binary files /dev/null and b/Rapoarte/logo.png differ diff --git a/Rapoarte/recapitulatie_alte.frx b/Rapoarte/recapitulatie_alte.frx new file mode 100644 index 0000000..d1eb33d Binary files /dev/null and b/Rapoarte/recapitulatie_alte.frx differ diff --git a/Rapoarte/recapitulatie_cheiaj.frx b/Rapoarte/recapitulatie_cheiaj.frx new file mode 100644 index 0000000..821d318 Binary files /dev/null and b/Rapoarte/recapitulatie_cheiaj.frx differ diff --git a/Rapoarte/recapitulatie_penalitati.frx b/Rapoarte/recapitulatie_penalitati.frx new file mode 100644 index 0000000..995cfda Binary files /dev/null and b/Rapoarte/recapitulatie_penalitati.frx differ diff --git a/Rapoarte/recapitulatie_tranzit.frx b/Rapoarte/recapitulatie_tranzit.frx new file mode 100644 index 0000000..8e89ac4 Binary files /dev/null and b/Rapoarte/recapitulatie_tranzit.frx differ diff --git a/Rapoarte/sit_cheiaj4.frx b/Rapoarte/sit_cheiaj4.frx new file mode 100644 index 0000000..636829f Binary files /dev/null and b/Rapoarte/sit_cheiaj4.frx differ diff --git a/Rapoarte/sit_cheiaj5.frx b/Rapoarte/sit_cheiaj5.frx new file mode 100644 index 0000000..e9fefa0 Binary files /dev/null and b/Rapoarte/sit_cheiaj5.frx differ diff --git a/Rapoarte/sit_tranzit3.frx b/Rapoarte/sit_tranzit3.frx new file mode 100644 index 0000000..74a9e1e Binary files /dev/null and b/Rapoarte/sit_tranzit3.frx differ diff --git a/Rapoarte/stampila.jpg b/Rapoarte/stampila.jpg new file mode 100644 index 0000000..91f0212 Binary files /dev/null and b/Rapoarte/stampila.jpg differ diff --git a/Rapoarte/stampila.png b/Rapoarte/stampila.png new file mode 100644 index 0000000..415a45d Binary files /dev/null and b/Rapoarte/stampila.png differ diff --git a/Rapoarte/stampila.svg b/Rapoarte/stampila.svg new file mode 100644 index 0000000..ba064c0 --- /dev/null +++ b/Rapoarte/stampila.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + C.N. A.C.N. S.A. CONSTANȚADIRECȚIA ECONOMICĂDEPARTAMENTCONTABILITATE-FINANCIAR + + + + diff --git a/Rapoarte/stampila_old.jpg b/Rapoarte/stampila_old.jpg new file mode 100644 index 0000000..0cec420 Binary files /dev/null and b/Rapoarte/stampila_old.jpg differ diff --git a/changelog_roaacnpro.txt b/changelog_roaacnpro.txt new file mode 100644 index 0000000..67eb580 --- /dev/null +++ b/changelog_roaacnpro.txt @@ -0,0 +1,1198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cheiaj.prg b/cheiaj.prg new file mode 100644 index 0000000..50c1f35 --- /dev/null +++ b/cheiaj.prg @@ -0,0 +1,14 @@ +SELECT .F. as ales, v.declaratio, vs.name as nava, NVL(b.arrival_ti, {//::}) as datai, NVL(b.departure_, {//::}) as datap, ; + NVL(tn.id, 0) as tipn_id, NVL(tn.tipn, SPACE(30)) as tipn, CAST(NVL(vs.lbt, 0) as n(9,2)) as lbp, ; + CAST(NVL(vs.length, 0) as n(12,2)) as lung, CAST(NVL(vs.trn, 0) as n(9,2))as trn, CAST(NVL(vs.gross_tonn, 0) as n(12,2)) as cap, ; + CAST(NVL(vs.horsepower, 0) as n(12,0)) as cp, ; + NVL(rp.name, SPACE(30)) as port ; + from ips_berthings b JOIN ips_voyages v ON b.voy_id = v.id ; + LEFT JOIN ips_vessels vs ON b.ves_id = vs.id ; + LEFT JOIN ips_vessel_types vtp1 ON vs.vtp_id = vtp1.id ; + LEFT JOIN ips_vessel_types vtp ON vtp1.grp_id = vtp.id ; + LEFT JOIN ips_tipn tn on vtp.aramis_typ = tn.id ; + LEFT JOIN ips_route_points rp ON b.rpt_id = rp.id ; + WHERE v.declaratio = '19A0456' ; + ORDER BY b.arrival_ti ; + INTO CURSOR cNavePort READWRITE \ No newline at end of file diff --git a/cheiaj_istoric_declaratii.sql b/cheiaj_istoric_declaratii.sql new file mode 100644 index 0000000..10ee428 --- /dev/null +++ b/cheiaj_istoric_declaratii.sql @@ -0,0 +1,15 @@ +-- completare ips_regdoc cu nave lipsa din istorice cu mai multe declaratii + +merge into ips_regdoc a using +(select bdv.* from +(Select v.numar_act, v.data_act as data, 1 as tip, v.id_part as id_client, v.id_ctr as id_contract, v.curs, v.id_vanzare, vv.declaratio as document, b.id_locatia, bd.id_articol, bd.id_valuta, 1 as cantitate, Sum(bd.valftva) As valftva, Sum(bd.valtva) As valtva, Sum(bd.valctva) As valctva, Sum(bd.valval) As valval, Sum(bd.valval) As Pret + From ips_berthing_details_vanzari bd Join ips_berthings_vanzari b On bd.bv_id = b.Id + join ips_vvoyages_vanzari vv on b.vv_id = vv.vv_id + join vanzari v on vv.vz_id = v.id_vanzare + where extract(year from v.data_act) = 2020 and v.tip_factura = 1 + Group By v.numar_act, v.data_act, v.id_part, v.id_ctr, v.curs, v.id_vanzare, vv.declaratio, b.id_locatia, bd.id_articol, bd.id_valuta) bdv left join + ips_regdoc r on bdv.document = r.document and bdv.id_vanzare = r.id_vanzare and bdv.id_locatia = r.id_locatia and bdv.id_articol = r.id_articol and bdv.id_valuta = r.id_Valuta + where bdv.valftva <> nvl(r.valftva,0)) b on (a.id_vanzare = b.id_vanzare and a.document = b.document and a.id_locatia = b.id_locatia and a.id_articol = b.id_articol and a.id_Valuta = b.id_valuta) + when not matched then + insert (id_vanzare, tip, document, data, id_client, id_contract, id_locatia, id_articol, valftva, valtva, valctva, valval, Pret, curs, id_valuta, cantitate) + values (b.id_vanzare, b.tip, b.document, b.data, b.id_client, b.id_contract, b.id_locatia, b.id_articol, b.valftva, b.valtva, b.valctva, b.valval, b.valval, b.curs, b.id_valuta, b.cantitate); \ No newline at end of file diff --git a/config.fpw b/config.fpw new file mode 100644 index 0000000..2256e7b --- /dev/null +++ b/config.fpw @@ -0,0 +1,42 @@ + + +SCREEN = OFF + + +_STARTUP = "" + +* to eliminate load time: +_BROWSER = "" +_SPELLCHK = "" +_GENMENU = "" +_GENGRAPH = "" +_GENXTAB = "" +_COVERAGE = "" +_SCCTEXT = "" +_CONVERTER = "" +_TRANSPORTER = "" +_BUILDER = "" +_WIZARD = "" + +* other special CONFIG.FPW settings you may wish to change: +* (these are the defaults) +MVCOUNT = 1025 +OUTSHOW = ON + +* Set other global settings here if you like, for example: +RESOURCE = OFF +_THROTTLE = 0 + +* See the application object's SetDataSessionSets() method +* for some additional settings you +* may like to use in your config file. +* The following are not the default settings, +* (and ordinarily will be taken care of in the +* Load of private-session forms and formsets): +TALK = OFF +MULTILOCKS = ON +EXCLUSIVE = OFF +SAFETY = OFF + +STACKSIZE = 512 +CODEPAGE = 1252 \ No newline at end of file diff --git a/curatare.prg b/curatare.prg new file mode 100644 index 0000000..b6882da --- /dev/null +++ b/curatare.prg @@ -0,0 +1,501 @@ +*** IMPORT DATA + +update ips_voyage_members set vsl_id = null where id in ( +select vm.id from IPS_VOYAGE_MEMBERS vm left join ips_vessels vs on vm.vsl_id = vs.id +where vs.id is null) + +*** IPS_VOYAGE_MEMBERS +SELECT IPS_VOYAGE_MEMBERS +REINDEX +SELECT ID, COUNT(*) AS NR FROM IPS_VOYAGE_MEMBERS GROUP BY ID HAVING COUNT(*) > 1 INTO CURSOR TT +SELECT TT +SCAN + SELECT IPS_VOYAGE_MEMBERS + IF SEEK(TT.ID,'IPS_VOYAGE_MEMBERS',"ID") + DELETE + ENDIF +ENDSCAN +SELECT ips_voyage_members +COPY TO e:\voyage_members.csv TYPE csv + +*** IPS_CARGOES +SELECT IPS_CARGOES +REINDEX +SELECT ID, COUNT(*) AS NR FROM IPS_CARGOES GROUP BY ID HAVING COUNT(*) > 1 INTO CURSOR TT +SELECT TT +SCAN + SELECT IPS_CARGOES + IF SEEK(TT.ID,'IPS_CARGOES',"ID") + DELETE + ENDIF +ENDSCAN + +UPDATE IPS_CARGOES SET bill_date = {//::} WHERE LEFT(TTOC(bill_date,1),4) = '0000' +UPDATE IPS_CARGOES SET BILL_NR = STRTRAN(BILL_NR, '"', '') WHERE !EMPTY(NVL(BILL_NR, '')) + +select id, vms_id, gds_id, ballast, container, source, cty_id, destinatio, quantity, unit, bill_nr, CAST(IIF(EMPTY(NVL(bill_date,'//::')), '', TTOC(bill_date,1)) as C(20)) as bill_date, delivery from ips_cargoes INTO CURSOR tt +SELECT TT +COPY TO e:\cargoes.csv TYPE csv + +**** IPS_VESSELS +SELECT ips_vessels +REINDEX + +SELECT ID, COUNT(*) AS NR FROM IPS_VESSELS GROUP BY ID HAVING COUNT(*) > 1 INTO CURSOR TT +SELECT TT +SCAN + SELECT IPS_VESSELS + IF SEEK(TT.ID,'IPS_VESSELS',"ID") + DELETE + ENDIF +ENDSCAN + +UPDATE IPS_vessels SET registrati = STRTRAN(registrati, '"', '') WHERE !EMPTY(NVL(registrati, '')) +UPDATE IPS_vessels SET name = STRTRAN(name, '"', '') WHERE !EMPTY(NVL(name, '')) +SELECT ips_vessels +COPY TO e:\vessels.csv TYPE csv + +**** IPS_VOYAGE_LOCKS +SELECT ips_voyage_locks +REINDEX + +SELECT ID, COUNT(*) AS NR FROM ips_voyage_locks GROUP BY ID HAVING COUNT(*) > 1 INTO CURSOR TT +SELECT TT +SCAN + SELECT ips_voyage_locks + IF SEEK(TT.ID,'ips_voyage_locks',"ID") + DELETE + ENDIF +ENDSCAN + +UPDATE ips_voyage_locks SET date = {//::} WHERE LEFT(TTOC(date,1),4) = '0000' + +SELECT id, vye_id, CAST(IIF(EMPTY(NVL(date,'//::')), '', TTOC(date,1)) as C(20)) as date, rpt_id, op_min, op_prep, id_lock, lock_name FROM ips_voyage_locks INTO CURSOR tt +SELECT tt +COPY TO e:\voyage_locks.csv TYPE csv + + +**** IPS_VOYAGES +SELECT ips_voyages +REINDEX + +SELECT ID, COUNT(*) AS NR FROM ips_voyages GROUP BY ID HAVING COUNT(*) > 1 INTO CURSOR TT +SELECT TT +SCAN + SELECT ips_voyages + IF SEEK(TT.ID,'ips_voyages',"ID") + DELETE + ENDIF +ENDSCAN + +UPDATE ips_voyages SET generation = {//::} WHERE LEFT(TTOC(generation,1),4) = '0000' +UPDATE ips_voyages SET notificati = {//::} WHERE LEFT(TTOC(notificati,1),4) = '0000' +UPDATE ips_voyages SET convoy_nam = STRTRAN(convoy_nam, '"', '') WHERE !EMPTY(NVL(convoy_nam, '')) + +select id, CAST(IIF(EMPTY(NVL(generation,'//::')), '', TTOC(generation,1)) as C(20)) as generation, ctt_id, vms_id, convoy_nam, declaratio, CAST(IIF(EMPTY(NVL(notificati,'//::')), '', TTOC(notificati,1)) as C(20)) as notificati, notificat2, origin, destinatio, state from ips_voyages INTO CURSOR tt +SELECT tt +COPY TO e:\voyages.csv TYPE csv + +*** IPS_BERTHINGS +SELECT IPS_BERTHINGS +REINDEX +SELECT ID, COUNT(*) AS NR FROM IPS_BERTHINGS GROUP BY ID HAVING COUNT(*) > 1 INTO CURSOR TT +SELECT TT +SCAN + lnDuplicate = nr + FOR lnDuplicat = 1 TO lnDuplicate - 1 + SELECT IPS_BERTHINGS + IF SEEK(TT.ID,'IPS_BERTHINGS',"ID") + DELETE + ENDIF + ENDFOR +ENDSCAN + +UPDATE IPS_BERTHINGS SET arrival_ti = {//::} WHERE LEFT(TTOC(arrival_ti,1),4) = '0000' +UPDATE IPS_BERTHINGS SET departure_ = {//::} WHERE LEFT(TTOC(departure_,1),4) = '0000' + +SELECT id, CAST(IIF(EMPTY(NVL(arrival_ti,'//::')), '', TTOC(arrival_ti,1)) as C(20)) as arrival_ti, voy_id, CAST(IIF(EMPTY(NVL(departure_,'//::')), '', TTOC(departure_,1)) as C(20)) as departure_, rpt_id, ctt_id, ves_id FROM ips_berthings INTO CURSOR tt +SELECT TT +COPY TO e:\berthings.csv TYPE csv + +*** IPS_ROUTE_POINTS +SELECT IPS_ROUTE_POINTS +REINDEX +SELECT ID, COUNT(*) AS NR FROM IPS_ROUTE_POINTS GROUP BY ID HAVING COUNT(*) > 1 INTO CURSOR TT +SELECT TT +SCAN + SELECT IPS_ROUTE_POINTS + IF SEEK(TT.ID,'IPS_ROUTE_POINTS',"ID") + DELETE + ENDIF +ENDSCAN + +SELECT id, acronym, name, cnl_id FROM ips_route_points INTO CURSOR tt +SELECT TT +COPY TO e:\route_points.csv TYPE csv + + +********************************************************************************************* +********************************************************************************************* +********************************************************************************************* +*** DATABASE LOAD TABLES FROM CSV +TEXT TO lcSql noshow + +-- Create table +create table IPS_VOYAGE_MEMBERS_EXT +( + id VARCHAR2(36), + vye_id VARCHAR2(36), + vsl_id VARCHAR2(36), + ctt_id VARCHAR2(36), + ctt_id_has NUMBER(12), + ctt_id_ha2 NUMBER(12), + confirm_pa VARCHAR2(20), + dirty_tank VARCHAR2(1), + place_barg VARCHAR2(2), + rstart_id VARCHAR2(36), + rfin_id VARCHAR2(36), + distance VARCHAR2(20), + cnt_mnvr VARCHAR2(10), + distance_c VARCHAR2(20) +) +ORGANIZATION EXTERNAL +(TYPE ORACLE_LOADER +DEFAULT DIRECTORY DMPDIR +ACCESS PARAMETERS +( +RECORDS DELIMITED BY NEWLINE +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' +) +LOCATION ('voyage_members.csv') +); + + +insert into ips_voyage_members + (id, + vye_id, + vsl_id, + ctt_id, + ctt_id_has, + ctt_id_ha2, + confirm_pa, + dirty_tank, + place_barg, + rstart_id, + rfin_id, + distance, + cnt_mnvr, + distance_c) + select id, + vye_id, + vsl_id, + ctt_id, + ctt_id_has, + ctt_id_ha2, + confirm_pa, + dirty_tank, + place_barg, + rstart_id, + rfin_id, + TO_NUMBER(distance, '99999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as distance, + cnt_mnvr, + TO_NUMBER(distance_c, + '99999999D99', + 'NLS_NUMERIC_CHARACTERS=''.,''') as distance_c + from ips_voyage_members_ext; + + +-- Create table +create table IPS_CARGOES_EXT +( + id VARCHAR2(36), + vms_id VARCHAR2(36), + gds_id VARCHAR2(36), + ballast VARCHAR2(20), + container VARCHAR2(10), + source VARCHAR2(100), + cty_id VARCHAR2(36), + destinatio VARCHAR2(100), + quantity VARCHAR2(20), + unit VARCHAR2(10), + bill_nr VARCHAR2(6), + bill_date DATE, + delivery VARCHAR2(5) +) +ORGANIZATION EXTERNAL +(TYPE ORACLE_LOADER +DEFAULT DIRECTORY DMPDIR +ACCESS PARAMETERS +( +RECORDS DELIMITED BY NEWLINE +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' +(id, vms_id, gds_id, ballast, container, source, cty_id, destinatio, quantity, unit, bill_nr, bill_date date 'yyyymmddhh24miss', delivery) +) +LOCATION ('cargoes.csv') +); + + +insert into ips_cargoes + (id, + vms_id, + gds_id, + ballast, + container, + source, + cty_id, + destinatio, + quantity, + unit, + bill_nr, + bill_date, + delivery) + select id, + vms_id, + gds_id, + TO_NUMBER(ballast, '99999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as ballast, + TO_NUMBER(container, '9999', 'NLS_NUMERIC_CHARACTERS=''.,''') as container, + source, + cty_id, + destinatio, + TO_NUMBER(quantity, '99999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as quantity, + unit, + bill_nr, + bill_date, + delivery + from ips_cargoes_ext; + + +create table IPS_VESSELS_EXT +( + id VARCHAR2(36), + registrati VARCHAR2(240), + name VARCHAR2(240), + lbd VARCHAR2(20), + max_draugh VARCHAR2(20), + cruising_s VARCHAR2(20), + callsign VARCHAR2(240), + mmsi VARCHAR2(40), + length VARCHAR2(20), + breadth VARCHAR2(20), + ctt_id VARCHAR2(36), + cty_id VARCHAR2(12), + deadweight VARCHAR2(20), + gross_tonn VARCHAR2(20), + net_tonnag VARCHAR2(20), + horsepower VARCHAR2(12), + gps_from_b VARCHAR2(20), + gps_from_c VARCHAR2(20), + gps_from_s VARCHAR2(20), + inmarsat_n VARCHAR2(240), + trn VARCHAR2(20), + vtp_id VARCHAR2(36), + vtmis_id VARCHAR2(36) +) +ORGANIZATION EXTERNAL +(TYPE ORACLE_LOADER +DEFAULT DIRECTORY DMPDIR +ACCESS PARAMETERS +( +RECORDS DELIMITED BY NEWLINE +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' +) +LOCATION ('vessels.csv') +); + +insert into ips_vessels + (id, + registrati, + name, + lbd, + max_draugh, + cruising_s, + callsign, + mmsi, + length, + breadth, + ctt_id, + cty_id, + deadweight, + gross_tonn, + net_tonnag, + horsepower, + gps_from_b, + gps_from_c, + gps_from_s, + inmarsat_n, + trn, + vtp_id, + vtmis_id) + select id, + registrati, + name, + TO_NUMBER(lbd, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as lbd, + TO_NUMBER(max_draugh, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as max_draugh, + TO_NUMBER(cruising_s, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as cruising_s, + callsign, + mmsi, + TO_NUMBER(length, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as length, + TO_NUMBER(breadth, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as breadth, + ctt_id, + TO_NUMBER(cty_id, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as cty_id, + TO_NUMBER(deadweight, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as deadweight, + TO_NUMBER(gross_tonn, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as gross_tonn, + TO_NUMBER(net_tonnag, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as net_tonnag, + TO_NUMBER(horsepower, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as horsepower, + TO_NUMBER(gps_from_b, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as gps_from_b, + TO_NUMBER(gps_from_c, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as gps_from_c, + TO_NUMBER(gps_from_s, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as gps_from_s, + inmarsat_n, + TO_NUMBER(trn, '9999999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as trn, + vtp_id, + vtmis_id + from ips_vessels_ext; + + +create table IPS_VOYAGE_LOCKS_EXT +( + id VARCHAR2(36), + vye_id VARCHAR2(36), + "date" DATE, + rpt_id VARCHAR2(36), + op_min VARCHAR2(36), + op_prep VARCHAR2(36), + id_lock VARCHAR2(36), + lock_name VARCHAR2(16) +) +ORGANIZATION EXTERNAL +(TYPE ORACLE_LOADER +DEFAULT DIRECTORY DMPDIR +ACCESS PARAMETERS +( +RECORDS DELIMITED BY NEWLINE +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' +(id, vye_id, "date" date 'yyyymmddhh24miss', rpt_id, op_min, op_prep, id_lock, lock_name) +) +LOCATION ('voyage_locks.csv') +); + + +insert into ips_voyage_locks + (id, vye_id, "date", rpt_id, op_min, op_prep, id_lock, lock_name) + select id, + vye_id, + "date", + rpt_id, + TO_NUMBER(op_min, '99999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as op_min, + TO_NUMBER(op_prep, '99999999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') as op_prep, + id_lock, + lock_name + from ips_voyage_locks_ext; + + +create table IPS_VOYAGES_EXT +( + id VARCHAR2(36), + generation DATE, + ctt_id VARCHAR2(36), + vms_id VARCHAR2(36), + convoy_nam VARCHAR2(100), + declaratio VARCHAR2(8), + notificati DATE, + notificat2 VARCHAR2(20), + origin VARCHAR2(100), + destinatio VARCHAR2(100), + state VARCHAR2(1) +) +ORGANIZATION EXTERNAL +(TYPE ORACLE_LOADER +DEFAULT DIRECTORY DMPDIR +ACCESS PARAMETERS +( +RECORDS DELIMITED BY NEWLINE +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' +(id,generation date 'yyyymmddhh24miss',ctt_id,vms_id,convoy_nam,declaratio,notificati date 'yyyymmddhh24miss',notificat2,origin,destinatio,state) +) +LOCATION ('voyages.csv') +); + + +insert into ips_voyages + (id, + generation, + ctt_id, + vms_id, + convoy_nam, + declaratio, + notificati, + notificat2, + origin, + destinatio, + state) + select id, + generation, + ctt_id, + vms_id, + convoy_nam, + declaratio, + notificati, + notificat2, + origin, + destinatio, + TO_NUMBER(state, '9', 'NLS_NUMERIC_CHARACTERS=''.,''') as state + from ips_voyages_ext; + + +CREATE TABLE ips_berthings_ext +( + id varchar2 (36), + arrival_ti DATE , + voy_id varchar2 (36) , + departure_ DATE , + rpt_id varchar2 (36) , + ctt_id varchar2 (36) , + ves_id varchar2 (36) +) + ORGANIZATION EXTERNAL + ( TYPE ORACLE_LOADER + DEFAULT DIRECTORY "DMPDIR" + ACCESS PARAMETERS + ( RECORDS DELIMITED BY NEWLINE +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' +(id, arrival_ti date 'yyyymmddhh24miss', voy_id, departure_ date 'yyyymmddhh24miss', rpt_id, ctt_id, ves_id) + ) + LOCATION + ( 'berthings.csv' + ) + ) + ; + +insert into ips_berthings + (id, arrival_ti, voy_id, departure_, rpt_id, ctt_id, ves_id) +select id, arrival_ti, voy_id, departure_, rpt_id, ctt_id, ves_id from ips_berthings_ext; + + + +CREATE TABLE ips_route_points_ext +( + id varchar2 (36) , + acronym varchar2 (6), + name varchar2 (100), + cnl_id NUMBER (2, 0) +) + ORGANIZATION EXTERNAL + ( TYPE ORACLE_LOADER + DEFAULT DIRECTORY "DMPDIR" + ACCESS PARAMETERS + ( RECORDS DELIMITED BY NEWLINE +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' +(id, acronym, name, cnl_id) + ) + LOCATION + ( 'route_points.csv' + ) + ) + ; +INSERT INTO ips_route_points + (id, acronym, name, cnl_id) +SELECT id, acronym, name, cnl_id FROM ips_route_points_ext; + +ENDTEXT + + diff --git a/database.txt b/database.txt new file mode 100644 index 0000000..eca0ecc --- /dev/null +++ b/database.txt @@ -0,0 +1,133 @@ +ACN +create synonym ips_voyages for roris.ips_voyages; +create synonym ips_voyage_members for roris.ips_voyage_members; +create synonym ips_vessels for roris.ips_vessels; +create synonym ips_routes for roris.ips_routes; +create synonym ips_contacts for roris.ips_contacts; +create synonym ips_cargoes for roris.ips_cargoes; +create synonym ips_goods for roris.ips_goods; +create synonym ips_goods_groups for roris.ips_goods_groups; +create synonym ips_vessel_types for roris.ips_vessel_types; +create synonym ips_voyage_locks for roris.ips_voyage_locks; +create synonym ips_vas_um for roris.ips_vas_um; +create synonym ips_vas_echivalent for roris.ips_vas_echivalent; +create synonym ips_grup_tip_nave for roris.ips_grup_tip_nave; +create synonym ips_berthings for roris.ips_berthings; +create synonym ips_route_points for roris.ips_route_points; +create synonym ips_vberthings for roris.ips_vberthings; +create synonym ips_vroute_points for roris.ips_vroute_points; +create synonym ips_aramis_tip_nave for roris.ips_aramis_tip_nave; +create synonym ips_varamis_tip_nave for roris.ips_varamis_tip_nave; +create synonym ips_vvoyages for roris.ips_vvoyages; +create synonym ips_vvoyage_members for roris.ips_vvoyage_members; +create synonym ips_vvessels for roris.ips_vvessels; +create synonym ips_vroutes for roris.ips_vroutes; +create synonym ips_vcontacts for roris.ips_vcontacts; +create synonym ips_vcargoes for roris.ips_vcargoes; +create synonym ips_vgoods for roris.ips_vgoods; +create synonym ips_vgoods_groups for roris.ips_vgoods_groups; +create synonym ips_vvessel_types for roris.ips_vvessel_types; +create synonym ips_vgrupe_vase for roris.ips_vgrupe_vase; +create synonym ips_vvoyage_locks for roris.ips_vvoyage_locks; +create synonym ips_vvas_um for roris.ips_vvas_um; +create synonym ips_vvas_echivalent for roris.ips_vvas_echivalent; +create synonym ips_vgrup_tip_nave for roris.ips_vgrup_tip_nave; +create synonym ips_dane for roris.ips_dane; + +RORIS +grant select on roris.ips_route_points to mariusm_auto; +grant references on roris.ips_route_points to mariusm_auto; +grant select on roris.ips_aramis_tip_nave to mariusm_auto; +grant references on roris.ips_aramis_tip_nave to mariusm_auto; +grant select on roris.ips_berthings to mariusm_auto; +grant references on roris.ips_berthings to mariusm_auto; +grant select on roris.ips_voyages to mariusm_auto; +grant select on roris.ips_voyage_members to mariusm_auto; +grant select on roris.ips_vessels to mariusm_auto; +grant select on roris.ips_contacts to mariusm_auto; +grant select on roris.ips_cargoes to mariusm_auto; + +grant select on roris.ips_goods to mariusm_auto; +grant select on roris.ips_goods_groups to mariusm_auto; +grant select on roris.ips_vessel_types to mariusm_auto; +grant select on roris.ips_voyage_locks to mariusm_auto; + +grant select on roris.ips_vas_um to mariusm_auto; +grant select on roris.ips_vas_echivalent to mariusm_auto; +grant select on roris.ips_grup_tip_nave to mariusm_auto; +grant select on roris.ips_dane to mariusm_auto; + +grant references on roris.ips_voyages to mariusm_auto; +grant references on roris.ips_voyage_members to mariusm_auto; +grant references on roris.ips_routes to mariusm_auto; +grant references on roris.ips_contacts to mariusm_auto; +grant references on roris.ips_cargoes to mariusm_auto; + +grant references on roris.ips_goods to mariusm_auto; +grant references on roris.ips_goods_groups to mariusm_auto; +grant references on roris.ips_vessel_types to mariusm_auto; +grant references on roris.ips_voyage_locks to mariusm_auto; + +grant references on roris.ips_vas_um to mariusm_auto; +grant references on roris.ips_vas_echivalent to mariusm_auto; +grant references on roris.ips_grup_tip_nave to mariusm_auto; +grant references on roris.ips_dane to mariusm_auto; + +alter table IPS_BERTHINGS add constraint PK_BERTHINGS primary key (ID); +alter table IPS_CARGOES add constraint PK_CARGOES primary key (ID); +alter table IPS_CONTACTS add constraint PK_CONTACTS primary key (ID); +alter table IPS_COUNTRIES add constraint PK_COUNTRIES primary key (ID); +alter table IPS_GOODS add constraint PK_GOODS primary key (ID); +alter table IPS_ROUTE_POINTS add constraint PK_ROUTE_POINTS primary key (ID); +alter table IPS_ROUTES add constraint PK_ROUTES primary key (ID); +alter table IPS_VESSELS add constraint PK_VESSELS primary key (ID); +alter table IPS_VESSEL_TYPES add constraint PK_VESSEL_TYPES primary key (ID); +alter table IPS_VOYAGE_LOCKS add constraint PK_VOYAGE_LOCKS primary key (ID); +alter table IPS_VOYAGE_MEMBERS add constraint PK_VOYAGE_MEMBERS primary key (ID); +alter table IPS_VOYAGES add constraint PK_VOYAGES primary key (ID); + + + + +UPDATE IPS_TARIFE SET ID_VALUTA = 2 WHERE VALUTA LIKE 'EUR%'; +UPDATE IPS_TARIFE_DIVERSE SET ID_VALUTA = 2 WHERE NUMEVALUTA LIKE 'EUR%'; +UPDATE IPS_TARIFE_DIVERSE SET ID_VALUTA = 1 WHERE NUMEVALUTA LIKE 'USD%'; +UPDATE IPS_TARIFE_DIVERSE SET ID_VALUTA = 0 WHERE NUMEVALUTA LIKE 'LEI%' OR NUMEVALUTA IS NULL; + + + + +drop synonym ips_voyages; +drop synonym ips_voyage_members; +drop synonym ips_vessels; +drop synonym ips_routes; +drop synonym ips_contacts; +drop synonym ips_cargoes; +drop synonym ips_goods; +drop synonym ips_goods_groups; +drop synonym ips_vessel_types; +drop synonym ips_voyage_locks; +drop synonym ips_vas_um; +drop synonym ips_vas_echivalent; +drop synonym ips_grup_tip_nave; +drop synonym ips_berthings; +drop synonym ips_route_points; +drop synonym ips_vberthings; +drop synonym ips_vroute_points; +drop synonym ips_aramis_tip_nave; +drop synonym ips_varamis_tip_nave; +drop synonym ips_vvoyages; +drop synonym ips_vvoyage_members; +drop synonym ips_vvessels; +drop synonym ips_vroutes; +drop synonym ips_vcontacts; +drop synonym ips_vcargoes; +drop synonym ips_vgoods; +drop synonym ips_vgoods_groups; +drop synonym ips_vvessel_types; +drop synonym ips_vgrupe_vase; +drop synonym ips_vvoyage_locks; +drop synonym ips_vvas_um; +drop synonym ips_vvas_echivalent; +drop synonym ips_vgrup_tip_nave; +drop synonym ips_dane; \ No newline at end of file diff --git a/docs/facturare.md b/docs/facturare.md new file mode 100644 index 0000000..c3bad09 --- /dev/null +++ b/docs/facturare.md @@ -0,0 +1,79 @@ +# Fluxul facturilor (ROAACNPRO) + +Document de referință minimal: ce fișiere trebuie verificate/modificate când se schimbă +ceva la facturare. Backend = Oracle (prin `goExecutor`/`goConn`), front-end = VFP9. + +## Componentele cheie + +| Rol | Fișier | Observații | +|-----|--------|-----------| +| Formularul de facturare | clasa `frm_factura` din `Clase/oacnpro.vcx` (cod în `.vct`) | **se editează în IDE VFP**, nu manual | +| Procedurile de facturare VFP | `Programe/proceduri_acnpro.prg` | `factura_salvare_db`, `make_cfactura`, `factura_acn` | +| Rapoarte facturare | `Programe/proceduri_acnpro_rapoarte.prg` + `Rapoarte/*.frx` | relistare/printare factură | +| Calcul + salvare valori în Oracle | `PACK_FACTURARE.pck` (pachet PL/SQL) | **sursa de adevăr** pentru valori | +| Framework facturare partajat | `COMUN/programe/ofacturare_comun.prg`, `oproceduri_facturare.prg` | partajat între aplicațiile ROA; a se evita modificarea | + +## Lanțul de calcul (form → pachet → rapoarte) + +1. **Introducere / import** (`frm_factura` + `factura_acn`): articolele intră în cursorul + `crsFactura` (creat în `make_cfactura`, `proceduri_acnpro.prg`). Import din + contract/tranzit/cheiaj prin `Insert Into crsFactura(...)` în `factura_acn`. +2. **Preview pe ecran** (`frm_factura.CalculeazaPreturiRand` + `CalculeazaTotaluri`): + calculează valorile fiecărui rând **doar pentru afișare**. +3. **Salvare** (`factura_salvare_db`): copiază rândurile din `crsFactura` în cursorul + `crsvanztemp`, apoi le trimite în Oracle prin `PACK_FACTURARE` (un apel per rând). +4. **Calcul autoritar** (`PACK_FACTURARE`): recalculează și stochează + `total_fara_tva / total_tva / total_cu_tva` în `vanzari` (antet) și `vanzari_detalii` (rânduri). +5. **Relistare / lista de facturi**: `proceduri_acnpro_rapoarte.prg` și interogările din + `proceduri_acnpro.prg` (~liniile 1180, 1222) **citesc** valorile deja calculate din Oracle + (`v.total_cu_tva` etc.) — **nu recalculează**. + +> **Regula de sincronizare:** valorile reale sunt cele calculate de `PACK_FACTURARE` la salvare. +> Preview-ul din `frm_factura` trebuie să folosească **aceleași formule** ca pachetul, iar +> `factura_salvare_db` trebuie să trimită corect toți parametrii relevanți. Dacă cele două +> diverg, ecranul arată altceva decât factura salvată/relistată. + +## Structura `crsFactura` (rândul de factură în memorie) + +Definit în `make_cfactura` (`proceduri_acnpro.prg`). Câmpuri relevante: + +- `pretval` = preț unitar în valută (prețul introdus de operator; baza calculului) +- `Curs` = curs valutar; `Pret` = preț unitar în lei = `pretval * Curs` +- `cantitate` +- `proc_tva` = multiplicatorul de TVA (ex. **1.19**, nu 19). La salvare e trimis ca `proc_tvav`. +- `pret_cu_tva` N(1) = flag: 1 = `pretval` este **cu TVA inclus**, 0 = fără TVA +- Lei: `valftva` (fără TVA), `valtva` (TVA), `valctva` (cu TVA) +- Valută: `valval` (fără TVA), `tvaval` (TVA), `totval` (cu TVA) + +## Formule TVA + +Cu `proc_tva` = multiplicator (1 + cotă/100): + +- **Preț fără TVA** (`pret_cu_tva = 0`): `valftva = Pret*cant`; `valtva = valftva*(proc_tva-1)`; + `valctva = valftva + valtva`. +- **Preț cu TVA inclus** (`pret_cu_tva = 1`, calcul invers, identic cu `PACK_FACTURARE`, + `V_PRET_CU_TVA = 1`, PACK_FACTURARE.pck ~15700–15922): + `valctva = Pret*cant`; `valtva = valctva*(proc_tva-1)/proc_tva`; `valftva = valctva - valtva`. + +Rotunjiri: lei la `gnPC`, valută la `gnPval` (opțiuni firmă `PC` / `PPRETV` în pachet). + +## Unde modific când... + +- **Calculul valorilor pe rând (preview)** → `frm_factura.CalculeazaPreturiRand` (IDE VFP). +- **Ce se trimite la salvare în Oracle** → `factura_salvare_db` (insert `crsvanztemp` + apel pachet). +- **Calculul/stocarea finală a valorilor** → `PACK_FACTURARE.pck` (a se ține sincron cu preview-ul). +- **Coloane noi pe rândul de factură** → `make_cfactura` (cursor) + grid `grdFactura` (IDE VFP) + + import în `factura_acn` + insert în `factura_salvare_db`. +- **Aspectul facturii tipărite / relistare** → `proceduri_acnpro_rapoarte.prg` + `Rapoarte/*.frx`. +- **Lista de facturi** → interogările din `proceduri_acnpro.prg` (citesc din `vanzari`). + +## Exemplu real: suport „preț cu TVA inclus" (v2.0.4) + +Lanțul complet care a trebuit atins pentru o singură funcționalitate: +1. `make_cfactura` — coloană nouă `pret_cu_tva N(1)` în `crsFactura`. +2. `frm_factura.CalculeazaPreturiRand` — branch pe `pret_cu_tva` (calcul invers). +3. `grdFactura` — coloană checkbox editabilă legată de `crsFactura.pret_cu_tva`. +4. `factura_salvare_db` — trimite `Nvl(pret_cu_tva,0)` (nu mai e hardcodat 0) către pachet. + +Pachetul și rapoartele **aveau deja** suport pentru `pret_cu_tva`, deci nu au fost modificate — +exemplu tipic de „verifică întâi ce face deja pachetul/raportul". diff --git a/import_contafin/cheiaje_acn.prg b/import_contafin/cheiaje_acn.prg new file mode 100644 index 0000000..8446df6 --- /dev/null +++ b/import_contafin/cheiaje_acn.prg @@ -0,0 +1,29 @@ +CD "D:\STANDARDE\CN_A.C.N\DATEAN" + +Sele r.id as rgd_id, r.fact_id, sum(C.VALVAL) as valval, MAX(c.numevaluta) as numevaluta ; + From ips_DOCDETALIU d Join ips_CHELTDETALIU C On d.Id = C.DCD_ID; + join ips_regdoc r on d.rgd_id = r.id join ips_facturare f on r.fact_id = f.id where YEAR(f.datafact) <= 2019 and !EMPTY(NVL(r.fact_id,0)) ; + group by 1,2 ; + Order By 1 ; + Into Cursor TRECAP + +set textmerge on to memvar lcText noshow +sele trecap +scan +scat name loRec + \update ips_Regdoc set pret = <>, valval = <> where id = <> and id_vanzare = <>; + if MOD(RECNO(),1000) = 0 +\commit; + endif +endscan +\ +\update ips_regdoc r +\ set valftva = round(curs * valval, 2) +\ where exists (select id +\ from vanzari v +\ where v.id_vanzare = r.id_vanzare and v.tip_factura = 1 +\ and extract(year from v.data_act) <=2019); +set textmerge to + +strtofile(m.lcText, 'd:\cheiaje.sql') + diff --git a/importroris.pjx b/importroris.pjx new file mode 100644 index 0000000..f67b79e Binary files /dev/null and b/importroris.pjx differ diff --git a/roaacnpro.PJX b/roaacnpro.PJX new file mode 100644 index 0000000..ba2494f Binary files /dev/null and b/roaacnpro.PJX differ diff --git a/verificare_roris_ecluze.pjx b/verificare_roris_ecluze.pjx new file mode 100644 index 0000000..588f280 Binary files /dev/null and b/verificare_roris_ecluze.pjx differ diff --git a/verificare_roris_ecluze_settings.ini b/verificare_roris_ecluze_settings.ini new file mode 100644 index 0000000..d0fe793 --- /dev/null +++ b/verificare_roris_ecluze_settings.ini @@ -0,0 +1,10 @@ +[email] +mailserver = mail.acn.ro +port = 25 +username = facturare@acn.ro +password = fe1VLsNMZDZVJKW +ssl = 0 +from = compania@acn.ro +to = compania@acn.ro +cc = +bcc = mmarius28@gmail.com \ No newline at end of file diff --git a/versiune_db.txt b/versiune_db.txt new file mode 100644 index 0000000..2a0262b --- /dev/null +++ b/versiune_db.txt @@ -0,0 +1 @@ +2025_07_23_01 \ No newline at end of file