From cb8e3a60bd4c58b94eb4baa3ac4450a8ff83d3cd Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 30 Mar 2023 12:49:54 +0200 Subject: [PATCH 1/7] Fix recupero ID x nuove door --- .../Controllers/WebDoorCreatorController.cs | 14 +++++++------- WebDoorCreator.UI/Data/WebDoorCreatorService.cs | 6 ++++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs index 120e590..2864a39 100644 --- a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs +++ b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs @@ -403,8 +403,7 @@ namespace WebDoorCreator.Data.Controllers /// public async Task DoorInsert(DoorModel newRec) { - int ordId = 0; - //List dbResult = new List(); + int newId = 0; using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) { try @@ -416,10 +415,11 @@ namespace WebDoorCreator.Data.Controllers // procedo solo se non c'è già if (currRec == null) { - var newDbRec = localDbCtx - .DbSetDoor - .Add(newRec); - ordId= await localDbCtx.SaveChangesAsync(); + var newDbRec = localDbCtx + .DbSetDoor + .Add(newRec); + await localDbCtx.SaveChangesAsync(); + newId = newRec.DoorId; } } catch (Exception exc) @@ -427,7 +427,7 @@ namespace WebDoorCreator.Data.Controllers Log.Error($"Eccezione durante DoorInsert: {Environment.NewLine}{exc}"); } } - return ordId; + return newId; } /// diff --git a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs index 49d58e0..49d0168 100644 --- a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs +++ b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs @@ -577,10 +577,12 @@ namespace WebDoorCreator.UI.Data foreach (string dir in dirs) { - string[] files = Directory.GetFiles(dir, "Config.ini"); //iterazione per cercare tutti i file "Config.ini" nelle sotto directory + //iterazione per cercare tutti i file "Config.ini" nelle sotto directory + string[] files = Directory.GetFiles(dir, "Config.ini"); compoName = ""; - foreach (string file in files) //iterazione per cercare tutti i file "Config.ini" nelle sotto directory + //iterazione per cercare tutti i file "Config.ini" nelle sotto directory + foreach (string file in files) { List lines = File.ReadAllLines(file).ToList(); //leggo tutte le linee del file IniFile fIni = new IniFile(file); From 1369fe83b84e826577ab9329bb52e7074db50697 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 30 Mar 2023 13:21:37 +0200 Subject: [PATCH 2/7] OpType: - aggiunta nel modello OP Type richieste all'init - fix init con migrations --- .../Controllers/WebDoorCreatorController.cs | 721 +++++++++--------- .../DbModels/DoorOpTypeModel.cs | 5 + .../20230330111904_DoorOpTypeinit.Designer.cs | 713 +++++++++++++++++ .../WDCData/20230330111904_DoorOpTypeinit.cs | 26 + .../WDCData/WDCDataContextModelSnapshot.cs | 3 + .../Data/WebDoorCreatorService.cs | 114 ++- WebDoorCreator.UI/Pages/OrderDetails.razor.cs | 17 +- 7 files changed, 1217 insertions(+), 382 deletions(-) create mode 100644 WebDoorCreator.Data/Migrations/WDCData/20230330111904_DoorOpTypeinit.Designer.cs create mode 100644 WebDoorCreator.Data/Migrations/WDCData/20230330111904_DoorOpTypeinit.cs diff --git a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs index 2864a39..fa82d62 100644 --- a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs +++ b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs @@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using NLog; +using System.Collections.Generic; using WebDoorCreator.Data.DbModels; using WebDoorCreator.Data.DTO; @@ -9,63 +10,16 @@ namespace WebDoorCreator.Data.Controllers { public class WebDoorCreatorController : IDisposable { - private static IConfiguration _configuration; - private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); + #region Public Constructors public WebDoorCreatorController(IConfiguration configuration) { _configuration = configuration; } - public void Dispose() - { - // Clear database context - //Log.Info("Dispose di GWMSController"); - } + #endregion Public Constructors - #region Company methods - - /// - /// Company list (All) - /// - /// - public List CompanyGetByKey(int id) - { - List dbResult = new List(); - // cerco su DB recuperando set di dati.... - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - if (id == 0) - { - - // extracting entire set - dbResult = localDbCtx - .DbSetCompany - .OrderBy(x => x.CompanyName) - .ToList(); - } - else - { - var risultato = localDbCtx - .DbSetCompany - .Where(x => x.CompanyId == id) - .OrderBy(x => x.CompanyName) - .ToList(); - if (risultato != null) - { - dbResult = risultato; - } - } - } - catch (Exception exc) - { - Log.Error($"Error in CompanyAll:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } + #region Public Methods /// /// Adding a new company @@ -115,9 +69,352 @@ namespace WebDoorCreator.Data.Controllers return fatto; } - #endregion Company methods + /// + /// Company list (All) + /// + /// + public List CompanyGetByKey(int id) + { + List dbResult = new List(); + // cerco su DB recuperando set di dati.... + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + if (id == 0) + { + // extracting entire set + dbResult = localDbCtx + .DbSetCompany + .OrderBy(x => x.CompanyName) + .ToList(); + } + else + { + var risultato = localDbCtx + .DbSetCompany + .Where(x => x.CompanyId == id) + .OrderBy(x => x.CompanyName) + .ToList(); + if (risultato != null) + { + dbResult = risultato; + } + } + } + catch (Exception exc) + { + Log.Error($"Error in CompanyAll:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } - #region User methods + /// + /// Adding a new Compo + /// + /// Record to add + /// + public async Task CompoAdd(HardwareModel addRec) + { + bool fatto = false; + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + localDbCtx + .DbSetHardware + .Add(addRec); + await localDbCtx.SaveChangesAsync(); + fatto = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante CompoAdd: {Environment.NewLine}{exc}"); + } + } + return fatto; + } + + public void Dispose() + { + // Clear database context + //Log.Info("Dispose di GWMSController"); + } + + /// + /// Adding a new door + /// + /// Record to edit or add + /// + public async Task DoorInsert(DoorModel newRec) + { + int newId = 0; + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + var currRec = localDbCtx + .DbSetDoor + .Where(x => x.DoorId == newRec.DoorId) + .FirstOrDefault(); + // procedo solo se non c'è già + if (currRec == null) + { + var newDbRec = localDbCtx + .DbSetDoor + .Add(newRec); + await localDbCtx.SaveChangesAsync(); + newId = newRec.DoorId; + } + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DoorInsert: {Environment.NewLine}{exc}"); + } + } + return newId; + } + + /// + /// Adding or removing a single door + /// + /// Record id to edit or add + /// States if it has to be added or removing a door + /// + public async Task DoorModQty(int doorId, bool isAdd) + { + /* crea nuovo metodo per modifica singola quantità porta: DOORMODQTY */ + bool fatto = false; + //List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + var currRec = localDbCtx + .DbSetDoor + .Where(x => x.DoorId == doorId) + .FirstOrDefault(); + if (currRec != null) //if is not null edit the record found + { + if (isAdd) + { + currRec.Quantity = currRec.Quantity + 1; + } + else + { + currRec.Quantity = currRec.Quantity - 1; + } + localDbCtx.Entry(currRec).State = EntityState.Modified; + } + await localDbCtx.SaveChangesAsync(); + fatto = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DoorModQty: {Environment.NewLine}{exc}"); + } + } + return fatto; + } + + public async Task> DoorOpGetDefault() + { + List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + dbResult= localDbCtx + .DbSetDoorOpType + .Where(x => x.IsDefault) + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DoorOpGetDefault: {Environment.NewLine}{exc}"); + } + } + await Task.Delay(1); + return dbResult; + } + + /// + /// Adding door's OP + /// + /// Records to add + /// + public async Task DoorOpInsert(List newOpRec) + { + bool fatto = false; + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + localDbCtx + .DbSetDoorOp + .AddRange(newOpRec); + await localDbCtx.SaveChangesAsync(); + fatto = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DoorInsert: {Environment.NewLine}{exc}"); + } + } + return fatto; + } + + /// + /// Adding a new DoorOpType + /// + /// Record to add + /// + public async Task DoorOpTypeAdd(DoorOpTypeModel addRec) + { + bool fatto = false; + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + localDbCtx + .DbSetDoorOpType + .Add(addRec); + await localDbCtx.SaveChangesAsync(); + fatto = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DoorOpTypeAdd: {Environment.NewLine}{exc}"); + } + } + return fatto; + } + + /// + /// Getting door data by orderId + /// + /// + public List DoorsGetByOrderId(int orderId) + { + List dbResult = new List(); + // retrieving data from db + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + // extracting entire set + dbResult = localDbCtx + .DbSetDoor + .Where(x => x.OrderId == orderId) + .OrderBy(x => x.DoorId) + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Error in DoorsGetByOrderId:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + + /// + /// Modifying or adding a new door + /// + /// Record to edit or add + /// + public async Task DoorUpsert(DoorModel addEditRec) + { + bool fatto = false; + //List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + var currRec = localDbCtx + .DbSetDoor + .Where(x => x.DoorId == addEditRec.DoorId) + .FirstOrDefault(); + if (currRec != null) //if is not null edit the record found + { + currRec.Quantity = addEditRec.Quantity; + localDbCtx.Entry(currRec).State = EntityState.Modified; + } + else //if is null add the record as new in the table + { + localDbCtx + .DbSetDoor + .Add(addEditRec); + } + await localDbCtx.SaveChangesAsync(); + fatto = true; + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DoorUpsert: {Environment.NewLine}{exc}"); + } + } + return fatto; + } + + /// + /// Order status + /// + /// + /// + /// + /// + /// + public List GetOrderStatus(int companyId, int orderStatus, DateTime dataFrom, DateTime dataTo) + { + List dbResult = new List(); + using (var dbCtx = new WDCDataContext(_configuration)) + { + try + { + var CompanyId = new SqlParameter("@CompanyId", companyId); + var OrderStatus = new SqlParameter("@OrderStatus", orderStatus); + var DataFrom = new SqlParameter("@DataFrom", dataFrom); + var DataTo = new SqlParameter("@DataTo", dataTo); + + dbResult = dbCtx + .DbSetOrderStatus + .FromSqlRaw("exec dbo.stp_OrderList_getFilt @CompanyId, @OrderStatus, @DataFrom, @DataTo", CompanyId, OrderStatus, DataFrom, DataTo) + .AsNoTracking() + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Error in GetOrderStatus:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + + /// + /// Retrieving data from roles table + /// + /// + public List GetRolesAll() + { + List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + // extracting entire set + dbResult = localDbCtx + .DbSetRoles + .OrderBy(x => x.Name) + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Error in GetRolesAll:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } /// /// Populating DTO to handle users @@ -150,31 +447,6 @@ namespace WebDoorCreator.Data.Controllers return dbResult; } - /// - /// Retrieving data from user/roles relation - /// - /// - public List GetUserView() - { - List dbResult = new List(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - // extracting entire set - dbResult = localDbCtx - .DbSetUsersView - .OrderBy(x => x.UserId) - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Error in GetUserRole:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - /// /// Retrieving data from users table /// @@ -236,78 +508,58 @@ namespace WebDoorCreator.Data.Controllers return dbResult; } - #endregion User methods - - #region Roles methods - /// - /// Retrieving data from roles table + /// Retrieving data from user/roles relation /// /// - public List GetRolesAll() + public List GetUserView() { - List dbResult = new List(); + List dbResult = new List(); using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) { try { // extracting entire set dbResult = localDbCtx - .DbSetRoles - .OrderBy(x => x.Name) + .DbSetUsersView + .OrderBy(x => x.UserId) .ToList(); } catch (Exception exc) { - Log.Error($"Error in GetRolesAll:{Environment.NewLine}{exc}"); + Log.Error($"Error in GetUserRole:{Environment.NewLine}{exc}"); } } return dbResult; } - #endregion Roles methods - - #region Order status methods - /// - /// Order status + /// ListValues list (All) /// - /// - /// - /// - /// /// - public List GetOrderStatus(int companyId, int orderStatus, DateTime dataFrom, DateTime dataTo) + public List ListValuesGetAll(string tableName, string fieldName) { - List dbResult = new List(); - using (var dbCtx = new WDCDataContext(_configuration)) + List dbResult = new List(); + // cerco su DB recuperando set di dati.... + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) { try { - var CompanyId = new SqlParameter("@CompanyId", companyId); - var OrderStatus = new SqlParameter("@OrderStatus", orderStatus); - var DataFrom = new SqlParameter("@DataFrom", dataFrom); - var DataTo = new SqlParameter("@DataTo", dataTo); - - - dbResult = dbCtx - .DbSetOrderStatus - .FromSqlRaw("exec dbo.stp_OrderList_getFilt @CompanyId, @OrderStatus, @DataFrom, @DataTo", CompanyId, OrderStatus, DataFrom, DataTo) - .AsNoTracking() + // extracting entire set + dbResult = localDbCtx + .DbSetValues + .Where(x => (x.TableName == tableName) && (x.FieldName == fieldName)) + .OrderBy(x => x.ordinal) .ToList(); } catch (Exception exc) { - Log.Error($"Error in GetOrderStatus:{Environment.NewLine}{exc}"); + Log.Error($"Error in ListValuesGetAll:{Environment.NewLine}{exc}"); } } return dbResult; } - #endregion Order status methods - - #region Order methods - /// /// Adding a new order /// @@ -365,213 +617,6 @@ namespace WebDoorCreator.Data.Controllers return fatto; } - #endregion Order methods - - #region Door methods - - /// - /// Getting door data by orderId - /// - /// - public List DoorsGetByOrderId(int orderId) - { - List dbResult = new List(); - // retrieving data from db - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - // extracting entire set - dbResult = localDbCtx - .DbSetDoor - .Where(x => x.OrderId == orderId) - .OrderBy(x => x.DoorId) - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Error in DoorsGetByOrderId:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - - /// - /// Adding a new door - /// - /// Record to edit or add - /// - public async Task DoorInsert(DoorModel newRec) - { - int newId = 0; - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - var currRec = localDbCtx - .DbSetDoor - .Where(x => x.DoorId == newRec.DoorId) - .FirstOrDefault(); - // procedo solo se non c'è già - if (currRec == null) - { - var newDbRec = localDbCtx - .DbSetDoor - .Add(newRec); - await localDbCtx.SaveChangesAsync(); - newId = newRec.DoorId; - } - } - catch (Exception exc) - { - Log.Error($"Eccezione durante DoorInsert: {Environment.NewLine}{exc}"); - } - } - return newId; - } - - /// - /// Modifying or adding a new door - /// - /// Record to edit or add - /// - public async Task DoorUpsert(DoorModel addEditRec) - { - bool fatto = false; - //List dbResult = new List(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - var currRec = localDbCtx - .DbSetDoor - .Where(x => x.DoorId == addEditRec.DoorId) - .FirstOrDefault(); - if (currRec != null) //if is not null edit the record found - { - currRec.Quantity = addEditRec.Quantity; - localDbCtx.Entry(currRec).State = EntityState.Modified; - } - else //if is null add the record as new in the table - { - localDbCtx - .DbSetDoor - .Add(addEditRec); - } - await localDbCtx.SaveChangesAsync(); - fatto = true; - } - catch (Exception exc) - { - Log.Error($"Eccezione durante DoorUpsert: {Environment.NewLine}{exc}"); - } - } - return fatto; - } - - /// - /// Adding or removing a single door - /// - /// Record id to edit or add - /// States if it has to be added or removing a door - /// - public async Task DoorModQty(int doorId, bool isAdd) - { - /* crea nuovo metodo per modifica singola quantità porta: DOORMODQTY */ - bool fatto = false; - //List dbResult = new List(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - var currRec = localDbCtx - .DbSetDoor - .Where(x => x.DoorId == doorId) - .FirstOrDefault(); - if (currRec != null) //if is not null edit the record found - { - if (isAdd) - { - currRec.Quantity = currRec.Quantity + 1; - } - else - { - currRec.Quantity = currRec.Quantity - 1; - } - localDbCtx.Entry(currRec).State = EntityState.Modified; - } - await localDbCtx.SaveChangesAsync(); - fatto = true; - } - catch (Exception exc) - { - Log.Error($"Eccezione durante DoorModQty: {Environment.NewLine}{exc}"); - } - } - return fatto; - } - - #endregion Door methods - - #region ListValues Methods - - /// - /// ListValues list (All) - /// - /// - public List ListValuesGetAll(string tableName, string fieldName) - { - List dbResult = new List(); - // cerco su DB recuperando set di dati.... - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - // extracting entire set - dbResult = localDbCtx - .DbSetValues - .Where(x => (x.TableName == tableName) && (x.FieldName == fieldName)) - .OrderBy(x => x.ordinal) - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Error in ListValuesGetAll:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - - #endregion ListValues Methods - - #region Components Methods - - /// - /// Adding a new Compo - /// - /// Record to add - /// - public async Task CompoAdd(HardwareModel addRec) - { - bool fatto = false; - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - localDbCtx - .DbSetHardware - .Add(addRec); - await localDbCtx.SaveChangesAsync(); - fatto = true; - } - catch (Exception exc) - { - Log.Error($"Eccezione durante CompoAdd: {Environment.NewLine}{exc}"); - } - } - return fatto; - } - /// /// Adding a new graphic param /// @@ -623,37 +668,13 @@ namespace WebDoorCreator.Data.Controllers return dbResult; } - #endregion Components Methods + #endregion Public Methods - #region Door Operation Methods + #region Private Fields + private static IConfiguration _configuration; + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); - /// - /// Adding a new DoorOpType - /// - /// Record to add - /// - public async Task DoorOpTypeAdd(DoorOpTypeModel addRec) - { - bool fatto = false; - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - localDbCtx - .DbSetDoorOpType - .Add(addRec); - await localDbCtx.SaveChangesAsync(); - fatto = true; - } - catch (Exception exc) - { - Log.Error($"Eccezione durante DoorOpTypeAdd: {Environment.NewLine}{exc}"); - } - } - return fatto; - } - - #endregion Door Operation Methods + #endregion Private Fields } } \ No newline at end of file diff --git a/WebDoorCreator.Data/DbModels/DoorOpTypeModel.cs b/WebDoorCreator.Data/DbModels/DoorOpTypeModel.cs index 619a224..561a726 100644 --- a/WebDoorCreator.Data/DbModels/DoorOpTypeModel.cs +++ b/WebDoorCreator.Data/DbModels/DoorOpTypeModel.cs @@ -31,6 +31,11 @@ namespace WebDoorCreator.Data.DbModels /// public string Description { get; set; } = ""; + /// + /// Indica se sia da creare sempre + /// + public bool IsDefault { get; set; } = false; + /// /// Indica se ci sia un hardware correlato all'operazione /// diff --git a/WebDoorCreator.Data/Migrations/WDCData/20230330111904_DoorOpTypeinit.Designer.cs b/WebDoorCreator.Data/Migrations/WDCData/20230330111904_DoorOpTypeinit.Designer.cs new file mode 100644 index 0000000..a74343c --- /dev/null +++ b/WebDoorCreator.Data/Migrations/WDCData/20230330111904_DoorOpTypeinit.Designer.cs @@ -0,0 +1,713 @@ +// +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("20230330111904_DoorOpTypeinit")] + partial class DoorOpTypeinit + { + 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.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("DoorOpTypId") + .HasColumnType("int"); + + b.Property("JsoncConfigVal") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("DoorOpId"); + + b.HasIndex("DoorId"); + + b.HasIndex("DoorOpTypId"); + + 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("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("OpCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + 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.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("label") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ordinal") + .HasColumnType("int"); + + b.HasKey("TableName", "FieldName", "value"); + + b.ToTable("ListValues"); + + b.HasData( + new + { + TableName = "Opening", + FieldName = "Swing", + value = "LH", + label = "Left Handed", + ordinal = 1 + }, + new + { + TableName = "Opening", + FieldName = "Swing", + value = "RH", + label = "Right Handed", + ordinal = 2 + }, + new + { + TableName = "Opening", + FieldName = "Swing", + value = "LHR", + label = "Left Handed Reverse", + ordinal = 3 + }, + new + { + TableName = "Opening", + FieldName = "Swing", + value = "RHR", + label = "Right Handed Reverse", + ordinal = 4 + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + value = "BV", + label = "Bevel", + ordinal = 1 + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + value = "SQ", + label = "Squared", + ordinal = 2 + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + value = "1B", + label = "Bull Nose 1", + ordinal = 3 + }); + }); + + 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.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.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.HasOne("WebDoorCreator.Data.DbModels.DoorOpTypeModel", "DoorOpTypeNav") + .WithMany() + .HasForeignKey("DoorOpTypId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DoorNav"); + + b.Navigation("DoorOpTypeNav"); + }); + + 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/20230330111904_DoorOpTypeinit.cs b/WebDoorCreator.Data/Migrations/WDCData/20230330111904_DoorOpTypeinit.cs new file mode 100644 index 0000000..90aa679 --- /dev/null +++ b/WebDoorCreator.Data/Migrations/WDCData/20230330111904_DoorOpTypeinit.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace WebDoorCreator.Data.Migrations.WDCData +{ + public partial class DoorOpTypeinit : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDefault", + table: "DoorOpType", + type: "bit", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDefault", + table: "DoorOpType"); + } + } +} diff --git a/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs b/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs index d01bacf..9f2b13d 100644 --- a/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs +++ b/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs @@ -325,6 +325,9 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.Property("IsConcrete") .HasColumnType("bit"); + b.Property("Isdefault") + .HasColumnType("bit"); + b.Property("JsoncConfig") .IsRequired() .HasColumnType("nvarchar(max)"); diff --git a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs index 49d0168..c4e8c48 100644 --- a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs +++ b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs @@ -126,6 +126,37 @@ namespace WebDoorCreator.UI.Data return SteamCrypto.DecryptString(encData, passPhrase); } + /// + /// Clean redis DOORS cache + /// + /// 0 = all + /// + public async Task DoorFlushCache(int DoorId) + { + RedisValue pattern = new RedisValue($"{rKeyDoor}:*"); + if (DoorId > 0) + { + pattern = new RedisValue($"{rKeyDoor}:{DoorId}:*"); + } + bool answ = await ExecFlushRedisPattern(pattern); + return answ; + } + + /// + /// Add door + /// + /// + /// + public async Task DoorInsert(DoorModel newRec) + { + var dbResult = await dbController.DoorInsert(newRec); + // elimino cache redis dati porta... + bool answ = await DoorFlushCache(newRec.DoorId); + // elimino cache redis dati ordine... + answ = answ && await OrdersFlushCache(); + return dbResult; + } + /// /// Adding or removing a single door /// @@ -144,6 +175,52 @@ namespace WebDoorCreator.UI.Data return dbResult; } + /// + /// Clean redis DOORS OP cache + /// + /// 0 = all + /// + public async Task DoorOpFlushCache(int DoorId) + { + RedisValue pattern = new RedisValue($"{rKeyDoorOp}:*"); + if (DoorId > 0) + { + pattern = new RedisValue($"{rKeyDoorOp}:{DoorId}:*"); + } + bool answ = await ExecFlushRedisPattern(pattern); + return answ; + } + + + /// + /// lista DoorOp necessarie all'init + /// + /// + public async Task> DoorOpGetDefault() + { + var dbResult = await dbController.DoorOpGetDefault(); + await Task.Delay(1); + // gestione redis da fare... + return dbResult; + } + + /// + /// Add doorOP list + /// + /// + /// + /// + public async Task DoorOpInsert(int DoorId, List newOpList) + { + var dbResult = await dbController.DoorOpInsert(newOpList); + // elimino cache redis dati porta... + bool answ = await DoorOpFlushCache(DoorId); + answ = answ && await DoorFlushCache(DoorId); + // elimino cache redis dati ordine... + answ = answ && await OrdersFlushCache(); + return dbResult; + } + /// /// Doors list by orderId /// @@ -186,37 +263,6 @@ namespace WebDoorCreator.UI.Data return dbResult; } - /// - /// Add door - /// - /// - /// - public async Task DoorInsert(DoorModel newRec) - { - var dbResult = await dbController.DoorInsert(newRec); - // elimino cache redis dati porta... - bool answ = await DoorFlushCache(newRec.DoorId); - // elimino cache redis dati ordine... - answ = answ && await OrdersFlushCache(); - return dbResult; - } - - /// - /// Clean redis DOORS cache - /// - /// 0 = all - /// - public async Task DoorFlushCache(int DoorId) - { - RedisValue pattern = new RedisValue($"{rKeyDoor}:*"); - if (DoorId > 0) - { - pattern = new RedisValue($"{rKeyDoor}:{DoorId}:*"); - } - bool answ = await ExecFlushRedisPattern(pattern); - return answ; - } - /// /// Update or add door /// @@ -529,6 +575,7 @@ namespace WebDoorCreator.UI.Data bool answ = await ExecFlushRedisPattern(pattern); return dbResult; } + /// /// Remove order /// @@ -642,6 +689,7 @@ namespace WebDoorCreator.UI.Data HasHw = false, IsConcrete = true, DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), + IsDefault = true, JsoncConfig = JsonConvert.SerializeObject(edges) }; DoorOpTypeModel doorOpTypeSizing = new DoorOpTypeModel() @@ -651,6 +699,7 @@ namespace WebDoorCreator.UI.Data HasHw = false, IsConcrete = true, DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), + IsDefault = true, JsoncConfig = JsonConvert.SerializeObject(sizing) }; DoorOpTypeModel doorOpTypeOpening = new DoorOpTypeModel() @@ -660,6 +709,7 @@ namespace WebDoorCreator.UI.Data HasHw = false, IsConcrete = true, DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), + IsDefault = true, JsoncConfig = JsonConvert.SerializeObject(opening) }; @@ -732,6 +782,8 @@ namespace WebDoorCreator.UI.Data protected const string rKeyDoor = $"{redisBaseAddr}:Cache:Doors"; + protected const string rKeyDoorOp = $"{redisBaseAddr}:Cache:DoorOp"; + protected const string rKeyListValues = $"{redisBaseAddr}:Cache:ListValues"; protected const string rKeyOrderStatus = $"{redisBaseAddr}:Cache:OrderStatus"; diff --git a/WebDoorCreator.UI/Pages/OrderDetails.razor.cs b/WebDoorCreator.UI/Pages/OrderDetails.razor.cs index 84f9299..6107fb5 100644 --- a/WebDoorCreator.UI/Pages/OrderDetails.razor.cs +++ b/WebDoorCreator.UI/Pages/OrderDetails.razor.cs @@ -25,7 +25,7 @@ namespace WebDoorCreator.UI.Pages protected List? DoorsList { get; set; } = null; - protected int idOrd { get; set; } = 0; + protected int idOrd { get; set; } = -1; [Inject] protected NavigationManager NavManager { get; set; } = null!; @@ -83,6 +83,21 @@ namespace WebDoorCreator.UI.Pages }; // chiamo metodo x insert... var doorId = await WDService.DoorInsert(newDoor); + // aggiungo le lavorazioni standard... + var dotList = await WDService.DoorOpGetDefault(); + + List listOp = dotList + .Select(x => new DoorOpModel() + { + DateIns = adesso, + DateMod = adesso, + DoorOpTypId = x.DoorOpTypId, + DoorId = doorId, + JsoncConfigVal = x.JsoncConfig + }) + .ToList(); + // salvo Door OP associate + await WDService.DoorOpInsert(doorId, listOp); // rimando alla pagina... dettaglio... NavManager.NavigateTo($"/DoorDefinition?idOrd={idOrd}&idDoor={doorId}"); From 9012c3252a8b974f74a94f44ac931b75a17acdfa Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 30 Mar 2023 13:25:25 +0200 Subject: [PATCH 3/7] Fix parametri accessori in INIT --- WebDoorCreator.UI/Pages/OrderDetails.razor.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/WebDoorCreator.UI/Pages/OrderDetails.razor.cs b/WebDoorCreator.UI/Pages/OrderDetails.razor.cs index 6107fb5..6cbd050 100644 --- a/WebDoorCreator.UI/Pages/OrderDetails.razor.cs +++ b/WebDoorCreator.UI/Pages/OrderDetails.razor.cs @@ -84,13 +84,15 @@ namespace WebDoorCreator.UI.Pages // chiamo metodo x insert... var doorId = await WDService.DoorInsert(newDoor); // aggiungo le lavorazioni standard... - var dotList = await WDService.DoorOpGetDefault(); + var doorOpList = await WDService.DoorOpGetDefault(); - List listOp = dotList + List listOp = doorOpList .Select(x => new DoorOpModel() { DateIns = adesso, DateMod = adesso, + UserIdIns = WDCUService.newUserName, + UserIdMod = WDCUService.newUserName, DoorOpTypId = x.DoorOpTypId, DoorId = doorId, JsoncConfigVal = x.JsoncConfig From 8c7483129200210ce75b3929ffd429c95094e6f4 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 30 Mar 2023 13:29:37 +0200 Subject: [PATCH 4/7] Aggiunta navigazione oprdini <--> doors --- WebDoorCreator.UI/Components/DoorMan/DoorList.razor | 4 ++++ WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor index e72df58..a7a4d4f 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor @@ -3,6 +3,7 @@ + @@ -14,6 +15,9 @@ @foreach (var door in DoorsList) { + diff --git a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs index cabf8a4..2d36a51 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs @@ -47,5 +47,11 @@ namespace WebDoorCreator.UI.Components.DoorMan } await E_DoorChanged.InvokeAsync(isChanged); } + + protected async Task editDoor(int doorId) + { + await Task.Delay(1); + NavManager.NavigateTo($"/DoorDefinition?idOrd={currOrderId}&idDoor={doorId}"); + } } } \ No newline at end of file From e3b1b9573106df947d142f44a361620ed3ff06ca Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 30 Mar 2023 14:49:57 +0200 Subject: [PATCH 5/7] Fix parziale flush e gestione editing --- .../Controllers/WebDoorCreatorController.cs | 46 +++- .../Components/DoorMan/DoorList.razor | 26 +- .../Components/DoorMan/DoorList.razor.cs | 59 +++-- .../Components/Order/OrderList.razor.cs | 6 +- .../Data/WebDoorCreatorService.cs | 236 +++++++++++------- WebDoorCreator.UI/Pages/OrderDetails.razor.cs | 6 +- .../Pages/OrdersHomePage.razor.cs | 2 +- 7 files changed, 262 insertions(+), 119 deletions(-) diff --git a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs index fa82d62..ed5b447 100644 --- a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs +++ b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs @@ -142,6 +142,41 @@ namespace WebDoorCreator.Data.Controllers //Log.Info("Dispose di GWMSController"); } + + /// + /// Remove door + /// + /// ID da eliminare + /// + public async Task DoorDelete(int DoorId) + { + bool fatto = false; + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + var currRec = localDbCtx + .DbSetDoor + .Where(x => x.DoorId == DoorId) + .FirstOrDefault(); + // procedo solo se c'è + if (currRec != null) + { + var newDbRec = localDbCtx + .DbSetDoor + .Remove(currRec); + await localDbCtx.SaveChangesAsync(); + fatto = true; + } + } + catch (Exception exc) + { + Log.Error($"Eccezione durante DoorDelete: {Environment.NewLine}{exc}"); + } + } + return fatto; + } + /// /// Adding a new door /// @@ -225,10 +260,10 @@ namespace WebDoorCreator.Data.Controllers { try { - dbResult= localDbCtx - .DbSetDoorOpType - .Where(x => x.IsDefault) - .ToList(); + dbResult = localDbCtx + .DbSetDoorOpType + .Where(x => x.IsDefault) + .ToList(); } catch (Exception exc) { @@ -307,7 +342,10 @@ namespace WebDoorCreator.Data.Controllers dbResult = localDbCtx .DbSetDoor .Where(x => x.OrderId == orderId) + .Include(o => o.OrderNav) + .Include(t => t.TypeNav) .OrderBy(x => x.DoorId) + .AsNoTracking() .ToList(); } catch (Exception exc) diff --git a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor index a7a4d4f..fa9858b 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor @@ -3,12 +3,14 @@
Door Type Door external code Doors Number
+ + @door.TypeId @door.DoorExtCode @door.Quantity
- - + + + + @@ -16,17 +18,31 @@ { - + + + } diff --git a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs index 2d36a51..cd4ba07 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor.cs @@ -1,5 +1,4 @@ using Microsoft.AspNetCore.Components; -using Microsoft.AspNetCore.Identity; using Microsoft.JSInterop; using WebDoorCreator.Data.DbModels; using WebDoorCreator.UI.Data; @@ -8,14 +7,7 @@ namespace WebDoorCreator.UI.Components.DoorMan { public partial class DoorList { - [Inject] - protected WebDoorCreatorService WDService { get; set; } = null!; - - [Inject] - protected IJSRuntime JSRuntime { get; set; } = null!; - - [Inject] - protected NavigationManager NavManager { get; set; } = null!; + #region Public Properties [Parameter] public int currOrderId { get; set; } = 0; @@ -23,19 +15,26 @@ namespace WebDoorCreator.UI.Components.DoorMan [Parameter] public EventCallback E_DoorChanged { get; set; } - protected bool IsChanged { get; set; } = false; + #endregion Public Properties + + #region Protected Properties protected List? DoorsList { get; set; } = null; - protected override async Task OnParametersSetAsync() - { - await ReloadData(); - } + protected bool IsChanged { get; set; } = false; - protected async Task ReloadData() - { - DoorsList = await WDService.DoorsGetByOrderId(currOrderId); - } + [Inject] + protected IJSRuntime JSRuntime { get; set; } = null!; + + [Inject] + protected NavigationManager NavManager { get; set; } = null!; + + [Inject] + protected WebDoorCreatorService WDService { get; set; } = null!; + + #endregion Protected Properties + + #region Protected Methods protected async Task catchDoorChange(bool isChanged) { @@ -48,10 +47,32 @@ namespace WebDoorCreator.UI.Components.DoorMan await E_DoorChanged.InvokeAsync(isChanged); } - protected async Task editDoor(int doorId) + protected async Task deleteRecord(DoorModel currRec) + { + if (!await JSRuntime.InvokeAsync("confirm", $"Door Deletion requested: are you sure to remove {currRec.DoorDescript}?")) + return; + + await WDService.DoorDelete(currRec); + await Task.Delay(1); + await ReloadData(); + } + + protected async Task editRec(int doorId) { await Task.Delay(1); NavManager.NavigateTo($"/DoorDefinition?idOrd={currOrderId}&idDoor={doorId}"); } + + protected override async Task OnParametersSetAsync() + { + await ReloadData(); + } + + protected async Task ReloadData() + { + DoorsList = await WDService.DoorGetByOrderId(currOrderId); + } + + #endregion Protected Methods } } \ No newline at end of file diff --git a/WebDoorCreator.UI/Components/Order/OrderList.razor.cs b/WebDoorCreator.UI/Components/Order/OrderList.razor.cs index b96c87a..8ada9b2 100644 --- a/WebDoorCreator.UI/Components/Order/OrderList.razor.cs +++ b/WebDoorCreator.UI/Components/Order/OrderList.razor.cs @@ -120,10 +120,10 @@ namespace WebDoorCreator.UI.Components.Order } protected async Task deleteRecord(OrderStatusViewModel currRec) - { + { - if (!await JSRuntime.InvokeAsync("confirm", $"Order Deletion requested: are you sure to remove {currRec.OrderExtCode}?")) - return; + if (!await JSRuntime.InvokeAsync("confirm", $"Order Deletion requested: are you sure to remove {currRec.OrderExtCode}?")) + return; await Task.Delay(1); var done = await WDService.OrderRem(currRec.OrderId); diff --git a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs index c4e8c48..1a6a712 100644 --- a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs +++ b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs @@ -126,6 +126,25 @@ namespace WebDoorCreator.UI.Data return SteamCrypto.DecryptString(encData, passPhrase); } + /// + /// CElimina record posta + /// + /// + /// + public async Task DoorDelete(DoorModel currRec) + { + int DoorId = currRec.DoorId; + int OrderId = currRec.OrderId; + // elimino sul DB + bool answ = await dbController.DoorDelete(DoorId); + // svuoto cache + await DoorFlushCache(DoorId); + await DoorOpFlushCache(DoorId); + await OrderDetailFlushCache(OrderId); + await OrdersFlushCache(); + return answ; + } + /// /// Clean redis DOORS cache /// @@ -142,95 +161,15 @@ namespace WebDoorCreator.UI.Data return answ; } - /// - /// Add door - /// - /// - /// - public async Task DoorInsert(DoorModel newRec) - { - var dbResult = await dbController.DoorInsert(newRec); - // elimino cache redis dati porta... - bool answ = await DoorFlushCache(newRec.DoorId); - // elimino cache redis dati ordine... - answ = answ && await OrdersFlushCache(); - return dbResult; - } - - /// - /// Adding or removing a single door - /// - /// Record id to edit or add - /// States if it has to be added or removing a door - /// - public async Task DoorModQty(int doorId, bool isAdd) - { - var dbResult = await dbController.DoorModQty(doorId, isAdd); - // elimino cache redis dati porta... - RedisValue pattern = new RedisValue($"{rKeyDoor}:*"); - bool answ = await ExecFlushRedisPattern(pattern); - // elimino cache redis dati ordine... - pattern = new RedisValue($"{rKeyOrderStatus}:*"); - answ = await ExecFlushRedisPattern(pattern); - return dbResult; - } - - /// - /// Clean redis DOORS OP cache - /// - /// 0 = all - /// - public async Task DoorOpFlushCache(int DoorId) - { - RedisValue pattern = new RedisValue($"{rKeyDoorOp}:*"); - if (DoorId > 0) - { - pattern = new RedisValue($"{rKeyDoorOp}:{DoorId}:*"); - } - bool answ = await ExecFlushRedisPattern(pattern); - return answ; - } - - - /// - /// lista DoorOp necessarie all'init - /// - /// - public async Task> DoorOpGetDefault() - { - var dbResult = await dbController.DoorOpGetDefault(); - await Task.Delay(1); - // gestione redis da fare... - return dbResult; - } - - /// - /// Add doorOP list - /// - /// - /// - /// - public async Task DoorOpInsert(int DoorId, List newOpList) - { - var dbResult = await dbController.DoorOpInsert(newOpList); - // elimino cache redis dati porta... - bool answ = await DoorOpFlushCache(DoorId); - answ = answ && await DoorFlushCache(DoorId); - // elimino cache redis dati ordine... - answ = answ && await OrdersFlushCache(); - return dbResult; - } - /// /// Doors list by orderId /// - public async Task?> DoorsGetByOrderId(int orderId) + public async Task?> DoorGetByOrderId(int orderId) { string source = "DB"; - List? dbResult = new List(); // cerco da cache - string currKey = $"{rKeyDoor}:{orderId}"; + string currKey = $"{rKeyOrderDetail}:{orderId}"; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); string? rawData = await redisDb.StringGetAsync(currKey); @@ -259,7 +198,116 @@ namespace WebDoorCreator.UI.Data } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; - Log.Debug($"DoorsGetByOrderId | {source} in: {ts.TotalMilliseconds} ms"); + Log.Debug($"DoorGetByOrderId | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + } + + /// + /// Add door + /// + /// + /// + public async Task DoorInsert(DoorModel newRec) + { + var dbResult = await dbController.DoorInsert(newRec); + // elimino cache redis dati ordine... + await OrderDetailFlushCache(newRec.OrderId); + await OrdersFlushCache(); + return dbResult; + } + + /// + /// Adding or removing a single door + /// + /// Record id to edit or add + /// States if it has to be added or removing a door + /// + public async Task DoorModQty(int DoorId, bool isAdd) + { + var dbResult = await dbController.DoorModQty(DoorId, isAdd); + // svuoto cache + await DoorFlushCache(DoorId); + await DoorOpFlushCache(DoorId); + await OrderDetailFlushCache(0); + await OrdersFlushCache(); + return dbResult; + } + + /// + /// Clean redis DOORS OP cache + /// + /// 0 = all + /// + public async Task DoorOpFlushCache(int DoorId) + { + RedisValue pattern = new RedisValue($"{rKeyDoorOp}:*"); + if (DoorId > 0) + { + pattern = new RedisValue($"{rKeyDoorOp}:{DoorId}:*"); + } + bool answ = await ExecFlushRedisPattern(pattern); + return answ; + } + + /// + /// lista DoorOp necessarie all'init + /// + /// + public async Task> DoorOpGetDefault() + { + List? dbResult = new List(); + string source = "DB"; + // cerco da cache + string currKey = $"{rKeyDoorOpType}:DEFAULT"; + 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 = await dbController.DoorOpGetDefault(); + 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($"DoorOpGetDefault | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + + // gestione redis da fare... + return dbResult; + } + + /// + /// Add doorOP list + /// + /// + /// + /// + public async Task DoorOpInsert(int DoorId, List newOpList) + { + var dbResult = await dbController.DoorOpInsert(newOpList); + // elimino cache redis dati porta... + bool answ = await DoorOpFlushCache(DoorId); + answ = answ && await DoorFlushCache(DoorId); + // elimino cache redis dati ordine... + answ = answ && await OrdersFlushCache(); return dbResult; } @@ -576,6 +624,22 @@ namespace WebDoorCreator.UI.Data return dbResult; } + /// + /// Clean REDIS order detail data in cache + /// + /// 0 = all + /// + public async Task OrderDetailFlushCache(int OrderId) + { + RedisValue pattern = new RedisValue($"{rKeyOrderDetail}:*"); + if (OrderId > 0) + { + pattern = new RedisValue($"{rKeyOrderDetail}:{OrderId}:*"); + } + bool answ = await ExecFlushRedisPattern(pattern); + return answ; + } + /// /// Remove order /// @@ -780,12 +844,16 @@ namespace WebDoorCreator.UI.Data //#endregion Public Methods protected const string rKeyCompany = $"{redisBaseAddr}:Cache:Company"; - protected const string rKeyDoor = $"{redisBaseAddr}:Cache:Doors"; + protected const string rKeyDoor = $"{redisBaseAddr}:Cache:Door"; protected const string rKeyDoorOp = $"{redisBaseAddr}:Cache:DoorOp"; + protected const string rKeyDoorOpType = $"{redisBaseAddr}:Cache:DoorOpType"; + protected const string rKeyListValues = $"{redisBaseAddr}:Cache:ListValues"; + protected const string rKeyOrderDetail = $"{redisBaseAddr}:Cache:OrderDetail"; + protected const string rKeyOrderStatus = $"{redisBaseAddr}:Cache:OrderStatus"; protected const string rKeyRoles = $"{redisBaseAddr}:Cache:Roles"; diff --git a/WebDoorCreator.UI/Pages/OrderDetails.razor.cs b/WebDoorCreator.UI/Pages/OrderDetails.razor.cs index 6cbd050..1ddef08 100644 --- a/WebDoorCreator.UI/Pages/OrderDetails.razor.cs +++ b/WebDoorCreator.UI/Pages/OrderDetails.razor.cs @@ -61,8 +61,8 @@ namespace WebDoorCreator.UI.Pages protected async Task createDoor() { // conto le porte x questo ordine e uso x chiamata successiva... - var door4ord = await WDService.DoorsGetByOrderId(idOrd); - int numDoors = door4ord?.Count ?? 0; + var door4ord = await WDService.DoorGetByOrderId(idOrd); + int numDoors = door4ord?.Count + 1 ?? 1; DateTime adesso = DateTime.Now; // creo una nuova porta... DoorModel newDoor = new DoorModel() @@ -75,7 +75,7 @@ namespace WebDoorCreator.UI.Pages DateIns = adesso, DateMod = adesso, DateLockExpiry = adesso.AddHours(1), - DoorDescript = $"ORD {idOrd} | Door {numDoors + 1:00}", + DoorDescript = $"ORD {idOrd} | Door {numDoors:00}", DoorExtCode = $"ORD {idOrd} | Ext Code --", Quantity = 1, UnitCost = 0, diff --git a/WebDoorCreator.UI/Pages/OrdersHomePage.razor.cs b/WebDoorCreator.UI/Pages/OrdersHomePage.razor.cs index c6e09be..eb6daff 100644 --- a/WebDoorCreator.UI/Pages/OrdersHomePage.razor.cs +++ b/WebDoorCreator.UI/Pages/OrdersHomePage.razor.cs @@ -195,7 +195,7 @@ namespace WebDoorCreator.UI.Pages protected int userCurrCompany { get; set; } protected async Task ReloadData() { - DoorsList = await WDService.DoorsGetByOrderId(currOrderId); + DoorsList = await WDService.DoorGetByOrderId(currOrderId); } #endregion Private Methods From 0657056c95ed7b7ec2ac9883b0278a6775404e1b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 30 Mar 2023 15:18:42 +0200 Subject: [PATCH 6/7] Typo vari x fix classe accesso dati --- .../Controllers/WebDoorCreatorController.cs | 358 +++++---- .../Buttons/ButtonAddRemDoor.razor.cs | 6 +- .../Components/DoorMan/DoorList.razor | 4 +- .../Components/Order/OrderList.razor.cs | 2 +- .../Components/Users/UserList.razor.cs | 6 +- .../Data/WebDoorCreatorService.cs | 737 +++++++++--------- .../Pages/DoorDefinition.razor.cs | 2 +- WebDoorCreator.UI/Pages/SuperAdmin.razor.cs | 2 +- 8 files changed, 553 insertions(+), 564 deletions(-) diff --git a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs index ed5b447..73e3762 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.Collections.Generic; using WebDoorCreator.Data.DbModels; using WebDoorCreator.Data.DTO; @@ -142,7 +141,6 @@ namespace WebDoorCreator.Data.Controllers //Log.Info("Dispose di GWMSController"); } - /// /// Remove door /// @@ -395,182 +393,6 @@ namespace WebDoorCreator.Data.Controllers return fatto; } - /// - /// Order status - /// - /// - /// - /// - /// - /// - public List GetOrderStatus(int companyId, int orderStatus, DateTime dataFrom, DateTime dataTo) - { - List dbResult = new List(); - using (var dbCtx = new WDCDataContext(_configuration)) - { - try - { - var CompanyId = new SqlParameter("@CompanyId", companyId); - var OrderStatus = new SqlParameter("@OrderStatus", orderStatus); - var DataFrom = new SqlParameter("@DataFrom", dataFrom); - var DataTo = new SqlParameter("@DataTo", dataTo); - - dbResult = dbCtx - .DbSetOrderStatus - .FromSqlRaw("exec dbo.stp_OrderList_getFilt @CompanyId, @OrderStatus, @DataFrom, @DataTo", CompanyId, OrderStatus, DataFrom, DataTo) - .AsNoTracking() - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Error in GetOrderStatus:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - - /// - /// Retrieving data from roles table - /// - /// - public List GetRolesAll() - { - List dbResult = new List(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - // extracting entire set - dbResult = localDbCtx - .DbSetRoles - .OrderBy(x => x.Name) - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Error in GetRolesAll:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - - /// - /// Populating DTO to handle users - /// - /// User id to search for - /// - public List GetUserRoleClaimByUserId() - { - List dbResult = new List(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - var users = localDbCtx.DbSetUsers.ToList(); - - foreach (var item in users) - { - var userRoles = localDbCtx.DbSetUserRoles - .Where(x => x.UserId == item.Id) - .Include(u => u.UsersNav) - .Include(u => u.RolesNav) - .ToList(); - - //UserRoleClaimDTO userDTO = new UserRoleClaimDTO() - //{ - // userName = item.UserName, - // rolesName = userRoles - //}; - //dbResult.Add(userDTO); - } - } - return dbResult; - } - - /// - /// Retrieving data from users table - /// - /// - public List GetUsersAll() - { - List dbResult = new List(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - // extracting entire set - dbResult = localDbCtx - .DbSetUsers - .OrderBy(x => x.Id) - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Error in GetUserRole:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - - /// - /// Retrieving data from users table filtered by id - /// - /// - public AspNetUsers GetUsersById(string userId) - { - AspNetUsers dbResult = new AspNetUsers(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - // extracting entire set - var risultato = localDbCtx - .DbSetUsers - .Where(x => x.Id == userId) - .AsNoTracking() - .OrderBy(x => x.Id) - .FirstOrDefault(); - - if (risultato != null) - { - dbResult = risultato; - } - else - { - dbResult = new AspNetUsers(); - } - } - catch (Exception exc) - { - Log.Error($"Error in GetUsersById:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - - /// - /// Retrieving data from user/roles relation - /// - /// - public List GetUserView() - { - List dbResult = new List(); - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) - { - try - { - // extracting entire set - dbResult = localDbCtx - .DbSetUsersView - .OrderBy(x => x.UserId) - .ToList(); - } - catch (Exception exc) - { - Log.Error($"Error in GetUserRole:{Environment.NewLine}{exc}"); - } - } - return dbResult; - } - /// /// ListValues list (All) /// @@ -655,6 +477,40 @@ namespace WebDoorCreator.Data.Controllers return fatto; } + /// + /// Order status + /// + /// + /// + /// + /// + /// + public List OrderStatusGetAll(int companyId, int orderStatus, DateTime dataFrom, DateTime dataTo) + { + List dbResult = new List(); + using (var dbCtx = new WDCDataContext(_configuration)) + { + try + { + var CompanyId = new SqlParameter("@CompanyId", companyId); + var OrderStatus = new SqlParameter("@OrderStatus", orderStatus); + var DataFrom = new SqlParameter("@DataFrom", dataFrom); + var DataTo = new SqlParameter("@DataTo", dataTo); + + dbResult = dbCtx + .DbSetOrderStatus + .FromSqlRaw("exec dbo.stp_OrderList_getFilt @CompanyId, @OrderStatus, @DataFrom, @DataTo", CompanyId, OrderStatus, DataFrom, DataTo) + .AsNoTracking() + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Error in GetOrderStatus:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + /// /// Adding a new graphic param /// @@ -682,10 +538,35 @@ namespace WebDoorCreator.Data.Controllers } /// - /// truncate tables + /// Retrieving data from roles table /// /// - public bool TablesTruncate() + public List RolesGetAll() + { + List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + // extracting entire set + dbResult = localDbCtx + .DbSetRoles + .OrderBy(x => x.Name) + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Error in GetRolesAll:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + + /// + /// truncate tables for testing purposes + /// + /// + public bool TestTablesTruncate() { bool dbResult = false; using (var dbCtx = new WDCDataContext(_configuration)) @@ -706,6 +587,123 @@ namespace WebDoorCreator.Data.Controllers return dbResult; } + /// + /// Populating DTO to handle users + /// + /// User id to search for + /// + public List UserRoleClaimGetByUserId() + { + List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + var users = localDbCtx.DbSetUsers.ToList(); + + foreach (var item in users) + { + var userRoles = localDbCtx.DbSetUserRoles + .Where(x => x.UserId == item.Id) + .Include(u => u.UsersNav) + .Include(u => u.RolesNav) + .ToList(); + + //UserRoleClaimDTO userDTO = new UserRoleClaimDTO() + //{ + // userName = item.UserName, + // rolesName = userRoles + //}; + //dbResult.Add(userDTO); + } + } + return dbResult; + } + + /// + /// Retrieving data from users table + /// + /// + public List UsersGetAll() + { + List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + // extracting entire set + dbResult = localDbCtx + .DbSetUsers + .OrderBy(x => x.Id) + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Error in GetUserRole:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + + /// + /// Retrieving data from users table filtered by id + /// + /// + public AspNetUsers UsersGetById(string userId) + { + AspNetUsers dbResult = new AspNetUsers(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + // extracting entire set + var risultato = localDbCtx + .DbSetUsers + .Where(x => x.Id == userId) + .AsNoTracking() + .OrderBy(x => x.Id) + .FirstOrDefault(); + + if (risultato != null) + { + dbResult = risultato; + } + else + { + dbResult = new AspNetUsers(); + } + } + catch (Exception exc) + { + Log.Error($"Error in GetUsersById:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + + /// + /// Retrieving data from user/roles relation + /// + /// + public List UserViewGetAll() + { + List dbResult = new List(); + using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + { + try + { + // extracting entire set + dbResult = localDbCtx + .DbSetUsersView + .OrderBy(x => x.UserId) + .ToList(); + } + catch (Exception exc) + { + Log.Error($"Error in GetUserRole:{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + #endregion Public Methods #region Private Fields diff --git a/WebDoorCreator.UI/Components/Buttons/ButtonAddRemDoor.razor.cs b/WebDoorCreator.UI/Components/Buttons/ButtonAddRemDoor.razor.cs index 00ff629..3745d70 100644 --- a/WebDoorCreator.UI/Components/Buttons/ButtonAddRemDoor.razor.cs +++ b/WebDoorCreator.UI/Components/Buttons/ButtonAddRemDoor.razor.cs @@ -17,7 +17,9 @@ namespace WebDoorCreator.UI.Components.Buttons protected NavigationManager NavManager { get; set; } = null!; [Parameter] - public int doorId { get; set; } = 0; + public int DoorId { get; set; } = 0; + [Parameter] + public int OrderId { get; set; } = 0; [Parameter] public bool isAdd { get; set; } @@ -31,7 +33,7 @@ namespace WebDoorCreator.UI.Components.Buttons { //var door = new DoorModel(); doorChange = false; - var done = await WDService.DoorModQty(doorId, isAdd); + var done = await WDService.DoorModQty(OrderId, DoorId, isAdd); if (done) { doorChange = true; diff --git a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor index fa9858b..d3acde5 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor @@ -27,7 +27,7 @@
Door TypeDoor TypeDescription Door external code Doors Number
- + @door.TypeId@(door.TypeNav?.Description ?? "-")@door.DoorDescript @door.DoorExtCode @door.Quantity - + @if (door.Quantity > 1) + { + + } + else + { + + } + @if (door.OrderNav?.Status < Core.Enum.OrderStatus.Sent) + { + + } +
@if (door.Quantity > 1) { - + } else { @@ -35,7 +35,7 @@ } - + @if (door.OrderNav?.Status < Core.Enum.OrderStatus.Sent) diff --git a/WebDoorCreator.UI/Components/Order/OrderList.razor.cs b/WebDoorCreator.UI/Components/Order/OrderList.razor.cs index 8ada9b2..20a8fc9 100644 --- a/WebDoorCreator.UI/Components/Order/OrderList.razor.cs +++ b/WebDoorCreator.UI/Components/Order/OrderList.razor.cs @@ -107,7 +107,7 @@ namespace WebDoorCreator.UI.Components.Order await Task.Delay(1); if (userClaims != null) { - ListOrdersStatus = await WDService.GetOrderStatus(userCurrCompany, 0, domani.AddYears(-2), domani); + ListOrdersStatus = await WDService.OrderStatusGetFilt(userCurrCompany, 0, domani.AddYears(-2), domani); } await Task.Delay(1); await InvokeAsync(StateHasChanged); diff --git a/WebDoorCreator.UI/Components/Users/UserList.razor.cs b/WebDoorCreator.UI/Components/Users/UserList.razor.cs index 418afe5..687e9ac 100644 --- a/WebDoorCreator.UI/Components/Users/UserList.razor.cs +++ b/WebDoorCreator.UI/Components/Users/UserList.razor.cs @@ -48,8 +48,8 @@ namespace WebDoorCreator.UI.Components.Users { //ListRecords = null; await Task.Delay(1); - UsersList = await WDService.GetUserView(); - RolesList = await WDService.GetRolesAll(); + UsersList = await WDService.UserViewGetAll(); + RolesList = await WDService.RolesGetAll(); await Task.Delay(1); await InvokeAsync(StateHasChanged); } @@ -57,7 +57,7 @@ namespace WebDoorCreator.UI.Components.Users private async Task setCurrUser(string userId) { await Task.Delay(1); - currUser = await WDService.GetUsersById(userId); + currUser = await WDService.UsersGetById(userId); } //private async Task editRec(CompanyModel currComp) diff --git a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs index 1a6a712..b194295 100644 --- a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs +++ b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs @@ -121,6 +121,145 @@ namespace WebDoorCreator.UI.Data /*----------------------------------------------------------------------------------------------------------------------*/ + /// + /// Getting a list of all the active components + /// + /// Path to start + /// + public async Task> CompoGetAllActive(string rootPath) + { + await Task.Delay(1); + List listActiveCompo = new List(); + + //estraggo la lista di componenti che sono attive per il cliente + IniFile fIni = new IniFile(rootPath); + string compoDDF = fIni.ReadString("CompoOrder", "CompoDDFOrder", "CONFIG"); + var compoDDFList = compoDDF.Split(","); + foreach (string compo in compoDDFList) + { + listActiveCompo.Add(compo.Trim()); + } + + return listActiveCompo; + } + + /// + /// Setting all the component list + /// + /// Path to start + /// + public async Task CompoListSetAll(string rootPath) + { + bool fatto = false; + string compoName = ""; + int n = 1; + int i = 1; + List listGraphicParams = new List(); + + dbController.TestTablesTruncate(); + + List listActiveCompo = await CompoGetAllActive(Path.Combine(rootPath, @"Default.ini")); + List listCompoS = new List(); + //estraggo tutte le sotto directory della cartella \EgtData\Doors\EgtCompoBase\Compo + string[] dirs = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly); + + foreach (string dir in dirs) + { + //iterazione per cercare tutti i file "Config.ini" nelle sotto directory + string[] files = Directory.GetFiles(dir, "Config.ini"); + + compoName = ""; + //iterazione per cercare tutti i file "Config.ini" nelle sotto directory + foreach (string file in files) + { + List lines = File.ReadAllLines(file).ToList(); //leggo tutte le linee del file + IniFile fIni = new IniFile(file); + Guid opCode = Guid.NewGuid(); + compoName = fIni.ReadString("Compo", "Name", "COMPONAME"); //cerco la sezione del file ed estraggo il nome del componente + var isActive = fIni.ReadString("Template", "IsActive", "1");//cerco la sezione del file ed estraggo se i template sono attivi per il seguente componente + bool compoTemplateIsActive = true; + string layerName = fIni.ReadString("Layer", "LayerName", "LAYER"); + if (isActive == "0") + { + compoTemplateIsActive = false; + } + var compoNameSplit = compoName.Split("/"); // lo slash indica l'alias + if (listActiveCompo.Contains(compoNameSplit[0].ToString())) + { + HardwareModel compoConfig = new HardwareModel() { compoName = compoNameSplit[0].ToString(), compoAlias = compoNameSplit[1].ToString(), compoLayerName = layerName, compoTemplateIsActive = compoTemplateIsActive }; //creo il componente (padre) + await dbController.CompoAdd(compoConfig); + listCompoS.Add(compoConfig); + var lineToSearch = lines.Where(x => x.Contains("[Graphic")).ToList(); //cerco all'interno del file tutte le sezioni che contengono "[Graphic" così da poter prendere il nome della sezione ES: [Graphic parameters1] = Graphic parameters1 + n = 1; + foreach (var match in lineToSearch) + { + listGraphicParams = await GraphicParamsGetAll(file, match, n, i); + n++; + } + + DoorOpTypeModel doorOpType = new DoorOpTypeModel() + { + Description = $"DOOR OPERATION TYPE FOR {compoNameSplit[0].ToString()}", + OpCode = opCode.ToString(), + HasHw = true, + IsConcrete = true, + HwCode = compoNameSplit[0].ToString(), + DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), + JsoncConfig = JsonConvert.SerializeObject(listGraphicParams) + }; + + await dbController.DoorOpTypeAdd(doorOpType); + } + i++; + } + } + + List edges = new List(); + edges.Add(new Edges()); + List sizing = new List(); + sizing.Add(new Sizing()); + List opening = new List(); + opening.Add(new Opening()); + Guid opCodeEdges = Guid.NewGuid(); + Guid opCodeSizing = Guid.NewGuid(); + Guid opCodeOpening = Guid.NewGuid(); + DoorOpTypeModel doorOpTypeEdges = new DoorOpTypeModel() + { + Description = "DOOR OPERATION TYPE FOR Edges", + OpCode = opCodeEdges.ToString(), + HasHw = false, + IsConcrete = true, + DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), + IsDefault = true, + JsoncConfig = JsonConvert.SerializeObject(edges) + }; + DoorOpTypeModel doorOpTypeSizing = new DoorOpTypeModel() + { + Description = "DOOR OPERATION TYPE FOR Sizing", + OpCode = opCodeSizing.ToString(), + HasHw = false, + IsConcrete = true, + DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), + IsDefault = true, + JsoncConfig = JsonConvert.SerializeObject(sizing) + }; + DoorOpTypeModel doorOpTypeOpening = new DoorOpTypeModel() + { + Description = "DOOR OPERATION TYPE FOR Opening", + OpCode = opCodeOpening.ToString(), + HasHw = false, + IsConcrete = true, + DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), + IsDefault = true, + JsoncConfig = JsonConvert.SerializeObject(opening) + }; + + await dbController.DoorOpTypeAdd(doorOpTypeEdges); + await dbController.DoorOpTypeAdd(doorOpTypeSizing); + await dbController.DoorOpTypeAdd(doorOpTypeOpening); + return fatto; + } + public string DecriptData(string encData) { return SteamCrypto.DecryptString(encData, passPhrase); @@ -222,13 +361,13 @@ namespace WebDoorCreator.UI.Data /// Record id to edit or add /// States if it has to be added or removing a door /// - public async Task DoorModQty(int DoorId, bool isAdd) + public async Task DoorModQty(int OrderId, int DoorId, bool isAdd) { var dbResult = await dbController.DoorModQty(DoorId, isAdd); // svuoto cache await DoorFlushCache(DoorId); await DoorOpFlushCache(DoorId); - await OrderDetailFlushCache(0); + await OrderDetailFlushCache(OrderId); await OrdersFlushCache(); return dbResult; } @@ -340,232 +479,52 @@ namespace WebDoorCreator.UI.Data } /// - /// Getting a list of all the active components + /// Setting the graphic parameters for components /// - /// Path to start + /// + /// + /// + /// /// - public async Task> GetAllActiveCompo(string rootPath) + public async Task> GraphicParamsGetAll(string file, string match, int n, int i) { await Task.Delay(1); - List listActiveCompo = new List(); + List listGraphicParams = new List(); + IniFile fIni = new IniFile(file); //estraggo la lista di componenti che sono attive per il cliente - IniFile fIni = new IniFile(rootPath); - string compoDDF = fIni.ReadString("CompoOrder", "CompoDDFOrder", "CONFIG"); - var compoDDFList = compoDDF.Split(","); - foreach (string compo in compoDDFList) + var graphicParamsName = fIni.ReadSection(match.Substring(1, match.Length - 2)); //cerco il contenuto delle sezioni + if (int.Parse(match.Substring(match.Length - 2, 1)) == n) //controllo se tra i numeri di graphic params vi è un buco ES: Graphic parameters1 Graphic parameters3 se il buco c'è salto tutti i parametri che stanno dopo il buco ==> tengo conto solo di Graphic parameters1 { - listActiveCompo.Add(compo.Trim()); - } - - return listActiveCompo; - } - - public async Task?> GetOrderStatus(int companyId, int orderStatus, DateTime dataFrom, DateTime dataTo) - { - string source = "DB"; - - List? dbResult = new List(); - // cerco da cache - string currKey = $"{rKeyOrderStatus}:{companyId}:{orderStatus}:{dataFrom:yyyyMMdd}:{dataTo:yyyyMMdd}"; - 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) + foreach (string param in graphicParamsName) { - dbResult = new List(); - } - else - { - dbResult = tempResult; + string compoParams = fIni.ReadString(match.Substring(1, match.Length - 2), $"{param.Split("=")[0]}", "CONFIG"); //cerco il parametro nella sezione + var compoParamsSplit = compoParams.Split(";"); + + string CompoParamName = ""; + string CompoParamAlias = ""; + if (param.Split("=")[0].StartsWith("Param")) + { + if (compoParamsSplit[1].Contains("/")) + { + CompoParamName = compoParamsSplit[1].Split("/")[0]; + CompoParamAlias = compoParamsSplit[1].Split("/")[1]; + } + + GraphicParamsModel graphicParams = new GraphicParamsModel() { compoId = i, graphicParamsN = match.Substring(1, match.Length - 2), graphicParamKey = param.Split("=")[0], graphicParamName = CompoParamName, graphicParamAlias = CompoParamAlias, graphicParamType = compoParamsSplit[0], graphicParamDefaultVal = compoParamsSplit[2] }; + listGraphicParams.Add(graphicParams); //creo nuovo oggetto parametro che conterrà anche il nome del componente per creare relazione + await dbController.ParamAdd(graphicParams); + } + else + { + GraphicParamsModel graphicParams = new GraphicParamsModel() { compoId = i, graphicParamsN = match.Substring(1, match.Length - 2), graphicParamKey = param.Split("=")[0], graphicParamName = compoParams }; + listGraphicParams.Add(graphicParams); //creo nuovo oggetto parametro che conterrà anche il nome del componente per creare relazione + await dbController.ParamAdd(graphicParams); + } } } - else - { - dbResult = dbController.GetOrderStatus(companyId, orderStatus, dataFrom, dataTo); - 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($"GetOrderStatus | {source} in: {ts.TotalMilliseconds} ms"); - return dbResult; - } - /// - /// roles list - /// - public async Task?> GetRolesAll() - { - string source = "DB"; - - List? dbResult = new List(); - // cerco da cache - string currKey = rKeyRoles; - 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.GetRolesAll(); - 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($"GetRolesAll | {source} in: {ts.TotalMilliseconds} ms"); - return dbResult; - } - - /// - /// Users roles list - /// - public async Task?> GetUsersAll() - { - string source = "DB"; - - List? dbResult = new List(); - // cerco da cache - string currKey = rKeyUsers; - 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.GetUsersAll(); - 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($"GetUsersAll | {source} in: {ts.TotalMilliseconds} ms"); - return dbResult; - } - - /// - /// Users roles list - /// - public async Task GetUsersById(string userId) - { - string source = "DB"; - - AspNetUsers dbResult = new AspNetUsers(); - // cerco da cache - string currKey = $"{rKeyUsers}:{userId}"; - 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 AspNetUsers(); - } - else - { - dbResult = tempResult; - } - } - else - { - dbResult = dbController.GetUsersById(userId); - rawData = JsonConvert.SerializeObject(dbResult, JSSettings); - await redisDb.StringSetAsync(currKey, rawData, UltraLongCache); - } - if (dbResult == null) - { - dbResult = new AspNetUsers(); - } - stopWatch.Stop(); - TimeSpan ts = stopWatch.Elapsed; - Log.Debug($"GetUsersById | {source} in: {ts.TotalMilliseconds} ms"); - return dbResult; - } - - /// - /// Users roles list - /// - public async Task?> GetUserView() - { - string source = "DB"; - - List? dbResult = new List(); - // cerco da cache - string currKey = rKeyUsersView; - 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.GetUserView(); - 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($"GetUserView | {source} in: {ts.TotalMilliseconds} ms"); - return dbResult; + return listGraphicParams; } /// @@ -634,7 +593,7 @@ namespace WebDoorCreator.UI.Data RedisValue pattern = new RedisValue($"{rKeyOrderDetail}:*"); if (OrderId > 0) { - pattern = new RedisValue($"{rKeyOrderDetail}:{OrderId}:*"); + pattern = new RedisValue($"{rKeyOrderDetail}:{OrderId}"); } bool answ = await ExecFlushRedisPattern(pattern); return answ; @@ -666,170 +625,211 @@ namespace WebDoorCreator.UI.Data return answ; } - /// - /// Setting all the component list - /// - /// Path to start - /// - public async Task SetAllCompoList(string rootPath) + public async Task?> OrderStatusGetFilt(int companyId, int orderStatus, DateTime dataFrom, DateTime dataTo) { - bool fatto = false; - string compoName = ""; - int n = 1; - int i = 1; - List listGraphicParams = new List(); + string source = "DB"; - dbController.TablesTruncate(); - - List listActiveCompo = await GetAllActiveCompo(Path.Combine(rootPath, @"Default.ini")); - List listCompoS = new List(); - //estraggo tutte le sotto directory della cartella \EgtData\Doors\EgtCompoBase\Compo - string[] dirs = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly); - - foreach (string dir in dirs) + List? dbResult = new List(); + // cerco da cache + string currKey = $"{rKeyOrderStatus}:{companyId}:{orderStatus}:{dataFrom:yyyyMMdd}:{dataTo:yyyyMMdd}"; + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + string? rawData = await redisDb.StringGetAsync(currKey); + if (!string.IsNullOrEmpty(rawData)) { - //iterazione per cercare tutti i file "Config.ini" nelle sotto directory - string[] files = Directory.GetFiles(dir, "Config.ini"); - - compoName = ""; - //iterazione per cercare tutti i file "Config.ini" nelle sotto directory - foreach (string file in files) + source = "REDIS"; + var tempResult = JsonConvert.DeserializeObject>(rawData); + if (tempResult == null) { - List lines = File.ReadAllLines(file).ToList(); //leggo tutte le linee del file - IniFile fIni = new IniFile(file); - Guid opCode = Guid.NewGuid(); - compoName = fIni.ReadString("Compo", "Name", "COMPONAME"); //cerco la sezione del file ed estraggo il nome del componente - var isActive = fIni.ReadString("Template", "IsActive", "1");//cerco la sezione del file ed estraggo se i template sono attivi per il seguente componente - bool compoTemplateIsActive = true; - string layerName = fIni.ReadString("Layer", "LayerName", "LAYER"); - if (isActive == "0") - { - compoTemplateIsActive = false; - } - var compoNameSplit = compoName.Split("/"); // lo slash indica l'alias - if (listActiveCompo.Contains(compoNameSplit[0].ToString())) - { - HardwareModel compoConfig = new HardwareModel() { compoName = compoNameSplit[0].ToString(), compoAlias = compoNameSplit[1].ToString(), compoLayerName = layerName, compoTemplateIsActive = compoTemplateIsActive }; //creo il componente (padre) - await dbController.CompoAdd(compoConfig); - listCompoS.Add(compoConfig); - var lineToSearch = lines.Where(x => x.Contains("[Graphic")).ToList(); //cerco all'interno del file tutte le sezioni che contengono "[Graphic" così da poter prendere il nome della sezione ES: [Graphic parameters1] = Graphic parameters1 - n = 1; - foreach (var match in lineToSearch) - { - listGraphicParams = await SetGraphicParams(file, match, n, i); - n++; - } - - DoorOpTypeModel doorOpType = new DoorOpTypeModel() - { - Description = $"DOOR OPERATION TYPE FOR {compoNameSplit[0].ToString()}", - OpCode = opCode.ToString(), - HasHw = true, - IsConcrete = true, - HwCode = compoNameSplit[0].ToString(), - DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), - JsoncConfig = JsonConvert.SerializeObject(listGraphicParams) - }; - - await dbController.DoorOpTypeAdd(doorOpType); - } - i++; + dbResult = new List(); + } + else + { + dbResult = tempResult; } } - - List edges = new List(); - edges.Add(new Edges()); - List sizing = new List(); - sizing.Add(new Sizing()); - List opening = new List(); - opening.Add(new Opening()); - Guid opCodeEdges = Guid.NewGuid(); - Guid opCodeSizing = Guid.NewGuid(); - Guid opCodeOpening = Guid.NewGuid(); - DoorOpTypeModel doorOpTypeEdges = new DoorOpTypeModel() + else { - Description = "DOOR OPERATION TYPE FOR Edges", - OpCode = opCodeEdges.ToString(), - HasHw = false, - IsConcrete = true, - DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), - IsDefault = true, - JsoncConfig = JsonConvert.SerializeObject(edges) - }; - DoorOpTypeModel doorOpTypeSizing = new DoorOpTypeModel() + dbResult = dbController.OrderStatusGetAll(companyId, orderStatus, dataFrom, dataTo); + rawData = JsonConvert.SerializeObject(dbResult, JSSettings); + await redisDb.StringSetAsync(currKey, rawData, UltraLongCache); + } + if (dbResult == null) { - Description = "DOOR OPERATION TYPE FOR Sizing", - OpCode = opCodeSizing.ToString(), - HasHw = false, - IsConcrete = true, - DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), - IsDefault = true, - JsoncConfig = JsonConvert.SerializeObject(sizing) - }; - DoorOpTypeModel doorOpTypeOpening = new DoorOpTypeModel() - { - Description = "DOOR OPERATION TYPE FOR Opening", - OpCode = opCodeOpening.ToString(), - HasHw = false, - IsConcrete = true, - DoorOpIdPathFromPatriarch = HierarchyId.Parse("/1/"), - IsDefault = true, - JsoncConfig = JsonConvert.SerializeObject(opening) - }; - - await dbController.DoorOpTypeAdd(doorOpTypeEdges); - await dbController.DoorOpTypeAdd(doorOpTypeSizing); - await dbController.DoorOpTypeAdd(doorOpTypeOpening); - return fatto; + dbResult = new List(); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"OrderStatusGetFilt | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; } /// - /// Setting the graphic parameters for components + /// roles list /// - /// - /// - /// - /// - /// - public async Task> SetGraphicParams(string file, string match, int n, int i) + public async Task?> RolesGetAll() { - await Task.Delay(1); - List listGraphicParams = new List(); + string source = "DB"; - IniFile fIni = new IniFile(file); - //estraggo la lista di componenti che sono attive per il cliente - var graphicParamsName = fIni.ReadSection(match.Substring(1, match.Length - 2)); //cerco il contenuto delle sezioni - if (int.Parse(match.Substring(match.Length - 2, 1)) == n) //controllo se tra i numeri di graphic params vi è un buco ES: Graphic parameters1 Graphic parameters3 se il buco c'è salto tutti i parametri che stanno dopo il buco ==> tengo conto solo di Graphic parameters1 + List? dbResult = new List(); + // cerco da cache + string currKey = rKeyRoles; + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + string? rawData = await redisDb.StringGetAsync(currKey); + if (!string.IsNullOrEmpty(rawData)) { - foreach (string param in graphicParamsName) + source = "REDIS"; + var tempResult = JsonConvert.DeserializeObject>(rawData); + if (tempResult == null) { - string compoParams = fIni.ReadString(match.Substring(1, match.Length - 2), $"{param.Split("=")[0]}", "CONFIG"); //cerco il parametro nella sezione - var compoParamsSplit = compoParams.Split(";"); - - string CompoParamName = ""; - string CompoParamAlias = ""; - if (param.Split("=")[0].StartsWith("Param")) - { - if (compoParamsSplit[1].Contains("/")) - { - CompoParamName = compoParamsSplit[1].Split("/")[0]; - CompoParamAlias = compoParamsSplit[1].Split("/")[1]; - } - - GraphicParamsModel graphicParams = new GraphicParamsModel() { compoId = i, graphicParamsN = match.Substring(1, match.Length - 2), graphicParamKey = param.Split("=")[0], graphicParamName = CompoParamName, graphicParamAlias = CompoParamAlias, graphicParamType = compoParamsSplit[0], graphicParamDefaultVal = compoParamsSplit[2] }; - listGraphicParams.Add(graphicParams); //creo nuovo oggetto parametro che conterrà anche il nome del componente per creare relazione - await dbController.ParamAdd(graphicParams); - } - else - { - GraphicParamsModel graphicParams = new GraphicParamsModel() { compoId = i, graphicParamsN = match.Substring(1, match.Length - 2), graphicParamKey = param.Split("=")[0], graphicParamName = compoParams }; - listGraphicParams.Add(graphicParams); //creo nuovo oggetto parametro che conterrà anche il nome del componente per creare relazione - await dbController.ParamAdd(graphicParams); - } + dbResult = new List(); + } + else + { + dbResult = tempResult; } } + else + { + dbResult = dbController.RolesGetAll(); + 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($"RolesGetAll | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + } - return listGraphicParams; + /// + /// Users roles list + /// + public async Task?> UsersGetAll() + { + string source = "DB"; + + List? dbResult = new List(); + // cerco da cache + string currKey = rKeyUsers; + 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.UsersGetAll(); + 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($"UsersGetAll | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + } + + /// + /// Users roles list + /// + public async Task UsersGetById(string userId) + { + string source = "DB"; + + AspNetUsers dbResult = new AspNetUsers(); + // cerco da cache + string currKey = $"{rKeyUsers}:{userId}"; + 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 AspNetUsers(); + } + else + { + dbResult = tempResult; + } + } + else + { + dbResult = dbController.UsersGetById(userId); + rawData = JsonConvert.SerializeObject(dbResult, JSSettings); + await redisDb.StringSetAsync(currKey, rawData, UltraLongCache); + } + if (dbResult == null) + { + dbResult = new AspNetUsers(); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"UsersGetById | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; + } + + /// + /// Users roles list + /// + public async Task?> UserViewGetAll() + { + string source = "DB"; + + List? dbResult = new List(); + // cerco da cache + string currKey = rKeyUsersView; + 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.UserViewGetAll(); + 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($"UserViewGetAll | {source} in: {ts.TotalMilliseconds} ms"); + return dbResult; } #endregion Public Methods @@ -838,10 +838,8 @@ namespace WebDoorCreator.UI.Data protected const string passPhrase = "9eb4660f-8753-46bc-b23b-08759ba03fe9"; - //#region Protected Fields protected const string redisBaseAddr = "WDC"; - //#endregion Public Methods protected const string rKeyCompany = $"{redisBaseAddr}:Cache:Company"; protected const string rKeyDoor = $"{redisBaseAddr}:Cache:Door"; @@ -891,7 +889,6 @@ namespace WebDoorCreator.UI.Data /// private IConnectionMultiplexer redisConn; - //ISubscriber sub = redis.GetSubscriber(); /// /// Oggetto DB redis da impiegare x chiamate R/W /// @@ -958,13 +955,5 @@ namespace WebDoorCreator.UI.Data #endregion Private Methods - /*----------------------------------------------------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------------------------------------------------*/ } } \ No newline at end of file diff --git a/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs b/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs index 19161a4..861479e 100644 --- a/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs +++ b/WebDoorCreator.UI/Pages/DoorDefinition.razor.cs @@ -43,7 +43,7 @@ namespace WebDoorCreator.UI.Pages var domani = DateTime.Today.AddDays(1); ListOrdersStatus = null; await Task.Delay(1); - ListOrdersStatus = await WDService.GetOrderStatus(0, 0, domani.AddYears(-2), domani); + ListOrdersStatus = await WDService.OrderStatusGetFilt(0, 0, domani.AddYears(-2), domani); if (ListOrdersStatus != null) { orderStatus = ListOrdersStatus.Where(x => x.OrderId == idOrd).FirstOrDefault(); diff --git a/WebDoorCreator.UI/Pages/SuperAdmin.razor.cs b/WebDoorCreator.UI/Pages/SuperAdmin.razor.cs index a164025..6993313 100644 --- a/WebDoorCreator.UI/Pages/SuperAdmin.razor.cs +++ b/WebDoorCreator.UI/Pages/SuperAdmin.razor.cs @@ -292,7 +292,7 @@ namespace WebDoorCreator.UI.Pages protected async Task refreshHw() { await Task.Delay(1); - await WDService.SetAllCompoList(@$"{defaultPath}"); + await WDService.CompoListSetAll(@$"{defaultPath}"); } } } \ No newline at end of file From 43329bbfc0620a473a3dab50739762612dcc0828 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 30 Mar 2023 15:32:40 +0200 Subject: [PATCH 7/7] fix deserializzaizone heararchiId --- .../Data/WebDoorCreatorService.cs | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs index b194295..a844239 100644 --- a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs +++ b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs @@ -186,7 +186,7 @@ namespace WebDoorCreator.UI.Data var compoNameSplit = compoName.Split("/"); // lo slash indica l'alias if (listActiveCompo.Contains(compoNameSplit[0].ToString())) { - HardwareModel compoConfig = new HardwareModel() { compoName = compoNameSplit[0].ToString(), compoAlias = compoNameSplit[1].ToString(), compoLayerName = layerName, compoTemplateIsActive = compoTemplateIsActive }; //creo il componente (padre) + HardwareModel compoConfig = new HardwareModel() { compoName = $"{compoNameSplit[0]}", compoAlias = compoNameSplit[1].ToString(), compoLayerName = layerName, compoTemplateIsActive = compoTemplateIsActive }; //creo il componente (padre) await dbController.CompoAdd(compoConfig); listCompoS.Add(compoConfig); var lineToSearch = lines.Where(x => x.Contains("[Graphic")).ToList(); //cerco all'interno del file tutte le sezioni che contengono "[Graphic" così da poter prendere il nome della sezione ES: [Graphic parameters1] = Graphic parameters1 @@ -199,7 +199,7 @@ namespace WebDoorCreator.UI.Data DoorOpTypeModel doorOpType = new DoorOpTypeModel() { - Description = $"DOOR OPERATION TYPE FOR {compoNameSplit[0].ToString()}", + Description = $"DOOR OPERATION TYPE FOR {compoNameSplit[0]}", OpCode = opCode.ToString(), HasHw = true, IsConcrete = true, @@ -400,6 +400,7 @@ namespace WebDoorCreator.UI.Data string currKey = $"{rKeyDoorOpType}:DEFAULT"; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); +#if false string? rawData = await redisDb.StringGetAsync(currKey); if (!string.IsNullOrEmpty(rawData)) { @@ -415,11 +416,14 @@ namespace WebDoorCreator.UI.Data } } else - { - dbResult = await dbController.DoorOpGetDefault(); - rawData = JsonConvert.SerializeObject(dbResult, JSSettings); - await redisDb.StringSetAsync(currKey, rawData, UltraLongCache); - } + { +#endif + dbResult = await dbController.DoorOpGetDefault(); +#if false + rawData = JsonConvert.SerializeObject(dbResult, JSSettings); + await redisDb.StringSetAsync(currKey, rawData, UltraLongCache); + } +#endif if (dbResult == null) { dbResult = new List(); @@ -428,9 +432,6 @@ namespace WebDoorCreator.UI.Data TimeSpan ts = stopWatch.Elapsed; Log.Debug($"DoorOpGetDefault | {source} in: {ts.TotalMilliseconds} ms"); return dbResult; - - // gestione redis da fare... - return dbResult; } ///