From 6da6e49b4861a0b85b90bfca4d79476b9ef2e102 Mon Sep 17 00:00:00 2001 From: Marco Audiffredi Date: Wed, 15 Oct 2025 18:11:28 +0200 Subject: [PATCH] Timbrature Vista --- ApiPolo/Controllers/PoloController.cs | 463 +++--------------- ApiPolo/Models/TimbraturaView.cs | 61 +++ .../VT_TIMBRATURE_VW_DbContext.cs | 22 + ApiPolo/Startup.cs | 3 + ApiPolo/appsettings.json | 4 +- .../AZI02/servizi_associati_perugia_logo.jpg | Bin 0 -> 6737 bytes ApiPolo/wwwroot/VIRTU/AZI02/sulga.png | Bin 0 -> 11194 bytes 7 files changed, 169 insertions(+), 384 deletions(-) create mode 100644 ApiPolo/Models/TimbraturaView.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_VW_DbContext.cs create mode 100644 ApiPolo/wwwroot/VIRTU/AZI02/servizi_associati_perugia_logo.jpg create mode 100644 ApiPolo/wwwroot/VIRTU/AZI02/sulga.png diff --git a/ApiPolo/Controllers/PoloController.cs b/ApiPolo/Controllers/PoloController.cs index a484ff3..e8230b7 100644 --- a/ApiPolo/Controllers/PoloController.cs +++ b/ApiPolo/Controllers/PoloController.cs @@ -1,46 +1,44 @@ using ApiPolo.Models; - - -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using Microsoft.IdentityModel.Tokens; -using Renci.SshNet; -using System.IdentityModel.Tokens.Jwt; -using System.Net; -using System.Security.Claims; -using System.Text; - -using System.Collections.Generic; -using System.Drawing; +using ApiPolo.Models.VT_dbcontext; using FirebaseAdmin; +using FirebaseAdmin.Auth.Multitenancy; using FirebaseAdmin.Messaging; using Google.Apis.Auth.OAuth2; -using Newtonsoft.Json; -using static ApiPolo.Controllers.PoloController; -using System.Net.Http.Headers; -using Newtonsoft.Json.Linq; -using System.Linq.Expressions; -using FirebaseAdmin.Auth.Multitenancy; -using System.Globalization; -using ApiPolo.Models.VT_dbcontext; -using System.Diagnostics.Contracts; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.EntityFrameworkCore.Storage; -using System.Diagnostics.Metrics; -using System.Transactions; -using System.Web.Razor.Parser; +using Microsoft.Extensions.Primitives; +using Microsoft.IdentityModel.Tokens; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Renci.SshNet; using System; using System.Collections; -using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.Diagnostics.Contracts; +using System.Diagnostics.Metrics; +using System.Drawing; +using System.Globalization; +using System.IdentityModel.Tokens.Jwt; +using System.IO; +using System.Linq; +using System.Linq.Expressions; +using System.Net; +using System.Net.Http.Headers; +using System.Runtime.CompilerServices; +using System.Security.Claims; +using System.Text; +using System.Text.RegularExpressions; +using System.Transactions; +using System.Web.Razor.Parser; +using static ApiPolo.Controllers.PoloController; using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource; using static System.Net.Mime.MediaTypeNames; -using System.IO; -using Microsoft.AspNetCore.Http; -using System.Data; -using System.Linq; -using Microsoft.Extensions.Primitives; -using System.Text.RegularExpressions; -using System.Runtime.CompilerServices; -using System.Diagnostics; namespace ApiPolo.Controllers { @@ -136,6 +134,7 @@ namespace ApiPolo.Controllers #region VT-TIMBRATURE private readonly VT_TIMBRATURE_DbContext _VT_timbr; + private readonly VT_TIMBRATURE_VW_DbContext _VT_VW_timbr; #endregion #region VT-ARTICOLI @@ -172,6 +171,7 @@ namespace ApiPolo.Controllers private DbSet? _pagam; private DbSet? _comm; private DbSet? _timbr; + private DbSet? _timbrVW; private DbSet? _sto_imp; private DbSet? _azi_coll; private DbSet? _impianto; @@ -238,6 +238,7 @@ namespace ApiPolo.Controllers VT_Buoni_DbContext VT_Buoni, VT_STO_RAPP_DbContext VT_StoRapp, VT_TIMBRATURE_DbContext VT_timbr, + VT_TIMBRATURE_VW_DbContext VT_VW_timbr, VT_ARTICOLI_TABLE_DbContext VT_artTable, VT_MAG_NEW_DbContext VT_MagNew, VT_MAGAZZINI_DbContext VT_Magazzini, @@ -280,6 +281,7 @@ namespace ApiPolo.Controllers _VT_Buoni = VT_Buoni; _VT_StoRapp = VT_StoRapp; _VT_timbr = VT_timbr; + _VT_VW_timbr = VT_VW_timbr; _VT_articoliTable = VT_artTable; _VT_MagNew = VT_MagNew; _VT_Magazzini = VT_Magazzini; @@ -529,17 +531,29 @@ namespace ApiPolo.Controllers } return seriale; } - private static readonly SemaphoreSlim _serialLock = new(1, 1); - private async Task GetSerialeThreadSafe(string token) + private static readonly ConcurrentDictionary _locks = new(); + private static SemaphoreSlim GetLockForTenant(string tenant) { - await _serialLock.WaitAsync(); + return _locks.GetOrAdd(tenant, _ => new SemaphoreSlim(1, 1)); + } + + [NonAction] + /// gestione della concorrenza + public async Task GetSerialeThreadSafe(string token) + { + string ten = getClaimValueByToken(token, "tenant") ?? + getClaimValueByToken(token, "tenantConfigurazioni"); + + var sem = GetLockForTenant(ten); + + await sem.WaitAsync(); try { return await getSerialeInternal(token); } finally { - _serialLock.Release(); + sem.Release(); } } @@ -4204,21 +4218,6 @@ namespace ApiPolo.Controllers return o; } - private async Task getDescrImpTedesco(string codimp, string ten) - { - string descImp = string.Empty; - //_impianto = _Tedes_impianti.Impia; - var l = await _impianto.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten) && t.imcodimp != null && t.imcodimp.Equals(codimp)).ToListAsync(); - if (l != null && l.Count()>0 ) - { - foreach(Impianto i in l) - { - descImp = i.imdescri; - } - } - return descImp; - } - /// Manutenzioni per tecnico e azienda (tenant). Intervallo: 1 mese prima e 1 mese dopo rispetto a GETDATE() con GENERATO diverso da S return:ActionResult [HttpGet("manutenzioni")] public async Task>> manutenzioni(string token) @@ -4345,335 +4344,6 @@ namespace ApiPolo.Controllers newSerial = await getSeriale(token); Rapp_New r = await fillRappNewChiudiManByInput(model, token, newSerial, _confLette); - //switch (ten) - //{ - // case Clienti.Marrocco: - // using (var transaction = _Marro_rapp.Database.BeginTransaction()) - // { - // await _Marro_rapp.Rapps.AddAsync(r); - // await _Marro_rapp.SaveChangesAsync(); - // transaction.Commit(); - // } - - - // break; - // case Clienti.Ferrari: - // using (var transaction = _Ferra_rapp.Database.BeginTransaction()) - // { - // await _Ferra_rapp.Rapps.AddAsync(r); - // await _Ferra_rapp.SaveChangesAsync(); - // transaction.Commit(); - // } - // break; - // case Clienti.Sarom: - // using (var transaction = _Sarom_rapp.Database.BeginTransaction()) - // { - // await _Sarom_rapp.Rapps.AddAsync(r); - // await _Sarom_rapp.SaveChangesAsync(); - // transaction.Commit(); - // } - // break; - // case Clienti.Sicilia: - // using (var transaction = _Sicilia_rapp.Database.BeginTransaction()) - // { - // await _Sicilia_rapp.Rapps.AddAsync(r); - // await _Sicilia_rapp.SaveChangesAsync(); - // transaction.Commit(); - // } - // int riga = 0; - // if (model.compo_add != null && model.compo_add.Count() > 0) - // { - - // using (var transaction2 = _Sicilia_mag.Database.BeginTransaction()) - // { - - // foreach (Saldiart co in model.compo_add) - // { - // riga = riga + 1; - // Mag_New mn = new Mag_New(); - // mn = saldiartToMag_New(co, riga, newSerial, tecnico); - - // await _Sicilia_mag.Mag.AddAsync(mn); - // await _Sicilia_mag.SaveChangesAsync(); - - // } - // transaction2.Commit(); - // } - // } - // if (model.compo_del != null && model.compo_del.Count() > 0) - // { - - - // using (var transaction3 = _Sicilia_mag.Database.BeginTransaction()) - // { - // foreach (Compo_Impia co in model.compo_del) - // { - // Mag_New mn = new Mag_New(); - // riga = riga + 1; - // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); - - // await _Sicilia_mag.Mag.AddAsync(mn); - // await _Sicilia_mag.SaveChangesAsync(); - // } - // transaction3.Commit(); - // } - // } - // break; - // case Clienti.Discovery: - // using (var transaction4 = _Disco_rapp.Database.BeginTransaction()) - // { - // await _Disco_rapp.Rapps.AddAsync(r); - // await _Disco_rapp.SaveChangesAsync(); - // transaction4.Commit(); - // } - // break; - // case Clienti.Gitoga: - // using (var transactionGit = _Gitoga_rapp.Database.BeginTransaction()) - // { - // await _Gitoga_rapp.Rapps.AddAsync(r); - // await _Gitoga_rapp.SaveChangesAsync(); - // transactionGit.Commit(); - // } - // break; - // case Clienti.Lifta: - // using (var transactionLif = _Lifta_rapp.Database.BeginTransaction()) - // { - // await _Lifta_rapp.Rapps.AddAsync(r); - // await _Lifta_rapp.SaveChangesAsync(); - // transactionLif.Commit(); - // } - // break; - //case Clienti.Siet: - // using (var transactionSiet = _Siet_rapp.Database.BeginTransaction()) - // { - // await _Siet_rapp.Rapps.AddAsync(r); - // await _Siet_rapp.SaveChangesAsync(); - // transactionSiet.Commit(); - // } - // int rigaSiet = 0; - // if (model.compo_add != null && model.compo_add.Count() > 0) - // { - - // using (var transaction2 = _Siet_mag.Database.BeginTransaction()) - // { - - // foreach (Saldiart co in model.compo_add) - // { - // rigaSiet = rigaSiet + 1; - // Mag_New mn = new Mag_New(); - // mn = saldiartToMag_New(co, rigaSiet, newSerial, tecnico); - - // await _Siet_mag.Mag.AddAsync(mn); - // await _Siet_mag.SaveChangesAsync(); - - // } - // transaction2.Commit(); - // } - // } - // if (model.compo_del != null && model.compo_del.Count() > 0) - // { - // using (var transaction3 = _Siet_mag.Database.BeginTransaction()) - // { - // foreach (Compo_Impia co in model.compo_del) - // { - // Mag_New mn = new Mag_New(); - // rigaSiet = rigaSiet + 1; - // mn = compo_ImpiaToMag_New(co, rigaSiet, newSerial, tecnico); - - // await _Siet_mag.Mag.AddAsync(mn); - // await _Siet_mag.SaveChangesAsync(); - // } - // transaction3.Commit(); - // } - // } - - // break; - //case Clienti.PMS: - // using (var transactionPms = _Pms_rapp.Database.BeginTransaction()) - // { - // await _Pms_rapp.Rapps.AddAsync(r); - // await _Pms_rapp.SaveChangesAsync(); - // transactionPms.Commit(); - // } - // int rigapms = 0; - // if (model.compo_add != null && model.compo_add.Count() > 0) - // { - - // using (var transaction2 = _PMS_mag.Database.BeginTransaction()) - // { - - // foreach (Saldiart co in model.compo_add) - // { - // rigapms = rigapms + 1; - // Mag_New mn = new Mag_New(); - // mn = saldiartToMag_New(co, rigapms, newSerial, tecnico); - - // await _PMS_mag.Mag.AddAsync(mn); - // await _PMS_mag.SaveChangesAsync(); - - // } - // transaction2.Commit(); - // } - // } - // if (model.compo_del != null && model.compo_del.Count() > 0) - // { - // using (var transaction3 = _PMS_mag.Database.BeginTransaction()) - // { - // foreach (Compo_Impia co in model.compo_del) - // { - // Mag_New mn = new Mag_New(); - // rigapms = rigapms + 1; - // mn = compo_ImpiaToMag_New(co, rigapms, newSerial, tecnico); - - // await _PMS_mag.Mag.AddAsync(mn); - // await _PMS_mag.SaveChangesAsync(); - // } - // transaction3.Commit(); - // } - // } - - // break; - - //case Clienti.LW: - // using (var transactionLW = _LW_rapp.Database.BeginTransaction()) - // { - // await _LW_rapp.Rapps.AddAsync(r); - // await _LW_rapp.SaveChangesAsync(); - // transactionLW.Commit(); - // } - // int rigalw = 0; - // if (model.compo_add != null && model.compo_add.Count() > 0) - // { - - // using (var transaction2 = _LW_mag.Database.BeginTransaction()) - // { - - // foreach (Saldiart co in model.compo_add) - // { - // rigalw = rigalw + 1; - // Mag_New mn = new Mag_New(); - // mn = saldiartToMag_New(co, rigalw, newSerial, tecnico); - - // await _LW_mag.Mag.AddAsync(mn); - // await _LW_mag.SaveChangesAsync(); - - // } - // transaction2.Commit(); - // } - // } - // if (model.compo_del != null && model.compo_del.Count() > 0) - // { - // using (var transaction3 = _LW_mag.Database.BeginTransaction()) - // { - // foreach (Compo_Impia co in model.compo_del) - // { - // Mag_New mn = new Mag_New(); - // rigalw = rigalw + 1; - // mn = compo_ImpiaToMag_New(co, rigalw, newSerial, tecnico); - - // await _LW_mag.Mag.AddAsync(mn); - // await _LW_mag.SaveChangesAsync(); - // } - // transaction3.Commit(); - // } - // } - - // break; - - //case Clienti.Tedesco: - // using (var transactionTedes = _Tedes_rapp.Database.BeginTransaction()) - // { - // await _Tedes_rapp.Rapps.AddAsync(r); - // await _Tedes_rapp.SaveChangesAsync(); - // transactionTedes.Commit(); - // } - // int rigatedes = 0; - // if (model.compo_add != null && model.compo_add.Count() > 0) - // { - - // using (var transaction2 = _Tedes_mag.Database.BeginTransaction()) - // { - - // foreach (Saldiart co in model.compo_add) - // { - // rigatedes = rigatedes + 1; - // Mag_New mn = new Mag_New(); - // mn = saldiartToMag_New(co, rigatedes, newSerial, tecnico); - - // await _Tedes_mag.Mag.AddAsync(mn); - // await _Tedes_mag.SaveChangesAsync(); - - // } - // transaction2.Commit(); - // } - // } - // if (model.compo_del != null && model.compo_del.Count() > 0) - // { - // using (var transaction3 = _Tedes_mag.Database.BeginTransaction()) - // { - // foreach (Compo_Impia co in model.compo_del) - // { - // Mag_New mn = new Mag_New(); - // rigatedes = rigatedes + 1; - // mn = compo_ImpiaToMag_New(co, rigatedes, newSerial, tecnico); - - // await _Tedes_mag.Mag.AddAsync(mn); - // await _Tedes_mag.SaveChangesAsync(); - // } - // transaction3.Commit(); - // } - // } - - // break; - - //case Clienti.Syscom: - // using (var transactionSys = _Sys_rapp.Database.BeginTransaction()) - // { - // await _Sys_rapp.Rapps.AddAsync(r); - // await _Sys_rapp.SaveChangesAsync(); - // transactionSys.Commit(); - // } - // int rigasys = 0; - // if (model.compo_add != null && model.compo_add.Count() > 0) - // { - - // using (var transaction2 = _Sys_mag.Database.BeginTransaction()) - // { - - // foreach (Saldiart co in model.compo_add) - // { - // rigasys = rigasys + 1; - // Mag_New mn = new Mag_New(); - // mn = saldiartToMag_New(co, rigasys, newSerial, tecnico); - - // await _Sys_mag.Mag.AddAsync(mn); - // await _Sys_mag.SaveChangesAsync(); - - // } - // transaction2.Commit(); - // } - // } - // if (model.compo_del != null && model.compo_del.Count() > 0) - // { - // using (var transaction3 = _Sys_mag.Database.BeginTransaction()) - // { - // foreach (Compo_Impia co in model.compo_del) - // { - // Mag_New mn = new Mag_New(); - // rigasys = rigasys + 1; - // mn = compo_ImpiaToMag_New(co, rigasys, newSerial, tecnico); - - // await _Sys_mag.Mag.AddAsync(mn); - // await _Sys_mag.SaveChangesAsync(); - // } - // transaction3.Commit(); - // } - // } - - // break; - //default: - // break; - //} man = await getManutenzioneByChiaveOut(model, token,r); output = fillManprogOut(man, ten); output.err_status_code = StatiRisposta.Ok; @@ -12732,6 +12402,35 @@ namespace ApiPolo.Controllers } } + /// VIRTUAL TASK: Timbrature da App + [HttpGet("timbratureListVW")] + public async Task>> timbratureListVW(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _timbrVW = _VT_VW_timbr.Timbs; + + + var t = await _timbrVW.Where( + t => t.azienda.Equals(ten) + ).ToListAsync(); + + foreach (TimbraturaView ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + /// VIRTUAL TASK: lista articoli per azienda [HttpGet("articoliList")] public async Task>> ArticoliList(string token) diff --git a/ApiPolo/Models/TimbraturaView.cs b/ApiPolo/Models/TimbraturaView.cs new file mode 100644 index 0000000..fac0961 --- /dev/null +++ b/ApiPolo/Models/TimbraturaView.cs @@ -0,0 +1,61 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// Vista API_TIMBRATURE_VT + [Keyless] + public class TimbraturaView + { + public int id { get; set; } + + /// data + public DateTime? data_timbratura { get; set; } + + /// ora inizio + public int ora_ini { get; set; } + + /// minuto inizio + public int min_ini { get; set; } + + /// ora fine + public int ora_fin { get; set; } + + /// minuto fine + public int min_fin { get; set; } + + /// SERIALE commessa + public string? commessa { get; set; } + + /// ore viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? ore_viaggio { get; set; } + + /// totale ore + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? tot_ore { get; set; } + + /// giorno settimana + public int? giorno { get; set; } + + /// azienda + public string? azienda { get; set; } + + /// tecnico + public string? tecnico { get; set; } + + /// cpccchk + public string? cpccchk { get; set; } + + /// note + public string? note { get; set; } + + /// Giorno della settimana descrizione + public string? giodesc { get; set; } + + /// Commessa descrizione + public string? commdesc { get; set; } + + /// tecnico descrizione + public string? tecdesc { get; set; } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_VW_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_VW_DbContext.cs new file mode 100644 index 0000000..2a303c9 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_VW_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_TIMBRATURE_VW_DbContext: DbContext + { + /// + public DbSet? Timbs { get; set; } + + /// + public VT_TIMBRATURE_VW_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_TIMBRATURE_VT"); + } + } +} diff --git a/ApiPolo/Startup.cs b/ApiPolo/Startup.cs index ce89de9..9c0613a 100644 --- a/ApiPolo/Startup.cs +++ b/ApiPolo/Startup.cs @@ -103,6 +103,9 @@ namespace ApiPolo services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") , options => { options.CommandTimeout(commandTimeoutInSeconds); } )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") , options => { options.CommandTimeout(commandTimeoutInSeconds); } )); diff --git a/ApiPolo/appsettings.json b/ApiPolo/appsettings.json index 5be9820..1af19a4 100644 --- a/ApiPolo/appsettings.json +++ b/ApiPolo/appsettings.json @@ -14,8 +14,8 @@ "ApiStr": "Data Source=dbsql01.poloinformatico.it;Initial Catalog=API_POLO;User Id=apipolo; Password=38HdflydkDrXI4l;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Encrypt=False;TrustServerCertificate=True", //"ApiStr": "Data Source=MARCO_PC\\SQL_2022;Initial Catalog=API_POLO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Encrypt=False;TrustServerCertificate=True", - "VIRTUAL_TASK": "Data Source=dbsql01.poloinformatico.it;Initial Catalog=VIRTUAL_TASK;User Id=apipolo; Password=38HdflydkDrXI4l;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Encrypt=False;TrustServerCertificate=True" - //"VIRTUAL_TASK": "Data Source=MARCO_PC\\SQL_2022;Initial Catalog=VIRTUAL_TASK;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + //"VIRTUAL_TASK": "Data Source=dbsql01.poloinformatico.it;Initial Catalog=VIRTUAL_TASK;User Id=apipolo; Password=38HdflydkDrXI4l;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Encrypt=False;TrustServerCertificate=True" + "VIRTUAL_TASK": "Data Source=MARCO_PC\\SQL_2022;Initial Catalog=VIRTUAL_TASK;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"VIRTUAL_TASK": "Data Source=172.25.30.1;Initial Catalog=VIRTUAL_TASK;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" }, diff --git a/ApiPolo/wwwroot/VIRTU/AZI02/servizi_associati_perugia_logo.jpg b/ApiPolo/wwwroot/VIRTU/AZI02/servizi_associati_perugia_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d044c6cb58e7eda1794c5024c242d45633edef47 GIT binary patch literal 6737 zcmb7|bzD^4)_~8%Ctx z)US;Ee(d_Tb<3_XU|_nZ(&?7hxvZ^e6T0bpX3eUngnw?^^n(A`v?kQE535V;Qp)3r zkd2(A@*zVP&97j%0Y^z)^k)^pKzOCeY0VtV|MoPwB z8hZCXJ-^|`E#cNQTI9*SZXThq`DtPE%4FD~ti9B6)YhAx{THsTCXTq%L_QV-fu3>LfmQQiE zsHffmp5g)YDT|Ry2S8|J=kW0!L)!Y|VKXawX@R6>?^O5(P}fNHF4$PsezZ63Rh|1> zv-#Ydl52oTGYI?%0Kj5e2Vv;!n3jdljA@Gcyg6Dank)C?q_+6M6)nShcIhTLyc7zK zhOX~3ye|WHHz+?1hp1daD)8Aglt6>y`)V)Z&k7N&6Csz<|0#G_aCqSW2nU1%#!?IU zqW}d%aBu+-Tv&oiOq_y6iIiN@mXb{b%Mm^nFAx-bURmlAk@2dLnSoDYl}+%}J@(CG z*g0*Gsxne(aA_F7gy-%w{-(N+hSr{Z|KX~NAZhtI0o$&c8Hb+UQyJ|zxt_pcEsQ>%6i_HVoLQGN?IaGIFZF5Y$cEOHf7?ttktb2683*hb3k=v3MEUHgM-jOxXRHW>8 zX?>5T9ES6y!Cyc%CXTc{K02osppgny>`b(<)twBr0$oAJsF%?>M2 zlB{$M>5Dco$xl_X^QlY>wx!1SWvz`4n?juPzh&9AtoDs`cndC&;(_Pux)#n0%I8&E zuWC(>zcfgZ9P{a?#WWAcT~C}YJBVYnLS6v00RdATr8u!YwbWO+szbchhtD*goP|@c zB)w|GHCyFdb{qNfB`USr*8k{Jf=^pd^)>RByAJp5X69}~zrLI1v>UIi@!(Q@$$Ed9 zoU30agDiuDCa?X-^bysDYK1d--P@9&v@Hp{m8az~^h+dLXLp6RIMnfb%_Z!abLrz` zMD={vuMA>1ualeVMdZz%CT*Fue124PCy)PjtlaC(asqsg8`C~2`}~W#=9}Nx#N!_t zo*KS}|SX;$1agltGpz5lM{_S9mBfe?3_ZT^SDoe6OZR0Uq+k2IqL-LrEEK6Q_ ze2ks|yA9!{_q3r!QuTI8VWy|83=bvSN~>dUSnR~%$!?X08X}?Ce7q;i&EAGD%TkR% z%=3O0L{{=-_u1%VdhQ3lFzbb~__)xgelZ@uySpauVYXBHQaL*Uw1JOjSRv{7ZL~{< z^59n$X3MwDIMPYu^yI`?gBZb7?LIYr4#6TMeu)qW2M>z(7eT;f7Q94=6;93~B5sIc z6O#zVPzZ}EDc?vku*1^yn;q~aJ11NYt*qWnsfVfi4$(m-ucxDvYDslgU(3@nIySV* z7>%X%SH))D$Vy#@MpHFnoR|0P6#Tg$_4~8AKNcsKkJn*dbUf9nI;7+ZeoJM$_7d$% z?-R`n1cHe38?rOlNZp15I7{vMe@`5Ssc(D-Knd(9A6^bgmT%$bciiZM1W{KxsSsE>a2baPu$US$HDugzFRVD1Io zn+=&6#}#BV$!(3lF5`>9PHou5904&N0q|#T!=?xThm=eNPA)8}Y>2AIu&}a;soXHK z^YIN0r(ow0S4!?g*gAwIr4$x5*f0DEHweI01fNwJ7m+2o3R@;qAITz~NcNUyOur>T z_JdjvFvop#U3m0J6mB=iPgW(Vqf>FmQCpT#WqB&g21v@vX&m3AK{1uN4S0rpoVX*fnDj^n+>BlXxXWj`BCU&n# zOmZDs+6KiLXvLxhwaA6XrP3w4H%`Z{Ps*gIyBum)Zkc9yQMBwo_Jr^jG_zzEms!6B z6L$0B?BscGE16Rtovim4*z%wxm{tuvY@~Z46QoicaleCt-`?$^w?7eFL0vN!*3hDR zEBjU4$Tr^UeOBb-Nl^dC2R7;=>JtPS1RBp_oi{#_C8c&VCEZty;)xg7KT)4pEK@LS zlCDTd^?U?JGiWN6jDr_^EFL?*AT|QB_tyJfPCPqso+_Nrb}xG$nzB(z%K~VcTva&# zUJ{I~`K4o;=~pEh$o}3}YJzTS=mzM}al1FYnmFIdpeN0JT2A;IFI0GGE8FzNsa4rc zYcCRS`nl?$<|Dm{quX0g>$jGU$eXw*MQ4;sLZp>uo^GWvSv(gFPD9X{)OmNcoT-`0 zLeUJ1^pqLnpFunz9x4#(8?7JbON`Pp5{;#gXZBp=qVq^CWd^w5(2-Vx0FqV#T^PqZ z-r^)fHvVZk`{s>#=H6d3SwGvCt#USC0nS0C*Z=KZAYvVLezd}Rz~vHA>IgD+P6$%u zo+J$XI*u}}T%NOae=Rq|E8l4Ac*YwgUS&Pn_>7bNehP{F9F;WBIyHmg*HE1t367}yJIQ5m>7aA?io?i1Gaa`lGg{mf9H+Sb zL~u|GI%i{{yfdW3=&aJEI~&gVjwciY&D^h72>P4uv0;bV&wSmZZT zLx9arA#TWE0sl~7XRoE&;m8J?e|WI@2Li&y!*0y}T6%*3Qq~<2WkWkuD4az&sj$9N z3A1ba_sUw4^#b6PXIT~oNqIghD$rAt0}G=CA)InkIE2C*;chb>%w4hZd*k6>I8fj2 z3&~ao!OibU>Rm@r&D8QScjeuT!-z1v+m1OT6wJG-U?$Ex*WpC|D65F#1BVDAzr)BN z#nI=K=M|dnLB&aboC!0iRpLf=9%Et_LA9oAdck~H3rXhY=VoM&?elYd&Xu`_E51>C z?N0PojnMg{5rG(0`rR4Tu4dFsFsHTEug`=;Zv*sH1Xr)CuuHnre`sO}@irtH;mU7j zx)*K?w(WclNxl=U*TG%{pSF>cFHXu~aFVr;EaQAd77g?$8zpIze-oT)a4hzSu_SpM ztp&>#p=OG6fX95ACrF<)*ij;xI>wodX>qt-prwe(+^`_59rSajiPZ1y_rep2hxigA z7ZR;-5h0e3LT4k0`QwcHyi>sxCnQA6cRvZ6OvYpDsyIF&)*HTIf8X1=7QHjGQ=n)H z3t<2WGySwI^$SZ>?U6L5b^i=#st1JZM7rMcO|U;CBNg0Ty$(OiO#gds6ERH&F`5f^hK8oH>Wa**Oh#d8R$sLCxGw+BaP^)A|hM|T^1V{5rOAVFhIZ@MhR;6eW z!x%z0GJcYWAe~Wd_}2p??p*N?Mjr(ty0C#K2d=)ZUGU_zrm-~P#GjMch_L?PY92d4 z+!b{*Zp0x^>}w!K{W{9MbGsT5B}!o}|6D)wwO5}t-tGMfKiyzkyld1Z(UM=$-U0L8 zN(3C!+4F{H`HUlgG)uz)LDlB9MlciHmIibz)#CxO-YN*#dcvbgGCooS9b4|Qtx)bV zf1fTpt9b!a@Q_&w{x z_lM>GeGO7h{rUU$0=V0IA1m0?wz>d>wtDB}_Xp(99-`*j-|P=7?&r^8P8G1?3t&L@ z0vKL7!r*)7gyOrNWp9m!3Rvm){m9pAvVSilA$A&2_yuRt|L2O!K{tkx*_D}z zDZ(AlTA|p5z%17u#5M*rhv_HQiT*4jfjuVS&t}sP8GqW_+&hKI z!TwGGm{34ii5rA$6Y=vhN8K9F#MH?p+)ijNd|``_=DNv4CAwjN)BC{7^*wsVvZ^ik z?bpCKy8V_P$7e>gwn4_9{0HifDXQ-rxDLdOpp(GX7r1N+5%hZ{Ascu(WRzd+-O}X%53~6$G zsEFsUk1qRy&U5#4FjvXzz9Y2n zlni$NwP}E#Q#Q)Zqg=?c!uF$rRyCe!KO|`61IN;{d|Bn{{UDKm>OK5CmMm%c4YPC< z3|inERv6|gnJn6}YkIpAHQar=cvvQeQsi85(q(GgLqlx~JiJKT+}*@A+9BalUkpfI zTkUNR8Wo2wpV<^-@>miwkk$E&^v#w}_v78W0InS=t${Jgi@AstpQf2#yZmJOoz50W zwhmthHxs8)eq*Ggfh_QxrKL8l)za(yI8vL?8d-v~nA+qu$ZU+yB3v78XU%tMiXnPl zc1Rks99TncZ8d%DG!zC7N310iXzZ%If<^k(pr-&f??JdoOP`PaGV`lG9O;Y+I= zhdE2(0n`hB8t!OxRp9=M9l}TiqNy%__H<0LDMhY!ZLfke9lN}{eZYJf7dSR9zfW+n z=cT^`1Hz6oJM2J%qe8K>?v7Gny@72fX5nA+E_S3{UAa2!s=5zaszKeb>0>;Cy=(pUTLldP{HUM$Uy zxp9hZjtO^V^UN(m%2T&E+8tvf8REH%(Gzl33pM-(@{6D5=Pls)eJlB)*D^1Flvt!dY9uEpHHvT0=FjPDWS zz4(n6*hutEDja;lv|=iE+xF`nqDJ|QWf{7eQSXX!v`oNTQxr#2Btjl(lg2psb;I>> zlrT#AbwnBN#M)TDptByO`j=2F$lJ8CMxu#GDc*JbAWesBQK5D|YDv>&n$7Yl^&UN< zHPz-d8scKUWx154A>GNk-Cxhxz(7s^L+f^dlI@ZHF&E?msdJc`^$K)vp@y>rsvBW}p+j;vbX! zDnxGk&jc%)3_M%FQ6W_EyRP0Cy!r!H9Ue|J;uA8UW!R&?!xFMNN~PVxfK2C#k)nsK z+?NpvD5bduiPLatzV;yJsoUAd4LVOmuOW+f%tt{^XdFsmG_4y~CqjJ$+=^B@ zXsE-FLN`-b={dNA&hz71tN*E&f7RCTa~GK<+*ehFT5udzk{7Pr(t6SF%=Yj)?jD4l z)>{AeCuM_(X>~=uE3pnNCt~=Z_RsxF#g=al^!g7OZfX); zbL2wDlFF)j=fd30CUaU-k!H^RlT~AEEDX>$tOFKFf~+)?WDDJB_Z<8yd3d6IK{iS) zq@tbKCgknJ+{zs{DW8eZ$!EDpOC-8o_9K>pRL5`Zvk8#)hDedqmfOlZpV!Z literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/VIRTU/AZI02/sulga.png b/ApiPolo/wwwroot/VIRTU/AZI02/sulga.png new file mode 100644 index 0000000000000000000000000000000000000000..8f78a7357074558aed88e9de483beb26423f3a96 GIT binary patch literal 11194 zcmV;rD@D|aP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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