diff --git a/Controllers/ClientiController.cs b/Controllers/ClientiController.cs index 21591f1..a9e8d9b 100644 --- a/Controllers/ClientiController.cs +++ b/Controllers/ClientiController.cs @@ -30,7 +30,7 @@ namespace ApiSoftway.Controllers { List listClienti = new List(); _clienti = _dbClientiContext.Cli; - var lista = await _clienti.Where(x => x.Antipcon.Equals("C")).ToListAsync(); + var lista = await _clienti.Where(x => x.Antipcon.Equals("C")).OrderBy(x => x.Andescri).ToListAsync(); foreach (var client in lista) { diff --git a/Controllers/GiriController.cs b/Controllers/GiriController.cs index 4d9f6c7..0d44406 100644 --- a/Controllers/GiriController.cs +++ b/Controllers/GiriController.cs @@ -9,6 +9,7 @@ using Microsoft.IdentityModel.Tokens; using System; using System.Diagnostics; using System.IdentityModel.Tokens.Jwt; +using System.Linq; using System.Runtime.InteropServices; using System.Security.Claims; using System.Text; @@ -34,6 +35,7 @@ namespace ApiSoftway.Controllers private readonly GESA_PI_GIRI_SERIALI_DbContext _giriseriali_context; private readonly GESA_GIRICONSEGNEDACREARE_DESTINAZIONI_DbContext _daCreareDest_context; private readonly GESA_DESTINAZIONI_WEB_DbContext _destinazioni_web_context; + private readonly GESA_GIRI_TESTATE_DbContext _giri_testate_context; private DbSet? _giri; private DbSet? _giriCons; @@ -50,7 +52,7 @@ namespace ApiSoftway.Controllers , GESA_CONSEGNE_DbContext consegne_context, GESA_GIRICONSEGNE_DbContext giricons_context, GESA_GIRICONSEGNEVISTA_DbContext consegnevista_context, GESA_SBR_ORD_DbContext sbrord_context , GESA_PERSONALE_DbContext personale_context, GESA_AUTOMEZZI_DbContext automezzi_context, GESA_GIRICONSEGNEDACREARE_DbContext daCreare_context , GESA_CONSEGNE_M_DbContext consegne_m_context, GESA_PI_GIRI_SERIALI_DbContext giriseriali_context, GESA_GIRICONSEGNEDACREARE_DESTINAZIONI_DbContext daCreareDest_context - , GESA_DESTINAZIONI_WEB_DbContext destinazioni_web_context) + , GESA_DESTINAZIONI_WEB_DbContext destinazioni_web_context,GESA_GIRI_TESTATE_DbContext giri_testate_context) { _logger = logger; _configuration = configuration; @@ -67,6 +69,7 @@ namespace ApiSoftway.Controllers _giriseriali_context = giriseriali_context; _daCreareDest_context = daCreareDest_context; _destinazioni_web_context = destinazioni_web_context; + _giri_testate_context = giri_testate_context; } [HttpGet("listaGiri")] @@ -125,65 +128,73 @@ namespace ApiSoftway.Controllers var aut = await _automezzi.ToListAsync(); return aut; } - - /// Salva i dati della consegna - [HttpPost] - [Route("addGiro")] - public async Task> addGiro(string? autista,int? bancali, decimal? importo, DateTime? data) + + [HttpGet("brogliaccio")] + public async Task>> brogliaccio() { - GiriConsegna_out tOut = new GiriConsegna_out(); - //string usr = getClaimValueByToken(token, "codice"); - try - { - //step 1 : calcolo il nuovo seriale - _giriConsView = _consegnevista_context.GiriView; - var ser= await _giriConsView.Take(1).OrderByDescending(t => t.SerialeGiro).ToListAsync(); - string ultSer = ser.First().SerialeGiro; - string newSer = calcolaNuovoSeriale(ultSer); - - //step 2 : inserisco in PIGIRCON - GiriConsegna gc=new GiriConsegna(); - gc.Piautist = autista; - gc.Pitbancar = bancali; - gc.Pidata = data; - gc.Pisergir = newSer; - gc.Pidarecu = importo; - using (var transactionGiri = _giricons_context.Database.BeginTransaction()) - { - await _giricons_context.GiriCons.AddAsync(gc); - await _giricons_context.SaveChangesAsync(); - transactionGiri.Commit(); - } - - //step 3 aggiorno con il seriale le righe delle destinazioni - _destinazioni = _destinazioni_context.Destinazioni; - var dest = await _destinazioni.Where(t => t.CodAutista != null && t.CodAutista.Equals(autista) && t.DataCarico != null && t.DataCarico == data && t.serialeGiro==null).OrderByDescending(t => t.DataCarico).ToListAsync(); - foreach(Destinazioni d in dest) - { - Sbr_ord sbr_Ord = new Sbr_ord(); - sbr_Ord.Brserial = d.Brserial; - sbr_Ord.Pisergir = newSer; - using (var transactionDest = _sbrord_context.Database.BeginTransaction()) - { - _sbrord_context.Entry(sbr_Ord).State = EntityState.Modified; - await _sbrord_context.SaveChangesAsync(); - transactionDest.Commit(); - } - } - - var giro = await _giriConsView.Where(t=>t.SerialeGiro.Equals(newSer)).ToListAsync(); - return StatusCode(StatusCodes.Status200OK, giro.First()); - } - catch (Exception ex) - { - string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; - tOut.err_title = ex.Message; - tOut.err_detail = errmsg; - tOut.err_status_code = "500"; - return StatusCode(StatusCodes.Status500InternalServerError, tOut); - } + _sbrord = _sbrord_context.Cons; + var bro = await _sbrord.ToListAsync(); + return bro; } + ///// Salva i dati della consegna + //[HttpPost] + //[Route("addGiro")] + //public async Task> addGiro(string? autista,int? bancali, decimal? importo, DateTime? data) + //{ + // GiriConsegna_out tOut = new GiriConsegna_out(); + // //string usr = getClaimValueByToken(token, "codice"); + // try + // { + // //step 1 : calcolo il nuovo seriale + // _giriConsView = _consegnevista_context.GiriView; + // var ser= await _giriConsView.Take(1).OrderByDescending(t => t.SerialeGiro).ToListAsync(); + // string ultSer = ser.First().SerialeGiro; + // string newSer = calcolaNuovoSeriale(ultSer); + + // //step 2 : inserisco in PIGIRCON + // GiriConsegna gc=new GiriConsegna(); + // gc.Piautist = autista; + // gc.Pitbancar = bancali; + // gc.Pidata = data; + // gc.Pisergir = newSer; + // gc.Pidarecu = importo; + // using (var transactionGiri = _giricons_context.Database.BeginTransaction()) + // { + // await _giricons_context.GiriCons.AddAsync(gc); + // await _giricons_context.SaveChangesAsync(); + // transactionGiri.Commit(); + // } + + // //step 3 aggiorno con il seriale le righe delle destinazioni + // _destinazioni = _destinazioni_context.Destinazioni; + // var dest = await _destinazioni.Where(t => t.CodAutista != null && t.CodAutista.Equals(autista) && t.DataCarico != null && t.DataCarico == data && t.serialeGiro==null).OrderByDescending(t => t.DataCarico).ToListAsync(); + // foreach(Destinazioni d in dest) + // { + // Sbr_ord sbr_Ord = new Sbr_ord(); + // sbr_Ord.Brserial = d.Brserial; + // sbr_Ord.Pisergir = newSer; + // using (var transactionDest = _sbrord_context.Database.BeginTransaction()) + // { + // _sbrord_context.Entry(sbr_Ord).State = EntityState.Modified; + // await _sbrord_context.SaveChangesAsync(); + // transactionDest.Commit(); + // } + // } + + // var giro = await _giriConsView.Where(t=>t.SerialeGiro.Equals(newSer)).ToListAsync(); + // return StatusCode(StatusCodes.Status200OK, giro.First()); + // } + // catch (Exception ex) + // { + // string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + // tOut.err_title = ex.Message; + // tOut.err_detail = errmsg; + // tOut.err_status_code = "500"; + // return StatusCode(StatusCodes.Status500InternalServerError, tOut); + // } + //} + [HttpPost] [Route("addGiro2")] public async Task> addGiro2([FromBody] GiriConsegnaView model) @@ -297,6 +308,7 @@ namespace ApiSoftway.Controllers gc.Pidatchi = DateTime.Now; gc.Pitbancar = giro.BancaliCaricati; gc.Pitbanrec=bancaliRecuperati; + gc.Pimezzo = giro.CodMezzo; using (var transactionGiri = _giricons_context.Database.BeginTransaction()) @@ -821,78 +833,107 @@ namespace ApiSoftway.Controllers Destinazioni_out lst = new Destinazioni_out(); _destinazioni = _destinazioni_context.Destinazioni; - var r = await _destinazioni.Where(t => t.Brserial != null && t.Brserial.Equals(seriale)).OrderByDescending(t => t.DataCarico).ThenBy(t => t.Seq).FirstAsync(); + //var r = await _destinazioni.Where(t => t.Brserial != null && t.Brserial.Equals(seriale)).OrderByDescending(t => t.DataCarico).ThenBy(t => t.Seq).FirstAsync(); - Destinazioni_out o = new Destinazioni_out(); - string _aut = !string.IsNullOrEmpty(r.Autista) ? r.Autista.Trim() : string.Empty; + var r = await _destinazioni.Where(t => t.Brserial != null && t.Brserial.Equals(seriale)).OrderByDescending(t => t.DataCarico).ThenBy(t => t.Seq).ToListAsync(); + Destinazioni_out o = new Destinazioni_out(); + if (r!=null && r.Count()>0) + { + string _aut = !string.IsNullOrEmpty(r.First().Autista) ? r.First().Autista.Trim() : string.Empty; o.Autista = _aut; - string _autCod = !string.IsNullOrEmpty(r.CodAutista) ? r.CodAutista.Trim() : string.Empty; + string _autCod = !string.IsNullOrEmpty(r.First().CodAutista) ? r.First().CodAutista.Trim() : string.Empty; o.CodAutista = _autCod; - string _automezzo = !string.IsNullOrEmpty(r.DescAutomezzo) ? r.DescAutomezzo.Trim() : string.Empty; + string _automezzo = !string.IsNullOrEmpty(r.First().DescAutomezzo) ? r.First().DescAutomezzo.Trim() : string.Empty; o.DescAutomezzo = _automezzo; - string _automezzoCod = !string.IsNullOrEmpty(r.CodAutomezzo) ? r.CodAutomezzo.Trim() : string.Empty; - o.CodAutomezzo = r.CodAutomezzo; + string _automezzoCod = !string.IsNullOrEmpty(r.First().CodAutomezzo) ? r.First().CodAutomezzo.Trim() : string.Empty; + o.CodAutomezzo = _automezzoCod; - o.DataCarico = r.DataCarico; - o.Brserial = r.Brserial; - o.Brmerce = r.Brmerce; - o.Brnote = r.Brnote; - o.Cproword = r.Cproword; - o.Cprownum = r.Cprownum; + o.DataCarico = r.First().DataCarico; + o.Brserial = r.First().Brserial; + o.Brmerce = r.First().Brmerce; + o.Brnote = r.First().Brnote; + o.Cproword = r.First().Cproword; + o.Cprownum = r.First().Cprownum; - string _sedeInd = !string.IsNullOrEmpty(r.IndirizzoSede) ? r.IndirizzoSede.Trim() : string.Empty; + string _sedeInd = !string.IsNullOrEmpty(r.First().IndirizzoSede) ? r.First().IndirizzoSede.Trim() : string.Empty; o.IndirizzoSede = _sedeInd; - string _sede = !string.IsNullOrEmpty(r.Sede) ? r.Sede.Trim() : string.Empty; + string _sede = !string.IsNullOrEmpty(r.First().Sede) ? r.First().Sede.Trim() : string.Empty; o.Sede = _sede; - o.CodCommittente = r.CodCommittente; + o.CodCommittente = r.First().CodCommittente; - string _committente = !string.IsNullOrEmpty(r.Committente) ? r.Committente.Trim() : string.Empty; + string _committente = !string.IsNullOrEmpty(r.First().Committente) ? r.First().Committente.Trim() : string.Empty; o.Committente = _committente; - o.CodSede = r.CodSede; - o.ItemList = formattaDestinazione(r); - o.ImportoDaRitirare = r.ImportoDaRitirare; - o.serialeGiro = r.serialeGiro; - o.Casse = r.Casse; - o.Trasf = r.Trasf; - o.Colli = r.Colli; - o.num_cons = r.num_cons; - o.Uova = r.Uova; - o.Cist = r.Cist; - o.Note = r.Note; - o.Seq = r.Seq; - o.Prog=r.Prog; + o.CodSede = r.First().CodSede; + o.ItemList = formattaDestinazione(r.First()); + o.ImportoDaRitirare = r.First().ImportoDaRitirare; + o.serialeGiro = r.First().serialeGiro; + o.Casse = r.First().Casse; + o.Trasf = r.First().Trasf; + o.Colli = r.First().Colli; + o.num_cons = r.First().num_cons; + o.Uova = r.First().Uova; + o.Cist = r.First().Cist; + o.Note = r.First().Note; + o.Seq = r.First().Seq; + o.Prog = r.First().Prog; - if (!string.IsNullOrEmpty(r.consFattaSerial)) + if (!string.IsNullOrEmpty(r.First().consFattaSerial)) { ConsegnaFatta cf = new ConsegnaFatta(); - cf.consFattaSerial = r.consFattaSerial; - cf.consFattaRow = r.consFattaRow; - cf.consFattaAut = r.consFattaAut; - cf.consFattaBanSca = r.consFattaBanSca; - cf.consFattaBanCar = r.consFattaBanCar; - string nota = !string.IsNullOrEmpty(r.consFattaNotBan) ? r.consFattaNotBan.Trim() : string.Empty; + cf.consFattaSerial = r.First().consFattaSerial; + cf.consFattaRow = r.First().consFattaRow; + cf.consFattaAut = r.First().consFattaAut; + cf.consFattaBanSca = r.First().consFattaBanSca; + cf.consFattaBanCar = r.First().consFattaBanCar; + string nota = !string.IsNullOrEmpty(r.First().consFattaNotBan) ? r.First().consFattaNotBan.Trim() : string.Empty; cf.consFattaNotBan = nota; - cf.consFattaImpor = r.consFattaImpor; - cf.consFattaMezzo = r.consFattaMezzo; - string nota2 = !string.IsNullOrEmpty(r.consFattaNotImp) ? r.consFattaNotImp.Trim() : string.Empty; + cf.consFattaImpor = r.First().consFattaImpor; + cf.consFattaMezzo = r.First().consFattaMezzo; + string nota2 = !string.IsNullOrEmpty(r.First().consFattaNotImp) ? r.First().consFattaNotImp.Trim() : string.Empty; cf.consFattaNotImp = nota2; - cf.consFattaFlagCons = r.consFattaFlagCons; - cf.consFattaDataOra = r.consFattaDataOra; + cf.consFattaFlagCons = r.First().consFattaFlagCons; + cf.consFattaDataOra = r.First().consFattaDataOra; - o.ConsFatta = cf; + o.ConsFatta = cf; } - - + } return o; } + [HttpGet("listaGiriTestataByAutistaDataMezzo")] + public async Task>> listaGiriTestataByAutistaDataMezzo(string autista, DateTime? dataGiro, string mezzo) + { + + List lst = new List(); + _giriCons = _giri_testate_context.Giri; + var r = await _giriCons.Where(t => t.Piautist != null && t.Piautist.Equals(autista) && t.Pidata != null && t.Pidata == dataGiro && t.Pimezzo != null && t.Pimezzo.Equals(mezzo)).OrderByDescending(t => t.Pidata).ThenBy(t => t.Pisergir).ToListAsync(); + foreach (GiriConsegna d in r) + { + GiriConsegna_out o = new GiriConsegna_out(); + + o.Pisergir = d.Pisergir; + o.Pidata = d.Pidata; + o.Piautist = d.Piautist; + o.Pitbancar = d.Pitbancar; + o.Pitbanrec = d.Pitbanrec; + o.Pidarecu=d.Pidarecu; + o.Pidatchi = d.Pidatchi; + o.Pimezzo = d.Pimezzo; + + + + lst.Add(o); + } + return lst; + } + /// Salva i dati della consegna [HttpPost] [Route("destinazione/salva")] @@ -920,7 +961,7 @@ namespace ApiSoftway.Controllers string _cliFatturazione = ti.CliFatt; string _codSede = ti.CodSede; string _pisergir = ti.serialeGiro; - int _seque = ti.Seq.Value; + int _seque = ti.Cprownum.Value; t.Cca = _committente; t.Ccda=_cliFatturazione; t.Cprownum = _seque; @@ -1000,7 +1041,7 @@ namespace ApiSoftway.Controllers string _cliFatturazione = ti.CliFatt; string _codSede = ti.CodSede; string _pisergir = ti.serialeGiro; - int _seque = ti.Seq.Value; + int _seque = ti.Cprownum.Value; t.Cca = _committente; t.Ccda = _cliFatturazione; t.Cprownum = _seque; diff --git a/Controllers/ModificaGiroController.cs b/Controllers/ModificaGiroController.cs index 8a12287..019ed64 100644 --- a/Controllers/ModificaGiroController.cs +++ b/Controllers/ModificaGiroController.cs @@ -75,6 +75,7 @@ namespace ApiSoftway.Controllers gc.Picist = model.Picist; gc.Piseq = model.Piseq; gc.Pinote = model.Pinote; + gc.Pisergirold = model.Pisergirold; using (var transactionGiri = _modgiri_context.Database.BeginTransaction()) { diff --git a/Models/Gesa_DbContext/GESA_GIRI_TESTATE_DbContext.cs b/Models/Gesa_DbContext/GESA_GIRI_TESTATE_DbContext.cs new file mode 100644 index 0000000..7a73dcc --- /dev/null +++ b/Models/Gesa_DbContext/GESA_GIRI_TESTATE_DbContext.cs @@ -0,0 +1,16 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiSoftway.Models.Gesa_DbContext +{ + public class GESA_GIRI_TESTATE_DbContext:DbContext + { + public DbSet? Giri { get; set; } + public GESA_GIRI_TESTATE_DbContext(DbContextOptions options) : base(options) + { + } + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_GIRI_TESTATE"); + } + } +} diff --git a/Models/Gesa_DbContext/GESA_SBR_ORD_DbContext.cs b/Models/Gesa_DbContext/GESA_SBR_ORD_DbContext.cs index af1348d..95ae1cf 100644 --- a/Models/Gesa_DbContext/GESA_SBR_ORD_DbContext.cs +++ b/Models/Gesa_DbContext/GESA_SBR_ORD_DbContext.cs @@ -14,10 +14,7 @@ namespace ApiSoftway.Models.Gesa_DbContext /// protected override void OnModelCreating(ModelBuilder modelBuilder) { - modelBuilder.Entity().ToTable("GESASBR_ORD"); - modelBuilder.Entity().HasKey(table => new { - table.Brserial - }); + modelBuilder.Entity().ToView("API_BROGLIACCIO"); } } } diff --git a/Models/GiriConsegna.cs b/Models/GiriConsegna.cs index fd6f28b..dcbdb26 100644 --- a/Models/GiriConsegna.cs +++ b/Models/GiriConsegna.cs @@ -18,7 +18,7 @@ namespace ApiSoftway.Models public decimal? Pirecupe { get; set; } public DateTime? Pidatchi { get; set; } - + public string? Pinote { get; set; } public string? Pimezzo { get; set; } } diff --git a/Models/GiriConsegna_out.cs b/Models/GiriConsegna_out.cs index 86c8da8..35c52ea 100644 --- a/Models/GiriConsegna_out.cs +++ b/Models/GiriConsegna_out.cs @@ -24,5 +24,7 @@ namespace ApiSoftway.Models public string? err_detail { get; set; } /// errore status code (200, 500) public string? err_status_code { get; set; } + public string? Pimezzo { get; set; } + public string? Pinote { get; set; } } } diff --git a/Models/Modgir.cs b/Models/Modgir.cs index 6ff266e..00fd412 100644 --- a/Models/Modgir.cs +++ b/Models/Modgir.cs @@ -24,5 +24,6 @@ namespace ApiSoftway.Models public decimal? Picist { get; set; } public int? Piseq { get; set; } public string? Pinote { get; set; } + public string? Pisergirold { get; set; } } } diff --git a/Models/Modgir_out.cs b/Models/Modgir_out.cs index b18e6ee..488defa 100644 --- a/Models/Modgir_out.cs +++ b/Models/Modgir_out.cs @@ -23,6 +23,7 @@ namespace ApiSoftway.Models public decimal? Picist { get; set; } public int? Piseq { get; set; } public string? Pinote { get; set; } + public string? Pisergirold { get; set; } diff --git a/Models/Sbr_ord.cs b/Models/Sbr_ord.cs index 878483a..8690450 100644 --- a/Models/Sbr_ord.cs +++ b/Models/Sbr_ord.cs @@ -6,10 +6,36 @@ namespace ApiSoftway.Models { [Key] public string? Brserial { get; set; } - public string? Pisergir { get; set; } public string? Brcodcom { get; set; } public string? Brclifat { get; set; } public int? Brnumseq { get; set; } public string? Brcodsed { get; set; } + public DateTime? Brdatcar { get; set; } + + + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? Brqtacol { get; set; } + + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? Brqtavol { get; set; } + + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? Brcolprev { get; set; } + public int? Brconspr { get; set; } + public int? Bruovapr { get; set; } + public int? Brcistpr { get; set; } + public string? Brnote { get; set; } + //BRTARTRA,BRAUTIST, CATNOME, CAUDESC + public string? Brtartra { get; set; } + public string? Brautist { get; set; } + //Autista + public string? Catnome { get; set; } + //Mezzo + public string? Caudesc { get; set; } + + + //non usata + public string? Pisergir { get; set; } + } } diff --git a/Program.cs b/Program.cs index e8bb717..9942855 100644 --- a/Program.cs +++ b/Program.cs @@ -64,6 +64,9 @@ builder.Services.AddDbContext( builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("GESA") , options => { options.CommandTimeout(commandTimeoutInSeconds); } )); +builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("GESA") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); #endregion @@ -105,5 +108,5 @@ app.UseAuthorization(); app.MapControllers(); -app.Run(); -//app.Run("http://localhost:6000"); +//app.Run(); +app.Run("http://localhost:6000"); diff --git a/appsettings.json b/appsettings.json index e7274ba..eb5970e 100644 --- a/appsettings.json +++ b/appsettings.json @@ -8,9 +8,10 @@ "AllowedHosts": "*", "ConnectionStrings": { - "GESA": "Data Source=windowstest.polo;Initial Catalog=AHRGESA;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + //"GESA": "Data Source=windowstest.polo;Initial Catalog=AHRGESA;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "GESA": "Data Source=172.25.30.152;Initial Catalog=AHRGESA_20241016;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" //"GESA": "Data Source=10.0.0.10;Initial Catalog=AHR80_GESA;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", - "ApiStr": "Data Source=windowstest.polo;Initial Catalog=API_POLO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" + //"ApiStr": "Data Source=windowstest.polo;Initial Catalog=API_POLO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" }, "JWT": { "ValidAudience": "http://localhost:4200",