ApiSoftway/Controllers/ModificaGiroController.cs
2025-01-14 16:38:23 +01:00

118 lines
4.5 KiB
C#

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<LoginController> _logger;
private readonly IConfiguration? _configuration;
private readonly GESA_MODGIR_DbContext _modgiri_context;
private DbSet<Modgir>? _modgir;
public ModificaGiroController(ILogger<LoginController> logger, IConfiguration? configuration, GESA_MODGIR_DbContext modgiri_context)
{
_logger = logger;
_configuration = configuration;
_modgiri_context= modgiri_context;
}
/// <summary>Salva i dati della consegna</summary>
[HttpPost]
[Route("addModgir")]
public async Task<ActionResult<GiriConsegna_out>> 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<Modgir> 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;
}
}
}