diff --git a/NKC.Data/Controllers/NKCController.cs b/NKC.Data/Controllers/NKCController.cs new file mode 100644 index 0000000..983868d --- /dev/null +++ b/NKC.Data/Controllers/NKCController.cs @@ -0,0 +1,295 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using NKC.Data.DbModels; +using NKC.Data.DTO; +using NLog; + +namespace NKC.Data.Controllers +{ + public class NKCController : IDisposable + { + #region Private Fields + + private static IConfiguration _configuration = null!; + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); + + #endregion Private Fields + + #region Public Constructors + + public NKCController(IConfiguration configuration) + { + _configuration = configuration; + } + + #endregion Public Constructors + + #region Public Methods + + public bool DbForceMigrate() + { + bool answ = false; + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + try + { + localDbCtx.DbForceMigrate(); + answ = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione in DbForceMigrate{Environment.NewLine}{exc}"); + } + } + return answ; + } + + public void Dispose() + { + Log.Info("Dispose di NKCController"); + } + + public List MaterialsGetAll() + { + List dbResult = new List(); + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + dbResult = localDbCtx + .DbSetMaterials + .Where(x => x.MatID > 0) + .Select(x => new MaterialDTO() + { + MatID = x.MatID, + MatExtCode = x.MatExtCode, + MatDesc = x.MatDesc, + LMm = x.LMm, + WMm = x.WMm, + TMm = x.TMm, + ApprovUser = x.ApprovUser, + ApprovDate = x.ApprovDate, + NumSize = x.RemnantNav== null?0: x.RemnantNav.Count, + TotQty = x.RemnantNav == null ? 0 : x.RemnantNav.Sum(r => r.QtyAvail) + } + ) + .ToList(); + } + return dbResult; + } + + public List MovMagGetFilt(int RemnId, int numShow) + { + List dbResult = new List(); + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + dbResult = localDbCtx + .DbSetMovMag + .Where(x => x.RemnID == RemnId) + .OrderByDescending(o => o.DtRec) + //.Include(m => m.RemnantNav) + .Take(numShow) + .ToList(); + } + return dbResult; + } + + public bool AddPrintJob(string tipoReport, string keyParam, string prtName) + { + bool done = false; + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + try + { + DateTime adesso = DateTime.Now; + PrintJobQueue newRec = new PrintJobQueue() + { + TipoReport = tipoReport, + KeyParam = keyParam, + PrtName = prtName, + Stato = 0, + DtStart = adesso, + DtLastTry = adesso + }; + + localDbCtx.DbSetPrintJobQueues.Add(newRec); + + localDbCtx.SaveChanges(); + done = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione in AddPrintJob:{Environment.NewLine}{exc}"); + } + } + return done; + } + + public List RemnantsGetAll() + { + List dbResult = new List(); + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + dbResult = localDbCtx + .DbSetRemnants + .ToList(); + } + return dbResult; + } + public RemnantsModel RemnantGetByid(int RemnId) + { + RemnantsModel? dbResult = new RemnantsModel(); + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + dbResult = localDbCtx + .DbSetRemnants + .Where(x => x.RemnID == RemnId) + .Include(m => m.MaterialNav) + .FirstOrDefault(); + } + if (dbResult == null) + { + dbResult = new RemnantsModel(); + } + return dbResult; + } + + public List RemnantsGetFilt(int matId, int minQty) + { + List dbResult = new List(); + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + dbResult = localDbCtx + .DbSetRemnants + .Where(x => (x.MatID == matId || matId == 0) && (x.QtyAvail >= minQty || minQty == 0)) + //.OrderBy(o => o.Area) + .Include(m => m.MaterialNav) + .ToList(); + } + return dbResult; + } + + public RemnantsModel RemnantGetByQr(string QrCode) + { + RemnantsModel? dbResult = new RemnantsModel(); + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + var rawList = localDbCtx + .DbSetRemnants + .Include(m => m.MaterialNav) + .ToList(); + + dbResult = rawList + .Where(x => x.RemDtmx == QrCode) + .FirstOrDefault(); + } + if (dbResult == null) + { + dbResult = new RemnantsModel(); + } + return dbResult; + } + + public bool RemnantsUpsert(RemnantsModel updItem, string userId) + { + bool done = false; + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + + try + { + RemnantsModel? currData = localDbCtx + .DbSetRemnants + .Where(x => x.RemnID == updItem.RemnID) + .FirstOrDefault(); + if (currData != null) + { + // aggiungo record variazione quantità... + int delta = updItem.QtyAvail - currData.QtyAvail; + if (delta != 0) + { + MovMagModel recMovMag = new MovMagModel() + { + DtRec = DateTime.Now, + RemnID = updItem.RemnID, + QtyRec = delta, + UserId = userId + }; + localDbCtx.DbSetMovMag.Add(recMovMag); + } + + // aggiorno valori + currData.MatID = updItem.MatID; + currData.DtMod = updItem.DtMod; + currData.Location = updItem.Location; + currData.Note = updItem.Note; + currData.QtyAvail = updItem.QtyAvail; + currData.LMm = updItem.LMm; + currData.WMm = updItem.WMm; + currData.TMm = updItem.TMm; + localDbCtx.Entry(currData).State = EntityState.Modified; + } + else + { + // aggiungo record variazione quantità... + MovMagModel recMovMag = new MovMagModel() + { + DtRec = DateTime.Now, + RemnID = updItem.RemnID, + QtyRec = updItem.QtyAvail + }; + localDbCtx.DbSetMovMag.Add(recMovMag); + + // aggiungo record puntuale + currData = new RemnantsModel() + { + MatID = updItem.MatID, + DtMod = updItem.DtMod, + Location = updItem.Location, + Note = updItem.Note, + QtyAvail = updItem.QtyAvail, + LMm = updItem.LMm, + WMm = updItem.WMm, + TMm = updItem.TMm + }; + localDbCtx + .DbSetRemnants + .Add(currData); + } + localDbCtx.SaveChanges(); + done = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione in PlantUpdate:{Environment.NewLine}{exc}"); + } + } + return done; + } + + /// + /// Annulla modifiche su una specifica entity (cancel update) + /// + /// + /// + public bool rollBackEntity(object item) + { + bool answ = false; + using (NKCContext localDbCtx = new NKCContext(_configuration)) + { + try + { + if (localDbCtx.Entry(item).State == EntityState.Deleted || localDbCtx.Entry(item).State == EntityState.Modified) + { + localDbCtx.Entry(item).Reload(); + } + } + catch (Exception exc) + { + Log.Error($"Eccezione in rollBackEntity{Environment.NewLine}{exc}"); + } + } + return answ; + } + + #endregion Public Methods + } +} \ No newline at end of file diff --git a/NKC.Data/DTO/MaterialDTO.cs b/NKC.Data/DTO/MaterialDTO.cs new file mode 100644 index 0000000..869c627 --- /dev/null +++ b/NKC.Data/DTO/MaterialDTO.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NKC.Data.DTO +{ + + // + // This is here so CodeMaid doesn't reorganize this document + // + public class MaterialDTO + + { + public int MatID { get; set; } + + public int MatExtCode { get; set; } = 0; + public string MatDesc { get; set; } = ""; + public DateTime ApprovDate { get; set; } = DateTime.Now.AddYears(10); + public string ApprovUser { get; set; } = ""; + public decimal LMm { get; set; } = 0; + public decimal WMm { get; set; } = 0; + public decimal TMm { get; set; } = 0; + + public string MatDtmx + { + get => $"MT{MatExtCode:00000000}"; + } + + public decimal LIn + { + get => Math.Round(LMm / (decimal)25.4, 3); + } + public decimal WIn + { + get => Math.Round(WMm / (decimal)25.4, 3); + } + public decimal TIn + { + get => Math.Round(TMm / (decimal)25.4, 3); + } + + public int NumSize { get; set; } = 0; + public int TotQty { get; set; } = 0; + } +} diff --git a/NKC.Data/DTO/RemnantDTO.cs b/NKC.Data/DTO/RemnantDTO.cs new file mode 100644 index 0000000..90ba0b1 --- /dev/null +++ b/NKC.Data/DTO/RemnantDTO.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NKC.Data.DTO +{ + public class RemnantDTO + { + } +} diff --git a/NKC.Data/DbModels/MaterialModel.cs b/NKC.Data/DbModels/MaterialModel.cs new file mode 100644 index 0000000..e1a64e4 --- /dev/null +++ b/NKC.Data/DbModels/MaterialModel.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace NKC.Data.DbModels +{ + // + // This is here so CodeMaid doesn't reorganize this document + // + [Table("Materials")] + public partial class MaterialModel + { + [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int MatID { get; set; } + + public int MatExtCode { get; set; } = 0; + public string MatDesc { get; set; } = ""; + public DateTime ApprovDate { get; set; } = DateTime.Now.AddYears(10); + public string ApprovUser { get; set; } = ""; + public decimal LMm { get; set; } = 0; + public decimal WMm { get; set; }=0; + public decimal TMm { get; set; }=0; + + [NotMapped] + public string MatDtmx { + get => $"MT{MatExtCode:00000000}"; + } + + + public virtual ICollection? RemnantNav { get; set; } + } +} diff --git a/NKC.Data/DbModels/MovMagModel.cs b/NKC.Data/DbModels/MovMagModel.cs new file mode 100644 index 0000000..54037aa --- /dev/null +++ b/NKC.Data/DbModels/MovMagModel.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace NKC.Data.DbModels +{ + // + // This is here so CodeMaid doesn't reorganize this document + // + //[Index(nameof(Installazione), nameof(Active), nameof(DiskStatus))] + [Table("MovMag")] + public partial class MovMagModel + { + /// + /// Primary Key AUTO + /// + [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int MovID { get; set; } + + /// + /// DateTime record + /// + public DateTime DtRec { get; set; } = DateTime.Now; + + /// + /// Ext ref for Remnants + /// + public int RemnID { get; set; } + + /// + /// Qty recorded (delta +/-) + /// + public int QtyRec { get; set; } = 0; + + /// + /// User modificatore + /// + public string UserId { get; set; } = ""; + + /// + /// Navigation property to Remnant + /// + [ForeignKey("RemnID")] + public virtual RemnantsModel? RemnantNav { get; set; } + + } +} diff --git a/NKC.Data/DbModels/PrintJobQueue.cs b/NKC.Data/DbModels/PrintJobQueue.cs new file mode 100644 index 0000000..e5f2182 --- /dev/null +++ b/NKC.Data/DbModels/PrintJobQueue.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; + +namespace NKC.Data.DbModels +{ + + // + // This is here so CodeMaid doesn't reorganize this document + // + [Table("PrintJobQueue")] + public partial class PrintJobQueue + { + public int IdxPrintJob { get; set; } + public string TipoReport { get; set; } = null!; + public string KeyParam { get; set; } = null!; + public string PrtName { get; set; } = null!; + public DateTime DtStart { get; set; } + public DateTime? DtEnd { get; set; } + public int Stato { get; set; } + public DateTime? DtLastTry { get; set; } + } +} diff --git a/NKC.Data/DbModels/RemnantsModel.cs b/NKC.Data/DbModels/RemnantsModel.cs new file mode 100644 index 0000000..e233aa4 --- /dev/null +++ b/NKC.Data/DbModels/RemnantsModel.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace NKC.Data.DbModels +{ + // + // This is here so CodeMaid doesn't reorganize this document + // + //[Index(nameof(Installazione), nameof(Active), nameof(DiskStatus))] + [Table("RemnantsList")] + public partial class RemnantsModel + { + /// + /// Primary Key AUTO + /// + [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int RemnID { get; set; } + + /// + /// Ext ref for Material + /// + public int MatID { get; set; } + + /// + /// Location + /// + public string Location { get; set; } = ""; + /// + /// Qty available on wharehouse + /// + public int QtyAvail { get; set; } = 0; + + /// + /// DateTime last modification + /// + public DateTime DtMod { get; set; } = DateTime.Now.AddYears(10); + + /// + /// Remnant's Lenght + /// + public decimal LMm { get; set; } = 0; + + /// + /// Remnant's Width + /// + public decimal WMm { get; set; } = 0; + + /// + /// Remnant's Thikness + /// + public decimal TMm { get; set; } = 0; + + [NotMapped] + public decimal LIn + { + get => Math.Round(LMm / (decimal)25.4, 3); + } + [NotMapped] + public decimal WIn + { + get => Math.Round(WMm / (decimal)25.4, 3); + } + [NotMapped] + public decimal TIn + { + get => Math.Round(TMm / (decimal)25.4, 3); + } + + + /// + /// Note (optional) + /// + public string Note { get; set; } = ""; + + [NotMapped] + public decimal Area + { + get => LMm * WMm; + } + + + [NotMapped] + public string RemDtmx + { + get + { + string answ = $"MT99999999-{LMm * 1000:00000000}"; + if (MaterialNav != null) + { + answ = $"MT{MaterialNav.MatExtCode:00000000}-{LMm * 1000:00000000}"; + } + return answ; + } + } + + /// + /// Navigation property to Material + /// + [ForeignKey("MatID")] + public virtual MaterialModel MaterialNav { get; set; } = null!; + + } +} diff --git a/NKC.Data/Enum.cs b/NKC.Data/Enum.cs new file mode 100644 index 0000000..727d26d --- /dev/null +++ b/NKC.Data/Enum.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NKC.Data +{ + public class Enum + { + #region Public Enums + + public enum RemnState + { + /// + /// Non definito + /// + ND = 0, + + /// + /// Selezionato x operazioni (veto interfaccia ad altri usi) + /// + Selected + } + + #endregion Public Enums + } +} \ No newline at end of file diff --git a/NKC.Data/Migrations/20211118172800_InitDb.Designer.cs b/NKC.Data/Migrations/20211118172800_InitDb.Designer.cs new file mode 100644 index 0000000..7724cd5 --- /dev/null +++ b/NKC.Data/Migrations/20211118172800_InitDb.Designer.cs @@ -0,0 +1,80 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NKC.Data; + +#nullable disable + +namespace NKC.Data.Migrations +{ + [DbContext(typeof(NKCContext))] + [Migration("20211118172800_InitDb")] + partial class InitDb + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Property("MatID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MatID"), 1L, 1); + + b.Property("ApprovDate") + .ValueGeneratedOnAdd() + .HasColumnType("datetime") + .HasDefaultValueSql("(getdate())"); + + b.Property("ApprovUser") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasDefaultValueSql("('')"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("L_mm"); + + b.Property("MatDesc") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasDefaultValueSql("('')") + .HasComment("Description"); + + b.Property("MatExtCode") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("T_mm"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("W_mm"); + + b.HasKey("MatID"); + + b.HasIndex(new[] { "MatExtCode" }, "Idx_Materials_MatExtCode_Unique") + .IsUnique(); + + b.ToTable("Materials"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/NKC.Data/Migrations/20211118172800_InitDb.cs b/NKC.Data/Migrations/20211118172800_InitDb.cs new file mode 100644 index 0000000..01d1b6c --- /dev/null +++ b/NKC.Data/Migrations/20211118172800_InitDb.cs @@ -0,0 +1,44 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace NKC.Data.Migrations +{ + public partial class InitDb : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Materials", + columns: table => new + { + MatID = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + MatExtCode = table.Column(type: "int", nullable: false), + MatDesc = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: false, defaultValueSql: "('')", comment: "Description"), + ApprovDate = table.Column(type: "datetime", nullable: false, defaultValueSql: "(getdate())"), + ApprovUser = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false, defaultValueSql: "('')"), + L_mm = table.Column(type: "decimal(18,3)", nullable: false), + W_mm = table.Column(type: "decimal(18,3)", nullable: false), + T_mm = table.Column(type: "decimal(18,3)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Materials", x => x.MatID); + }); + + migrationBuilder.CreateIndex( + name: "Idx_Materials_MatExtCode_Unique", + table: "Materials", + column: "MatExtCode", + unique: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Materials"); + } + } +} diff --git a/NKC.Data/Migrations/20211118173720_AddRemnantsTable.Designer.cs b/NKC.Data/Migrations/20211118173720_AddRemnantsTable.Designer.cs new file mode 100644 index 0000000..085ca6f --- /dev/null +++ b/NKC.Data/Migrations/20211118173720_AddRemnantsTable.Designer.cs @@ -0,0 +1,132 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NKC.Data; + +#nullable disable + +namespace NKC.Data.Migrations +{ + [DbContext(typeof(NKCContext))] + [Migration("20211118173720_AddRemnantsTable")] + partial class AddRemnantsTable + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Property("MatID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MatID"), 1L, 1); + + b.Property("ApprovDate") + .ValueGeneratedOnAdd() + .HasColumnType("datetime") + .HasDefaultValueSql("(getdate())"); + + b.Property("ApprovUser") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasDefaultValueSql("('')"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("L_mm"); + + b.Property("MatDesc") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasDefaultValueSql("('')") + .HasComment("Description"); + + b.Property("MatExtCode") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("T_mm"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("W_mm"); + + b.HasKey("MatID"); + + b.HasIndex(new[] { "MatExtCode" }, "Idx_Materials_MatExtCode_Unique") + .IsUnique(); + + b.ToTable("Materials"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.Property("RemnID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("RemnID"), 1L, 1); + + b.Property("DtMod") + .HasColumnType("datetime2"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)"); + + b.Property("Location") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MatID") + .HasColumnType("int"); + + b.Property("Note") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("QtyAvail") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)"); + + b.HasKey("RemnID"); + + b.HasIndex("MatID"); + + b.ToTable("RemnantsList"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.HasOne("NKC.Data.DbModels.MaterialModel", "MaterialNav") + .WithMany() + .HasForeignKey("MatID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MaterialNav"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/NKC.Data/Migrations/20211118173720_AddRemnantsTable.cs b/NKC.Data/Migrations/20211118173720_AddRemnantsTable.cs new file mode 100644 index 0000000..7c129a8 --- /dev/null +++ b/NKC.Data/Migrations/20211118173720_AddRemnantsTable.cs @@ -0,0 +1,50 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace NKC.Data.Migrations +{ + public partial class AddRemnantsTable : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "RemnantsList", + columns: table => new + { + RemnID = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + MatID = table.Column(type: "int", nullable: false), + Location = table.Column(type: "nvarchar(max)", nullable: false), + QtyAvail = table.Column(type: "int", nullable: false), + DtMod = table.Column(type: "datetime2", nullable: false), + LMm = table.Column(type: "decimal(18,3)", nullable: false), + WMm = table.Column(type: "decimal(18,3)", nullable: false), + TMm = table.Column(type: "decimal(18,3)", nullable: false), + Note = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_RemnantsList", x => x.RemnID); + table.ForeignKey( + name: "FK_RemnantsList_Materials_MatID", + column: x => x.MatID, + principalTable: "Materials", + principalColumn: "MatID", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_RemnantsList_MatID", + table: "RemnantsList", + column: "MatID"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "RemnantsList"); + } + } +} diff --git a/NKC.Data/Migrations/20211119182450_AddMovMagTable.Designer.cs b/NKC.Data/Migrations/20211119182450_AddMovMagTable.Designer.cs new file mode 100644 index 0000000..9d52d4b --- /dev/null +++ b/NKC.Data/Migrations/20211119182450_AddMovMagTable.Designer.cs @@ -0,0 +1,172 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NKC.Data; + +#nullable disable + +namespace NKC.Data.Migrations +{ + [DbContext(typeof(NKCContext))] + [Migration("20211119182450_AddMovMagTable")] + partial class AddMovMagTable + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Property("MatID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MatID"), 1L, 1); + + b.Property("ApprovDate") + .ValueGeneratedOnAdd() + .HasColumnType("datetime") + .HasDefaultValueSql("(getdate())"); + + b.Property("ApprovUser") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasDefaultValueSql("('')"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("L_mm"); + + b.Property("MatDesc") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasDefaultValueSql("('')") + .HasComment("Description"); + + b.Property("MatExtCode") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("T_mm"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("W_mm"); + + b.HasKey("MatID"); + + b.HasIndex(new[] { "MatExtCode" }, "Idx_Materials_MatExtCode_Unique") + .IsUnique(); + + b.ToTable("Materials"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MovMagModel", b => + { + b.Property("MovID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MovID"), 1L, 1); + + b.Property("DtRec") + .HasColumnType("datetime2"); + + b.Property("QtyRec") + .HasColumnType("int"); + + b.Property("RemnID") + .HasColumnType("int"); + + b.HasKey("MovID"); + + b.HasIndex("RemnID"); + + b.ToTable("MovMag"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.Property("RemnID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("RemnID"), 1L, 1); + + b.Property("DtMod") + .HasColumnType("datetime2"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)"); + + b.Property("Location") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MatID") + .HasColumnType("int"); + + b.Property("Note") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("QtyAvail") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)"); + + b.HasKey("RemnID"); + + b.HasIndex("MatID"); + + b.ToTable("RemnantsList"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MovMagModel", b => + { + b.HasOne("NKC.Data.DbModels.RemnantsModel", "RemnantNav") + .WithMany() + .HasForeignKey("RemnID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RemnantNav"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.HasOne("NKC.Data.DbModels.MaterialModel", "MaterialNav") + .WithMany("RemnantNav") + .HasForeignKey("MatID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MaterialNav"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Navigation("RemnantNav"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/NKC.Data/Migrations/20211119182450_AddMovMagTable.cs b/NKC.Data/Migrations/20211119182450_AddMovMagTable.cs new file mode 100644 index 0000000..77c5b39 --- /dev/null +++ b/NKC.Data/Migrations/20211119182450_AddMovMagTable.cs @@ -0,0 +1,47 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace NKC.Data.Migrations +{ + public partial class AddMovMagTable : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + migrationBuilder.CreateTable( + name: "MovMag", + columns: table => new + { + MovID = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + DtRec = table.Column(type: "datetime2", nullable: false), + RemnID = table.Column(type: "int", nullable: false), + QtyRec = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_MovMag", x => x.MovID); + table.ForeignKey( + name: "FK_MovMag_RemnantsList_RemnID", + column: x => x.RemnID, + principalTable: "RemnantsList", + principalColumn: "RemnID", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_MovMag_RemnID", + table: "MovMag", + column: "RemnID"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "MovMag"); + + } + } +} diff --git a/NKC.Data/Migrations/20211120074650_MovMagAddUserId.Designer.cs b/NKC.Data/Migrations/20211120074650_MovMagAddUserId.Designer.cs new file mode 100644 index 0000000..e2d2ab1 --- /dev/null +++ b/NKC.Data/Migrations/20211120074650_MovMagAddUserId.Designer.cs @@ -0,0 +1,176 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NKC.Data; + +#nullable disable + +namespace NKC.Data.Migrations +{ + [DbContext(typeof(NKCContext))] + [Migration("20211120074650_MovMagAddUserId")] + partial class MovMagAddUserId + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Property("MatID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MatID"), 1L, 1); + + b.Property("ApprovDate") + .ValueGeneratedOnAdd() + .HasColumnType("datetime") + .HasDefaultValueSql("(getdate())"); + + b.Property("ApprovUser") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasDefaultValueSql("('')"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("L_mm"); + + b.Property("MatDesc") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasDefaultValueSql("('')") + .HasComment("Description"); + + b.Property("MatExtCode") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("T_mm"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("W_mm"); + + b.HasKey("MatID"); + + b.HasIndex(new[] { "MatExtCode" }, "Idx_Materials_MatExtCode_Unique") + .IsUnique(); + + b.ToTable("Materials"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MovMagModel", b => + { + b.Property("MovID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MovID"), 1L, 1); + + b.Property("DtRec") + .HasColumnType("datetime2"); + + b.Property("QtyRec") + .HasColumnType("int"); + + b.Property("RemnID") + .HasColumnType("int"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("MovID"); + + b.HasIndex("RemnID"); + + b.ToTable("MovMag"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.Property("RemnID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("RemnID"), 1L, 1); + + b.Property("DtMod") + .HasColumnType("datetime2"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)"); + + b.Property("Location") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MatID") + .HasColumnType("int"); + + b.Property("Note") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("QtyAvail") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)"); + + b.HasKey("RemnID"); + + b.HasIndex("MatID"); + + b.ToTable("RemnantsList"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MovMagModel", b => + { + b.HasOne("NKC.Data.DbModels.RemnantsModel", "RemnantNav") + .WithMany() + .HasForeignKey("RemnID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RemnantNav"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.HasOne("NKC.Data.DbModels.MaterialModel", "MaterialNav") + .WithMany("RemnantNav") + .HasForeignKey("MatID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MaterialNav"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Navigation("RemnantNav"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/NKC.Data/Migrations/20211120074650_MovMagAddUserId.cs b/NKC.Data/Migrations/20211120074650_MovMagAddUserId.cs new file mode 100644 index 0000000..0e34722 --- /dev/null +++ b/NKC.Data/Migrations/20211120074650_MovMagAddUserId.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace NKC.Data.Migrations +{ + public partial class MovMagAddUserId : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + + migrationBuilder.AddColumn( + name: "UserId", + table: "MovMag", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "UserId", + table: "MovMag"); + + } + } +} diff --git a/NKC.Data/Migrations/NKCContextModelSnapshot.cs b/NKC.Data/Migrations/NKCContextModelSnapshot.cs new file mode 100644 index 0000000..eac940b --- /dev/null +++ b/NKC.Data/Migrations/NKCContextModelSnapshot.cs @@ -0,0 +1,174 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NKC.Data; + +#nullable disable + +namespace NKC.Data.Migrations +{ + [DbContext(typeof(NKCContext))] + partial class NKCContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Property("MatID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MatID"), 1L, 1); + + b.Property("ApprovDate") + .ValueGeneratedOnAdd() + .HasColumnType("datetime") + .HasDefaultValueSql("(getdate())"); + + b.Property("ApprovUser") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasDefaultValueSql("('')"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("L_mm"); + + b.Property("MatDesc") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasDefaultValueSql("('')") + .HasComment("Description"); + + b.Property("MatExtCode") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("T_mm"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)") + .HasColumnName("W_mm"); + + b.HasKey("MatID"); + + b.HasIndex(new[] { "MatExtCode" }, "Idx_Materials_MatExtCode_Unique") + .IsUnique(); + + b.ToTable("Materials"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MovMagModel", b => + { + b.Property("MovID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("MovID"), 1L, 1); + + b.Property("DtRec") + .HasColumnType("datetime2"); + + b.Property("QtyRec") + .HasColumnType("int"); + + b.Property("RemnID") + .HasColumnType("int"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("MovID"); + + b.HasIndex("RemnID"); + + b.ToTable("MovMag"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.Property("RemnID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("RemnID"), 1L, 1); + + b.Property("DtMod") + .HasColumnType("datetime2"); + + b.Property("LMm") + .HasColumnType("decimal(18,3)"); + + b.Property("Location") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MatID") + .HasColumnType("int"); + + b.Property("Note") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("QtyAvail") + .HasColumnType("int"); + + b.Property("TMm") + .HasColumnType("decimal(18,3)"); + + b.Property("WMm") + .HasColumnType("decimal(18,3)"); + + b.HasKey("RemnID"); + + b.HasIndex("MatID"); + + b.ToTable("RemnantsList"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MovMagModel", b => + { + b.HasOne("NKC.Data.DbModels.RemnantsModel", "RemnantNav") + .WithMany() + .HasForeignKey("RemnID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RemnantNav"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.RemnantsModel", b => + { + b.HasOne("NKC.Data.DbModels.MaterialModel", "MaterialNav") + .WithMany("RemnantNav") + .HasForeignKey("MatID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MaterialNav"); + }); + + modelBuilder.Entity("NKC.Data.DbModels.MaterialModel", b => + { + b.Navigation("RemnantNav"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/NKC.Data/NKC.Data.csproj b/NKC.Data/NKC.Data.csproj new file mode 100644 index 0000000..47f615d --- /dev/null +++ b/NKC.Data/NKC.Data.csproj @@ -0,0 +1,24 @@ + + + + net6.0 + enable + enable + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/NKC.Data/NKCContext.cs b/NKC.Data/NKCContext.cs new file mode 100644 index 0000000..f437ed7 --- /dev/null +++ b/NKC.Data/NKCContext.cs @@ -0,0 +1,164 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using NKC.Data.DbModels; +using NLog; + +namespace NKC.Data +{ + public partial class NKCContext : DbContext + { + #region Private Fields + + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); + + private IConfiguration _configuration = null!; + + #endregion Private Fields + + #region Public Constructors + + [Obsolete("This constructor should never be used directly, and is only needed to generate entityframework stuff. Connection string can be adapted as pleased.")] + public NKCContext() + { + } + + public NKCContext(IConfiguration configuration) + { + _configuration = configuration; + } + + public NKCContext(DbContextOptions options) : base(options) + { + try + { + // se non ci fosse... crea o migra! + Database.Migrate(); + } + catch (Exception exc) + { + Log.Error(exc, "Exception during context initialization 02"); + } + } + + #endregion Public Constructors + + #region Public Properties + + public virtual DbSet DbSetMaterials { get; set; } = null!; + public virtual DbSet DbSetRemnants { get; set; } = null!; + public virtual DbSet DbSetMovMag { get; set; } = null!; + public virtual DbSet DbSetPrintJobQueues { get; set; } = null!; + + #endregion Public Properties + + #region Private Methods + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); + + #endregion Private Methods + + #region Protected Methods + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + if (!optionsBuilder.IsConfigured) + { + string connString = _configuration.GetConnectionString("NKC.DB"); + if (!string.IsNullOrEmpty(connString)) + { + optionsBuilder.UseSqlServer(connString); + } + else + { + optionsBuilder.UseSqlServer("Server=SQL2016DEV;Database=Sauder_NKC;Trusted_Connection=True;"); + } + } + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(entity => + { + + entity.HasIndex(e => e.MatExtCode, "Idx_Materials_MatExtCode_Unique") + .IsUnique(); + + entity.Property(e => e.ApprovDate) + .HasColumnType("datetime") + .HasDefaultValueSql("(getdate())"); + + entity.Property(e => e.ApprovUser) + .HasMaxLength(50) + .HasDefaultValueSql("('')"); + + entity.Property(e => e.LMm) + .HasColumnType("decimal(18, 3)") + .HasColumnName("L_mm"); + + entity.Property(e => e.MatDesc) + .HasMaxLength(500) + .HasDefaultValueSql("('')") + .HasComment("Description"); + + entity.Property(e => e.TMm) + .HasColumnType("decimal(18, 3)") + .HasColumnName("T_mm"); + + entity.Property(e => e.WMm) + .HasColumnType("decimal(18, 3)") + .HasColumnName("W_mm"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.IdxPrintJob); + + entity.ToTable("PrintJobQueue"); + + entity.Property(e => e.DtEnd) + .HasColumnType("datetime") + .HasColumnName("dtEnd"); + + entity.Property(e => e.DtLastTry) + .HasColumnType("datetime") + .HasColumnName("dtLastTry"); + + entity.Property(e => e.DtStart) + .HasColumnType("datetime") + .HasColumnName("dtStart"); + + entity.Property(e => e.KeyParam).HasMaxLength(50); + + entity.Property(e => e.PrtName) + .HasMaxLength(500) + .HasColumnName("prtName"); + + entity.Property(e => e.Stato).HasColumnName("stato"); + + entity.Property(e => e.TipoReport).HasMaxLength(250); + }); + + OnModelCreatingPartial(modelBuilder); + } + + #endregion Protected Methods + + #region Public Methods + + public void DbForceMigrate() + { + try + { + // se non ci fosse... crea o migra! + Database.Migrate(); + Log.Info("DbForceMigrate: done!"); + } + catch (Exception exc) + { + Log.Error(exc, "DbForceMigrate: Exception during context initialization 01"); + } + } + + #endregion Public Methods + } +} \ No newline at end of file