118 lines
4.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|