using ApiSoftway.Models; using ApiSoftway.Models.Gesa_DbContext; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; namespace ApiSoftway.Controllers { [Route("api/[controller]")] [ApiController] public class ModificaGiroController : ControllerBase { private readonly ILogger _logger; private readonly IConfiguration? _configuration; private readonly GESA_MODGIR_DbContext _modgiri_context; private DbSet? _modgir; public ModificaGiroController(ILogger logger, IConfiguration? configuration, GESA_MODGIR_DbContext modgiri_context) { _logger = logger; _configuration = configuration; _modgiri_context= modgiri_context; } /// Salva i dati della consegna [HttpPost] [Route("addModgir")] public async Task> addModgir(Modgir model) { Modgir_out tOut = new Modgir_out(); //string usr = getClaimValueByToken(token, "codice"); try { //step 0: se esiste un record con quel seriale, prima cancello e poi inserisco di nuovo _modgir = _modgiri_context.Mod; List lst = _modgir.Where(t => t.Piserial.Equals(model.Piserial) && !t.Pitiprec.Equals("A")).ToList(); foreach (Modgir item in lst) { using (var transaction = _modgiri_context.Database.BeginTransaction()) { _modgiri_context.Entry(item).State = EntityState.Deleted; await _modgiri_context.SaveChangesAsync(); transaction.Commit(); } } //step 1 : calcolo il nuovo seriale _modgir = _modgiri_context.Mod; var ser = await _modgir.Take(1).OrderByDescending(t => t.Piprogre).ToListAsync(); string ultSer = string.Empty; if (ser!=null && ser.Count()>0) { ultSer = ser.First().Piprogre; } string newSer = calcolaNuovoSeriale(ultSer); //step 2 : inserisco in PIGIRCON Modgir gc = new Modgir(); gc.Piprogre = newSer; gc.Piserial = model.Piserial; gc.Pidata = model.Pidata; gc.Picommit = model.Picommit; gc.Pidesdiv = model.Pidesdiv; gc.Pitarga = model.Pitarga; gc.Piautist = model.Piautist; gc.Pitiprec = model.Pitiprec; gc.Pisergir = model.Pisergir; gc.Picasse = model.Picasse; gc.Pitrasf = model.Pitrasf; gc.Picolli = model.Picolli; gc.Pinumcons = model.Pinumcons; gc.Piuova = model.Piuova; gc.Picist = model.Picist; gc.Piseq = model.Piseq; gc.Pinote = model.Pinote; gc.Pisergirold = model.Pisergirold; using (var transactionGiri = _modgiri_context.Database.BeginTransaction()) { await _modgiri_context.Mod.AddAsync(gc); await _modgiri_context.SaveChangesAsync(); transactionGiri.Commit(); } var giro = await _modgiri_context.Mod.Where(t => t.Piprogre.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); } } private string calcolaNuovoSeriale(string ultSer) { string newSer = "0000000000"; if(!string.IsNullOrEmpty(ultSer)) { int ser = Convert.ToInt32(ultSer); ser++; newSer = Convert.ToString(ser); if (ser > 0) { newSer = newSer.PadLeft(10, '0'); } } return newSer; } } }