From 8e2ea5c3122235abcc87806ee34ae43069d86c96 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 23 May 2023 10:22:56 +0200 Subject: [PATCH] Update con ConfigTable x report & co --- WebDoorCreator.Core/Constants.cs | 1 + WebDoorCreator.Data/ConfigConfiguration.cs | 37 + .../Controllers/WebDoorCreatorController.cs | 24 +- WebDoorCreator.Data/DbModels/ConfigModel.cs | 24 + .../20230523081025_ConfigTable.Designer.cs | 891 +++++++++++++++++ .../WDCData/20230523081025_ConfigTable.cs | 32 + .../WDCData/WDCDataContextModelSnapshot.cs | 22 + .../Services/WebDoorCreatorService.cs | 946 ++++++++++-------- WebDoorCreator.Data/WDCDataContext.cs | 1 + 9 files changed, 1539 insertions(+), 439 deletions(-) create mode 100644 WebDoorCreator.Data/ConfigConfiguration.cs create mode 100644 WebDoorCreator.Data/DbModels/ConfigModel.cs create mode 100644 WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.Designer.cs create mode 100644 WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.cs diff --git a/WebDoorCreator.Core/Constants.cs b/WebDoorCreator.Core/Constants.cs index b09caac..3883d1b 100644 --- a/WebDoorCreator.Core/Constants.cs +++ b/WebDoorCreator.Core/Constants.cs @@ -36,6 +36,7 @@ namespace WebDoorCreator.Core // classi utilità x cache REDIS dati DB public const string redisBaseAddr = "WDC"; + public const string rKeyConfig = $"{redisBaseAddr}:Cache:Config"; public const string rKeyCompany = $"{redisBaseAddr}:Cache:Company"; public const string rKeyDoor = $"{redisBaseAddr}:Cache:Door"; public const string rKeyDoorOp = $"{redisBaseAddr}:Cache:DoorOp"; diff --git a/WebDoorCreator.Data/ConfigConfiguration.cs b/WebDoorCreator.Data/ConfigConfiguration.cs new file mode 100644 index 0000000..ac46958 --- /dev/null +++ b/WebDoorCreator.Data/ConfigConfiguration.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using System.Reflection.Emit; +using WebDoorCreator.Data.DbModels; + +namespace WebDoorCreator.Data +{ + public class ConfigConfiguration : IEntityTypeConfiguration + { + #region Public Methods + + public void Configure(EntityTypeBuilder builder) + { + // aggiungo config URL x generazione immagini report + builder.HasData( + seedConfig("prt_ImageCodeBaseUrl", "https://iis01.egalware.com/WDC/SRV/api/", "https://seriate.egalware.com/WDC/SRV/api/", "URL di base per recupero immagini png"), + seedConfig("prt_ReportServerUrl", "http://w2019-sql-steam/reportserver?/Test/WebDoor/", "http://w2019-sql-steam/reportserver?/Test/WebDoor/", "URL di base del Report Server") + ); + } + + #endregion Public Methods + + protected ConfigModel seedConfig(string chaive, string valore, string valoreStd, string note) + { + var newRec = new ConfigModel() + { + chiave = chaive, + valore = valore, + valoreStd = valoreStd, + note = note + }; + return newRec; + } + + } +} \ No newline at end of file diff --git a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs index 8374b6e..b9c6869 100644 --- a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs +++ b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs @@ -2,7 +2,6 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using NLog; -using System.ComponentModel.Design; using System.Data; using WebDoorCreator.Data.DbModels; using WebDoorCreator.Data.DTO; @@ -137,6 +136,25 @@ namespace WebDoorCreator.Data.Controllers return fatto; } + /// + /// Lista configurazione + /// + /// + /// + /// + public List ConfigGetAll() + { + List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + dbResult = localDbCtx + .DbSetConfig + .OrderBy(x => x.chiave) + .ToList(); + } + return dbResult; + } + public void Dispose() { // Clear database context @@ -780,10 +798,10 @@ namespace WebDoorCreator.Data.Controllers { var rawData = dbCtx .DbSetOrders - .Where(x => x.OrderId==orderId) + .Where(x => x.OrderId == orderId) .AsNoTracking() .FirstOrDefault(); - if(rawData!=null) + if (rawData != null) { dbResult = rawData; } diff --git a/WebDoorCreator.Data/DbModels/ConfigModel.cs b/WebDoorCreator.Data/DbModels/ConfigModel.cs new file mode 100644 index 0000000..ac5fec4 --- /dev/null +++ b/WebDoorCreator.Data/DbModels/ConfigModel.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WebDoorCreator.Data.DbModels +{ + // + // This is here so CodeMaid doesn't reorganize this document + // + [Table("Config")] + public partial class ConfigModel + { + [Key] + public string chiave { get; set; } = null!; + public string valore { get; set; } = ""; + public string valoreStd { get; set; } = ""; + public string note { get; set; } = ""; + } + +} diff --git a/WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.Designer.cs b/WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.Designer.cs new file mode 100644 index 0000000..c6081c6 --- /dev/null +++ b/WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.Designer.cs @@ -0,0 +1,891 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WebDoorCreator.Data; + +#nullable disable + +namespace WebDoorCreator.Data.Migrations.WDCData +{ + [DbContext(typeof(WDCDataContext))] + [Migration("20230523081025_ConfigTable")] + partial class ConfigTable + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseCollation("Latin1_General_CI_AS") + .HasAnnotation("ProductVersion", "6.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetRoles", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("AspNetRoles", null, t => t.ExcludeFromMigrations()); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", null, t => t.ExcludeFromMigrations()); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUsers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("AspNetUsers", null, t => t.ExcludeFromMigrations()); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.CompanyModel", b => + { + b.Property("CompanyId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("CompanyId"), 1L, 1); + + b.Property("Address") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("City") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CompanyExtCode") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("CompanyName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("CompanyToken") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("PrivateNote") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("State") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("VAT") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ZipCode") + .HasColumnType("int"); + + b.HasKey("CompanyId"); + + b.ToTable("Company"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.ConfigModel", b => + { + b.Property("chiave") + .HasColumnType("nvarchar(450)"); + + b.Property("note") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("valore") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("valoreStd") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("chiave"); + + b.ToTable("Config"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b => + { + b.Property("DoorId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("DoorId"), 1L, 1); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("DateLockExpiry") + .HasColumnType("datetime2"); + + b.Property("DateMod") + .HasColumnType("datetime2"); + + b.Property("DoorDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DoorExtCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MeasureUnit") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("Quantity") + .HasColumnType("int"); + + b.Property("TypeId") + .HasColumnType("int"); + + b.Property("UnitCost") + .HasColumnType("decimal(18,2)"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdLock") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("DoorId"); + + b.HasIndex("OrderId"); + + b.HasIndex("TypeId"); + + b.ToTable("Door"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b => + { + b.Property("DoorOpId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("DoorOpId"), 1L, 1); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("DateMod") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DoorId") + .HasColumnType("int"); + + b.Property("DtConfirm") + .HasColumnType("datetime2"); + + b.Property("JsoncActVal") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("JsoncConfigVal") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ObjectId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("userConfirm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("DoorOpId"); + + b.HasIndex("DoorId"); + + b.ToTable("DoorOp"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpTypeModel", b => + { + b.Property("DoorOpTypId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("DoorOpTypId"), 1L, 1); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DoorOpIdPathFromPatriarch") + .HasColumnType("hierarchyid"); + + b.Property("ExtDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ExtOpCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FPath") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HasHw") + .HasColumnType("bit"); + + b.Property("HwCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HwDescription") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsConcrete") + .HasColumnType("bit"); + + b.Property("IsDefault") + .HasColumnType("bit"); + + b.Property("JsoncConfig") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MaxAllowed") + .HasColumnType("int"); + + b.Property("OpCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentDoorOpId") + .HasColumnType("int"); + + b.Property("Rev") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ValidFrom") + .HasColumnType("datetime2"); + + b.Property("ValidUntil") + .HasColumnType("datetime2"); + + b.HasKey("DoorOpTypId"); + + b.ToTable("DoorOpType"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorTypeModel", b => + { + b.Property("TypeId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("TypeId"), 1L, 1); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TypeCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("TypeId"); + + b.ToTable("DoorType"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.GraphicParamsModel", b => + { + b.Property("GraphicParamId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("GraphicParamId"), 1L, 1); + + b.Property("compoId") + .HasColumnType("int"); + + b.Property("graphicParamAlias") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamDefaultVal") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamsN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("GraphicParamId"); + + b.ToTable("GraphicParams"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.HardwareModel", b => + { + b.Property("HardwareId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("HardwareId"), 1L, 1); + + b.Property("compoAlias") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("compoLayerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("compoName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("compoTemplateIsActive") + .HasColumnType("bit"); + + b.HasKey("HardwareId"); + + b.ToTable("Hardware"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.LanguageModel", b => + { + b.Property("CodLingua") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("DescrizioneLingua") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("CodLingua"); + + b.ToTable("Languages"); + + b.HasData( + new + { + CodLingua = "EN", + DescrizioneLingua = "English" + }, + new + { + CodLingua = "IT", + DescrizioneLingua = "Italiano" + }); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesModel", b => + { + b.Property("TableName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("FieldName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Value") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("DefaultVal") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("InputType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Label") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Ordinal") + .HasColumnType("int"); + + b.Property("isSerializable") + .HasMaxLength(5) + .HasColumnType("bit"); + + b.HasKey("TableName", "FieldName", "Value"); + + b.ToTable("ListValues"); + + b.HasData( + new + { + TableName = "Opening", + FieldName = "Swing", + Value = "LH", + Label = "Left Handed", + Ordinal = 1, + isSerializable = false + }, + new + { + TableName = "Opening", + FieldName = "Swing", + Value = "RH", + Label = "Right Handed", + Ordinal = 2, + isSerializable = false + }, + new + { + TableName = "Opening", + FieldName = "Swing", + Value = "LHR", + Label = "Left Handed Reverse", + Ordinal = 3, + isSerializable = false + }, + new + { + TableName = "Opening", + FieldName = "Swing", + Value = "RHR", + Label = "Right Handed Reverse", + Ordinal = 4, + isSerializable = false + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + Value = "BV", + Label = "Bevel", + Ordinal = 1, + isSerializable = false + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + Value = "SQ", + Label = "Squared", + Ordinal = 2, + isSerializable = false + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + Value = "1B", + Label = "Bull Nose 1", + Ordinal = 3, + isSerializable = false + }); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesTempModel", b => + { + b.Property("TableName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("FieldName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Value") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("DefaultVal") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("InputType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Label") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Ordinal") + .HasColumnType("int"); + + b.Property("isSerializable") + .HasMaxLength(5) + .HasColumnType("bit"); + + b.HasKey("TableName", "FieldName", "Value"); + + b.ToTable("ListValuesTemp"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b => + { + b.Property("OrderId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderId"), 1L, 1); + + b.Property("CompanyId") + .HasColumnType("int"); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("DateMod") + .HasColumnType("datetime2"); + + b.Property("OrderDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderExtCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("OrderId"); + + b.HasIndex("CompanyId"); + + b.ToTable("Order"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderStatusViewModel", b => + { + b.Property("OrderId") + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderId"), 1L, 1); + + b.Property("CompanyId") + .HasColumnType("int"); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("NumDoors") + .HasColumnType("int"); + + b.Property("NumType") + .HasColumnType("int"); + + b.Property("OrderDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderExtCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderStatus") + .HasColumnType("int"); + + b.Property("TotCost") + .HasColumnType("decimal(18,2)"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("OrderId"); + + b.ToView("OrderStatusViewModel"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.SerializedDoorsModel", b => + { + b.Property("DoorTmpId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("DoorTmpId"), 1L, 1); + + b.Property("DoorSerVal") + .HasColumnType("nvarchar(max)"); + + b.Property("Lock") + .HasColumnType("bit"); + + b.HasKey("DoorTmpId"); + + b.ToTable("SerializedDoors"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.UsersViewModel", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "RoleId"); + + b.ToView("UsersViewModel"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyModel", b => + { + b.Property("Lingua") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Lemma") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Traduzione") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.HasKey("Lingua", "Lemma"); + + b.ToTable("Vocabulary"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyTempModel", b => + { + b.Property("Lingua") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Lemma") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Traduzione") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.HasKey("Lingua", "Lemma"); + + b.ToTable("VocabularyTemp"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.AspNetRoles", "RolesNav") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WebDoorCreator.Data.DbModels.AspNetUsers", "UsersNav") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RolesNav"); + + b.Navigation("UsersNav"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.OrderModel", "OrderNav") + .WithMany() + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WebDoorCreator.Data.DbModels.DoorTypeModel", "TypeNav") + .WithMany() + .HasForeignKey("TypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OrderNav"); + + b.Navigation("TypeNav"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.DoorModel", "DoorNav") + .WithMany() + .HasForeignKey("DoorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DoorNav"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.CompanyModel", "CompanyNav") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyNav"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.cs b/WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.cs new file mode 100644 index 0000000..6a51bbf --- /dev/null +++ b/WebDoorCreator.Data/Migrations/WDCData/20230523081025_ConfigTable.cs @@ -0,0 +1,32 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace WebDoorCreator.Data.Migrations.WDCData +{ + public partial class ConfigTable : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Config", + columns: table => new + { + chiave = table.Column(type: "nvarchar(450)", nullable: false), + valore = table.Column(type: "nvarchar(max)", nullable: false), + valoreStd = table.Column(type: "nvarchar(max)", nullable: false), + note = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Config", x => x.chiave); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Config"); + } + } +} diff --git a/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs b/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs index d5738c3..d2ef528 100644 --- a/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs +++ b/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs @@ -177,6 +177,28 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.ToTable("Company"); }); + modelBuilder.Entity("WebDoorCreator.Data.DbModels.ConfigModel", b => + { + b.Property("chiave") + .HasColumnType("nvarchar(450)"); + + b.Property("note") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("valore") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("valoreStd") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("chiave"); + + b.ToTable("Config"); + }); + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b => { b.Property("DoorId") diff --git a/WebDoorCreator.Data/Services/WebDoorCreatorService.cs b/WebDoorCreator.Data/Services/WebDoorCreatorService.cs index ccead86..f1fbcbf 100644 --- a/WebDoorCreator.Data/Services/WebDoorCreatorService.cs +++ b/WebDoorCreator.Data/Services/WebDoorCreatorService.cs @@ -121,8 +121,6 @@ namespace WebDoorCreator.Data.Services return dbResult; } - /*----------------------------------------------------------------------------------------------------------------------*/ - /// /// Getting a list of all the active components /// @@ -463,7 +461,6 @@ namespace WebDoorCreator.Data.Services listValues.Add(listValObj); int i = 0; - foreach (string dir in dirs) { int numPar = 1; @@ -532,6 +529,427 @@ namespace WebDoorCreator.Data.Services return fatto; } + /// + /// Lista configurazione + /// + /// + public async Task> ConfigGetAll() + { + string source = "DB"; + List? dbResult = new List(); + string currKey = $"{Constants.rKeyConfig}:Table"; + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + string? rawData = await redisDb.StringGetAsync(currKey); + if (!string.IsNullOrEmpty(rawData)) + { + source = "REDIS"; + var tempResult = JsonConvert.DeserializeObject>(rawData); + if (tempResult == null) + { + dbResult = new List(); + } + else + { + dbResult = tempResult; + } + } + else + { + dbResult = dbController.ConfigGetAll(); + rawData = JsonConvert.SerializeObject(dbResult, JSSettings); + await redisDb.StringSetAsync(currKey, rawData, UltraLongCache); + } + if (dbResult == null) + { + dbResult = new List(); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"ConfigGetAll | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + } + + /// + /// Recupera una singola chaive di config da cache/DB + /// + /// + /// + public async Task ConfigGetKey(string chiave) + { + string source = "DB"; + // cerco in cache direttamente la chiave... altrimenti da redis/db + ConfigModel? keyResult = null; + string currKey = $"{Constants.rKeyConfig}:Dict:{chiave}"; + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + string? rawData = await redisDb.StringGetAsync(currKey); + if (!string.IsNullOrEmpty(rawData)) + { + source = "REDIS"; + var tempResult = JsonConvert.DeserializeObject(rawData); + if (tempResult == null) + { + keyResult = new ConfigModel(); + } + else + { + keyResult = tempResult; + } + keyResult = JsonConvert.DeserializeObject(rawData); + } + else + { + var listConfig = await ConfigGetAll(); + keyResult = listConfig.FirstOrDefault(x => x.chiave == chiave); + rawData = JsonConvert.SerializeObject(keyResult, JSSettings); + await redisDb.StringSetAsync(currKey, rawData, UltraLongCache); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"ConfigGetKey | {chiave} | {source} in: {ts.TotalMilliseconds} ms"); + return await Task.FromResult(keyResult); + } + + public async Task createDoor(int idOrd, string userId, string currMeaUnit) + { + int answ = 0; + + // conto le porte x questo ordine e uso x chiamata successiva... + var door4ord = await DoorGetByOrderId(idOrd); + int numDoors = door4ord?.Count + 1 ?? 1; + List listOp = new List(); + DateTime adesso = DateTime.Now; + // creo una nuova porta... + DoorModel newDoor = new DoorModel() + { + OrderId = idOrd, + MeasureUnit = currMeaUnit, + UserIdIns = userId, + UserIdMod = userId, + UserIdLock = userId, + DateIns = adesso, + DateMod = adesso, + DateLockExpiry = adesso.AddHours(1), + DoorDescript = $"ORD {idOrd} | Door {numDoors:00}", + DoorExtCode = $"ORD {idOrd} | Ext Code --", + Quantity = 1, + UnitCost = 0, + TypeId = 1 + }; + // chiamo metodo x insert... + var doorId = await DoorInsert(newDoor); + // aggiungo le lavorazioni standard... + var doorOpList = await DoorOpGetDefault(); + var listRecordEdge = await ListValuesGetAll("Profiles", "DoorDef"); + var listRecordSizing = await ListValuesGetAll("Size", "DoorDef"); + var listRecordSwing = await ListValuesGetAll("Swing", "DoorDef"); + var listRecordProperties = await ListValuesGetAll("Properties", "DoorDef"); + var listRecordFinishing = await ListValuesGetAll("Finishing", "DoorDef"); + ListValuesModel? profCurrType = null; + ListValuesModel? profCurrMach = null; + ListValuesModel? profCurrOverMat = null; + if (listRecordEdge != null) + { + profCurrType = listRecordEdge.Where(x => x.Value == "type").FirstOrDefault(); + profCurrMach = listRecordEdge.Where(x => x.Value == "machining").FirstOrDefault(); + profCurrOverMat = listRecordEdge.Where(x => x.Value == "overmaterial").FirstOrDefault(); + } + Dictionary>> itemsDictDef = new Dictionary>>(); + Dictionary> itemsDictAct = new Dictionary>(); + Dictionary> paramsDict = new Dictionary>(); + Dictionary actDict = new Dictionary(); + List listDefVal = new List(); + List listDefValCurrMach = new List(); + List listDefValOverMat = new List(); + List defaultParamsList = new List(); + + #region Gestione Properties + + if (listRecordProperties != null) + { + foreach (var item in listRecordProperties) + { + foreach (var param in item.DefaultVal.Split(",")) + { + listDefVal.Add(param.Trim()); + if (!actDict.ContainsKey(item.Value)) + { + actDict.Add(item.Value, item.DefaultVal.Trim().Split(",")[0]); + paramsDict.Add(item.Value, listDefVal); + } + //itemsDict.Add(item.Value, paramsDict); + //paramsDict.Clear(); + } + + //listDefVal = new List() { item.DefaultVal.Trim() }; + } + itemsDictDef.Add("Properties", paramsDict); + itemsDictAct.Add("Properties", actDict); + //defaultParamsList.Add(listDefVal); + } + var jsonDef = JsonConvert.SerializeObject(itemsDictDef); + var jsonAct = JsonConvert.SerializeObject(itemsDictAct); + + DoorOpModel doorOpToAdd = new DoorOpModel() + { + DateIns = adesso, + DateMod = adesso, + UserIdIns = userId, + UserIdMod = userId, + ObjectId = "Properties", + DoorId = doorId, + JsoncConfigVal = jsonDef, + JsoncActVal = jsonAct, + userConfirm = userId, + DtConfirm = adesso + }; + listOp.Add(doorOpToAdd); + + #endregion Gestione Properties + + paramsDict.Clear(); + actDict.Clear(); + itemsDictDef.Clear(); + itemsDictAct.Clear(); + listDefVal.Clear(); + + #region Gestione Finishing + + if (listRecordFinishing != null) + { + foreach (var item in listRecordFinishing) + { + foreach (var param in item.DefaultVal.Split(",")) + { + listDefVal.Add(param.Trim()); + if (!actDict.ContainsKey(item.Value)) + { + actDict.Add(item.Value, item.DefaultVal.Trim().Split(",")[0]); + paramsDict.Add(item.Value, listDefVal); + } + //itemsDict.Add(item.Value, paramsDict); + //paramsDict.Clear(); + } + + //listDefVal = new List() { item.DefaultVal.Trim() }; + } + itemsDictDef.Add("Finishing", paramsDict); + itemsDictAct.Add("Finishing", actDict); + //defaultParamsList.Add(listDefVal); + } + jsonDef = JsonConvert.SerializeObject(itemsDictDef); + jsonAct = JsonConvert.SerializeObject(itemsDictAct); + + doorOpToAdd = new DoorOpModel() + { + DateIns = adesso, + DateMod = adesso, + UserIdIns = userId, + UserIdMod = userId, + ObjectId = "Finishing", + DoorId = doorId, + JsoncConfigVal = jsonDef, + JsoncActVal = jsonAct, + userConfirm = userId, + DtConfirm = adesso + }; + listOp.Add(doorOpToAdd); + + #endregion Gestione Finishing + + paramsDict.Clear(); + actDict.Clear(); + itemsDictDef.Clear(); + itemsDictAct.Clear(); + listDefVal.Clear(); + + #region Gestione sizing + + if (listRecordSizing != null) + { + foreach (var item in listRecordSizing) + { + listDefVal = new List() { item.DefaultVal.Trim() }; + if (!actDict.ContainsKey(item.Value)) + { + actDict.Add(item.Value, item.DefaultVal.Trim()); + paramsDict.Add(item.Value, listDefVal); + } + } + itemsDictDef.Add("Size", paramsDict); + itemsDictAct.Add("Size", actDict); + //defaultParamsList.Add(listDefVal); + } + jsonDef = JsonConvert.SerializeObject(itemsDictDef); + jsonAct = JsonConvert.SerializeObject(itemsDictAct); + + doorOpToAdd = new DoorOpModel() + { + DateIns = adesso, + DateMod = adesso, + UserIdIns = userId, + UserIdMod = userId, + ObjectId = "Size", + DoorId = doorId, + JsoncConfigVal = jsonDef, + JsoncActVal = jsonAct, + userConfirm = userId, + DtConfirm = adesso + }; + listOp.Add(doorOpToAdd); + + #endregion Gestione sizing + + paramsDict.Clear(); + actDict.Clear(); + itemsDictDef.Clear(); + itemsDictAct.Clear(); + listDefVal.Clear(); + + #region Gestione Swing + + if (listRecordSwing != null) + { + foreach (var item in listRecordSwing) + { + foreach (var param in item.DefaultVal.Split(",")) + { + listDefVal.Add(param.Trim()); + if (!actDict.ContainsKey(item.Value)) + { + actDict.Add(item.Value, item.DefaultVal.Trim().Split(",")[0]); + paramsDict.Add(item.Value, listDefVal); + } + //itemsDict.Add(item.Value, paramsDict); + //paramsDict.Clear(); + } + + //listDefVal = new List() { item.DefaultVal.Trim() }; + } + itemsDictDef.Add("Swing", paramsDict); + itemsDictAct.Add("Swing", actDict); + //defaultParamsList.Add(listDefVal); + } + jsonDef = JsonConvert.SerializeObject(itemsDictDef); + jsonAct = JsonConvert.SerializeObject(itemsDictAct); + + doorOpToAdd = new DoorOpModel() + { + DateIns = adesso, + DateMod = adesso, + UserIdIns = userId, + UserIdMod = userId, + ObjectId = "Swing", + DoorId = doorId, + JsoncConfigVal = jsonDef, + JsoncActVal = jsonAct, + userConfirm = userId, + DtConfirm = adesso + }; + listOp.Add(doorOpToAdd); + + #endregion Gestione Swing + + paramsDict.Clear(); + actDict.Clear(); + itemsDictDef.Clear(); + itemsDictAct.Clear(); + listDefVal.Clear(); + + #region Gestione Profiles + + if (listRecordEdge != null) + { + listDefVal.Clear(); + if (profCurrType != null) + { + foreach (var param in profCurrType.DefaultVal.Split(",")) + { + listDefVal.Add(param.Trim()); + if (!actDict.ContainsKey(profCurrType.Value)) + { + actDict.Add(profCurrType.Value, param.Trim()); + paramsDict.Add(profCurrType.Value, listDefVal); + //listDefVal.Clear(); + } + //itemsDict.Add(item.Value, paramsDict); + //paramsDict.Clear(); + } + if (profCurrMach != null) + { + //listDefVal.Clear(); + foreach (var param in profCurrMach.DefaultVal.Split(",")) + { + listDefValCurrMach.Add(param.Trim()); + if (!actDict.ContainsKey(profCurrMach.Value)) + { + paramsDict.Add(profCurrMach.Value, listDefValCurrMach); + actDict.Add(profCurrMach.Value, profCurrMach.DefaultVal.Trim().Split(",")[0]); + //listDefVal.Clear(); + } + //itemsDict.Add(item.Value, paramsDict); + //paramsDict.Clear(); + } + } + if (profCurrOverMat != null) + { + //listDefVal.Clear(); + if (!paramsDict.ContainsKey(profCurrOverMat.Value)) + { + listDefValOverMat.Add(profCurrOverMat.DefaultVal.Trim()); + paramsDict.Add(profCurrOverMat.Value, listDefValOverMat); + actDict.Add(profCurrOverMat.Value, profCurrOverMat.DefaultVal.Trim()); + } + } + } + foreach (var item in listRecordEdge.Where(x => x.Value != "type" && x.Value != "machining" && x.Value != "overmaterial")) + { + if (!itemsDictDef.ContainsKey(item.Value)) + { + itemsDictDef.Add(item.Value, paramsDict); + } + if (!itemsDictAct.ContainsKey(item.Value)) + { + itemsDictAct.Add(item.Value, actDict); + } + //defaultParamsList.Add(listDefVal); + //defaultDict.Add(item.Label, listDefVal); + } + } + //actDict.Add(HwToShow.TableName, actParamsList); + + jsonDef = JsonConvert.SerializeObject(itemsDictDef); + jsonAct = JsonConvert.SerializeObject(itemsDictAct); + + doorOpToAdd = new DoorOpModel() + { + DateIns = adesso, + DateMod = adesso, + UserIdIns = userId, + UserIdMod = userId, + ObjectId = "Profiles", + DoorId = doorId, + JsoncConfigVal = jsonDef, + JsoncActVal = jsonAct, + userConfirm = userId, + DtConfirm = adesso + }; + listOp.Add(doorOpToAdd); + + #endregion Gestione Profiles + + // salvo Door OP associate + bool fatto = await DoorOpInsert(doorId, listOp); + + if (fatto) + { + answ = doorId; + } + + return answ; + } + public string DecriptData(string encData) { return SteamCrypto.DecryptString(encData, Constants.passPhrase); @@ -572,46 +990,6 @@ namespace WebDoorCreator.Data.Services return answ; } - /// - /// Doors list, last in desc order - /// - public async Task?> DoorGetLast(int numRec) - { - string source = "DB"; - List? dbResult = new List(); - // cerco da cache - string currKey = $"{Constants.rKeyDoorLast}:{numRec}"; - Stopwatch stopWatch = new Stopwatch(); - stopWatch.Start(); - string? rawData = await redisDb.StringGetAsync(currKey); - if (!string.IsNullOrEmpty(rawData)) - { - source = "REDIS"; - var tempResult = JsonConvert.DeserializeObject>(rawData); - if (tempResult == null) - { - dbResult = new List(); - } - else - { - dbResult = tempResult; - } - } - else - { - dbResult = dbController.DoorsGetLast(numRec); - rawData = JsonConvert.SerializeObject(dbResult, JSSettings); - await redisDb.StringSetAsync(currKey, rawData, FastCache); - } - if (dbResult == null) - { - dbResult = new List(); - } - stopWatch.Stop(); - TimeSpan ts = stopWatch.Elapsed; - Log.Debug($"DoorGetLast | {source} in: {ts.TotalMilliseconds} ms"); - return dbResult; - } /// /// Doors list by numRec /// @@ -653,6 +1031,47 @@ namespace WebDoorCreator.Data.Services return dbResult; } + /// + /// Doors list, last in desc order + /// + public async Task?> DoorGetLast(int numRec) + { + string source = "DB"; + List? dbResult = new List(); + // cerco da cache + string currKey = $"{Constants.rKeyDoorLast}:{numRec}"; + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + string? rawData = await redisDb.StringGetAsync(currKey); + if (!string.IsNullOrEmpty(rawData)) + { + source = "REDIS"; + var tempResult = JsonConvert.DeserializeObject>(rawData); + if (tempResult == null) + { + dbResult = new List(); + } + else + { + dbResult = tempResult; + } + } + else + { + dbResult = dbController.DoorsGetLast(numRec); + rawData = JsonConvert.SerializeObject(dbResult, JSSettings); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (dbResult == null) + { + dbResult = new List(); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"DoorGetLast | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + } + /// /// Add door /// @@ -775,6 +1194,7 @@ namespace WebDoorCreator.Data.Services Log.Debug($"DoorOpGetByDoorId | {source} in: {ts.TotalMilliseconds} ms"); return dbResult; } + /// /// Doors list by numRec /// @@ -1036,6 +1456,14 @@ namespace WebDoorCreator.Data.Services return SteamCrypto.EncryptString(rawData, Constants.passPhrase); } + public async Task FlushCustomPattern(string keyWord) + { + await Task.Delay(1); + RedisValue pattern = new RedisValue($"{Constants.redisBaseAddr}:{keyWord}"); + bool answ = await ExecFlushRedisPattern(pattern); + return answ; + } + public async Task FlushRedisCache() { await Task.Delay(1); @@ -1330,6 +1758,45 @@ namespace WebDoorCreator.Data.Services return answ; } + public async Task OrderGetByKey(int orderId) + { + string source = "DB"; + + OrderModel? dbResult = new OrderModel(); + // cerco da cache + string currKey = $"{Constants.rKeyOrderDetail}:{orderId}"; ; + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + string? rawData = await redisDb.StringGetAsync(currKey); + if (!string.IsNullOrEmpty(rawData)) + { + source = "REDIS"; + var tempResult = JsonConvert.DeserializeObject(rawData); + if (tempResult == null) + { + dbResult = new OrderModel(); + } + else + { + dbResult = tempResult; + } + } + else + { + dbResult = dbController.OrderGetByKey(orderId); + rawData = JsonConvert.SerializeObject(dbResult, JSSettings); + await redisDb.StringSetAsync(currKey, rawData, LongCache); + } + if (dbResult == null) + { + dbResult = new OrderModel(); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"OrderGetByKey | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + } + /// /// Remove order /// @@ -1396,44 +1863,6 @@ namespace WebDoorCreator.Data.Services Log.Debug($"OrderStatusGetFilt | {source} in: {ts.TotalMilliseconds} ms"); return dbResult; } - public async Task OrderGetByKey(int orderId) - { - string source = "DB"; - - OrderModel? dbResult = new OrderModel(); - // cerco da cache - string currKey = $"{Constants.rKeyOrderDetail}:{orderId}";; - Stopwatch stopWatch = new Stopwatch(); - stopWatch.Start(); - string? rawData = await redisDb.StringGetAsync(currKey); - if (!string.IsNullOrEmpty(rawData)) - { - source = "REDIS"; - var tempResult = JsonConvert.DeserializeObject(rawData); - if (tempResult == null) - { - dbResult = new OrderModel(); - } - else - { - dbResult = tempResult; - } - } - else - { - dbResult = dbController.OrderGetByKey(orderId); - rawData = JsonConvert.SerializeObject(dbResult, JSSettings); - await redisDb.StringSetAsync(currKey, rawData, LongCache); - } - if (dbResult == null) - { - dbResult = new OrderModel(); - } - stopWatch.Stop(); - TimeSpan ts = stopWatch.Elapsed; - Log.Debug($"OrderGetByKey | {source} in: {ts.TotalMilliseconds} ms"); - return dbResult; - } /// /// Updating an order status @@ -1745,353 +2174,6 @@ namespace WebDoorCreator.Data.Services return fatto; } - public async Task createDoor(int idOrd, string userId, string currMeaUnit) - { - int answ = 0; - - // conto le porte x questo ordine e uso x chiamata successiva... - var door4ord = await DoorGetByOrderId(idOrd); - int numDoors = door4ord?.Count + 1 ?? 1; - List listOp = new List(); - DateTime adesso = DateTime.Now; - // creo una nuova porta... - DoorModel newDoor = new DoorModel() - { - OrderId = idOrd, - MeasureUnit = currMeaUnit, - UserIdIns = userId, - UserIdMod = userId, - UserIdLock = userId, - DateIns = adesso, - DateMod = adesso, - DateLockExpiry = adesso.AddHours(1), - DoorDescript = $"ORD {idOrd} | Door {numDoors:00}", - DoorExtCode = $"ORD {idOrd} | Ext Code --", - Quantity = 1, - UnitCost = 0, - TypeId = 1 - }; - // chiamo metodo x insert... - var doorId = await DoorInsert(newDoor); - // aggiungo le lavorazioni standard... - var doorOpList = await DoorOpGetDefault(); - var listRecordEdge = await ListValuesGetAll("Profiles", "DoorDef"); - var listRecordSizing = await ListValuesGetAll("Size", "DoorDef"); - var listRecordSwing = await ListValuesGetAll("Swing", "DoorDef"); - var listRecordProperties = await ListValuesGetAll("Properties", "DoorDef"); - var listRecordFinishing = await ListValuesGetAll("Finishing", "DoorDef"); - ListValuesModel? profCurrType = null; - ListValuesModel? profCurrMach = null; - ListValuesModel? profCurrOverMat = null; - if (listRecordEdge != null) - { - profCurrType = listRecordEdge.Where(x => x.Value == "type").FirstOrDefault(); - profCurrMach = listRecordEdge.Where(x => x.Value == "machining").FirstOrDefault(); - profCurrOverMat = listRecordEdge.Where(x => x.Value == "overmaterial").FirstOrDefault(); - } - Dictionary>> itemsDictDef = new Dictionary>>(); - Dictionary> itemsDictAct = new Dictionary>(); - Dictionary> paramsDict = new Dictionary>(); - Dictionary actDict = new Dictionary(); - List listDefVal = new List(); - List listDefValCurrMach = new List(); - List listDefValOverMat = new List(); - List defaultParamsList = new List(); - - #region Gestione Properties - - if (listRecordProperties != null) - { - foreach (var item in listRecordProperties) - { - foreach (var param in item.DefaultVal.Split(",")) - { - listDefVal.Add(param.Trim()); - if (!actDict.ContainsKey(item.Value)) - { - actDict.Add(item.Value, item.DefaultVal.Trim().Split(",")[0]); - paramsDict.Add(item.Value, listDefVal); - } - //itemsDict.Add(item.Value, paramsDict); - //paramsDict.Clear(); - - } - - //listDefVal = new List() { item.DefaultVal.Trim() }; - - } - itemsDictDef.Add("Properties", paramsDict); - itemsDictAct.Add("Properties", actDict); - //defaultParamsList.Add(listDefVal); - } - var jsonDef = JsonConvert.SerializeObject(itemsDictDef); - var jsonAct = JsonConvert.SerializeObject(itemsDictAct); - - DoorOpModel doorOpToAdd = new DoorOpModel() - { - DateIns = adesso, - DateMod = adesso, - UserIdIns = userId, - UserIdMod = userId, - ObjectId = "Properties", - DoorId = doorId, - JsoncConfigVal = jsonDef, - JsoncActVal = jsonAct, - userConfirm = userId, - DtConfirm = adesso - }; - listOp.Add(doorOpToAdd); - - #endregion Gestione Properties - - paramsDict.Clear(); - actDict.Clear(); - itemsDictDef.Clear(); - itemsDictAct.Clear(); - listDefVal.Clear(); - - #region Gestione Finishing - - if (listRecordFinishing != null) - { - foreach (var item in listRecordFinishing) - { - foreach (var param in item.DefaultVal.Split(",")) - { - listDefVal.Add(param.Trim()); - if (!actDict.ContainsKey(item.Value)) - { - actDict.Add(item.Value, item.DefaultVal.Trim().Split(",")[0]); - paramsDict.Add(item.Value, listDefVal); - } - //itemsDict.Add(item.Value, paramsDict); - //paramsDict.Clear(); - - } - - //listDefVal = new List() { item.DefaultVal.Trim() }; - - } - itemsDictDef.Add("Finishing", paramsDict); - itemsDictAct.Add("Finishing", actDict); - //defaultParamsList.Add(listDefVal); - } - jsonDef = JsonConvert.SerializeObject(itemsDictDef); - jsonAct = JsonConvert.SerializeObject(itemsDictAct); - - doorOpToAdd = new DoorOpModel() - { - DateIns = adesso, - DateMod = adesso, - UserIdIns = userId, - UserIdMod = userId, - ObjectId = "Finishing", - DoorId = doorId, - JsoncConfigVal = jsonDef, - JsoncActVal = jsonAct, - userConfirm = userId, - DtConfirm = adesso - }; - listOp.Add(doorOpToAdd); - - #endregion Gestione Finishing - - paramsDict.Clear(); - actDict.Clear(); - itemsDictDef.Clear(); - itemsDictAct.Clear(); - listDefVal.Clear(); - - #region Gestione sizing - - if (listRecordSizing != null) - { - foreach (var item in listRecordSizing) - { - listDefVal = new List() { item.DefaultVal.Trim() }; - if (!actDict.ContainsKey(item.Value)) - { - actDict.Add(item.Value, item.DefaultVal.Trim()); - paramsDict.Add(item.Value, listDefVal); - } - } - itemsDictDef.Add("Size", paramsDict); - itemsDictAct.Add("Size", actDict); - //defaultParamsList.Add(listDefVal); - } - jsonDef = JsonConvert.SerializeObject(itemsDictDef); - jsonAct = JsonConvert.SerializeObject(itemsDictAct); - - doorOpToAdd = new DoorOpModel() - { - DateIns = adesso, - DateMod = adesso, - UserIdIns = userId, - UserIdMod = userId, - ObjectId = "Size", - DoorId = doorId, - JsoncConfigVal = jsonDef, - JsoncActVal = jsonAct, - userConfirm = userId, - DtConfirm = adesso - }; - listOp.Add(doorOpToAdd); - - #endregion Gestione sizing - - paramsDict.Clear(); - actDict.Clear(); - itemsDictDef.Clear(); - itemsDictAct.Clear(); - listDefVal.Clear(); - - #region Gestione Swing - - if (listRecordSwing != null) - { - foreach (var item in listRecordSwing) - { - foreach (var param in item.DefaultVal.Split(",")) - { - listDefVal.Add(param.Trim()); - if (!actDict.ContainsKey(item.Value)) - { - actDict.Add(item.Value, item.DefaultVal.Trim().Split(",")[0]); - paramsDict.Add(item.Value, listDefVal); - } - //itemsDict.Add(item.Value, paramsDict); - //paramsDict.Clear(); - - } - - //listDefVal = new List() { item.DefaultVal.Trim() }; - - } - itemsDictDef.Add("Swing", paramsDict); - itemsDictAct.Add("Swing", actDict); - //defaultParamsList.Add(listDefVal); - } - jsonDef = JsonConvert.SerializeObject(itemsDictDef); - jsonAct = JsonConvert.SerializeObject(itemsDictAct); - - doorOpToAdd = new DoorOpModel() - { - DateIns = adesso, - DateMod = adesso, - UserIdIns = userId, - UserIdMod = userId, - ObjectId = "Swing", - DoorId = doorId, - JsoncConfigVal = jsonDef, - JsoncActVal = jsonAct, - userConfirm = userId, - DtConfirm = adesso - }; - listOp.Add(doorOpToAdd); - - #endregion Gestione Swing - - paramsDict.Clear(); - actDict.Clear(); - itemsDictDef.Clear(); - itemsDictAct.Clear(); - listDefVal.Clear(); - - - - #region Gestione Profiles - - if (listRecordEdge != null) - { - listDefVal.Clear(); - if (profCurrType != null) - { - foreach (var param in profCurrType.DefaultVal.Split(",")) - { - listDefVal.Add(param.Trim()); - if (!actDict.ContainsKey(profCurrType.Value)) - { - actDict.Add(profCurrType.Value, param.Trim()); - paramsDict.Add(profCurrType.Value, listDefVal); - //listDefVal.Clear(); - } - //itemsDict.Add(item.Value, paramsDict); - //paramsDict.Clear(); - } - if (profCurrMach != null) - { - //listDefVal.Clear(); - foreach (var param in profCurrMach.DefaultVal.Split(",")) - { - listDefValCurrMach.Add(param.Trim()); - if (!actDict.ContainsKey(profCurrMach.Value)) - { - paramsDict.Add(profCurrMach.Value, listDefValCurrMach); - actDict.Add(profCurrMach.Value, profCurrMach.DefaultVal.Trim().Split(",")[0]); - //listDefVal.Clear(); - } - //itemsDict.Add(item.Value, paramsDict); - //paramsDict.Clear(); - - } - } - if (profCurrOverMat != null) - { - //listDefVal.Clear(); - if (!paramsDict.ContainsKey(profCurrOverMat.Value)) - { - listDefValOverMat.Add(profCurrOverMat.DefaultVal.Trim()); - paramsDict.Add(profCurrOverMat.Value, listDefValOverMat); - actDict.Add(profCurrOverMat.Value, profCurrOverMat.DefaultVal.Trim()); - } - } - } - foreach (var item in listRecordEdge.Where(x => x.Value != "type" && x.Value != "machining" && x.Value != "overmaterial")) - { - if (!itemsDictDef.ContainsKey(item.Value)) - { - itemsDictDef.Add(item.Value, paramsDict); - } - if (!itemsDictAct.ContainsKey(item.Value)) - { - itemsDictAct.Add(item.Value, actDict); - } - //defaultParamsList.Add(listDefVal); - //defaultDict.Add(item.Label, listDefVal); - } - } - //actDict.Add(HwToShow.TableName, actParamsList); - - jsonDef = JsonConvert.SerializeObject(itemsDictDef); - jsonAct = JsonConvert.SerializeObject(itemsDictAct); - - doorOpToAdd = new DoorOpModel() - { - DateIns = adesso, - DateMod = adesso, - UserIdIns = userId, - UserIdMod = userId, - ObjectId = "Profiles", - DoorId = doorId, - JsoncConfigVal = jsonDef, - JsoncActVal = jsonAct, - userConfirm = userId, - DtConfirm = adesso - }; - listOp.Add(doorOpToAdd); - - #endregion Gestione Profiles - - // salvo Door OP associate - bool fatto = await DoorOpInsert(doorId, listOp); - - if (fatto) - { - answ = doorId; - } - - return answ; - } #endregion Public Methods #region Protected Fields @@ -2189,14 +2271,6 @@ namespace WebDoorCreator.Data.Services return answ; } - public async Task FlushCustomPattern(string keyWord) - { - await Task.Delay(1); - RedisValue pattern = new RedisValue($"{Constants.redisBaseAddr}:{keyWord}"); - bool answ = await ExecFlushRedisPattern(pattern); - return answ; - } - #endregion Private Methods } } \ No newline at end of file diff --git a/WebDoorCreator.Data/WDCDataContext.cs b/WebDoorCreator.Data/WDCDataContext.cs index 4ba8cc7..6604237 100644 --- a/WebDoorCreator.Data/WDCDataContext.cs +++ b/WebDoorCreator.Data/WDCDataContext.cs @@ -76,6 +76,7 @@ namespace WebDoorCreator.Data public virtual DbSet DbSetVocabularyTemp { get; set; } = null!; public virtual DbSet DbSetLanguages { get; set; } = null!; public virtual DbSet DbSetSerializedDoors { get; set; } = null!; + public virtual DbSet DbSetConfig { get; set; } = null!; #endregion Public Properties