sync SVN r18143
This commit is contained in:
309
docs/wip_firma-ludipedia-conpress/deschide_firma_conpress.ps1
Normal file
309
docs/wip_firma-ludipedia-conpress/deschide_firma_conpress.ps1
Normal file
@@ -0,0 +1,309 @@
|
||||
<#
|
||||
Genereaza fisierul .sql de deschidere firma (sablon PACK_DREPTURI.FIRMEMODINSPROC pe ConPress)
|
||||
pornind de la interogarea publica ANAF (sursa de adevar pentru denumire/adresa/CAEN/data
|
||||
inregistrare -- NU certificatul ONRC, care poate avea erori de OCR/transcriere).
|
||||
|
||||
Nu scrie nimic in Oracle. Genereaza doar un fisier .sql (cu Pasii 1/2/4 tot comentati, ca in
|
||||
sablon) plecand de la schita existenta. Pasul 0 (SELECT) poate fi rulat optional daca se dau
|
||||
parametrii de conexiune -- tunelul si credentialele raman responsabilitatea lui Marius.
|
||||
|
||||
Exemplu minimal:
|
||||
.\deschide_firma_conpress.ps1 -Cui 54602536
|
||||
|
||||
Exemplu cu parametri suplimentari (banca, drepturi):
|
||||
.\deschide_firma_conpress.ps1 -Cui 54602536 -Banca1 'BANCA X' -Contb1 'RO00XXXX...' `
|
||||
-IdUtil 5 -IdGrupUseri 3 -IdUtilOp 5 -NumeUser1 Iliescu -PrenumeUser1 Vali `
|
||||
-NumeUser2 Ion -PrenumeUser2 Raluca
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory)] [string]$Cui,
|
||||
[datetime]$DataVerificare = (Get-Date),
|
||||
[int]$LunaStart = 5,
|
||||
[int]$AnStart = 2026,
|
||||
|
||||
[string]$TemplateSql = '',
|
||||
[string]$OutSql = '',
|
||||
|
||||
# --- date pe care ANAF nu le are: parametri optionali, implicit goale ("DE COMPLETAT") ---
|
||||
[string]$Antet = '',
|
||||
[string]$Banca1 = '', [string]$Contb1 = '',
|
||||
[string]$Codang = '', [string]$Nume = '', [string]$Prenume = '',
|
||||
[string]$Telefon2 = '', [string]$Telefon3 = '', [string]$Fax = '', [string]$Email = '',
|
||||
[string]$Oasp = '', [string]$CapitalSocVar = '', [string]$CapitalSocSub = '', [string]$PunctLuc = '',
|
||||
[string]$Schema = '',
|
||||
[string]$IdMama = '0', [string]$EMama = '',
|
||||
[string]$IdLoc = '', [string]$IdUtil = '',
|
||||
[string]$IdFormaJuridica = '', [string]$IdFormaOrganizare = '', [string]$IdFormaProp = '', [string]$IdTipSoc = '',
|
||||
[string]$Indicativ = '', [string]$Declarant = '', [string]$Functie = '', [string]$IndiceItm = '',
|
||||
[string]$TipModificare = '', [string]$CodFirma = '',
|
||||
[string]$NumeUser1 = '', [string]$PrenumeUser1 = '', [string]$NumeUser2 = '', [string]$PrenumeUser2 = '',
|
||||
[string]$IdGrupUseri = '', [string]$IdUtilOp = '',
|
||||
|
||||
# --- Pasul 0 (SELECT) optional -- doar daca se dau explicit parametrii de conexiune ---
|
||||
[string]$TnsAlias = 'ROA_CONPRESS',
|
||||
[string]$DbUser = '',
|
||||
[securestring]$DbPassword,
|
||||
[switch]$RunPas0,
|
||||
[string]$SqlplusPath = 'D:\ROA\instantclient_19_18\sqlplus.exe',
|
||||
[string]$TnsAdmin = 'D:\ROA\instantclient_19_18'
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
function Write-Utf8NoBom {
|
||||
# sqlplus se poticneste pe BOM (SP2-0734) chiar rulat cu @fisier - scrie fara BOM explicit
|
||||
param([string]$Path, [string[]]$Lines)
|
||||
[System.IO.File]::WriteAllText($Path, ($Lines -join "`r`n") + "`r`n", (New-Object Text.UTF8Encoding($false)))
|
||||
}
|
||||
|
||||
$ScriptDir = if ($PSScriptRoot) { $PSScriptRoot } else { Split-Path -Parent $MyInvocation.MyCommand.Path }
|
||||
if (-not $TemplateSql) { $TemplateSql = Join-Path $ScriptDir 'schita_deschidere_firma_conpress.sql' }
|
||||
|
||||
function ConvertTo-DataRo {
|
||||
param([string]$s)
|
||||
if ([string]::IsNullOrWhiteSpace($s)) { return '' }
|
||||
foreach ($fmt in @('dd.MM.yyyy', 'dd-MM-yyyy', 'yyyy-MM-dd')) {
|
||||
$d = [datetime]::MinValue
|
||||
if ([datetime]::TryParseExact($s, $fmt, [Globalization.CultureInfo]::InvariantCulture, [Globalization.DateTimeStyles]::None, [ref]$d)) {
|
||||
return $d.ToString('dd.MM.yyyy')
|
||||
}
|
||||
}
|
||||
return $s
|
||||
}
|
||||
|
||||
function Get-DateAnaf {
|
||||
param([string]$Cui, [datetime]$Data)
|
||||
$cuiNum = ($Cui -replace '[^0-9]', '')
|
||||
if ([string]::IsNullOrEmpty($cuiNum)) { throw "CUI invalid: '$Cui'" }
|
||||
$dataStr = $Data.ToString('yyyy-MM-dd')
|
||||
# JSON construit manual (payload trivial) - evita capcana ConvertTo-Json care despacheteaza
|
||||
# array-uri de un singur element cand trece prin pipeline.
|
||||
$body = '[{"cui":' + $cuiNum + ',"data":"' + $dataStr + '"}]'
|
||||
$url = 'https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva'
|
||||
# acelasi URL folosit de ANAF_CreeazaCerereANAF, COMUN\programe\validare.prg:1845
|
||||
# decodare explicita UTF-8 din raspuns (nu Invoke-RestMethod): serverul ANAF nu trimite
|
||||
# charset in Content-Type, PowerShell 5.1 ghiceste ISO-8859-1 si strica diacriticele -
|
||||
# acelasi motiv notat in validare.prg:1744 pentru clientul VFP.
|
||||
$req = [System.Net.WebRequest]::Create($url)
|
||||
$req.Method = 'POST'
|
||||
$req.ContentType = 'application/json; charset=utf-8'
|
||||
$bytesOut = [Text.Encoding]::UTF8.GetBytes($body)
|
||||
$req.ContentLength = $bytesOut.Length
|
||||
$reqStream = $req.GetRequestStream()
|
||||
$reqStream.Write($bytesOut, 0, $bytesOut.Length)
|
||||
$reqStream.Close()
|
||||
$webResp = $req.GetResponse()
|
||||
$reader = New-Object IO.StreamReader($webResp.GetResponseStream(), [Text.Encoding]::UTF8)
|
||||
$json = $reader.ReadToEnd()
|
||||
$reader.Close()
|
||||
$webResp.Close()
|
||||
return $json | ConvertFrom-Json
|
||||
}
|
||||
|
||||
function Get-DetaliiAdresa {
|
||||
param([string]$Text)
|
||||
$r = [ordered]@{ Bloc = ''; Scara = ''; Apart = '' }
|
||||
if ([string]::IsNullOrWhiteSpace($Text)) { return $r }
|
||||
if ($Text -match '(?i)BL\.?\s*([A-Z0-9\-]+)') { $r.Bloc = $Matches[1] }
|
||||
if ($Text -match '(?i)SC\.?\s*([A-Z0-9\-]+)') { $r.Scara = $Matches[1] }
|
||||
if ($Text -match '(?i)AP\.?\s*([A-Z0-9\-]+)') { $r.Apart = $Matches[1] }
|
||||
return $r
|
||||
# ponytail: heuristica regex pe text liber ANAF (bl./sc./ap.), nu un parser de adrese complet;
|
||||
# de verificat manual daca formatul sediului difera (ex. "et." lipsa, abrevieri neuzuale).
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 1. Interogare ANAF
|
||||
# ---------------------------------------------------------------------------
|
||||
Write-Host "Interogare ANAF pentru CUI $Cui (data verificare $($DataVerificare.ToString('yyyy-MM-dd')))..."
|
||||
$resp = Get-DateAnaf -Cui $Cui -Data $DataVerificare
|
||||
|
||||
if (-not $resp.found -or $resp.found.Count -eq 0) {
|
||||
Write-Warning "ANAF nu a gasit CUI $Cui (cod=$($resp.cod), message=$($resp.message)). Nu se genereaza fisierul .sql."
|
||||
if ($resp.notFound) { Write-Warning "notFound: $($resp.notFound -join ', ')" }
|
||||
return
|
||||
}
|
||||
|
||||
$item = $resp.found[0]
|
||||
$dg = $item.date_generale
|
||||
$adr = $item.adresa_sediu_social
|
||||
$tva = $item.inregistrare_scop_Tva
|
||||
|
||||
# data_inregistrare (yyyy-MM-dd) e campul structurat; stare_inregistrare (text liber cu
|
||||
# data in dd.mm.yyyy) e fallback daca lipseste.
|
||||
$dataInregRaw = if ($dg.data_inregistrare) { [string]$dg.data_inregistrare }
|
||||
elseif ($dg.stare_inregistrare -match '(\d{2}\.\d{2}\.\d{4})') { $Matches[1] }
|
||||
else { '' }
|
||||
# bl./sc./et./ap. NU sunt in adresa_sediu_social.sdetalii_Adresa (acolo apare doar
|
||||
# "CAMERA n") - sunt in date_generale.adresa, campul text liber complet.
|
||||
$detalii = Get-DetaliiAdresa -Text $dg.adresa
|
||||
|
||||
$anaf = [ordered]@{
|
||||
p_firma = $dg.denumire
|
||||
p_reg_comert = $dg.nrRegCom
|
||||
p_caen = if ($dg.cod_CAEN) { [string]$dg.cod_CAEN } else { '' }
|
||||
p_data_inreg = ConvertTo-DataRo $dataInregRaw
|
||||
p_telefon = $dg.telefon
|
||||
p_judet = $adr.sdenumire_Judet
|
||||
p_localitate = $adr.sdenumire_Localitate
|
||||
p_strada = $adr.sdenumire_Strada
|
||||
p_numar = $adr.snumar_Strada
|
||||
p_cod_postal = $adr.scod_Postal
|
||||
p_bloc = $detalii.Bloc
|
||||
p_scara = $detalii.Scara
|
||||
p_apart = $detalii.Apart
|
||||
}
|
||||
$persoanaJuridica = if ($dg.forma_organizare -match '(?i)persoana\s*juridica') { 'D' } else { '' }
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 2. Restul parametrilor - din argumentele scriptului (ANAF nu le are)
|
||||
# ---------------------------------------------------------------------------
|
||||
$params = [ordered]@{
|
||||
p_firma = @{ v = $anaf.p_firma; src = 'ANAF' }
|
||||
p_antet = @{ v = if ($Antet) { $Antet } else { $anaf.p_firma }; src = if ($Antet) { 'PARAM' } else { 'ANAF (= denumire)' } }
|
||||
p_cod_fiscal = @{ v = ($Cui -replace '[^0-9]', ''); src = 'PARAM (-Cui)' }
|
||||
p_reg_comert = @{ v = $anaf.p_reg_comert; src = 'ANAF' }
|
||||
p_caen = @{ v = $anaf.p_caen; src = 'ANAF' }
|
||||
p_data_inreg = @{ v = $anaf.p_data_inreg; src = 'ANAF (date_generale.data_inregistrare)' }
|
||||
|
||||
p_judet = @{ v = $anaf.p_judet; src = 'ANAF' }
|
||||
p_localitate = @{ v = $anaf.p_localitate; src = 'ANAF' }
|
||||
p_strada = @{ v = $anaf.p_strada; src = 'ANAF' }
|
||||
p_numar = @{ v = $anaf.p_numar; src = 'ANAF' }
|
||||
p_bloc = @{ v = $anaf.p_bloc; src = 'ANAF (heuristica text liber, DE VERIFICAT)' }
|
||||
p_scara = @{ v = $anaf.p_scara; src = 'ANAF (heuristica text liber, DE VERIFICAT)' }
|
||||
p_apart = @{ v = $anaf.p_apart; src = 'ANAF (heuristica text liber, DE VERIFICAT)' }
|
||||
p_cod_postal = @{ v = $anaf.p_cod_postal; src = 'ANAF' }
|
||||
|
||||
p_banca1 = @{ v = $Banca1; src = if ($Banca1) { 'PARAM' } else { 'DE COMPLETAT (ANAF nu da IBAN)' } }
|
||||
p_contb1 = @{ v = $Contb1; src = if ($Contb1) { 'PARAM' } else { 'DE COMPLETAT (ANAF nu da IBAN)' } }
|
||||
p_persoana_juridica = @{ v = $persoanaJuridica; src = 'ANAF (forma_organizare)' }
|
||||
p_codang = @{ v = $Codang; src = if ($Codang) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_nume = @{ v = $Nume; src = if ($Nume) { 'PARAM' } else { 'DE COMPLETAT (reprezentant legal)' } }
|
||||
p_prenume = @{ v = $Prenume; src = if ($Prenume) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_telefon = @{ v = $anaf.p_telefon; src = 'ANAF' }
|
||||
p_telefon2 = @{ v = $Telefon2; src = if ($Telefon2) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_telefon3 = @{ v = $Telefon3; src = if ($Telefon3) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_fax = @{ v = $Fax; src = if ($Fax) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_email = @{ v = $Email; src = if ($Email) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_oasp = @{ v = $Oasp; src = if ($Oasp) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_capital_soc_var = @{ v = $CapitalSocVar; src = if ($CapitalSocVar) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_capital_soc_sub = @{ v = $CapitalSocSub; src = if ($CapitalSocSub) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_punct_luc = @{ v = $PunctLuc; src = if ($PunctLuc) { 'PARAM' } else { 'gol (fara punct de lucru declarat)' } }
|
||||
p_schema = @{ v = if ($Schema) { $Schema } else { $Cui }; src = if ($Schema) { 'PARAM' } else { 'DE CONFIRMAT (implicit = CUI, corecteaza cu -Schema)' } }
|
||||
p_id_mama = @{ v = $IdMama; src = 'PARAM (implicit 0 = firma simpla)' }
|
||||
p_e_mama = @{ v = $EMama; src = if ($EMama) { 'PARAM' } else { 'gol (relevant doar daca p_id_mama <> 0)' } }
|
||||
p_id_loc = @{ v = $IdLoc; src = if ($IdLoc) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_id_util = @{ v = $IdUtil; src = if ($IdUtil) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_id_forma_juridica = @{ v = $IdFormaJuridica; src = if ($IdFormaJuridica) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_id_forma_organizare = @{ v = $IdFormaOrganizare; src = if ($IdFormaOrganizare) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_id_forma_prop = @{ v = $IdFormaProp; src = if ($IdFormaProp) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_id_tip_soc = @{ v = $IdTipSoc; src = if ($IdTipSoc) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_indicativ = @{ v = $Indicativ; src = if ($Indicativ) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_declarant = @{ v = $Declarant; src = if ($Declarant) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_functie = @{ v = $Functie; src = if ($Functie) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_indice_itm = @{ v = $IndiceItm; src = if ($IndiceItm) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_tip_modificare = @{ v = $TipModificare; src = if ($TipModificare) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_cod_firma = @{ v = $CodFirma; src = if ($CodFirma) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
|
||||
p_luna_start = @{ v = [string]$LunaStart; src = 'PARAM (implicit 5)' }
|
||||
p_an_start = @{ v = [string]$AnStart; src = 'PARAM (implicit 2026)' }
|
||||
|
||||
p_nume_user1 = @{ v = $NumeUser1; src = if ($NumeUser1) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_prenume_user1 = @{ v = $PrenumeUser1; src = if ($PrenumeUser1) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_nume_user2 = @{ v = $NumeUser2; src = if ($NumeUser2) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_prenume_user2 = @{ v = $PrenumeUser2; src = if ($PrenumeUser2) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_id_grup_useri = @{ v = $IdGrupUseri; src = if ($IdGrupUseri) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
p_id_utilop = @{ v = $IdUtilOp; src = if ($IdUtilOp) { 'PARAM' } else { 'DE COMPLETAT' } }
|
||||
}
|
||||
|
||||
# adresa compusa, ca in sablon
|
||||
$params['p_adresa'] = @{
|
||||
v = '&p_strada. nr. &p_numar., bl. &p_bloc., sc. &p_scara., et. Parter, ap. &p_apart.'
|
||||
src = 'derivat (sablon sqlplus, substituit din campurile de mai sus)'
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 3. Genereaza blocul DEFINE si scrie fisierul .sql (Pas 0-4 din sablon, neschimbate)
|
||||
# ---------------------------------------------------------------------------
|
||||
if (-not (Test-Path -LiteralPath $TemplateSql)) { throw "Sablon lipsa: $TemplateSql" }
|
||||
$templateLines = Get-Content -LiteralPath $TemplateSql -Encoding UTF8
|
||||
|
||||
$startIdx = ($templateLines | Select-String -Pattern '^DEFINE p_firma\s*=').LineNumber
|
||||
$endIdx = ($templateLines | Select-String -Pattern '^DEFINE p_id_utilop\s*=').LineNumber
|
||||
if (-not $startIdx -or -not $endIdx) { throw "Sablonul '$TemplateSql' nu are markerii asteptati (DEFINE p_firma / DEFINE p_id_utilop) - format schimbat?" }
|
||||
$startIdx = $startIdx[0] - 1
|
||||
$endIdx = $endIdx[0] - 1
|
||||
|
||||
$before = $templateLines[0..($startIdx - 1)]
|
||||
$after = $templateLines[($endIdx + 1)..($templateLines.Count - 1)]
|
||||
|
||||
$newBlock = New-Object System.Collections.Generic.List[string]
|
||||
$newBlock.Add('-- ============================================================================')
|
||||
$newBlock.Add("-- PARAMETRI GENERATI AUTOMAT de deschide_firma_conpress.ps1")
|
||||
$newBlock.Add("-- Rulat: $(Get-Date -Format 'dd.MM.yyyy HH:mm') -- CUI interogat: $Cui -- data verificare ANAF: $($DataVerificare.ToString('dd.MM.yyyy'))")
|
||||
$newBlock.Add("-- Sursa adresa/denumire/CAEN/data inregistrare: ANAF (webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva),")
|
||||
$newBlock.Add("-- NU certificatul ONRC -- ANAF e sursa de adevar (posibil OCR gresit pe certificat).")
|
||||
$newBlock.Add("-- Fiecare linie e adnotata cu sursa valorii: ANAF / PARAM (dat la rulare) / DE COMPLETAT.")
|
||||
$newBlock.Add('-- ============================================================================')
|
||||
$newBlock.Add('')
|
||||
foreach ($key in $params.Keys) {
|
||||
$entry = $params[$key]
|
||||
$val = [string]$entry.v
|
||||
$line = "DEFINE $key".PadRight(30) + "= '$val' -- $($entry.src)"
|
||||
$newBlock.Add($line)
|
||||
}
|
||||
$newBlock.Add('')
|
||||
|
||||
if (-not $OutSql) {
|
||||
$OutSql = Join-Path (Split-Path -Path $TemplateSql -Parent) "deschidere_firma_$($Cui)_$(Get-Date -Format 'yyyyMMdd_HHmmss').sql"
|
||||
}
|
||||
$outLines = $before + $newBlock + $after
|
||||
Write-Utf8NoBom -Path $OutSql -Lines $outLines
|
||||
Write-Host "Fisier generat: $OutSql"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 4. Rezumat consola: ce a venit din ANAF vs ce a ramas gol
|
||||
# ---------------------------------------------------------------------------
|
||||
Write-Host ''
|
||||
Write-Host '=== Rezumat campuri ==='
|
||||
foreach ($key in $params.Keys) {
|
||||
$entry = $params[$key]
|
||||
$shown = if ([string]::IsNullOrWhiteSpace([string]$entry.v)) { '(gol)' } else { $entry.v }
|
||||
Write-Host ("{0,-24} {1,-45} [{2}]" -f $key, $shown, $entry.src)
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 5. Pasul 0 (SELECT) optional -- doar daca s-au dat explicit parametrii de conexiune
|
||||
# ---------------------------------------------------------------------------
|
||||
if ($RunPas0) {
|
||||
if (-not $DbUser -or -not $DbPassword) {
|
||||
Write-Warning "RunPas0 cerut dar lipsesc -DbUser/-DbPassword. Tunelul/conexiunea raman responsabilitatea lui Marius -- se sare peste Pasul 0."
|
||||
}
|
||||
elseif (-not (Test-Path -LiteralPath $SqlplusPath)) {
|
||||
Write-Warning "sqlplus nu a fost gasit la '$SqlplusPath'. Se sare peste Pasul 0."
|
||||
}
|
||||
else {
|
||||
$pas0Start = ($after | Select-String -Pattern '^-- PAS 0 ').LineNumber
|
||||
$pas0End = ($after | Select-String -Pattern '^-- PAS 1 ').LineNumber
|
||||
if (-not $pas0Start -or -not $pas0End) {
|
||||
Write-Warning "Nu s-a gasit sectiunea PAS 0 in sablon. Se sare peste."
|
||||
}
|
||||
else {
|
||||
$pas0Lines = $after[($pas0Start[0] - 1)..($pas0End[0] - 2)]
|
||||
$tmpSql = [System.IO.Path]::GetTempFileName() -replace '\.tmp$', '.sql'
|
||||
Write-Utf8NoBom -Path $tmpSql -Lines ($newBlock + $pas0Lines)
|
||||
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($DbPassword)
|
||||
try {
|
||||
$plainPwd = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
|
||||
$env:TNS_ADMIN = $TnsAdmin
|
||||
& $SqlplusPath -S -L "$DbUser/$plainPwd@$TnsAlias" "@$tmpSql"
|
||||
} finally {
|
||||
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
|
||||
$plainPwd = $null
|
||||
Remove-Item -LiteralPath $tmpSql -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
# Investigare: deschidere firma noua (LUDIPEDIA S.R.L.) pe instalatia "ROA ConPress"
|
||||
|
||||
Investigatie read-only, 16.09.2026. Text FoxBin2Prg (`.??2`) resincronizat cu
|
||||
`git_sync.ps1 -ProjectRoot D:\ROA\ROASTART` inainte de cautari (0 esecuri, 410 fisiere la zi).
|
||||
Nimic din codul aplicatiei, din baza de date sau din configurari a fost modificat.
|
||||
|
||||
---
|
||||
|
||||
## 1. Localizare ROASTART
|
||||
|
||||
`D:\ROA\ROASTART` exista si e proiect VFP9, structurat identic cu ROAFACTURARE:
|
||||
`roastart.PJX/.PJT` (proiect), `roastart.pj2` (text FoxBin2Prg), foldere
|
||||
`Programe/ Clase/ Ferestre/ Rapoarte/ Locale/ COMUN/`, `changelog_roastart.txt`,
|
||||
`versiune_db.txt`. Compilat in `roastart.exe`, impachetat cu Armadillo (`ROASTART.ARM`).
|
||||
|
||||
Din `D:\ROA\ROASTART\CLAUDE.md:7`: "**ROASTART** ('ROA Romfast Applications') is a Visual
|
||||
FoxPro 9 launcher/shell for the ROA business application suite."
|
||||
|
||||
Entry point: `Programe\roastart.prg`. Formularul de fundal (mereu deschis, gazda
|
||||
proceselor de creare firma si a butoanelor de administrare) e
|
||||
`D:\ROA\ROASTART\Ferestre\frm_fundal.sc2`.
|
||||
|
||||
---
|
||||
|
||||
## 2. Fluxul "deschidere firma noua"
|
||||
|
||||
### 2.1 Declansare din UI
|
||||
Buton/tile "Firma noua" pe fundal, imagine dedicata:
|
||||
- `D:\ROA\ROASTART\roastart.pj2:401` - `.ADD('grafice\admin\firma noua.png')`
|
||||
- `D:\ROA\ROASTART\Ferestre\frm_fundal.sc2:682,684,686` - `lb_imagine.Picture = ..\grafice\admin\firma noua.png`,
|
||||
`lb_program.Caption = "Firma noua"`, `lb_explicatie.Caption = "Initializare firma noua"`.
|
||||
|
||||
### 2.2 Introducerea datelor firmei noi
|
||||
`D:\ROA\ROASTART\COMUN\clase\ofirma.vc2`, clasa `frm_firme` / metoda `do_adauga` (linia 875):
|
||||
|
||||
```
|
||||
886: Do Adauga_Modifica_Inregistrare With "firme_mini",loRec,,"INSERT"
|
||||
```
|
||||
|
||||
Editorul generic deschide un formular legat de clasa de date `cus_odata_firme_mini`
|
||||
(`ofirma.vc2:158`, mosteneste `cus_odata_firme` de la linia 7). `make_sql` din
|
||||
`cus_odata_firme` (linia 14-154) construieste apelul catre pachetul PL/SQL, pentru
|
||||
INSERT:
|
||||
|
||||
```
|
||||
130-146: lcSql = [begin pack_drepturi.firmemodinsproc(] + lcId + [,'] + lcfirma + [','] + lcantet + [','] +
|
||||
lcCodF + [','] + lcregc + [','] + && CUI, Nr. Reg. Com.
|
||||
lcbanca1..lcbanca10 / lccontb1..lccontb10 + [','] + && banci si conturi (10 seturi)
|
||||
lcadresa + [','] + lcCodFirma +
|
||||
[',] + lnpersj + [,] + lncodang + [,'] + lcnume + [','] + lcprenume +
|
||||
[','] + lctel + [','] + lctel2 + [','] + lctel3 + [','] + lcfax +
|
||||
[','] + lcemail + [','] + lcoasp + [',] + lncapsv + [,] + lncapss +
|
||||
[,'] + lcpctl + [','] + lccaen + [','] + lcschema +
|
||||
[','] + lcjudet + [','] + lclocalitate + [','] + lcstrada + [','] + lcnumar +
|
||||
[','] + lcbloc + [','] + lcscara + [',] + lnapart + [,'] + lccod_postal +
|
||||
[',] + lnidm + [,] + lne_mama + [,] + lnidl + [,] + Alltrim(Str(gnIdUtil)) +
|
||||
[,] + lnid_formaj + [,] + lnid_formao + [,] + lnid_formap + [,] + lnid_tip_soc +
|
||||
[,'] + lcindicativ + [','] + lcDeclarant + [','] + lcFunctie + [','] + lcIndiceitm +
|
||||
[',] + lcTipModificare + [,'] + lcCaenRevizie + ['); end;]
|
||||
```
|
||||
|
||||
**Procedura PL/SQL exacta: `PACK_DREPTURI.FIRMEMODINSPROC`** (pachet `PACK_DREPTURI`).
|
||||
Campurile relevante pentru certificatul RC (cu numele lor din `toRec`, linia 42-106):
|
||||
- `firma` = denumire firma, `cod_fiscal` = **CUI**, `reg_comert` = **Nr. ord. Reg. Com.**
|
||||
- `adresa`, plus componente separate: `judet`, `localitate`, `strada`, `numar`, `bloc`,
|
||||
`scara`, `apart` (apartament), `cod_postal`
|
||||
- `antet`, `cod_firma`, `persoana_juridica`, `codang`, `nume`/`prenume` (reprezentant),
|
||||
`telefon`/`telefon2`/`telefon3`, `fax`, `email`, `oasp`, `capital_soc_var`,
|
||||
`capital_soc_sub`, `punct_luc`, `caen`, `caen_revizie`, `schema` (numele schemei
|
||||
Oracle noi), `id_mama`/`e_mama` (grup de firme), `id_loc`, `id_forma_juridica`,
|
||||
`id_forma_organizare`, `id_forma_prop`, `id_tip_soc`, `indicativ`, `declarant`,
|
||||
`functie`, `indice_itm`, `tip_modificare`.
|
||||
- Etichetele din grid confirma maparea: `ofirma.vc2:567` "Cod fiscal", `ofirma.vc2:433-434`
|
||||
`reg_comert`/"cReg_Comert", `ofirma.vc2:446` "Adresa", `ofirma.vc2:672` "Firma".
|
||||
|
||||
Stergere firma (pentru referinta): `pack_drepturi.firmedelproc` - `ofirma.vc2:150`.
|
||||
|
||||
### 2.3 Crearea schemei Oracle noi (jobul propriu-zis)
|
||||
Dupa INSERT-ul cu succes, tot in `do_adauga` (`ofirma.vc2:888-907`):
|
||||
|
||||
```
|
||||
890: If Nvl(loRec.id_mama, 0) = 0 && doar firme simple/mama, nu membri de grup
|
||||
891-893: pcSchema = Alltrim(loRec.schema) ; pnAn = loRec.an ; pnLuna = loRec.luna
|
||||
895: lcSql = [begin SYN_NEWSCHEMAJOB(?pcSchema, ?pnLuna, ?pnAn); end;]
|
||||
896: llSucces = goExecutor.oExecuta(m.lcSql)
|
||||
897-905: seteaza _Screen.cNewSchema/nNewSchemaAn/nNewSchemaLuna/cTime,
|
||||
porneste _Screen.oFundal.tmrProgressBar.Enabled = .T.,
|
||||
AMESSAGEBOX('Se creeaza firma "..." in baza de date! Urmariti progresul...')
|
||||
```
|
||||
|
||||
**Procedura/job PL/SQL exacta: `SYN_NEWSCHEMAJOB(pcSchema, pnLuna, pnAn)`** - 3 parametri:
|
||||
numele schemei Oracle noi, luna si anul de start (perioada contabila initiala). Ruleaza
|
||||
asincron (job Oracle), de aceea urmatorul pas e polling.
|
||||
|
||||
### 2.4 Urmarirea progresului
|
||||
`D:\ROA\ROASTART\Ferestre\frm_fundal.sc2`, timer `tmrProgressBar.Timer` (linia 1777-1833):
|
||||
|
||||
```
|
||||
1783-1786: Private pcSchema, pnLuna, pnAn ; pcSchema = Alltrim(_Screen.cNewSchema) ...
|
||||
1792: lcSql = [SYN_NEWSCHEMAPROGRESS(?pcSchema)]
|
||||
1793: lnSucces = goExecutor.oFunction2Value(m.lcSql, @lcProgress)
|
||||
1796: IF m.lcProgress = 'FINALIZAT'
|
||||
1818-1819: AMESSAGEBOX('S-a creat firma ' + m.pcSchema + ... +
|
||||
'Puteti da drepturi utilizatorilor pe noua firma!', 0+64, 'Firma noua')
|
||||
```
|
||||
|
||||
**Functie de progres: `SYN_NEWSCHEMAPROGRESS(pcSchema)`** - intoarce un status text; cand
|
||||
devine `'FINALIZAT'` apare mesajul catre operator sa dea drepturi userilor pe firma noua
|
||||
(exact fraza pe care ati mentionat-o).
|
||||
|
||||
Comentariu din cod (`frm_fundal.sc2:1778-1780`, istoric, 21.10.2014, marius.mutu): pasul
|
||||
separat `SYN_NEWSCHEMAPOST` a fost **mutat in interiorul lui `SYN_NEWSCHEMA`** (jobul
|
||||
asincron), deci azi tot ce tine de scripturi post-import (calendar, cote TVA, plan de
|
||||
conturi) ruleaza automat in job, nu mai e apelat separat din VFP - linia veche e comentata
|
||||
(`*!*` la 1813-1816).
|
||||
|
||||
**Rezumat lant apeluri**: `do_adauga (ofirma.vc2:886)` -> editor generic "firme_mini" ->
|
||||
`PACK_DREPTURI.FIRMEMODINSPROC(...)` (INSERT firma) -> `SYN_NEWSCHEMAJOB(schema, luna, an)`
|
||||
(pornire job async creare schema) -> poll `SYN_NEWSCHEMAPROGRESS(schema)` din
|
||||
`frm_fundal.sc2` pana la `'FINALIZAT'`.
|
||||
|
||||
Nota: parametrii CUI/Reg.Com./adresa se scriu o singura data, la INSERT-ul in
|
||||
`FIRMEMODINSPROC`, in tabela master de firme (nu sunt parametri ai jobului de schema -
|
||||
jobul de schema primeste doar numele schemei si perioada contabila initiala).
|
||||
|
||||
---
|
||||
|
||||
## 3. "ROA ConPress" / "Contpress"
|
||||
|
||||
Gasit, cu ortografia **"conpress"** (litere mici, fara "Contpress"):
|
||||
`D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md:137`
|
||||
|
||||
```
|
||||
134: | Tunel / profil | Alias TNS + DSN | Schema Oracle |
|
||||
135: |---|---|---|
|
||||
136: | `vending.tlp` | `VENDING` | **`VENDING`** (parola standard ROA) |
|
||||
137: | conpress | `ROA_CONPRESS` | `xenoti` |
|
||||
139-141: Profilele Bitvise sunt in D:\roa\BITVISE\ pe statia curenta (..., `conpress.tlp`, ...)
|
||||
```
|
||||
|
||||
Interpretare (document-cadru, sectiunea 1-4 din acelasi fisier, linii 13-131): "conpress"
|
||||
e un **client/instalatie de productie separata**, nu o schema pe serverul central ROA:
|
||||
- profil tunel SSH Bitvise: `conpress.tlp` (in `D:\roa\BITVISE\`)
|
||||
- alias TNS pentru conectare prin tunel: **`ROA_CONPRESS`** (in `tnsnames.ora` din
|
||||
`instantclient_19_18` / `instantclient_11_2_0_2`)
|
||||
- DSN ODBC (32-bit, folosit de VFP): de regula acelasi nume ca aliasul TNS (nu e listat
|
||||
explicit un DSN separat pentru conpress in acest doc - vezi `ODBC.INI` la nevoie)
|
||||
- **schema Oracle**: `xenoti` (nu "conpress" - numele schemei difera de numele clientului)
|
||||
|
||||
Nu am gasit alta mentiune "ConPress"/"Contpress" in cod (`.??2`) sau in alte fisiere
|
||||
`.ini`/`.md` cautate in ROASTART sau in COMUN. **NU GASIT**: host/IP explicit al
|
||||
serverului conpress, parola, sau vreo mentiune a numelui "ConPress" in codul VFP
|
||||
propriu-zis (numele apare doar in acest document operational, nu in sursa aplicatiei).
|
||||
|
||||
Implicatie pentru sarcina cerută: pentru a deschide firma LUDIPEDIA pe instalatia
|
||||
ConPress, trebuie intai ridicat tunelul `conpress.tlp`, apoi ROASTART/aplicatia trebuie
|
||||
sa se conecteze prin DSN-ul care foloseste aliasul `ROA_CONPRESS` (deci pe schema
|
||||
`xenoti`), nu pe conexiunea centrala ROA. Procedura tunel+TNS+DSN completa e in
|
||||
`D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md:1-131` (skill asociat:
|
||||
`roa-oracle-production-access`).
|
||||
|
||||
---
|
||||
|
||||
## 4. Drepturi utilizatori/grupuri pe firma
|
||||
|
||||
### 4.1 Tabele de baza (drepturi pe programe, nu neaparat per-firma)
|
||||
`D:\ROA\ROASTART\COMUN\Drepturi utilizatori\drepturi_utilizatori.sql`:
|
||||
- `DEF_GRUP` (linia 12-21): `ID_GRUP, GRUP, STERS, ID_UTILOP, DATAORA, NR_GRUP, ID_TATA`
|
||||
- `DEF_GRUP_DREPT` (linia 66-74): `ID_GRUP, ID_PROGRAM, ID_DGD, ID_UTILOP, DATAORA, STERS`
|
||||
(drepturi grup pe program, nu pe firma)
|
||||
- `DEF_OBIECTE` (linia 112-121): drepturi pe obiecte UI per program
|
||||
|
||||
### 4.2 Ecranul de alocare drepturi PE FIRMA (raspunsul direct la cerinta)
|
||||
Meniu ROASTART: `D:\ROA\ROASTART\Programe\oproceduri_start.prg:189`
|
||||
`Procedure viz_utilgrupfirma`:
|
||||
|
||||
```
|
||||
202: pcselect1=['select id_dug,id_grup,grup,id_firma,firma from vdef_util_grup where 1=2']
|
||||
219: ofrmutilgf=Createobject("frm_utilgrupf")
|
||||
```
|
||||
|
||||
View sursa: **`vdef_util_grup`** (coloane: `id_dug`, `id_grup`, `id_firma`, `firma`).
|
||||
Grid-ul deschide un formular de adaugare dedicat:
|
||||
`D:\ROA\ROASTART\Clase\ostart_util.vc2:1102` - `DEFINE CLASS frm_utilgrupf_nou`,
|
||||
titlu `"DEFINIRE ROL PE FIRMA"` (linia 1138), cu 3 campuri combo:
|
||||
`Cb_utilizator` / `Cb_grup` (linia 1170, eticheta "Grup") / `Cb_firma` (linia 1159,
|
||||
eticheta "Firma").
|
||||
|
||||
Salvarea foloseste clasa de date `cus_odata_utilgrupf` (`ostart_util.vc2:7-51):
|
||||
|
||||
```
|
||||
32-34: lcIdUtil = Alltrim(Str(toRec.id_util)) ; lcIdGrup = Alltrim(Str(toRec.id_grup)) ;
|
||||
lcIdFirma = Alltrim(Str(toRec.id_firma))
|
||||
38-40: Case lcActiune = "INSERT"
|
||||
lcSql = [begin PACK_DREPTURI.utildreptinsproc(]+lcIdUtil+[,]+lcIdGrup+[,] +
|
||||
lcIdFirma +[,]+Alltrim(Str(gnIdUtil))+[); end;]
|
||||
```
|
||||
|
||||
**Procedura exacta: `PACK_DREPTURI.UTILDREPTINSPROC(id_util, id_grup, id_firma, id_utilop)`**
|
||||
- adauga un utilizator, intr-un grup/rol, scopat pe o firma anume. Exista si
|
||||
`UTILDREPTMODPROC` (linia 41-43, UPDATE) si `UTILDREPTDELPROC` (linia 44-46, DELETE).
|
||||
|
||||
### 4.3 Crearea/gestionarea utilizatorilor (pasul dinaintea alocarii pe firma)
|
||||
Meniu: `oproceduri_start.prg:240` `Procedure viz_utilizatori` -> `frm_utilizatori`,
|
||||
cursor sursa `vutilizatori` (linia 245).
|
||||
Salvare utilizator: `ostart_util.vc2:53-98`, clasa `cus_odata_utilizatori`:
|
||||
|
||||
```
|
||||
85: Case "INSERT": lcSql = [begin pack_drepturi.utilizatoriinsproc('] + lcutilizator +
|
||||
[','] + lcparola + [',] + lcInactiv + [,]+ Alltrim(Str(gnIdUtil))+[); end;]
|
||||
88: Case "UPDATE": pack_drepturi.utilizatorimodproc(...)
|
||||
92: Case "DELETE": pack_drepturi.utilizatoridelproc(id, id_utilop)
|
||||
```
|
||||
|
||||
**Procedura exacta: `PACK_DREPTURI.UTILIZATORIINSPROC(utilizator, parola, inactiv,
|
||||
id_utilop)`** - creeaza un cont nou. Daca "Vali Iliescu"/"Valentina Iliescu" si
|
||||
"Raluca Ion" nu exista deja ca useri, acesta e pasul care ii creeaza, inainte de a le
|
||||
aloca `UTILDREPTINSPROC` pe firma LUDIPEDIA.
|
||||
|
||||
### 4.4 Cautare nume "Vali Iliescu" / "Valentina Iliescu" / "Raluca Ion"
|
||||
Cautat in tot codul VFP text (`.??2`) din `D:\ROA\ROASTART` (inclusiv COMUN local),
|
||||
variante `Iliescu`, `ILIESCU`, `Raluca Ion`, `ION R` - **NU GASIT**. Aceste nume nu
|
||||
apar in sursa aplicatiei (asteptat: userii sunt date, nu cod, stocate in tabela Oracle
|
||||
`UTILIZATORI` / vederea `vutilizatori`). Nu am interogat nicio baza Oracle (nici centrala,
|
||||
nici ConPress) in aceasta investigatie - e in afara scopului "read-only pe cod" cerut, si
|
||||
oricum ar necesita tunelul SSH + credentiale pe care nu le am. **Pentru confirmarea
|
||||
existentei conturilor "Vali Iliescu"/"Valentina Iliescu"/"Raluca Ion" e nevoie de o
|
||||
interogare SELECT (read-only) pe `UTILIZATORI`/`vutilizatori` pe instanta corecta
|
||||
(centrala ROA sau ConPress/xenoti, dupa unde vreti sa dati drepturile) - pas separat,
|
||||
de aprobat explicit inainte de rulare.**
|
||||
|
||||
---
|
||||
|
||||
## 5. Documentatie existenta pentru "deschidere firma noua"
|
||||
|
||||
Cautat cu Grep (path explicit) in:
|
||||
- `D:\ROA\ROASTART\COMUN\` - **acest folder nu are subfolder `docs\`** (verificat cu
|
||||
`Get-ChildItem`: contine doar `clase, datemenu, Drepturi utilizatori, ferestre, grafice,
|
||||
include, meniuri, Plugin, PluginTemplate, programe, Rapoarte, utile` - fara `docs`).
|
||||
- `D:\ROA\ROAFACTURARE\COMUN\docs\` - singurul hit relevant e
|
||||
`conexiuni-tunel-ssh-odbc.md` (documenteaza tunelul/TNS/DSN, inclusiv randul "conpress",
|
||||
dar **nu** documenteaza fluxul de creare firma / SYN_NEWSCHEMAJOB / PACK_DREPTURI).
|
||||
|
||||
**NU GASIT**: niciun document `docs/*.md` cu procedura pas-cu-pas de "deschidere firma
|
||||
noua" sau de "acordare drepturi pe firma noua". Fluxul de mai sus (punctele 2 si 4) a
|
||||
fost reconstruit direct din cod, nu dintr-o documentatie existenta.
|
||||
|
||||
---
|
||||
|
||||
## Concluzie operationala (fara nicio actiune executata)
|
||||
|
||||
1. Pentru a deschide firma LUDIPEDIA S.R.L. pe instalatia ConPress trebuie lucrat pe
|
||||
conexiunea `ROA_CONPRESS`/schema `xenoti` (tunel `conpress.tlp`), nu pe conexiunea
|
||||
centrala ROA - altfel firma s-ar crea in schema gresita.
|
||||
2. Fluxul standard ROASTART (buton "Firma noua" -> editor "firme_mini" -> INSERT prin
|
||||
`PACK_DREPTURI.FIRMEMODINSPROC` -> `SYN_NEWSCHEMAJOB(schema, luna, an)` -> polling
|
||||
`SYN_NEWSCHEMAPROGRESS`) e generic si ruleaza pe orice conexiune activa, inclusiv
|
||||
ConPress - nu exista cod separat "doar pentru ConPress".
|
||||
3. Drepturile catre Vali Iliescu / Valentina Iliescu / Raluca Ion se dau prin ecranul
|
||||
"DEFINIRE ROL PE FIRMA" (`frm_utilgrupf_nou`), care cheama
|
||||
`PACK_DREPTURI.UTILDREPTINSPROC(id_util, id_grup, id_firma, id_utilop)` - dar
|
||||
existenta conturilor lor ca utilizatori pe instanta ConPress nu a putut fi confirmata
|
||||
din cod; e nevoie de o interogare separata pe date (aprobata explicit).
|
||||
4. Niciun script sau modificare nu a fost scris/rulat - investigatie 100% read-only pe
|
||||
cod si pe un singur document `.md`.
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,94 @@
|
||||
# Sarcina lane firma-ludipedia-contafin
|
||||
|
||||
Continuam un draft (neexecutat) de deschidere firma LUDIPEDIA S.R.L. (CUI 54602536) pe
|
||||
instalatia Oracle ROA ConPress, schema noua **LUDIPEDIA**. Fisiere deja existente, CITESTE-LE
|
||||
INTAI (nu suprascrie structura, doar completeaza):
|
||||
- `C:\Users\mmari\AppData\Local\Temp\claude\D--ROA-ROAFACTURARE\8e9e8ac8-a9eb-48de-a26c-85e5cb7a35d8\scratchpad\schita_deschidere_firma_conpress.sql`
|
||||
- `C:\Users\mmari\AppData\Local\Temp\claude\D--ROA-ROAFACTURARE\8e9e8ac8-a9eb-48de-a26c-85e5cb7a35d8\scratchpad\deschide_firma_conpress.ps1`
|
||||
|
||||
Documente de referinta (citeste-le, nu presupune):
|
||||
- `D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md` (tunel/TNS/DSN, reguli productie:
|
||||
DOAR SELECT, fara INSERT/UPDATE/DELETE/DDL)
|
||||
- `D:\ROA\ROAFACTURARE\COMUN\docs\conventie_mediu_oracle.md` (rolul schemei `CONTAFIN_ORACLE`)
|
||||
- `D:\ROA\ROAFACTURARE\COMUN\docs\local\oracle.md` (parole reale, neversionat in git — foloseste-l
|
||||
pentru user/parola de conectare)
|
||||
|
||||
## Contract de parametri al scriptului PS1 (cerinta noua a lui Marius, prioritara)
|
||||
|
||||
`deschide_firma_conpress.ps1` trebuie sa aiba ca parametri **OBLIGATORII doar 3**: codul fiscal
|
||||
(CUI), anul si luna de deschidere (start contabil). Restul (adresa, denumire, reg.com., CAEN,
|
||||
telefon, cod postal) se obtin automat din interogarea ANAF folosind CUI-ul. Codurile interne
|
||||
comune (`id_forma_juridica/organizare/prop/tip_soc`, `id_grup` uzual) gasite la pasul de
|
||||
verificare DB de mai jos devin **valori implicite hardcodate in script** (nu parametri
|
||||
obligatorii) — daca Marius vrea sa le schimbe pentru un caz special, ramane parametru optional
|
||||
cu acea valoare implicita. Datele care chiar nu au nicio sursa automata (banca/IBAN, email,
|
||||
reprezentant legal, capital social) raman parametri optionali, impliciti goale.
|
||||
|
||||
Rescrie semnatura `param(...)` a scriptului sa reflecte asta: `-Cui` (obligatoriu), `-An`
|
||||
(obligatoriu), `-Luna` (obligatoriu), apoi restul optionale cu valori implicite (codurile comune
|
||||
gasite la pasul DB, sau gol/"DE COMPLETAT" pentru ce nu are sursa). Nu schimba `-Cui/-An/-Luna`
|
||||
sa fie optionale sau sa aiba alte nume.
|
||||
|
||||
## Ce a stabilit deja Marius (nu re-investiga, doar aplica)
|
||||
|
||||
- Nu e nevoie de parola schemei `xenoti`/`LUDIPEDIA` (firma inca nu exista). Nomenclatorul de
|
||||
firme si drepturile de utilizatori sunt in schema **`CONTAFIN_ORACLE`** (comuna, o instanta pe
|
||||
fiecare server — deci exista un `CONTAFIN_ORACLE` propriu pe serverul ConPress, la care trebuie
|
||||
sa te conectezi, nu pe schema centrala ROA_CENTRAL).
|
||||
- Tabela cu nomenclatorul de firme se numeste **`nom_firme`** (nu "firme" — corecteaza daca
|
||||
gasesti alt nume real dupa ce te conectezi si verifici).
|
||||
- Parola standard pe care sistemul o pune automat la deschiderea unei firme noi este
|
||||
**`ROMFASTSOFT`** (confirmat de Marius; consistent cu `COMUN\docs\depanare-spatiu-oracle.md:59-63`
|
||||
care spune ca `PACK_UPDATE.GetSchemaParola` intoarce `'ROMFASTSOFT'` hardcodat pentru schemele
|
||||
de firma). Foloseste-o ca prima incercare daca ai nevoie sa te loghezi ca `contafin_oracle` si
|
||||
nu gasesti alta parola explicita in `oracle.md`; daca `oracle.md` are o parola specifica pentru
|
||||
`contafin_oracle` pe serverul conpress, aceea are prioritate.
|
||||
- Profilul Bitvise pentru tunelul conpress a fost gasit anterior la
|
||||
`D:\vm303-profile\conpress.tlp` (NU la calea din `conexiuni-tunel-ssh-odbc.md`,
|
||||
`D:\roa\BITVISE\`) — verifica ambele cai, foloseste-o pe cea care exista.
|
||||
|
||||
## Ce trebuie sa faci (READ-ONLY pe Oracle — doar SELECT, respecta strict regula din
|
||||
`conexiuni-tunel-ssh-odbc.md`; NU rula niciun INSERT/UPDATE/DELETE/DDL pe ConPress)
|
||||
|
||||
1. Ridica tunelul Bitvise spre conpress (`stnlc.exe -profile=<cale gasita>`), verifica portul
|
||||
1521 deschis, conecteaza-te cu `sqlplus` (sau alt client disponibil) ca user `contafin_oracle`
|
||||
pe alias TNS `ROA_CONPRESS`.
|
||||
2. `DESC nom_firme` (sau interogare pe `USER_TAB_COLUMNS`/`ALL_TAB_COLUMNS`) ca sa confirmi
|
||||
coloanele reale (asteptate: ceva similar cu `id_forma_juridica`, `id_forma_organizare`,
|
||||
`id_forma_prop`, `id_tip_soc`, `cod_fiscal`, `reg_comert`, `schema`, etc. — numele exacte pot
|
||||
diferi usor fata de ce a fost dedus anterior din codul VFP).
|
||||
3. Gaseste combinatia cea mai FRECVENTA de `id_forma_juridica/id_forma_organizare/id_forma_prop/
|
||||
id_tip_soc` in `nom_firme` (GROUP BY + COUNT, ORDER BY COUNT DESC) — Marius spune ca aceste
|
||||
coduri sunt comune intre firme, deci cea mai frecventa combinatie e raspunsul corect pentru o
|
||||
firma noua obisnuita (SRL).
|
||||
4. Verifica daca CUI `54602536` exista deja in `nom_firme` (evitare duplicat).
|
||||
5. Cauta userii "Vali"/"Valentina Iliescu" si "Raluca Ion" in tabelele/vederile de utilizatori
|
||||
din `CONTAFIN_ORACLE` (numele exact poate fi `UTILIZATORI`/`vutilizatori` sau altul — verifica
|
||||
ce exista real in schema). Daca exista, noteaza `id_util`.
|
||||
6. Gaseste `id_grup` cel mai frecvent alocat pe firme recente (tabela de drepturi grup-firma,
|
||||
posibil `DEF_GRUP`/`vdef_util_grup` sau echivalent real din schema).
|
||||
7. Inchide tunelul la final, indiferent de rezultat.
|
||||
|
||||
## Actualizeaza cele 2 fisiere existente
|
||||
|
||||
- In `schita_deschidere_firma_conpress.sql`: completeaza `p_id_forma_juridica`,
|
||||
`p_id_forma_organizare`, `p_id_forma_prop`, `p_id_tip_soc` cu combinatia gasita (noteaza sursa:
|
||||
"cea mai frecventa combinatie, X din Y firme in CONTAFIN_ORACLE.nom_firme"). Completeaza
|
||||
`p_id_util_1`/`p_id_util_2` daca userii exista, sau lasa gol cu nota clara daca nu exista inca
|
||||
(caz in care trebuie creati intai cu `PACK_DREPTURI.UTILIZATORIINSPROC`, parola implicita
|
||||
`ROMFASTSOFT`). Completeaza `p_id_grup_useri`. Actualizeaza notele de la inceputul fisierului
|
||||
(inlocuieste "NOTA IMPORTANTA 6" care spunea ca verificarea a fost blocata, cu rezultatul real).
|
||||
- In `deschide_firma_conpress.ps1`: daca ai gasit tabele/coloane cu nume diferite fata de ce
|
||||
presupunea scriptul, corecteaza. Adauga parola implicita `ROMFASTSOFT` ca valoare implicita
|
||||
pentru parametrul de parola la crearea userilor noi, daca scriptul are asa ceva.
|
||||
|
||||
## Raport obligatoriu (conform promptului de sistem)
|
||||
|
||||
Scrie `docs\raport_firma-ludipedia-contafin.md` (in radacina `D:\ROA\ROAFACTURARE`, sau daca nu
|
||||
ai drept de scriere acolo, in acelasi folder scratchpad de mai sus) cu: ce ai reusit sa
|
||||
conectezi/interoghezi, valorile exacte gasite, ce ai schimbat in cele 2 fisiere, si orice blocaj
|
||||
(parola gresita, tabela cu alt nume, tunel care nu porneste). NU inventa date daca ceva nu merge —
|
||||
raporteaza exact eroarea.
|
||||
|
||||
Ultimul tau mesaj: `GATA firma-ludipedia-contafin` sau
|
||||
`BLOCAT firma-ludipedia-contafin: <motiv intr-un rand>`.
|
||||
@@ -0,0 +1,407 @@
|
||||
-- ============================================================================
|
||||
-- SCHITA (DRAFT) - Deschidere firma noua pe instalatia Oracle ROA ConPress
|
||||
-- Fisier NEEXECUTAT, de aprobat de Marius inainte de orice rulare.
|
||||
-- Schema tinta: LUDIPEDIA (confirmat de Marius; server conpress, tunel
|
||||
-- Bitvise conpress.tlp, alias TNS + DSN ODBC ROA_CONPRESS).
|
||||
-- ============================================================================
|
||||
--
|
||||
-- NOTA IMPORTANTA 1 - conflict de regula:
|
||||
-- D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md, sectiunea
|
||||
-- "Reguli pe productie" (linia ~152), interzice explicit pe canalul manual
|
||||
-- sqlplus-pe-tunel orice altceva in afara de SELECT:
|
||||
-- "Doar SELECT. Fara INSERT/UPDATE/DELETE/DDL, fara ALTER SESSION care
|
||||
-- schimba comportament persistent."
|
||||
-- PASUL 0 din acest fisier (verificari) respecta regula (doar SELECT).
|
||||
-- PASII 1-4 (INSERT firma, job schema, drepturi utilizatori) SCRIU date si
|
||||
-- NU respecta acea regula daca ar fi rulati pe canalul manual descris in
|
||||
-- document. Nu e o decizie luata aici: Marius decide canalul de executie
|
||||
-- (cont/canal cu drept de scriere pe ConPress, sau rularea propriu-zisa
|
||||
-- prin aplicatia ROASTART, care e calea normala de productie pentru
|
||||
-- deschidere de firma).
|
||||
--
|
||||
-- NOTA IMPORTANTA 2 - stare fisier:
|
||||
-- Acesta e o SCHITA, nu un script gata de rulare. Nimeni nu s-a conectat
|
||||
-- la ConPress pentru a pregati acest fisier si nimeni nu l-a rulat.
|
||||
--
|
||||
-- NOTA IMPORTANTA 3 - parametri lipsa din certificatul ONRC (LUDIPEDIA):
|
||||
-- certificatul de inregistrare acopera doar firma, CUI, nr. registru
|
||||
-- comert, sediu social, CAEN principal si data inregistrarii. Urmatorii
|
||||
-- parametri NU sunt in certificat si trebuie completati de Marius inainte
|
||||
-- de orice executie (marcati mai jos si in sectiunea de parametri cu
|
||||
-- "-- DE COMPLETAT"):
|
||||
-- 1. Date bancare: nume banca + cont (IBAN) - pot fi 1 pana la 10 perechi
|
||||
-- (banca1..banca10 / contb1..contb10 in FIRMEMODINSPROC). Interogarea
|
||||
-- ANAF publica nu intoarce IBAN (camp gol in raspuns) - ramane de
|
||||
-- completat de Marius.
|
||||
-- 2. Telefon2, telefon3, fax, email (telefonul principal a fost completat
|
||||
-- din ANAF, vezi NOTA IMPORTANTA 5).
|
||||
-- 3. Reprezentant legal / declarant: nume, prenume, functie, cod
|
||||
-- angajat (codang), indicativ, indice_itm.
|
||||
-- 4. Incadrare firma: id_forma_juridica, id_forma_organizare,
|
||||
-- id_forma_prop, id_tip_soc (coduri interne din nomenclatoarele
|
||||
-- ROASTART - ANAF intoarce doar text descriptiv, nu codul ROASTART,
|
||||
-- vezi NOTA IMPORTANTA 5).
|
||||
-- 5. Capital social varsat (capital_soc_var) si subscris
|
||||
-- (capital_soc_sub).
|
||||
-- 6. Punct de lucru (punct_luc) - daca exista, separat de sediul social.
|
||||
-- 7. id_mama / e_mama - firma simpla sau membra a unui grup deja
|
||||
-- existent in ROASTART; daca simpla, id_mama = 0.
|
||||
-- 8. id_loc (identificator localitate in nomenclatorul ROASTART),
|
||||
-- cod_firma (cod intern firma), id_util (operatorul care introduce
|
||||
-- firma - userul care ruleaza scriptul in ROASTART), oasp
|
||||
-- (obligatie de asigurare - da/nu), tip_modificare.
|
||||
-- Lista completa de parametri "DE COMPLETAT" e reluata langa fiecare
|
||||
-- variabila din sectiunea PARAMETRI de mai jos.
|
||||
--
|
||||
-- NOTA IMPORTANTA 5 - date confirmate/completate din interogarea publica
|
||||
-- ANAF (16.09.2026, CUI 54602536, serviciu
|
||||
-- https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva - acelasi URL
|
||||
-- folosit de procedura existenta ANAF_CreeazaCerereANAF in
|
||||
-- D:\ROA\ROAFACTURARE\COMUN\programe\validare.prg:1845):
|
||||
-- - Denumire, nr. registru comert (J2026028926001) si CAEN (9329)
|
||||
-- CONFIRMATE, identice cu certificatul ONRC.
|
||||
-- - Telefon completat: 0724968582 (p_telefon).
|
||||
-- - Cod postal completat: 900217 (p_cod_postal).
|
||||
-- - Adresa CONFIRMATA in mare parte, cu O DISCREPANTA fata de certificat:
|
||||
-- certificatul avea p_numar = 'ZA', ANAF intoarce "2A" pentru acelasi
|
||||
-- sediu (judet, localitate, strada, bloc L119A, scara A, apartament 2 -
|
||||
-- identice, extrase din date_generale.adresa). Marius a confirmat ca
|
||||
-- ANAF e sursa de adevar (OCR-ul certificatului e suspect) - p_numar a
|
||||
-- fost SCHIMBAT mai jos la '2A' (fostul 'ZA' era probabil o citire
|
||||
-- gresita a lui '2A').
|
||||
-- - Data inregistrarii: certificatul avea 06.05.2026, ANAF intoarce
|
||||
-- date_generale.data_inregistrare = 2026-05-04 (04.05.2026) si
|
||||
-- stare_inregistrare = "INREGISTRAT din data 04.05.2026" - confirma
|
||||
-- aceeasi data. Marius a confirmat ANAF ca sursa de adevar - p_data_inreg
|
||||
-- a fost SCHIMBAT mai jos la '04.05.2026'.
|
||||
-- - scpTVA = false -> firma NU e inregistrata ca platitoare de TVA la
|
||||
-- data interogarii (util pentru p_persoana_juridica / incadrare, nu
|
||||
-- schimba niciun parametru din FIRMEMODINSPROC direct).
|
||||
-- - forma_organizare ANAF = "PERSOANA JURIDICA" -> confirma
|
||||
-- p_persoana_juridica = 'D'.
|
||||
-- - IBAN, email, capital social, reprezentant legal, forma juridica
|
||||
-- interna ROASTART: NU sunt in raspunsul ANAF (serviciul public nu le
|
||||
-- are) - raman "DE COMPLETAT" de Marius, nu s-au inventat valori.
|
||||
--
|
||||
-- NOTA IMPORTANTA 4 - useri drepturi:
|
||||
-- Marius a CONFIRMAT: sunt DOAR 2 useri carora li se dau drepturi pe firma
|
||||
-- noua. "Vali Iliescu" / "Valentina Iliescu" e UN SINGUR user (user 1,
|
||||
-- prescurtare a aceluiasi nume), al doilea e "Raluca Ion" (user 2).
|
||||
-- Fisierul schiteaza exact 2 blocuri la Pasul 4, dupa acelasi sablon.
|
||||
-- Niciun id_util/id_grup nu e cunoscut inca -- se completeaza DUPA ce
|
||||
-- Pasul 0 confirma daca userii exista deja in UTILIZATORI/vutilizatori.
|
||||
--
|
||||
-- NOTA IMPORTANTA 6 - verificare DB (Pasul A) INCERCATA si BLOCATA (16.09.2026):
|
||||
-- Tunelul Bitvise s-a ridicat cu succes (`stnlc.exe -profile=D:\vm303-profile\
|
||||
-- conpress.tlp`, profil gasit acolo, nu la calea din documentul de conexiuni;
|
||||
-- port 127.0.0.1:1521 confirmat deschis, alias TNS ROA_CONPRESS rezolvat
|
||||
-- spre SID=ROA). NU s-a putut merge mai departe: schema Oracle de pe
|
||||
-- ConPress e "xenoti" (conform tabelului din conexiuni-tunel-ssh-odbc.md),
|
||||
-- iar parola pentru acel user NU exista nicaieri accesibil (DSN ODBC
|
||||
-- ROA_CONPRESS are UserID/Password goale in registry, nu e in Windows
|
||||
-- Credential Manager, nu e in vreun fisier din D:\ROA cautat). Conform
|
||||
-- regulii explicite din document ("Fara ghicit parole"), verificarea NU s-a
|
||||
-- facut - nu s-a incercat nicio parola. Tunelul a fost inchis la loc dupa
|
||||
-- incercare (port 1521 reconfirmat inchis).
|
||||
-- RAMASE NEVERIFICATE, deci NEschimbate mai jos (raman "DE COMPLETAT"):
|
||||
-- - combinatia comuna id_forma_juridica/id_forma_organizare/id_forma_prop/
|
||||
-- id_tip_soc (GROUP BY pe firme) - nerulat.
|
||||
-- - existenta userilor Vali/Valentina Iliescu si Raluca Ion in
|
||||
-- UTILIZATORI/vutilizatori si id_util al lor - nerulat.
|
||||
-- - id_grup uzual din vdef_util_grup - nerulat.
|
||||
-- - unicitate CUI 54602536 in firme (nu exista deja) - nerulat.
|
||||
-- Marius (sau cine are parola schemei xenoti pe ConPress) trebuie sa ruleze
|
||||
-- Pasul 0 manual, sau sa dea parola unei sesiuni viitoare.
|
||||
--
|
||||
-- ============================================================================
|
||||
-- PARAMETRI DE SUBSTITUIRE (sqlplus DEFINE) - reutilizabile pentru orice
|
||||
-- firma noua. Valorile de mai jos vin din interogarea ANAF (sursa de adevar
|
||||
-- pentru identificare/adresa/CAEN/data inregistrare) plus certificatul ONRC
|
||||
-- pentru ce ANAF nu acopera; codurile interne ROASTART si userii raman
|
||||
-- DE COMPLETAT -- verificarea DB (NOTA IMPORTANTA 6) a fost blocata.
|
||||
-- ============================================================================
|
||||
|
||||
-- --- identificare firma (din certificatul ONRC) ---
|
||||
DEFINE p_firma = 'LUDIPEDIA S.R.L.'
|
||||
DEFINE p_antet = 'LUDIPEDIA S.R.L.'
|
||||
DEFINE p_cod_fiscal = '54602536'
|
||||
DEFINE p_reg_comert = 'J2026028926001'
|
||||
DEFINE p_caen = '9329' -- CONFIRMAT: identic in raspunsul ANAF (cod_CAEN) din 16.09.2026
|
||||
DEFINE p_data_inreg = '04.05.2026' -- SCHIMBAT din certificat (06.05.2026) -- sursa ANAF (date_generale.data_inregistrare), vezi NOTA IMPORTANTA 5
|
||||
|
||||
-- --- adresa sediu social (din certificatul ONRC) ---
|
||||
DEFINE p_judet = 'Constanta'
|
||||
DEFINE p_localitate = 'Constanta'
|
||||
DEFINE p_strada = 'Strada Baba Novac'
|
||||
DEFINE p_numar = '2A' -- SCHIMBAT din certificat ('ZA') -- sursa ANAF (date_generale.adresa / snumar_Strada), vezi NOTA IMPORTANTA 5
|
||||
DEFINE p_bloc = 'L119A'
|
||||
DEFINE p_scara = 'A'
|
||||
DEFINE p_apart = '2'
|
||||
DEFINE p_cod_postal = '900217' -- completat din ANAF (16.09.2026), nu era in certificat
|
||||
DEFINE p_adresa = '&p_strada. nr. &p_numar., bl. &p_bloc., sc. &p_scara., et. Parter, ap. &p_apart.'
|
||||
|
||||
-- --- date lipsa din certificat, obligatorii pentru FIRMEMODINSPROC ---
|
||||
DEFINE p_banca1 = '' -- DE COMPLETAT (serviciul public ANAF nu intoarce IBAN)
|
||||
DEFINE p_contb1 = '' -- DE COMPLETAT (IBAN)
|
||||
-- banca2..banca10 / contb2..contb10: DE COMPLETAT doar daca exista mai multe conturi
|
||||
DEFINE p_persoana_juridica = 'D' -- confirmat de forma_organizare ANAF = "PERSOANA JURIDICA" (D/F dupa conventia ROASTART)
|
||||
DEFINE p_codang = '' -- DE COMPLETAT (cod angajat / reprezentant)
|
||||
DEFINE p_nume = '' -- DE COMPLETAT (nume reprezentant legal / declarant)
|
||||
DEFINE p_prenume = '' -- DE COMPLETAT
|
||||
DEFINE p_telefon = '0724968582' -- completat din ANAF (16.09.2026), nu era in certificat
|
||||
DEFINE p_telefon2 = '' -- DE COMPLETAT
|
||||
DEFINE p_telefon3 = '' -- DE COMPLETAT
|
||||
DEFINE p_fax = '' -- DE COMPLETAT
|
||||
DEFINE p_email = '' -- DE COMPLETAT
|
||||
DEFINE p_oasp = '' -- DE COMPLETAT (da/nu, dupa conventia ROASTART)
|
||||
DEFINE p_capital_soc_var = '' -- DE COMPLETAT
|
||||
DEFINE p_capital_soc_sub = '' -- DE COMPLETAT
|
||||
DEFINE p_punct_luc = '' -- DE COMPLETAT (daca exista, altfel gol)
|
||||
DEFINE p_schema = 'LUDIPEDIA' -- CONFIRMAT de Marius
|
||||
DEFINE p_id_mama = '0' -- DE CONFIRMAT: 0 daca firma simpla, altfel id firma-mama existenta
|
||||
DEFINE p_e_mama = '' -- DE COMPLETAT doar daca p_id_mama <> 0
|
||||
DEFINE p_id_loc = '' -- DE COMPLETAT (id localitate in nomenclator ROASTART)
|
||||
DEFINE p_id_util = '' -- DE COMPLETAT (operatorul care introduce firma in ROASTART)
|
||||
DEFINE p_id_forma_juridica = '' -- DE COMPLETAT -- verificare DB blocata (fara parola schema xenoti), vezi NOTA IMPORTANTA 6
|
||||
DEFINE p_id_forma_organizare = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6
|
||||
DEFINE p_id_forma_prop = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6
|
||||
DEFINE p_id_tip_soc = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6
|
||||
DEFINE p_indicativ = '' -- DE COMPLETAT
|
||||
DEFINE p_declarant = '' -- DE COMPLETAT (nume declarant, poate fi = p_nume/p_prenume)
|
||||
DEFINE p_functie = '' -- DE COMPLETAT (functia declarantului)
|
||||
DEFINE p_indice_itm = '' -- DE COMPLETAT
|
||||
DEFINE p_tip_modificare = '' -- DE COMPLETAT
|
||||
DEFINE p_cod_firma = '' -- DE COMPLETAT (cod intern firma in ROASTART)
|
||||
|
||||
-- --- job schema Oracle noua (start contabil) ---
|
||||
DEFINE p_luna_start = '5' -- CONFIRMAT de Marius pentru LUDIPEDIA
|
||||
DEFINE p_an_start = '2026' -- CONFIRMAT de Marius pentru LUDIPEDIA
|
||||
|
||||
-- --- useri carora li se dau drepturi pe firma noua (DOAR 2, confirmat de Marius) ---
|
||||
DEFINE p_nume_user1 = 'Iliescu'
|
||||
DEFINE p_prenume_user1= 'Vali' -- "Vali" / "Valentina" -- confirmat: aceeasi persoana (user 1)
|
||||
DEFINE p_nume_user2 = 'Ion'
|
||||
DEFINE p_prenume_user2= 'Raluca'
|
||||
DEFINE p_id_grup_useri = '' -- DE COMPLETAT -- verificare DB blocata (fara parola schema xenoti), vezi NOTA IMPORTANTA 6
|
||||
DEFINE p_id_utilop = '' -- DE COMPLETAT (operator care insereaza drepturile, poate fi = p_id_util)
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- PAS 0 -- VERIFICARE (doar SELECT, sigur pe canalul sqlplus-tunel)
|
||||
-- Scop: (a) userii Vali/Valentina Iliescu si Raluca Ion exista deja in
|
||||
-- UTILIZATORI/vutilizatori? (b) firma cu acest CUI exista deja pe
|
||||
-- schema LUDIPEDIA (evitare duplicat)?
|
||||
-- ============================================================================
|
||||
|
||||
-- 0a. Cautare useri dupa nume (LIKE, pentru ca nu stim daca "Vali" e nume complet)
|
||||
SELECT id_util, utilizator, nume, prenume, inactiv
|
||||
FROM vutilizatori
|
||||
WHERE UPPER(nume) LIKE UPPER('%' || '&p_nume_user1.' || '%')
|
||||
OR UPPER(prenume) LIKE UPPER('%Vali%')
|
||||
OR UPPER(prenume) LIKE UPPER('%Valentina%')
|
||||
FETCH FIRST 20 ROWS ONLY;
|
||||
|
||||
SELECT id_util, utilizator, nume, prenume, inactiv
|
||||
FROM vutilizatori
|
||||
WHERE UPPER(nume) LIKE UPPER('%' || '&p_nume_user2.' || '%')
|
||||
OR UPPER(prenume) LIKE UPPER('%' || '&p_prenume_user2.' || '%')
|
||||
FETCH FIRST 20 ROWS ONLY;
|
||||
|
||||
-- 0b. Drepturi deja existente pe firme, ca sa vedem grupul folosit uzual
|
||||
-- (util pentru completarea p_id_grup_useri de mai sus)
|
||||
SELECT id_dug, id_grup, id_firma, firma
|
||||
FROM vdef_util_grup
|
||||
WHERE id_grup IN (
|
||||
SELECT DISTINCT id_grup FROM vdef_util_grup
|
||||
)
|
||||
FETCH FIRST 50 ROWS ONLY;
|
||||
|
||||
-- 0c. Firma cu acest CUI exista deja? (evitare duplicat la Pasul 1)
|
||||
SELECT id, firma, cod_fiscal, reg_comert
|
||||
FROM firme
|
||||
WHERE REGEXP_REPLACE(UPPER(TRIM(cod_fiscal)), '[^0-9]', '') =
|
||||
REGEXP_REPLACE(UPPER(TRIM('&p_cod_fiscal.')), '[^0-9]', '')
|
||||
FETCH FIRST 10 ROWS ONLY;
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- PAS 1 -- INSERT FIRMA
|
||||
-- PACK_DREPTURI.FIRMEMODINSPROC(...)
|
||||
-- Sursa semnaturii: D:\ROA\ROASTART\COMUN\clase\ofirma.vc2:130-146
|
||||
-- ATENTIE: scrie date -- NU e SELECT, vezi NOTA IMPORTANTA 1 de la inceput.
|
||||
-- Ordinea parametrilor de mai jos respecta exact ordinea din semnatura.
|
||||
-- ============================================================================
|
||||
|
||||
-- BEGIN
|
||||
-- PACK_DREPTURI.FIRMEMODINSPROC(
|
||||
-- p_id => NULL, -- id nou, generat de procedura/secventa
|
||||
-- p_firma => '&p_firma.',
|
||||
-- p_antet => '&p_antet.',
|
||||
-- p_cod_fiscal => '&p_cod_fiscal.',
|
||||
-- p_reg_comert => '&p_reg_comert.',
|
||||
-- p_banca1 => '&p_banca1.',
|
||||
-- p_contb1 => '&p_contb1.',
|
||||
-- p_banca2 => NULL, p_contb2 => NULL,
|
||||
-- p_banca3 => NULL, p_contb3 => NULL,
|
||||
-- p_banca4 => NULL, p_contb4 => NULL,
|
||||
-- p_banca5 => NULL, p_contb5 => NULL,
|
||||
-- p_banca6 => NULL, p_contb6 => NULL,
|
||||
-- p_banca7 => NULL, p_contb7 => NULL,
|
||||
-- p_banca8 => NULL, p_contb8 => NULL,
|
||||
-- p_banca9 => NULL, p_contb9 => NULL,
|
||||
-- p_banca10 => NULL, p_contb10 => NULL,
|
||||
-- p_adresa => '&p_adresa.',
|
||||
-- p_cod_firma => '&p_cod_firma.',
|
||||
-- p_persoana_juridica=> '&p_persoana_juridica.',
|
||||
-- p_codang => '&p_codang.',
|
||||
-- p_nume => '&p_nume.',
|
||||
-- p_prenume => '&p_prenume.',
|
||||
-- p_telefon => '&p_telefon.',
|
||||
-- p_telefon2 => '&p_telefon2.',
|
||||
-- p_telefon3 => '&p_telefon3.',
|
||||
-- p_fax => '&p_fax.',
|
||||
-- p_email => '&p_email.',
|
||||
-- p_oasp => '&p_oasp.',
|
||||
-- p_capital_soc_var => '&p_capital_soc_var.',
|
||||
-- p_capital_soc_sub => '&p_capital_soc_sub.',
|
||||
-- p_punct_luc => '&p_punct_luc.',
|
||||
-- p_caen => '&p_caen.',
|
||||
-- p_schema => '&p_schema.',
|
||||
-- p_judet => '&p_judet.',
|
||||
-- p_localitate => '&p_localitate.',
|
||||
-- p_strada => '&p_strada.',
|
||||
-- p_numar => '&p_numar.',
|
||||
-- p_bloc => '&p_bloc.',
|
||||
-- p_scara => '&p_scara.',
|
||||
-- p_apart => '&p_apart.',
|
||||
-- p_cod_postal => '&p_cod_postal.',
|
||||
-- p_id_mama => &p_id_mama.,
|
||||
-- p_e_mama => '&p_e_mama.',
|
||||
-- p_id_loc => '&p_id_loc.',
|
||||
-- p_id_util => '&p_id_util.',
|
||||
-- p_id_forma_juridica=> '&p_id_forma_juridica.',
|
||||
-- p_id_forma_organizare => '&p_id_forma_organizare.',
|
||||
-- p_id_forma_prop => '&p_id_forma_prop.',
|
||||
-- p_id_tip_soc => '&p_id_tip_soc.',
|
||||
-- p_indicativ => '&p_indicativ.',
|
||||
-- p_declarant => '&p_declarant.',
|
||||
-- p_functie => '&p_functie.',
|
||||
-- p_indice_itm => '&p_indice_itm.',
|
||||
-- p_tip_modificare => '&p_tip_modificare.',
|
||||
-- p_caen_revizie => NULL
|
||||
-- );
|
||||
-- END;
|
||||
-- /
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- PAS 2 -- JOB CREARE SCHEMA ORACLE (async)
|
||||
-- SYN_NEWSCHEMAJOB(pcSchema, pnLuna, pnAn)
|
||||
-- Se apeleaza doar daca firma e simpla (p_id_mama = 0), nu membra de grup.
|
||||
-- ATENTIE: porneste un job -- scrie/creeaza obiecte, nu e SELECT.
|
||||
-- ============================================================================
|
||||
|
||||
-- BEGIN
|
||||
-- IF &p_id_mama. = 0 THEN
|
||||
-- SYN_NEWSCHEMAJOB('&p_schema.', &p_luna_start., &p_an_start.);
|
||||
-- END IF;
|
||||
-- END;
|
||||
-- /
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- PAS 3 -- POLL STATUS JOB SCHEMA
|
||||
-- SYN_NEWSCHEMAPROGRESS(pcSchema) -- functie, intoarce status text.
|
||||
-- Se astepta 'FINALIZAT'. Job async: poate dura; NU se face poll fara
|
||||
-- timeout/numar maxim de incercari (exemplu mai jos, de adaptat manual
|
||||
-- sau intr-un script client, nu ca bucla PL/SQL blocanta pe productie).
|
||||
-- ============================================================================
|
||||
|
||||
-- Interogare punctuala (de rulat manual, la interval, cu numarare manuala
|
||||
-- a incercarilor -- max. N incercari, ex. 30, la 10 secunde):
|
||||
SELECT SYN_NEWSCHEMAPROGRESS('&p_schema.') AS status_job FROM dual;
|
||||
|
||||
-- Varianta PL/SQL cu timeout explicit (DOAR ca exemplu -- de adaptat/testat
|
||||
-- de Marius inainte de folosire, nu se stie limita reala de reincercari):
|
||||
-- DECLARE
|
||||
-- v_status VARCHAR2(100);
|
||||
-- v_incercari PLS_INTEGER := 0;
|
||||
-- c_max_incercari CONSTANT PLS_INTEGER := 30; -- DE CONFIRMAT
|
||||
-- c_pauza_sec CONSTANT PLS_INTEGER := 10; -- DE CONFIRMAT
|
||||
-- BEGIN
|
||||
-- LOOP
|
||||
-- v_status := SYN_NEWSCHEMAPROGRESS('&p_schema.');
|
||||
-- EXIT WHEN v_status = 'FINALIZAT' OR v_incercari >= c_max_incercari;
|
||||
-- v_incercari := v_incercari + 1;
|
||||
-- DBMS_LOCK.SLEEP(c_pauza_sec);
|
||||
-- END LOOP;
|
||||
-- IF v_status != 'FINALIZAT' THEN
|
||||
-- RAISE_APPLICATION_ERROR(-20000, 'Job schema neterminat dupa timeout, status=' || v_status);
|
||||
-- END IF;
|
||||
-- END;
|
||||
-- /
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- PAS 4 -- DREPTURI UTILIZATORI PE FIRMA NOUA
|
||||
-- PACK_DREPTURI.UTILDREPTINSPROC(id_util, id_grup, id_firma, id_utilop)
|
||||
-- Sursa: D:\ROA\ROASTART\Clase\ostart_util.vc2:32-40
|
||||
-- id_util / id_grup se completeaza DUPA ce Pasul 0a confirma daca userii
|
||||
-- exista deja. id_firma se completeaza cu id-ul intors de Pasul 1.
|
||||
-- ATENTIE: scrie date, nu e SELECT.
|
||||
-- ============================================================================
|
||||
|
||||
DEFINE p_id_firma_noua = '' -- DE COMPLETAT dupa Pasul 1 (id firma inserata)
|
||||
|
||||
-- --- user 1: Vali / Valentina Iliescu (o singura persoana, confirmat) ---
|
||||
DEFINE p_id_util_1 = '' -- DE COMPLETAT -- Pasul 0a nerulat (verificare DB blocata, NOTA IMPORTANTA 6); gol daca userul nu exista inca
|
||||
|
||||
-- optional, doar daca userul NU exista inca in UTILIZATORI:
|
||||
-- BEGIN
|
||||
-- PACK_DREPTURI.UTILIZATORIINSPROC(
|
||||
-- p_utilizator => '', -- DE COMPLETAT (login)
|
||||
-- p_parola => '', -- DE COMPLETAT (parola initiala)
|
||||
-- p_inactiv => 'N',
|
||||
-- p_id_utilop => &p_id_utilop.
|
||||
-- );
|
||||
-- END;
|
||||
-- /
|
||||
|
||||
-- BEGIN
|
||||
-- PACK_DREPTURI.UTILDREPTINSPROC(
|
||||
-- p_id_util => &p_id_util_1.,
|
||||
-- p_id_grup => &p_id_grup_useri.,
|
||||
-- p_id_firma => &p_id_firma_noua.,
|
||||
-- p_id_utilop=> &p_id_utilop.
|
||||
-- );
|
||||
-- END;
|
||||
-- /
|
||||
|
||||
-- --- user 2: Raluca Ion ---
|
||||
DEFINE p_id_util_2 = '' -- DE COMPLETAT -- Pasul 0a nerulat (verificare DB blocata, NOTA IMPORTANTA 6)
|
||||
|
||||
-- optional, doar daca userul NU exista inca:
|
||||
-- BEGIN
|
||||
-- PACK_DREPTURI.UTILIZATORIINSPROC(
|
||||
-- p_utilizator => '', -- DE COMPLETAT (login)
|
||||
-- p_parola => '', -- DE COMPLETAT (parola initiala)
|
||||
-- p_inactiv => 'N',
|
||||
-- p_id_utilop => &p_id_utilop.
|
||||
-- );
|
||||
-- END;
|
||||
-- /
|
||||
|
||||
-- BEGIN
|
||||
-- PACK_DREPTURI.UTILDREPTINSPROC(
|
||||
-- p_id_util => &p_id_util_2.,
|
||||
-- p_id_grup => &p_id_grup_useri.,
|
||||
-- p_id_firma => &p_id_firma_noua.,
|
||||
-- p_id_utilop=> &p_id_utilop.
|
||||
-- );
|
||||
-- END;
|
||||
-- /
|
||||
|
||||
-- ============================================================================
|
||||
-- SFARSIT SCHITA. De aprobat de Marius -- vezi NOTA IMPORTANTA 1-4 de la
|
||||
-- inceputul fisierului inainte de orice rulare.
|
||||
-- ============================================================================
|
||||
Reference in New Issue
Block a user