diff --git a/ApiPolo/Controllers/PoloController.cs b/ApiPolo/Controllers/PoloController.cs index 471795a..b822295 100644 --- a/ApiPolo/Controllers/PoloController.cs +++ b/ApiPolo/Controllers/PoloController.cs @@ -52,6 +52,7 @@ using System.Linq; using Microsoft.Extensions.Primitives; using System.Text.RegularExpressions; using System.Runtime.CompilerServices; +using System.Diagnostics; namespace ApiPolo.Controllers { @@ -459,6 +460,10 @@ namespace ApiPolo.Controllers private readonly VT_ARTICOLI_TABLE_DbContext _VT_articoliTable; #endregion + #region VT-MAG_NEW + private readonly VT_MAG_NEW_DbContext _VT_MagNew; + #endregion + #region Commesse desc private readonly SIET_COMMESSE_DESC_DbContext _Siet_commDesc; private readonly MARRO_COMMESSE_TABLE_DbContext _Marro_commDesc; @@ -511,6 +516,7 @@ namespace ApiPolo.Controllers private DbSet? _VT_buo; private DbSet? _rapp_new_view; private DbSet? _articoliTable; + private DbSet? _magNewVT; private DbSet? _commDesc; private DbSet? _commDescSiet; @@ -880,8 +886,11 @@ namespace ApiPolo.Controllers VT_Buoni_DbContext VT_Buoni, VT_STO_RAPP_DbContext VT_StoRapp, VT_TIMBRATURE_DbContext VT_timbr, - VT_ARTICOLI_TABLE_DbContext VT_artTable + VT_ARTICOLI_TABLE_DbContext VT_artTable, + VT_MAG_NEW_DbContext VT_MagNew + #endregion + ) { _configuration = configuration; @@ -1226,6 +1235,7 @@ namespace ApiPolo.Controllers _VT_Buoni = VT_Buoni; _VT_StoRapp = VT_StoRapp; _VT_articoliTable = VT_artTable; + _VT_MagNew = VT_MagNew; #endregion #region Commesse desc @@ -1879,6 +1889,7 @@ namespace ApiPolo.Controllers } return _sa; } + private DbSet getComponentiByTenant(string tenant) { DbSet? _compon; @@ -3040,6 +3051,28 @@ namespace ApiPolo.Controllers return mn; } + /// trasforma un Saldiart in un Vt_Mag_New + private Vt_Mag_New SaldiArtToVtMag_New(Saldiart co, int riga, string newSerial, string tecnico, string azienda) + { + Vt_Mag_New vtmn = new Vt_Mag_New(); + vtmn.Azienda = azienda; + vtmn.Seriale_Rapportino = newSerial; + vtmn.Riga = riga; + vtmn.Magazzino = co.slcodmag; + vtmn.Articolo = co.slcodice; + vtmn.Tipo_Movimento = "A"; + vtmn.Quantita = co.slqtaper; + vtmn.Prezzo = co.liprezzo; + vtmn.Codice_Tecnico = tecnico; + vtmn.CodLotto = co.locodice; + vtmn.Matricola = co.amcodice; + vtmn.Desc_Art = co.ardesart; + vtmn.Cpccchk = getCpccchk(10); + vtmn.Desc_Sup = co.desc_sup; + return vtmn; + + } + /// trasforma un Compi_Impia in un Mag_New private Mag_New compo_ImpiaToMag_New(Compo_Impia co, int riga, string newSerial, string tecnico) { @@ -3068,6 +3101,35 @@ namespace ApiPolo.Controllers return mn; } + /// trasforma un Compi_Impia in un Vt_Mag_New + private Vt_Mag_New compo_ImpiaToVt_Mag_New(Compo_Impia co, int riga, string newSerial, string tecnico, string azienda) + { + + Vt_Mag_New vtmn = new Vt_Mag_New(); + vtmn.Azienda = azienda; + vtmn.Seriale_Rapportino = newSerial; + vtmn.Riga = riga; + vtmn.Matricola = "001"; + vtmn.Articolo = co.cocodart; + vtmn.Tipo_Movimento = "E"; + vtmn.Quantita = co.coqtaart; + vtmn.Prezzo = 0; + vtmn.Codice_Tecnico = tecnico; + vtmn.CodLotto = co.lotto; + vtmn.Matricola = co.matricola; + vtmn.Cprownum = co.cprownum; + vtmn.CodImp = co.cocodimp; + vtmn.Desc_Art = co.ardesart; + vtmn.Cpccchk = getCpccchk(10); + vtmn.Desc_Sup = co.desc_sup; + + + string appoNote = string.Empty; + appoNote = (co.co__note != null && co.co__note.Length>254) ? co.co__note.Substring(0, 254) : co.co__note; + vtmn.Note = appoNote; + return vtmn; + } + private static Random random = new Random(); /// crea un cpccchk public static string getCpccchk(int length) @@ -6296,6 +6358,39 @@ namespace ApiPolo.Controllers await _VT_rapptable.SaveChangesAsync(); transactionVT.Commit(); } + riga = 0; + if (model.compo_add != null && model.compo_add.Count() > 0) + { + using (var transactionVT2 = _VT_rapptable.Database.BeginTransaction()) + { + foreach (Saldiart co in model.compo_add) + { + Vt_Mag_New vtmn = new Vt_Mag_New(); + riga = riga + 1; + vtmn = SaldiArtToVtMag_New(co, riga, newSerial, tecnico, ten2); + + await _VT_MagNew.MagNewVt.AddAsync(vtmn); + await _VT_MagNew.SaveChangesAsync(); + } + transactionVT2.Commit(); + } + } + if (model.compo_del != null && model.compo_del.Count() > 0) + { + using (var transactionVt3 = _VT_rapptable.Database.BeginTransaction()) + { + foreach (Compo_Impia co in model.compo_del) + { + Vt_Mag_New vtmn = new Vt_Mag_New(); + riga = riga + 1; + vtmn = compo_ImpiaToVt_Mag_New(co, riga, newSerial, tecnico, ten2); + + await _VT_MagNew.MagNewVt.AddAsync(vtmn); + await _VT_MagNew.SaveChangesAsync(); + } + transactionVt3.Commit(); + } + } break; case Clienti.LW: @@ -8703,70 +8798,129 @@ namespace ApiPolo.Controllers try { string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); - _saldi = getSaldiartByTenant(ten); - Configurazioni conf = await readConf(tenConf); - int max_record = 0; - max_record = conf.max_record!=null? conf.max_record.Value:0; - string codlis = string.Empty; - _clienti = getClientiByTenant(ten); - var a = await _clienti.Where(t => t.ancodice == codcli).ToListAsync(); - if (a != null && a.Count() == 0) + if (tenConf.Equals(Clienti.VT)) { - codlis = conf.listino; + _articoliTable = _VT_articoliTable.Articoli; + + var listaFiltro = new List(); + + listaFiltro = await _articoliTable.Where(x => x.Azienda.Equals(ten2)).ToListAsync(); + + if (!string.IsNullOrEmpty(art)) + { + listaFiltro = await _articoliTable.Where(x => x.SlCodice.Contains(art)).ToListAsync(); + } + + if (!string.IsNullOrEmpty(desart)) + { + listaFiltro = await _articoliTable.Where(x => x.ArDesArt.Contains(desart)).ToListAsync(); + } + + if (!string.IsNullOrEmpty(maga)) + { + listaFiltro = await _articoliTable.Where(x => x.SlCodMag.Contains(maga)).ToListAsync(); + } + + List listaSaldiArt = new List(); + + foreach (Articoli a in listaFiltro) + { + Saldiart saldo = new Saldiart(); + + saldo.slcodice = a.SlCodice; + saldo.slcodice = a.SlCodice; + saldo.ardesart = a.ArDesArt; + saldo.slcodmag = a.SlCodMag; + saldo.slqtaper = a.SlQtAper; + saldo.amcodice = a.AmCodice; + saldo.locodice = a.LoCodice; + saldo.licodlis = a.LiCodLis; + saldo.licodart = a.LiCodArt; + saldo.lidatatt = a.LiDatAtt; + saldo.liquanti = a.LiQuanti; + saldo.liprezzo = a.LiPrezzo; + saldo.liscont1 = a.LiScont1; + saldo.liscont2 = a.LiScont2; + saldo.liscont3 = a.LiScont3; + saldo.liscont4 = a.LiScont4; + saldo.gest_matr = a.Gest_Matr; + saldo.gest_lotti = a.Gest_Lotti; + saldo.desc_sup = a.Desc_sup; + + listaSaldiArt.Add(saldo); + } + + return StatusCode(StatusCodes.Status200OK, listaFiltro); } else { - codlis = string.IsNullOrEmpty(a.First().annumlis) ? conf.listino : a.First().annumlis; - } - var co = await _saldi.Where(t => t.slcodmag != null && t.slcodmag.Equals(maga) && t.licodlis != null && t.licodlis.Equals(codlis)).ToListAsync(); - - if (!string.IsNullOrEmpty(art)) - { - co = co.Where(t => t.slcodice != null && t.slcodice.ToUpper().Contains(art.ToUpper())).ToList(); - } - if (!string.IsNullOrEmpty(desart)) - { - co = co.Where(t => t.ardesart != null && t.ardesart.ToUpper().Contains(desart.ToUpper())).ToList(); - } - if (!string.IsNullOrEmpty(matric)) - { - //List lista = new List(); - //var codart = co.Where(m => m.amcodice != null && m.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); - //var query = co.Where(p => codart.Any(kw => p..StartsWith(kw))); - //if (codart != null && codart.Count() > 0) - //{ - // foreach(Saldiart sa in codart) - // { - // string artTrovato = sa.slcodice; - // co= co.Where(t => t.slcodice != null && t.slcodice.ToUpper().Contains(artTrovato.ToUpper()) - // && t.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); - // } - //} - //else - //{ - // // devo svuotare l'elenco articoli - // co = co.Take(0).ToList(); - //} - co = co.Where(t => t.amcodice != null && t.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); - - } - //2024-02-19: se l'articolo è gestito a matricole, la query restituisce tutte le righe splittate, - //in questo caso forzo la quantità a 1 - if (co != null && co.Count() > 0) - { - foreach (Saldiart s in co) + _saldi = getSaldiartByTenant(ten); + Configurazioni conf = await readConf(tenConf); + int max_record = 0; + max_record = conf.max_record != null ? conf.max_record.Value : 0; + string codlis = string.Empty; + _clienti = getClientiByTenant(ten); + var a = await _clienti.Where(t => t.ancodice == codcli).ToListAsync(); + if (a != null && a.Count() == 0) { - if (s.gest_matr!=null && s.gest_matr.Equals("S")) - { - s.slqtaper = 1; - } - + codlis = conf.listino; } + else + { + codlis = string.IsNullOrEmpty(a.First().annumlis) ? conf.listino : a.First().annumlis; + } + var co = await _saldi.Where(t => t.slcodmag != null && t.slcodmag.Equals(maga) && t.licodlis != null && t.licodlis.Equals(codlis)).ToListAsync(); + + if (!string.IsNullOrEmpty(art)) + { + co = co.Where(t => t.slcodice != null && t.slcodice.ToUpper().Contains(art.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(desart)) + { + co = co.Where(t => t.ardesart != null && t.ardesart.ToUpper().Contains(desart.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(matric)) + { + //List lista = new List(); + //var codart = co.Where(m => m.amcodice != null && m.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); + //var query = co.Where(p => codart.Any(kw => p..StartsWith(kw))); + //if (codart != null && codart.Count() > 0) + //{ + // foreach(Saldiart sa in codart) + // { + // string artTrovato = sa.slcodice; + // co= co.Where(t => t.slcodice != null && t.slcodice.ToUpper().Contains(artTrovato.ToUpper()) + // && t.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); + // } + //} + //else + //{ + // // devo svuotare l'elenco articoli + // co = co.Take(0).ToList(); + //} + co = co.Where(t => t.amcodice != null && t.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); + + } + //2024-02-19: se l'articolo è gestito a matricole, la query restituisce tutte le righe splittate, + //in questo caso forzo la quantità a 1 + if (co != null && co.Count() > 0) + { + foreach (Saldiart s in co) + { + if (s.gest_matr != null && s.gest_matr.Equals("S")) + { + s.slqtaper = 1; + } + + } + } + co = co.Take(max_record).ToList(); + return StatusCode(StatusCodes.Status200OK, co); } - co = co.Take(max_record).ToList(); - return StatusCode(StatusCodes.Status200OK, co); + } catch (Exception ex) { @@ -15561,6 +15715,31 @@ namespace ApiPolo.Controllers } } + /// VIRTUAL TASK: lista mag_new per azienda + [HttpGet("VTMagNewList")] + public async Task>> VTMagNewList(string token) + { + try + { + List mnlist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _magNewVT = _VT_MagNew.MagNewVt; + + var listaMn = await _magNewVT.Where(x => x.Azienda.Equals(ten)).ToListAsync(); + foreach (Vt_Mag_New mg in listaMn) + { + mnlist.Add(mg); + } + return StatusCode(StatusCodes.Status200OK, mnlist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); ; + } + } + #endregion #region Logging diff --git a/ApiPolo/Models/VT_dbcontext/VT_MAG_NEW_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_MAG_NEW_DbContext.cs new file mode 100644 index 0000000..967266a --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_MAG_NEW_DbContext.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Internal; + +namespace ApiPolo.Models.VT_dbcontext +{ + public class VT_MAG_NEW_DbContext : DbContext + { + public DbSet MagNewVt { get; set; } + + public VT_MAG_NEW_DbContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("MAG_NEW_VT"); + modelBuilder.Entity() + .HasKey(Table => new { + Table.Azienda, + Table.Seriale_Rapportino, + Table.Riga + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_SALDIART_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_SALDIART_DbContext.cs new file mode 100644 index 0000000..fa2b70c --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_SALDIART_DbContext.cs @@ -0,0 +1,19 @@ +using ApiPolo.Models.PMS_dbcontext; +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + public class VT_SALDIART_DbContext : DbContext + { + public DbSet? SaldiArt_VT { get; set; } + + public VT_SALDIART_DbContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_SALDIART_PREZZI"); + } + } +} diff --git a/ApiPolo/Models/Vt_Mag_New.cs b/ApiPolo/Models/Vt_Mag_New.cs new file mode 100644 index 0000000..98317b6 --- /dev/null +++ b/ApiPolo/Models/Vt_Mag_New.cs @@ -0,0 +1,34 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + public class Vt_Mag_New + { + [Key] + [Required] + public string Azienda { get; set; } + [Key] + [Required] + public string Seriale_Rapportino { get; set; } + [Key] + [Required] + public int Riga { get; set; } + public string Magazzino { get; set; } + public string Articolo { get; set; } + public string Tipo_Movimento { get; set; } + public decimal? Quantita { get; set; } + public decimal? Prezzo { get; set; } + public string Codice_Tecnico { get; set; } + public string Generato { get; set; } + public string Note { get; set; } + public string CodLotto { get; set; } + public string Matricola { get; set; } + public int? Cprownum { get; set; } + public string Desc_Art { get; set; } + public string CodImp { get; set; } + public string Desc_Sup { get; set; } + public string? Cpccchk { get; set; } + + } +} diff --git a/ApiPolo/Startup.cs b/ApiPolo/Startup.cs index 046c40d..c20ac76 100644 --- a/ApiPolo/Startup.cs +++ b/ApiPolo/Startup.cs @@ -752,6 +752,13 @@ 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); } + )); + #endregion #region LIFT_WEB