diff --git a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs index 120e590..73e3762 100644 --- a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs +++ b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs @@ -9,63 +9,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,198 +68,357 @@ namespace WebDoorCreator.Data.Controllers return fatto; } - #endregion Company methods - - #region User methods - /// - /// 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 user/roles relation + /// Company list (All) /// /// - public List GetUserView() + public List CompanyGetByKey(int id) { - List dbResult = new List(); + List dbResult = new List(); + // cerco su DB recuperando set di dati.... 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 - /// - /// - 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) + if (id == 0) { - dbResult = risultato; + // extracting entire set + dbResult = localDbCtx + .DbSetCompany + .OrderBy(x => x.CompanyName) + .ToList(); } else { - dbResult = new AspNetUsers(); + 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 GetUsersById:{Environment.NewLine}{exc}"); + Log.Error($"Error in CompanyAll:{Environment.NewLine}{exc}"); } } return dbResult; } - #endregion 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; + } - #region Roles methods + public void Dispose() + { + // Clear database context + //Log.Info("Dispose di GWMSController"); + } /// - /// Retrieving data from roles table + /// 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 + /// + /// 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 GetRolesAll() + public List DoorsGetByOrderId(int orderId) { - List dbResult = new List(); + List dbResult = new List(); + // retrieving data from db 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; - } - - #endregion Roles methods - - #region Order status methods - - /// - /// 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) + .DbSetDoor + .Where(x => x.OrderId == orderId) + .Include(o => o.OrderNav) + .Include(t => t.TypeNav) + .OrderBy(x => x.DoorId) .AsNoTracking() .ToList(); } catch (Exception exc) { - Log.Error($"Error in GetOrderStatus:{Environment.NewLine}{exc}"); + Log.Error($"Error in DoorsGetByOrderId:{Environment.NewLine}{exc}"); } } return dbResult; } - #endregion Order status methods + /// + /// 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; + } - #region Order 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; + } /// /// Adding a new order @@ -365,213 +477,40 @@ namespace WebDoorCreator.Data.Controllers return fatto; } - #endregion Order methods - - #region Door methods - /// - /// Getting door data by orderId + /// Order status /// + /// + /// + /// + /// /// - public List DoorsGetByOrderId(int orderId) + public List OrderStatusGetAll(int companyId, int orderStatus, DateTime dataFrom, DateTime dataTo) { - List dbResult = new List(); - // retrieving data from db - using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) + List dbResult = new List(); + using (var dbCtx = new WDCDataContext(_configuration)) { try { - // extracting entire set - dbResult = localDbCtx - .DbSetDoor - .Where(x => x.OrderId == orderId) - .OrderBy(x => x.DoorId) + 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 DoorsGetByOrderId:{Environment.NewLine}{exc}"); + Log.Error($"Error in GetOrderStatus:{Environment.NewLine}{exc}"); } } return dbResult; } - /// - /// Adding a new door - /// - /// Record to edit or add - /// - public async Task DoorInsert(DoorModel newRec) - { - int ordId = 0; - //List dbResult = new List(); - 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); - ordId= await localDbCtx.SaveChangesAsync(); - } - } - catch (Exception exc) - { - Log.Error($"Eccezione durante DoorInsert: {Environment.NewLine}{exc}"); - } - } - return ordId; - } - - /// - /// 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 /// @@ -599,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)) @@ -623,37 +587,130 @@ namespace WebDoorCreator.Data.Controllers return dbResult; } - #endregion Components Methods + /// + /// 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(); - #region Door Operation Methods + 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; + } /// - /// Adding a new DoorOpType + /// Retrieving data from users table /// - /// Record to add /// - public async Task DoorOpTypeAdd(DoorOpTypeModel addRec) + public List UsersGetAll() { - bool fatto = false; + List dbResult = new List(); using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) { try { - localDbCtx - .DbSetDoorOpType - .Add(addRec); - await localDbCtx.SaveChangesAsync(); - fatto = true; + // extracting entire set + dbResult = localDbCtx + .DbSetUsers + .OrderBy(x => x.Id) + .ToList(); } catch (Exception exc) { - Log.Error($"Eccezione durante DoorOpTypeAdd: {Environment.NewLine}{exc}"); + Log.Error($"Error in GetUserRole:{Environment.NewLine}{exc}"); } } - return fatto; + return dbResult; } - #endregion Door Operation Methods + /// + /// 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 + + private static IConfiguration _configuration; + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); + + #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/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 e72df58..d3acde5 100644 --- a/WebDoorCreator.UI/Components/DoorMan/DoorList.razor +++ b/WebDoorCreator.UI/Components/DoorMan/DoorList.razor @@ -3,25 +3,45 @@ - + + + + @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..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) { @@ -47,5 +46,33 @@ namespace WebDoorCreator.UI.Components.DoorMan } await E_DoorChanged.InvokeAsync(isChanged); } + + 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..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); @@ -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/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 49d58e0..a844239 100644 --- a/WebDoorCreator.UI/Data/WebDoorCreatorService.cs +++ b/WebDoorCreator.UI/Data/WebDoorCreatorService.cs @@ -121,39 +121,194 @@ 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]}", 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]}", + 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); } /// - /// Adding or removing a single door + /// CElimina record posta /// - /// 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 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 + /// + /// 0 = all + /// + public async Task DoorFlushCache(int DoorId) { - var dbResult = await dbController.DoorModQty(doorId, isAdd); - // elimino cache redis dati porta... RedisValue pattern = new RedisValue($"{rKeyDoor}:*"); + if (DoorId > 0) + { + pattern = new RedisValue($"{rKeyDoor}:{DoorId}:*"); + } bool answ = await ExecFlushRedisPattern(pattern); - // elimino cache redis dati ordine... - pattern = new RedisValue($"{rKeyOrderStatus}:*"); - answ = await ExecFlushRedisPattern(pattern); - return dbResult; + return answ; } /// /// 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); @@ -182,7 +337,7 @@ 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; } @@ -194,29 +349,108 @@ namespace WebDoorCreator.UI.Data 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(); + await OrderDetailFlushCache(newRec.OrderId); + await OrdersFlushCache(); return dbResult; } /// - /// Clean redis DOORS cache + /// 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 OrderId, int DoorId, bool isAdd) + { + var dbResult = await dbController.DoorModQty(DoorId, isAdd); + // svuoto cache + await DoorFlushCache(DoorId); + await DoorOpFlushCache(DoorId); + await OrderDetailFlushCache(OrderId); + await OrdersFlushCache(); + return dbResult; + } + + /// + /// Clean redis DOORS OP cache /// /// 0 = all /// - public async Task DoorFlushCache(int DoorId) + public async Task DoorOpFlushCache(int DoorId) { - RedisValue pattern = new RedisValue($"{rKeyDoor}:*"); + RedisValue pattern = new RedisValue($"{rKeyDoorOp}:*"); if (DoorId > 0) { - pattern = new RedisValue($"{rKeyDoor}:{DoorId}:*"); + 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(); +#if false + 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 + { +#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(); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"DoorOpGetDefault | {source} in: {ts.TotalMilliseconds} ms"); + 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; + } + /// /// Update or add door /// @@ -246,232 +480,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; } /// @@ -529,6 +583,23 @@ namespace WebDoorCreator.UI.Data bool answ = await ExecFlushRedisPattern(pattern); 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 /// @@ -555,165 +626,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)) { - string[] files = Directory.GetFiles(dir, "Config.ini"); //iterazione per cercare tutti i file "Config.ini" nelle sotto directory - - compoName = ""; - foreach (string file in files) //iterazione per cercare tutti i file "Config.ini" nelle sotto directory + 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/"), - 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/"), - 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/"), - 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 @@ -722,16 +839,20 @@ 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: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"; @@ -769,7 +890,6 @@ namespace WebDoorCreator.UI.Data /// private IConnectionMultiplexer redisConn; - //ISubscriber sub = redis.GetSubscriber(); /// /// Oggetto DB redis da impiegare x chiamate R/W /// @@ -836,13 +956,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/OrderDetails.razor.cs b/WebDoorCreator.UI/Pages/OrderDetails.razor.cs index 486af23..8e643ae 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!; @@ -60,8 +60,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() @@ -74,7 +74,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, @@ -82,6 +82,23 @@ namespace WebDoorCreator.UI.Pages }; // chiamo metodo x insert... var doorId = await WDService.DoorInsert(newDoor); + // aggiungo le lavorazioni standard... + var doorOpList = await WDService.DoorOpGetDefault(); + + 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 + }) + .ToList(); + // salvo Door OP associate + await WDService.DoorOpInsert(doorId, listOp); // rimando alla pagina... dettaglio... NavManager.NavigateTo($"/DoorDefinition?idOrd={idOrd}&idDoor={doorId}"); 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 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
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) + { + + }