diff --git a/0_Framework/Application/StaticWorkshopAccounts.cs b/0_Framework/Application/StaticWorkshopAccounts.cs new file mode 100644 index 00000000..4a180d1a --- /dev/null +++ b/0_Framework/Application/StaticWorkshopAccounts.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace _0_Framework.Application; + +public static class StaticWorkshopAccounts +{ + /// + /// لیستی آی دی نقش هایی که در زمان ساخت یا ویرایش کارگاه استفاده می شوند + /// 3 : قرارداد ارشد + /// 5 : قرارداد ساده + /// 7 : بیمه ارشد + /// 8 : بیمه ساده + /// + public static List SelectedAccountsRoleIds = [3, 5, 7, 8]; + + /// + /// لیست اکانتهایی که به همه کارگاه ها باید دسترسی داشته باشند + /// 2 - صادق فرخی + /// 3 - میلاد مصباح + /// 380 - افروز نظری + /// 381 - مهدی قربانی + /// + public static List StaticAccountIds = [2, 3, 380, 381]; + + /// + /// این تاریخ در جدول اکانت لفت ورک به این معنیست + /// که کاربر همچنان به کارگاه دسترسی دارد + /// + public static DateTime ContinuesWorkingDate = new DateTime(2150, 1, 1); +} \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/Account/WorkshopAdminListsViewModel.cs b/AccountManagement.Application.Contracts/Account/WorkshopAdminListsViewModel.cs new file mode 100644 index 00000000..6384b9ef --- /dev/null +++ b/AccountManagement.Application.Contracts/Account/WorkshopAdminListsViewModel.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace AccountManagement.Application.Contracts.Account; + +public class WorkshopAdminListsViewModel +{ + public List JuniorContractAdmins { get; set; } + public List SeniorContractAdmins { get; set; } + public List JuniorInsuranceAdmins { get; set; } + public List SeniorInsuranceAdmins { get; set; } + +} \ No newline at end of file diff --git a/AccountManagement.Domain/AccountAgg/IAccountRepository.cs b/AccountManagement.Domain/AccountAgg/IAccountRepository.cs index 570c81af..6279567f 100644 --- a/AccountManagement.Domain/AccountAgg/IAccountRepository.cs +++ b/AccountManagement.Domain/AccountAgg/IAccountRepository.cs @@ -29,6 +29,10 @@ namespace AccountManagement.Domain.AccountAgg List GetAccountsDeactivePositionValue(long Positionid); #endregion + List GetAdminAccountsNew(); + + List GetAccountsToEditWorkshop(long workshopId); + } } diff --git a/AccountManagement.Domain/AccountLeftWorkAgg/AccountLeftWork.cs b/AccountManagement.Domain/AccountLeftWorkAgg/AccountLeftWork.cs index 5d13a1a3..00d5a7d8 100644 --- a/AccountManagement.Domain/AccountLeftWorkAgg/AccountLeftWork.cs +++ b/AccountManagement.Domain/AccountLeftWorkAgg/AccountLeftWork.cs @@ -2,26 +2,56 @@ using _0_Framework.Domain; using AccountManagement.Application.Contracts.Account; using AccountManagement.Domain.AccountAgg; +using AccountManagement.Domain.RoleAgg; namespace AccountManagement.Domain.AccountLeftWorkAgg; public class AccountLeftWork : EntityBase { - public AccountLeftWork(DateTime startWorkGr, DateTime leftWorkGr, long accountId) + public AccountLeftWork(DateTime startWorkGr, DateTime leftWorkGr, long accountId, long workshopId, long roleId) { StartWorkGr = startWorkGr; LeftWorkGr = leftWorkGr; AccountId = accountId; - } + WorkshopId = workshopId; + RoleId = roleId; + IsActive = leftWorkGr > DateTime.Now; + } - public DateTime StartWorkGr { get; private set; } + public AccountLeftWork(DateTime startWorkGr, DateTime leftWorkGr, long accountId, long workshopId, long roleId, bool isActive) + { + StartWorkGr = startWorkGr; + LeftWorkGr = leftWorkGr; + AccountId = accountId; + WorkshopId = workshopId; + RoleId = roleId; + IsActive = isActive; + } + + + + + public DateTime StartWorkGr { get; private set; } public DateTime LeftWorkGr { get; private set; } + public long WorkshopId { get; private set; } + public long RoleId { get; private set; } public long AccountId { get; private set; } + public bool IsActive { get; private set; } public Account Account { get; set; } - public void Edit(DateTime startWorkGr, DateTime leftWorkGr) + public void Edit(DateTime startWorkGr, DateTime leftWorkGr,long workshopId,long roleId,bool isActive) { StartWorkGr = startWorkGr; LeftWorkGr = leftWorkGr; - } + WorkshopId = workshopId; + RoleId = roleId; + IsActive = leftWorkGr > DateTime.Now && isActive; + } + + public void DeActive(DateTime startWorkGr, DateTime leftWorkGr) + { + StartWorkGr = startWorkGr; + LeftWorkGr = leftWorkGr; + IsActive = false; + } } \ No newline at end of file diff --git a/AccountManagement.Domain/AccountLeftWorkAgg/IAccountLeftworkRepository.cs b/AccountManagement.Domain/AccountLeftWorkAgg/IAccountLeftworkRepository.cs index f9c943a5..c69d5653 100644 --- a/AccountManagement.Domain/AccountLeftWorkAgg/IAccountLeftworkRepository.cs +++ b/AccountManagement.Domain/AccountLeftWorkAgg/IAccountLeftworkRepository.cs @@ -19,4 +19,6 @@ public interface IAccountLeftworkRepository : IRepository string startDate, string leftDate, long accountId); + + } \ No newline at end of file diff --git a/AccountMangement.Infrastructure.EFCore/Migrations/20250302141707_cAccountLeftWorkChangedToNew.Designer.cs b/AccountMangement.Infrastructure.EFCore/Migrations/20250302141707_cAccountLeftWorkChangedToNew.Designer.cs new file mode 100644 index 00000000..158851c4 --- /dev/null +++ b/AccountMangement.Infrastructure.EFCore/Migrations/20250302141707_cAccountLeftWorkChangedToNew.Designer.cs @@ -0,0 +1,1267 @@ +// +using System; +using AccountMangement.Infrastructure.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace AccountMangement.Infrastructure.EFCore.Migrations +{ + [DbContext(typeof(AccountContext))] + [Migration("20250302141707_cAccountLeftWorkChangedToNew")] + partial class cAccountLeftWorkChangedToNew + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AdminAreaPermission") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ClientAriaPermission") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Email") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Fullname") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("IsActiveString") + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("Mobile") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("PositionId") + .HasMaxLength(10) + .HasColumnType("bigint"); + + b.Property("PositionIsActive") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("ProfilePhoto") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("RoleId") + .HasColumnType("bigint"); + + b.Property("RoleName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("VerifyCode") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.HasKey("id"); + + b.HasIndex("PositionId"); + + b.HasIndex("RoleId"); + + b.ToTable("Accounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountLeftWorkAgg.AccountLeftWork", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("LeftWorkGr") + .HasColumnType("datetime2"); + + b.Property("RoleId") + .HasColumnType("bigint"); + + b.Property("StartWorkGr") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("AccountId"); + + b.ToTable("AccountLeftWork", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AdminAccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveString") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Response") + .HasColumnType("ntext"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("TicketId"); + + b.ToTable("AdminResponses", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b => + { + b.Property("AdminResponseId") + .HasColumnType("bigint"); + + b.Property("MediaId") + .HasColumnType("bigint"); + + b.HasKey("AdminResponseId", "MediaId"); + + b.HasIndex("MediaId"); + + b.ToTable("AdminResponseMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AcceptedTimeRequest") + .HasColumnType("int"); + + b.Property("AssignedId") + .HasColumnType("bigint"); + + b.Property("AssignedName") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("AssignedPositionValue") + .HasColumnType("int"); + + b.Property("AssignerId") + .HasColumnType("bigint"); + + b.Property("AssignerPositionValue") + .HasColumnType("int"); + + b.Property("CancelDescription") + .HasColumnType("ntext"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DoneDescription") + .HasColumnType("ntext"); + + b.Property("EndTaskDate") + .HasColumnType("datetime2"); + + b.Property("FirstTimeCreation") + .HasColumnType("bit"); + + b.Property("IsCancel") + .HasColumnType("bit"); + + b.Property("IsCanceledRequest") + .HasColumnType("bit"); + + b.Property("IsDone") + .HasColumnType("bit"); + + b.Property("IsDoneRequest") + .HasColumnType("bit"); + + b.Property("RequestDate") + .HasColumnType("datetime2"); + + b.Property("TaskId") + .HasColumnType("bigint"); + + b.Property("TimeRequest") + .HasColumnType("bit"); + + b.Property("TimeRequestDescription") + .HasColumnType("ntext"); + + b.HasKey("id"); + + b.HasIndex("TaskId"); + + b.ToTable("Assigns", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveSting") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Mobile") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("AccountId"); + + b.ToTable("CameraAccounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Response") + .HasColumnType("ntext"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("TicketId"); + + b.ToTable("ClientResponses", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b => + { + b.Property("ClientResponseId") + .HasColumnType("bigint"); + + b.Property("MediaId") + .HasColumnType("bigint"); + + b.HasKey("ClientResponseId", "MediaId"); + + b.HasIndex("MediaId"); + + b.ToTable("ClientResponseMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Category") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Path") + .HasColumnType("ntext"); + + b.Property("ServiceName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Type") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.ToTable("Medias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("PositionName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("PositionValue") + .HasMaxLength(2) + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("Positions", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.ToTable("Roles", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountAgg.SubAccount", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property("ProfilePhoto") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("SubAccountRoleId") + .HasColumnType("bigint"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("VerifyCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.HasIndex("SubAccountRoleId"); + + b.ToTable("SubAccounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle1Agg.SubAccountPermissionSubtitle1", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.ToTable("SubAccountPermissionSubtitle1", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("ParentId"); + + b.ToTable("SubAccountPermissionSubtitle2", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("ParentId"); + + b.ToTable("SubAccountPermissionSubtitle3", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle4Agg.SubAccountPermissionSubtitle4", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("ParentId"); + + b.ToTable("SubAccountPermissionSubtitle4", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Title") + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("id"); + + b.ToTable("SubAccountRoles", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractingPartyName") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("ntext"); + + b.Property("IsActiveString") + .HasMaxLength(7) + .HasColumnType("nvarchar(7)"); + + b.Property("SenderId") + .HasColumnType("bigint"); + + b.Property("StartTaskDate") + .HasColumnType("datetime2"); + + b.Property("TaskScheduleId") + .HasColumnType("bigint"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("TaskScheduleId"); + + b.ToTable("TasksManager", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b => + { + b.Property("MediaId") + .HasColumnType("bigint"); + + b.Property("TaskId") + .HasColumnType("bigint"); + + b.HasKey("MediaId", "TaskId"); + + b.HasIndex("TaskId"); + + b.ToTable("TasksMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageAgg.TaskMessage", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AssignId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Message") + .HasColumnType("ntext"); + + b.Property("RequestedDateFa") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("TypeOfMessage") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.HasKey("id"); + + b.HasIndex("AssignId"); + + b.ToTable("TaskMessages", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageItemsAgg.TaskMessageItems", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ReceiverAccountId") + .HasColumnType("bigint"); + + b.Property("SenderAccountId") + .HasColumnType("bigint"); + + b.Property("TaskMessageId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("TaskMessageId"); + + b.ToTable("TaskMessageItems", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskScheduleAgg.TaskSchedule", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Count") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("LastEndTaskDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b.Property("UnitNumber") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("UnitType") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.ToTable("TaskSchedules", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskSubjectAgg.TaskSubject", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.ToTable("TaskSubjects", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketAccessAccountAgg.TicketAccessAccount", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.ToTable("TicketAccessAccounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractingPartyName") + .HasMaxLength(155) + .HasColumnType("nvarchar(155)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("ntext"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("SenderId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("SubAccountSenderId") + .HasColumnType("bigint"); + + b.Property("TicketNumber") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b.Property("TicketType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Title") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("Tickets", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b => + { + b.Property("TicketId") + .HasColumnType("bigint"); + + b.Property("MediaId") + .HasColumnType("bigint"); + + b.HasKey("TicketId", "MediaId"); + + b.HasIndex("MediaId"); + + b.ToTable("TicketMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b => + { + b.HasOne("AccountManagement.Domain.PositionAgg.Position", "Position") + .WithMany("Accounts") + .HasForeignKey("PositionId"); + + b.HasOne("AccountManagement.Domain.RoleAgg.Role", "Role") + .WithMany("Accounts") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Position"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountLeftWorkAgg.AccountLeftWork", b => + { + b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account") + .WithMany("AccountLeftWorkList") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Account"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b => + { + b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket") + .WithMany("AdminResponses") + .HasForeignKey("TicketId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Ticket"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b => + { + b.HasOne("AccountManagement.Domain.AdminResponseAgg.AdminResponse", "AdminResponse") + .WithMany("AdminResponseMedias") + .HasForeignKey("AdminResponseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("AdminResponseMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AdminResponse"); + + b.Navigation("Media"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b => + { + b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Task") + .WithMany("Assigns") + .HasForeignKey("TaskId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Task"); + }); + + modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b => + { + b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account") + .WithMany("CameraAccounts") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Account"); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b => + { + b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket") + .WithMany("ClientResponses") + .HasForeignKey("TicketId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Ticket"); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b => + { + b.HasOne("AccountManagement.Domain.ClientResponseAgg.ClientResponse", "ClientResponse") + .WithMany("ClientResponseMedias") + .HasForeignKey("ClientResponseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("ClientResponseMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClientResponse"); + + b.Navigation("Media"); + }); + + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => + { + b.OwnsMany("AccountManagement.Domain.RoleAgg.Permission", "Permissions", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Code") + .HasColumnType("int"); + + b1.Property("RoleId") + .HasColumnType("bigint"); + + b1.HasKey("Id"); + + b1.HasIndex("RoleId"); + + b1.ToTable("RolePermissions", (string)null); + + b1.WithOwner("Role") + .HasForeignKey("RoleId"); + + b1.Navigation("Role"); + }); + + b.Navigation("Permissions"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountAgg.SubAccount", b => + { + b.HasOne("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", "SubAccountRole") + .WithMany("SubAccounts") + .HasForeignKey("SubAccountRoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("SubAccountRole"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", b => + { + b.HasOne("AccountManagement.Domain.SubAccountPermissionSubtitle1Agg.SubAccountPermissionSubtitle1", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", b => + { + b.HasOne("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle4Agg.SubAccountPermissionSubtitle4", b => + { + b.HasOne("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b => + { + b.OwnsMany("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRolePermission", "RolePermissions", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("PermissionCode") + .HasColumnType("int"); + + b1.Property("SubAccountRoleId") + .HasColumnType("bigint"); + + b1.HasKey("id"); + + b1.HasIndex("SubAccountRoleId"); + + b1.ToTable("SubAccountRolePermissions", (string)null); + + b1.WithOwner("SubAccountRole") + .HasForeignKey("SubAccountRoleId"); + + b1.Navigation("SubAccountRole"); + }); + + b.Navigation("RolePermissions"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b => + { + b.HasOne("AccountManagement.Domain.TaskScheduleAgg.TaskSchedule", "TaskSchedule") + .WithMany("TasksList") + .HasForeignKey("TaskScheduleId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("TaskSchedule"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b => + { + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("TaskMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Tasks") + .WithMany("TaskMedias") + .HasForeignKey("TaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Media"); + + b.Navigation("Tasks"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageAgg.TaskMessage", b => + { + b.HasOne("AccountManagement.Domain.AssignAgg.Assign", "Assign") + .WithMany("TaskMessageList") + .HasForeignKey("AssignId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Assign"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageItemsAgg.TaskMessageItems", b => + { + b.HasOne("AccountManagement.Domain.TaskMessageAgg.TaskMessage", "TaskMessage") + .WithMany("TaskMessageItemsList") + .HasForeignKey("TaskMessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TaskMessage"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b => + { + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("TicketMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket") + .WithMany("TicketMedias") + .HasForeignKey("TicketId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Media"); + + b.Navigation("Ticket"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b => + { + b.Navigation("AccountLeftWorkList"); + + b.Navigation("CameraAccounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b => + { + b.Navigation("AdminResponseMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b => + { + b.Navigation("TaskMessageList"); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b => + { + b.Navigation("ClientResponseMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b => + { + b.Navigation("AdminResponseMedias"); + + b.Navigation("ClientResponseMedias"); + + b.Navigation("TaskMedias"); + + b.Navigation("TicketMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b => + { + b.Navigation("Accounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => + { + b.Navigation("Accounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle1Agg.SubAccountPermissionSubtitle1", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b => + { + b.Navigation("SubAccounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b => + { + b.Navigation("Assigns"); + + b.Navigation("TaskMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageAgg.TaskMessage", b => + { + b.Navigation("TaskMessageItemsList"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskScheduleAgg.TaskSchedule", b => + { + b.Navigation("TasksList"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b => + { + b.Navigation("AdminResponses"); + + b.Navigation("ClientResponses"); + + b.Navigation("TicketMedias"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AccountMangement.Infrastructure.EFCore/Migrations/20250302141707_cAccountLeftWorkChangedToNew.cs b/AccountMangement.Infrastructure.EFCore/Migrations/20250302141707_cAccountLeftWorkChangedToNew.cs new file mode 100644 index 00000000..59ec6232 --- /dev/null +++ b/AccountMangement.Infrastructure.EFCore/Migrations/20250302141707_cAccountLeftWorkChangedToNew.cs @@ -0,0 +1,51 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace AccountMangement.Infrastructure.EFCore.Migrations +{ + /// + public partial class cAccountLeftWorkChangedToNew : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsActive", + table: "AccountLeftWork", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "RoleId", + table: "AccountLeftWork", + type: "bigint", + nullable: false, + defaultValue: 0L); + + migrationBuilder.AddColumn( + name: "WorkshopId", + table: "AccountLeftWork", + type: "bigint", + nullable: false, + defaultValue: 0L); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsActive", + table: "AccountLeftWork"); + + migrationBuilder.DropColumn( + name: "RoleId", + table: "AccountLeftWork"); + + migrationBuilder.DropColumn( + name: "WorkshopId", + table: "AccountLeftWork"); + } + } +} diff --git a/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs b/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs index d191b577..61675f0e 100644 --- a/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs +++ b/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs @@ -119,12 +119,21 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations b.Property("CreationDate") .HasColumnType("datetime2"); + b.Property("IsActive") + .HasColumnType("bit"); + b.Property("LeftWorkGr") .HasColumnType("datetime2"); + b.Property("RoleId") + .HasColumnType("bigint"); + b.Property("StartWorkGr") .HasColumnType("datetime2"); + b.Property("WorkshopId") + .HasColumnType("bigint"); + b.HasKey("id"); b.HasIndex("AccountId"); diff --git a/AccountMangement.Infrastructure.EFCore/Repository/AccountLeftworkRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/AccountLeftworkRepository.cs index 8fa75641..245efbaa 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/AccountLeftworkRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/AccountLeftworkRepository.cs @@ -114,18 +114,20 @@ public class AccountLeftworkRepository : RepositoryBase, return operationResult.Failed("تاریخ شروع بکار و ترک کار برابرند"); var oldLefts = _accountContext.AccountLeftWorks.Where(x => x.AccountId == accountId).ToList(); _accountContext.AccountLeftWorks.RemoveRange(oldLefts); - Create(new AccountLeftWork(start, leftWorkGr, accountId)); - SaveChanges(); - var workshopAccountViewModel = workshopAccountList.Select(x => new WorkshopAccountViewModel() - { - AccountId = x.AccountId, - WorkshopId = x.WorkshopId, - Insurance = x.Insurance, - ContractAndCheckout = x.ContractAndCheckout, - Tax = x.Tax, - IsActiveSting = x.IsActiveSting - }).ToList(); - _workshopAccountRepository.SaveWorkshopAccount(workshopAccountViewModel); + //Create(new AccountLeftWork(start, leftWorkGr, accountId)); + //SaveChanges(); + //var workshopAccountViewModel = workshopAccountList.Select(x => new WorkshopAccountViewModel() + //{ + // AccountId = x.AccountId, + // WorkshopId = x.WorkshopId, + // Insurance = x.Insurance, + // ContractAndCheckout = x.ContractAndCheckout, + // Tax = x.Tax, + // IsActiveSting = x.IsActiveSting + //}).ToList(); + //_workshopAccountRepository.SaveWorkshopAccount(workshopAccountViewModel); return operationResult.Succcedded(); } + + } diff --git a/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs index 537f5ab1..60d857aa 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs @@ -279,6 +279,39 @@ public class AccountRepository : RepositoryBase, IAccountReposito Fullname = x.Fullname }).ToList(); } + + public List GetAdminAccountsNew() + { + List roleIds = _0_Framework.Application.StaticWorkshopAccounts.SelectedAccountsRoleIds; + + return _context.Accounts + .Where(x => x.IsActiveString == "true" && roleIds.Contains(x.RoleId)) + .Select(x => new AccountViewModel + { + Id = x.id, + Fullname = x.Fullname, + RoleName = x.RoleName, + Username = x.Username, + RoleId = x.RoleId, + + }).ToList(); + } + + public List GetAccountsToEditWorkshop(long workshopId) + { + List roleIds = _0_Framework.Application.StaticWorkshopAccounts.SelectedAccountsRoleIds; + return _context.AccountLeftWorks + .Where(x => x.WorkshopId == workshopId && roleIds.Contains(x.RoleId)) + .Include(x => x.Account) + .Select(x => new AccountViewModel + { + Id = x.AccountId, + Fullname = x.Account.Fullname, + RoleName = x.Account.RoleName, + RoleId = x.RoleId, + IsActiveString = x.IsActive ? "true" : "false", + }).ToList(); + } //public List GetAdminAccounts() //{ // return _context.Accounts.Where(x=>x.AdminAreaPermission == "true" && x.IsActiveString == "true").Select(x => new AccountViewModel() diff --git a/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs b/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs index f3fdf81a..4a1f37eb 100644 --- a/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs +++ b/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs @@ -25,7 +25,7 @@ public interface ILeftWorkRepository : IRepository /// تاریخی که بین شروع کار و ترک کار باشد /// یک کلاس از جنس اطلاعات ترک کار LeftWorkViewModel GetByDateAndWorkshopIdAndEmployeeId(long workshopId, long employeeId, DateTime dateTime); - List GetEmployeeIdsByWorkshopIdActiveInDates(long workshopId, DateTime start, DateTime end); + List GetAllEmployeeIdsInWorkshop(long workshopId); #endregion List GetLeftPersonelByWorkshopId(List workshopIds); diff --git a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs index ae70a623..1a9cc9c4 100644 --- a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs +++ b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs @@ -72,6 +72,19 @@ public interface IWorkshopRepository : IRepository /// List GetWorkshopSelectListInsuransce(); - #endregion - + #endregion + /// + /// ایجاد دسترسی برای کاربران ادمین در زمان ایجاد کارگاه + /// + /// + /// + /// + OperationResult CreateAccountLeftWorkAndWorkshopAccounts(List accountIds, long workshopId); + /// + /// ویرایش دسترسی کاربران ادمین به کارگاه در زمان ویرایش کارگاه + /// + /// + /// + /// + OperationResult EditAccountLeftWorkAndWorkshopAccounts(List accountIds, long workshopId); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs b/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs index d920bf4c..42a6ce60 100644 --- a/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs +++ b/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs @@ -68,15 +68,40 @@ public class CreateWorkshop public List EmployerIdList { get; set; } public CreateWorkshopPlan CreatePlan {get; set; } + public List AccountsList { get; set; } + public List Type { get; set; } + + #region Pooya + /// + /// قرارداد ارشد + /// + public List JuniorContractAccountsList { get; set; } + /// + /// قرارداد ساده + /// + public List SeniorContractAccountsList { get; set; } + /// + /// بیمه ساده + /// + public List JuniorInsuranceAccountsList { get; set; } + /// + /// بیمه ارشد + /// + public List SeniorInsuranceAccountList { get; set; } + + #endregion + + public List AccountIdsList { get; set; } public SelectList InsuranceJobViewModels { get; set; } public List PermissionIds { get; set; } public long CurrentAccoutRoleId { get; set; } #region Vafa - public List InAccountIdsList { get; set; } - public string HasRollCallFreeVip { get; set; } + public List DeActiveAccounts { get; set; } + public List ActiveAccounts { get; set; } + public string HasRollCallFreeVip { get; set; } #endregion diff --git a/CompanyManagment.Application/EmployeeDocumentsApplication.cs b/CompanyManagment.Application/EmployeeDocumentsApplication.cs index 28ca3fae..1f803326 100644 --- a/CompanyManagment.Application/EmployeeDocumentsApplication.cs +++ b/CompanyManagment.Application/EmployeeDocumentsApplication.cs @@ -621,7 +621,7 @@ namespace CompanyManagment.Application #region Create EmployeeDocuments Record For Newly Added Employees var existingEmployeesWithDocs = _employeeDocumentsRepository.GetEmployeeIds(cmd.WorkshopId); - var existingEmployeeIds = _leftWorkRepository.GetEmployeeIdsByWorkshopIdActiveInDates(cmd.WorkshopId, DateTime.Now, DateTime.Now); + var existingEmployeeIds = _leftWorkRepository.GetAllEmployeeIdsInWorkshop(cmd.WorkshopId); var newEmployeeIds = existingEmployeeIds.Except(existingEmployeesWithDocs).ToList(); if (newEmployeeIds.Any()) @@ -1022,7 +1022,7 @@ namespace CompanyManagment.Application var existingEmployeesWithDocs = _employeeDocumentsRepository.GetEmployeeIds(cmd.WorkshopId); var existingEmployeeIds = - _leftWorkRepository.GetEmployeeIdsByWorkshopIdActiveInDates(cmd.WorkshopId, DateTime.Now, DateTime.Now); + _leftWorkRepository.GetAllEmployeeIdsInWorkshop(cmd.WorkshopId); var newEmployeeIds = existingEmployeeIds.Except(existingEmployeesWithDocs).ToList(); @@ -1070,7 +1070,7 @@ namespace CompanyManagment.Application var existingEmployeesWithDocs = _employeeDocumentsRepository.GetEmployeeIds(workshopId); var existingEmployeeIds = - _leftWorkRepository.GetEmployeeIdsByWorkshopIdActiveInDates(workshopId, DateTime.Now, DateTime.Now); + _leftWorkRepository.GetAllEmployeeIdsInWorkshop(workshopId); var newEmployeeIds = existingEmployeeIds.Except(existingEmployeesWithDocs).ToList(); if (newEmployeeIds.Any()) diff --git a/CompanyManagment.Application/WorkshopAppliction.cs b/CompanyManagment.Application/WorkshopAppliction.cs index a7d06170..14be5b57 100644 --- a/CompanyManagment.Application/WorkshopAppliction.cs +++ b/CompanyManagment.Application/WorkshopAppliction.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Transactions; using _0_Framework.Application; using AccountManagement.Application.Contracts.Account; using AccountManagement.Domain.AccountAgg; @@ -177,8 +178,8 @@ public class WorkshopAppliction : IWorkshopApplication _workshopRepository.EmployerWorkshop(workshop.id, e); } - - _workshopRepository.WorkshopAccounts(accountIds, workshop.id); + + var op = _workshopRepository.CreateAccountLeftWorkAndWorkshopAccounts(accountIds, workshop.id); @@ -188,6 +189,7 @@ public class WorkshopAppliction : IWorkshopApplication public OperationResult Edit(EditWorkshop command) { + using var transaction = new TransactionScope(); var leftSearch = new LeftWorkSearchModel() { WorkshopId = command.Id @@ -318,7 +320,7 @@ public class WorkshopAppliction : IWorkshopApplication { _workshopRepository.EmployerWorkshop(workshop.id, e); } - _workshopRepository.WorkshopAccounts(accountIds, workshop.id); + var op = _workshopRepository.EditAccountLeftWorkAndWorkshopAccounts(accountIds, workshop.id); foreach (var item in leftWork) { var editLeft = _leftWorkRepository.Get(item.Id); @@ -327,6 +329,7 @@ public class WorkshopAppliction : IWorkshopApplication _leftWorkRepository.SaveChanges(); } + transaction.Complete(); return operation.Succcedded(); } diff --git a/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs b/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs index b717fc3c..be5f4cef 100644 --- a/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs +++ b/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs @@ -14,6 +14,7 @@ using _0_Framework.Application; using AccountManagement.Application.Contracts.Media; using Company.Domain.empolyerAgg; using Company.Domain.LeftWorkAgg; +using System.Collections; namespace CompanyManagment.EFCore.Repository { @@ -186,26 +187,52 @@ namespace CompanyManagment.EFCore.Repository } - //get the last leftworks in each workshop for selected employees where the leftwork - var passedLeftWorks = _companyContext.LeftWorkList - .Where(x => query.Any(y => y.EmployeeId == x.EmployeeId && - y.WorkshopId == cmd.WorkshopId && x.LeftWorkDate <= DateTime.Now.Date)) - .Select(x => x.EmployeeId).AsEnumerable(); + var now = DateTime.Now.Date; + + //پرسنل قرارداد این کارگاه + var contractEmployees = _companyContext.LeftWorkList + .Where(x => x.WorkshopId == cmd.WorkshopId); + //پرسنل فعال در قرارداد + var contractActiveEmployeeIds = contractEmployees + .Where(x => x.LeftWorkDate == new DateTime(2121, 3, 21) && x.StartWorkDate.Date <= now).Select(x => x.EmployeeId).ToList(); + //پرسنل غیر فعال قرارداد + var contractDeActivedEmployeeIds = contractEmployees + .Where(x => x.LeftWorkDate.Date <= now && !contractActiveEmployeeIds.Contains(x.EmployeeId)) + .Select(x => x.EmployeeId).ToList(); + + //پرسنل بیمه این کارگاه + var insuranceEmployees = _companyContext.LeftWorkInsuranceList + .Where(x => x.WorkshopId == cmd.WorkshopId); + //پرسنل فعال در بیمه + var insuranceActiveEmployeeIds = insuranceEmployees + .Where(x => x.LeftWorkDate == null && x.StartWorkDate.Date <= now).Select(x => x.EmployeeId).ToList(); + //پرسنل غیر فعال بیمه + var insuranceDeActivedEmployeeIds = insuranceEmployees + .Where(x => x.LeftWorkDate.Value.Date <= now && !contractActiveEmployeeIds.Contains(x.EmployeeId)) + .Select(x => x.EmployeeId).ToList(); + + // پرسنل هر دو لیست که غیر فعال هستند + var activeEmployees = contractActiveEmployeeIds.Concat(insuranceActiveEmployeeIds).Distinct().ToList(); + // پرسنل هر دو لیست که فعال هستند + var deActiveEmployees = contractDeActivedEmployeeIds.Concat(insuranceDeActivedEmployeeIds).Distinct().ToList(); + + //پرسنل غیر فعالی که یا در هر دو غیرفعال هستند یا فقط در یکی استارت خورده و غیر فعال شده اند + var deActivedEmployeesIdlist = deActiveEmployees.Where(x => !activeEmployees.Contains(x)).ToList(); List employeeDocuments; switch (cmd.Mode) { - case EmployeeDocumentSearchMode.All: - employeeDocuments = query.OrderBy(x => passedLeftWorks.Any(y => x.EmployeeId == y)) - .Skip(cmd.PageIndex).Take(30).ToList(); - break; + // case EmployeeDocumentSearchMode.All: + //employeeDocuments = query.OrderBy(x => passedLeftWorks.Any(y => x.EmployeeId == y)) + // .Skip(cmd.PageIndex).Take(30).ToList(); + //break; case EmployeeDocumentSearchMode.ActiveEmployees: - employeeDocuments = query.Where(x => passedLeftWorks.All(y => x.EmployeeId != y)) - .OrderByDescending(x => x.id).Skip(cmd.PageIndex).Take(30).ToList(); - break; + employeeDocuments = query.Where(q => deActivedEmployeesIdlist.All(deActived => q.EmployeeId != deActived)) + .OrderByDescending(x => x.id).Skip(cmd.PageIndex).Take(30).ToList(); + break; case EmployeeDocumentSearchMode.DeactiveEmployees: - employeeDocuments = query.Where(x => passedLeftWorks.Any(y => x.EmployeeId == y)) + employeeDocuments = query.Where(x => deActivedEmployeesIdlist.Any(deActived => x.EmployeeId == deActived)) .OrderByDescending(x => x.id).Skip(cmd.PageIndex).Take(30).ToList(); break; default: @@ -250,7 +277,7 @@ namespace CompanyManagment.EFCore.Repository NationalCardRear =GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, medias, DocumentItemLabel.NationalCardRear), MilitaryServiceCard= GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, medias, DocumentItemLabel.MilitaryServiceCard), EmployeePicture = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, medias, DocumentItemLabel.EmployeePicture), - IsBlack = passedLeftWorks.Any(y => y == x.EmployeeId) ? "true" : "false", + IsBlack = deActivedEmployeesIdlist.Any(y => y == x.EmployeeId) ? "true" : "false", EmployerFullName = employerFullName, IsSentToChecker = x.IsSentToChecker, PersonnelCode = personnelCodes.FirstOrDefault(y=>y.EmployeeId == x.EmployeeId)?.PersonnelCode??0 @@ -270,29 +297,51 @@ namespace CompanyManagment.EFCore.Repository query = query.Where(x => (x.Employee.FName + " " + x.Employee.LName).Contains(cmd.EmployeeName)); } + var now = DateTime.Now.Date; + + //پرسنل قرارداد این کارگاه + var contractEmployees = _companyContext.LeftWorkList + .Where(x => x.WorkshopId == cmd.WorkshopId); + //پرسنل فعال در قرارداد + var contractActiveEmployeeIds = contractEmployees + .Where(x=> x.LeftWorkDate == new DateTime(2121, 3, 21) && x.StartWorkDate.Date <= now).Select(x => x.EmployeeId).ToList(); + //پرسنل غیر فعال قرارداد + var contractDeActivedEmployeeIds = contractEmployees + .Where(x=> x.LeftWorkDate.Date <= now && !contractActiveEmployeeIds.Contains(x.EmployeeId)) + .Select(x=>x.EmployeeId).ToList(); - //get the last leftworks in each workshop for selected employees where the leftwork - var passedLeftWorks = _companyContext.LeftWorkList - .Where(x => query.Any(y => y.EmployeeId == x.EmployeeId && y.WorkshopId == cmd.WorkshopId && x.LeftWorkDate <= DateTime.Now.Date)) - .Select(x => x.EmployeeId).AsEnumerable(); + //پرسنل بیمه این کارگاه + var insuranceEmployees = _companyContext.LeftWorkInsuranceList + .Where(x => x.WorkshopId == cmd.WorkshopId); + //پرسنل فعال در بیمه + var insuranceActiveEmployeeIds = insuranceEmployees + .Where(x => x.LeftWorkDate == null && x.StartWorkDate.Date <= now).Select(x => x.EmployeeId).ToList(); + //پرسنل غیر فعال بیمه + var insuranceDeActivedEmployeeIds = insuranceEmployees + .Where(x => x.LeftWorkDate.Value.Date <= now && !contractActiveEmployeeIds.Contains(x.EmployeeId)) + .Select(x => x.EmployeeId).ToList(); + + // پرسنل هر دو لیست که غیر فعال هستند + var activeEmployees = contractActiveEmployeeIds.Concat(insuranceActiveEmployeeIds).Distinct().ToList(); + // پرسنل هر دو لیست که فعال هستند + var deActiveEmployees = contractDeActivedEmployeeIds.Concat(insuranceDeActivedEmployeeIds).Distinct().ToList(); + + //پرسنل غیر فعالی که یا در هر دو غیرفعال هستند یا فقط در یکی استارت خورده و غیر فعال شده اند + var deActivedEmployeesIdlist = deActiveEmployees.Where(x => !activeEmployees.Contains(x)).ToList(); - var passedInsuranceLeftWorks = _companyContext.LeftWorkInsuranceList - .Where(x => query.Any(y => y.EmployeeId == x.EmployeeId && y.WorkshopId == cmd.WorkshopId && x.LeftWorkDate <= DateTime.Now.Date)) - .Select(x => x.EmployeeId).AsEnumerable(); - passedLeftWorks = passedLeftWorks.Concat(passedInsuranceLeftWorks).Distinct(); List employeeDocuments; switch (cmd.Mode) { - case EmployeeDocumentSearchMode.All: - employeeDocuments = query.OrderBy(x => passedLeftWorks.Any(y => x.EmployeeId == y)).Skip(cmd.PageIndex).Take(30).ToList(); - break; + //case EmployeeDocumentSearchMode.All: + // employeeDocuments = query.OrderBy(x => passedLeftWorks.Any(y => x.EmployeeId == y)).Skip(cmd.PageIndex).Take(30).ToList(); + // break; case EmployeeDocumentSearchMode.ActiveEmployees: - employeeDocuments = query.Where(x => passedLeftWorks.All(y => x.EmployeeId != y)) + employeeDocuments = query.Where(q => deActivedEmployeesIdlist.All(deActived => q.EmployeeId != deActived)) .OrderByDescending(x => x.id).Skip(cmd.PageIndex).Take(30).ToList(); break; case EmployeeDocumentSearchMode.DeactiveEmployees: - employeeDocuments = query.Where(x => passedLeftWorks.Any(y => x.EmployeeId == y)) + employeeDocuments = query.Where(x => deActivedEmployeesIdlist.Any(deActived => x.EmployeeId == deActived)) .OrderByDescending(x => x.id).Skip(cmd.PageIndex).Take(30).ToList(); break; default: @@ -334,7 +383,7 @@ namespace CompanyManagment.EFCore.Repository NationalCardRear = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, medias, DocumentItemLabel.NationalCardRear), MilitaryServiceCard = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, medias, DocumentItemLabel.MilitaryServiceCard), EmployeePicture = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, medias, DocumentItemLabel.EmployeePicture), - IsBlack = passedLeftWorks.Any(y => y == x.EmployeeId) ? "true" : "false", + IsBlack = deActivedEmployeesIdlist.Any(y => y == x.EmployeeId) ? "true" : "false", EmployerFullName = employerFullName, PersonnelCode = personnelCodes.FirstOrDefault(y => y.EmployeeId == x.EmployeeId)?.PersonnelCode ?? 0 }; diff --git a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs index 01f1ff7f..86d00b13 100644 --- a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs @@ -196,13 +196,13 @@ public class LeftWorkRepository : RepositoryBase, ILeftWorkRepos }; } - public List GetEmployeeIdsByWorkshopIdActiveInDates(long workshopId, DateTime start, DateTime end) + public List GetAllEmployeeIdsInWorkshop(long workshopId) { var leftWorks = _context.LeftWorkList - .Where(x => x.WorkshopId == workshopId && x.LeftWorkDate.AddDays(-1) >= start && x.StartWorkDate.Date <= end.Date) + .Where(x => x.WorkshopId == workshopId) .GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList(); var insuranceLeftWork = _context.LeftWorkInsuranceList - .Where(x => x.WorkshopId == workshopId && (x.LeftWorkDate == null && x.StartWorkDate <= start) || (x.LeftWorkDate != null && x.LeftWorkDate.Value.AddDays(-1) >= start && x.StartWorkDate.Date <= end.Date)) + .Where(x => x.WorkshopId == workshopId) .GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList(); return leftWorks.Concat(insuranceLeftWork).Distinct().ToList(); } diff --git a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs index 7274d640..c2381301 100644 --- a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs +++ b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs @@ -6,6 +6,7 @@ using System.Linq; using _0_Framework.Application; using _0_Framework.InfraStructure; using AccountManagement.Application.Contracts.Account; +using AccountManagement.Domain.AccountLeftWorkAgg; using AccountMangement.Infrastructure.EFCore; using Company.Domain.EmployeeAgg; using Company.Domain.empolyerAgg; @@ -1541,5 +1542,199 @@ public class WorkshopRepository : RepositoryBase accountIds, long workshopId) + { + OperationResult op = new(); + + var startGr = ($"{(DateTime.Now.ToFarsi().Substring(0, 8))}01").ToGeorgianDateTime(); + var continueWorking = _0_Framework.Application.StaticWorkshopAccounts.ContinuesWorkingDate; + var staticAccountIds = _0_Framework.Application.StaticWorkshopAccounts.StaticAccountIds; + + + var accountIdList = staticAccountIds.Concat(accountIds).ToList(); + var selectedAccountsPlusStaticAccounts = _accountContext.Accounts.Where(x => accountIdList.Contains(x.id)).ToList(); + foreach (var item in selectedAccountsPlusStaticAccounts) + { + _context.WorkshopAccounts.Add(new WorkshopAccount() + { + + WorkshopId = workshopId, + AccountId = item.id + + }); + _context.SaveChanges(); + + + } + + + var toBeCreateAccountLeftWork = _accountContext.Accounts.Where(x => accountIds.Contains(x.id)).ToList(); + + foreach (var item in toBeCreateAccountLeftWork) + { + _accountContext.AccountLeftWorks.Add(new AccountLeftWork(startGr, continueWorking, item.id, workshopId, item.RoleId)); + _accountContext.SaveChanges(); + } + + + + return op.Succcedded(); + } + + public OperationResult EditAccountLeftWorkAndWorkshopAccounts(List accountIds, long workshopId) + { + List roleIds = _0_Framework.Application.StaticWorkshopAccounts.SelectedAccountsRoleIds; + var goStartFa = $"{(DateTime.Now.ToFarsi().Substring(0, 8))}01"; + var goStartGr = goStartFa.ToGeorgianDateTime(); + var goEndGr = goStartFa.ToGeorgianDateTime().AddDays(-1); + var continueWorking = _0_Framework.Application.StaticWorkshopAccounts.ContinuesWorkingDate; + var staticAccountIds = _0_Framework.Application.StaticWorkshopAccounts.StaticAccountIds; + + if (accountIds.Count == 0) + return new OperationResult(); + + //اکانت های انتخاب شده در ویرایش + var selectedAccounts = _accountContext.Accounts.Where(x => accountIds.Contains(x.id)).ToList(); + if (!selectedAccounts.Any()) + return new OperationResult(); + + //اکانتهایی که در جدول اکانت لفت ورک به این کارگاه دسترسی دارند و نقش های مشخص شده را دارند + var accountLeftworksAreActiveNow = _accountContext.AccountLeftWorks.Where(x => x.WorkshopId == workshopId && roleIds.Contains(x.RoleId) && x.IsActive).ToList(); + + //ورکشاپ اکانتهای این کارگاه رو بیار + var workshopAccountsAreAcceseNow = _context.WorkshopAccounts.Where(x => x.WorkshopId == workshopId).ToList(); + var workshopAccountsAreAcceseNowIdList = workshopAccountsAreAcceseNow.Select(x => x.AccountId).ToList(); + // اکانتهایی که با نقش های تعریف شده استاتیک دسترسی دارند به کارگاه + var accountsHaveStaticRolesNow = _accountContext.Accounts + .Where(x => workshopAccountsAreAcceseNowIdList.Contains(x.id)) + .Where(x => roleIds.Contains(x.RoleId)).ToList(); + + // به ازای هر یک از اکانت های انتخاب شده در ویرایش + foreach (var account in selectedAccounts) + { + //اگر اکانت انتخاب شده در جدول اکانت لفت ورک نبود یا فعال نبود + if (!accountLeftworksAreActiveNow.Any(x => x.RoleId == account.RoleId && x.AccountId == account.id)) + { + //اکانت لفت ورکی که قبلا این نقش را داشته بیار + var accountLeftworkToBeDeActiveAcount = accountLeftworksAreActiveNow.FirstOrDefault(x => x.RoleId == account.RoleId); + if (accountLeftworkToBeDeActiveAcount != null) + { + var start = accountLeftworkToBeDeActiveAcount.StartWorkGr > goEndGr ? goEndGr : accountLeftworkToBeDeActiveAcount.StartWorkGr; + //غیر فعالش کن + accountLeftworkToBeDeActiveAcount.DeActive(start, goEndGr); + + + + } + + //برای اکانت جدید لفت ورک اکانت بساز + var create = new AccountLeftWork(goStartGr, continueWorking, account.id, workshopId, account.RoleId, true); + _accountContext.AccountLeftWorks.Add(create); + _accountContext.SaveChanges(); + + } + + //اگر اکانت انتخاب شده با این نقش به کارگاه وصل نبود + if (!accountsHaveStaticRolesNow.Any(x => x.RoleId == account.RoleId && x.id == account.id)) + { + // اکانتی که قبلا این نقش را داشته + var accountHasTheRole = accountsHaveStaticRolesNow.FirstOrDefault(x => x.RoleId == account.RoleId); + if (accountHasTheRole != null) + { + //ورکشاپ اکانت دسترسی این کارگاه رو بیار + var workshopAccountToBeRemove = + workshopAccountsAreAcceseNow.FirstOrDefault(x => x.AccountId == accountHasTheRole.id); + if (workshopAccountToBeRemove != null) + { + //حذفش کن + _context.WorkshopAccounts.Remove(workshopAccountToBeRemove); + + } + } + + + //برای اکانت جدید ورکشاپ اکانت بساز + _context.WorkshopAccounts.Add(new WorkshopAccount() + { + + WorkshopId = workshopId, + AccountId = account.id + + }); + _context.SaveChanges(); + } + } + + //اگر تعداد اکانتهای انتخاب شده کمتر از 4 نقش استاتیک بود + if (accountIds.Count < 4) + { + //رول های انتخاب شده + var roleBeActive = selectedAccounts.Select(x => x.RoleId).ToList(); + // رول هایی که باید دسترسی اکانتشان حذف شود + var roleBeRemove = roleIds.Except(roleBeActive).ToList(); + + var accountsBeRemoveList = accountLeftworksAreActiveNow.Where(x => roleBeRemove.Contains(x.RoleId)).ToList(); + + foreach (var accountBeRemove in accountsBeRemoveList) + { + + //اکانت لفت ورکی که قبلا این نقش را داشته بیار + var accountLeftworkToBeDeActiveAcount = accountLeftworksAreActiveNow.FirstOrDefault(x => x.RoleId == accountBeRemove.RoleId); + if (accountLeftworkToBeDeActiveAcount != null) + { + var start = accountLeftworkToBeDeActiveAcount.StartWorkGr > goEndGr ? goEndGr : accountLeftworkToBeDeActiveAcount.StartWorkGr; + //غیر فعالش کن + accountLeftworkToBeDeActiveAcount.DeActive(start, goEndGr); + _accountContext.SaveChanges(); + } + + //ورکشاپ اکانت دسترسی این نقش رو بیار + var workshopAccountToBeRemove = + workshopAccountsAreAcceseNow.FirstOrDefault(x => x.AccountId == accountBeRemove.id); + if (workshopAccountToBeRemove != null) + { + //حذفش کن + _context.WorkshopAccounts.Remove(workshopAccountToBeRemove); + _context.SaveChanges(); + } + + } + } + + //حذف ورکشاپ اکانتهای اضافی + var accountIdList = staticAccountIds.Concat(accountIds).ToList(); + var otherAccessTobeRemove = _context.WorkshopAccounts.Where(x => x.WorkshopId == workshopId) + .Where(x => !accountIdList.Contains(x.AccountId)).ToList(); + _context.WorkshopAccounts.RemoveRange(otherAccessTobeRemove); + + //اگر اکانتی از اکانتهای ثابت دسترسی نداشت اضافه کن + foreach (var starticAccount in staticAccountIds) + { + var checkExist = workshopAccountsAreAcceseNow.Any(x => x.AccountId == starticAccount); + + if (!checkExist) + { + //var acc = _accountContext.Accounts.FirstOrDefault(x => x.id == starticAccount); + //if (acc != null) + //{ + + //} + _context.WorkshopAccounts.Add(new WorkshopAccount() + { + WorkshopId = workshopId, + AccountId = starticAccount + }); + + } + + } + _context.SaveChanges(); + + + + return new OperationResult().Succcedded(); + + } + + #endregion } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/CreateWorkshop.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/CreateWorkshop.cshtml.cs index 73b4aacd..9543c613 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/CreateWorkshop.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/CreateWorkshop.cshtml.cs @@ -41,13 +41,15 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops Id = x.Id, InsuranceJobTitle = x.InsuranceJobTitle + " | " + x.EconomicCode, }).ToList(); - + var accounts = _accountRepository.GetAdminAccountsNew(); var command = new CreateWorkshop { Employers = _EmployerApplication.GetAllEmployers(), - AccountsList = _accountRepository.GetAccounts() - .Where(x => x.AdminAreaPermission == "true" && x.Id != 2 && x.Id != 3) - .ToList(), + AccountsList = accounts, + SeniorContractAccountsList = accounts.Where(x => x.RoleId == 3).ToList(), + JuniorContractAccountsList = accounts.Where(x => x.RoleId == 5).ToList(), + SeniorInsuranceAccountList = accounts.Where(x => x.RoleId == 7).ToList(), + JuniorInsuranceAccountsList = accounts.Where(x => x.RoleId == 8).ToList(), InsuranceJobViewModels = new SelectList(insuranceJob, "Id", "InsuranceJobTitle"), }; diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml.cs index addf7b74..531c1e90 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml.cs @@ -12,7 +12,6 @@ using Company.Domain.WorkshopAgg; using CompanyManagment.App.Contracts.RollCall; using CompanyManagment.App.Contracts.RollCallService; using CompanyManagment.EFCore.Repository; -using CompanyManagment.EFCore.Migrations; namespace ServiceHost.Areas.Admin.Pages.Company.Workshops { @@ -33,6 +32,7 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops public bool HasPermissionWorkshopInfo; public bool HasPermissionContract; public bool HasPermissionInsurance; + public List DeactivatedAccounts; public EditWorkshopModel(IWorkshopApplication workshopApplication, IWorkshopRepository workshopRepository, IEmployerApplication employerApplication, IAccountRepository accountRepository, IInsuranceJobApplication insuranceJobApplication, IAuthHelper authHelper, IRollCallServiceApplication rollCallServiceApplication) { @@ -65,16 +65,36 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops if (RollCallService != null) RollCallService.EndServiceToFarsiDuration = RollCallService.EndServiceStr.ToFarsiDuration2(); - var workshop = _workshopApplication.GetDetails(id); + var allAccounts = _accountRepository.GetAccountsToEditWorkshop(id); + + var activeAccounts = allAccounts.Where(x => x.IsActiveString == "true").ToList(); + + DeactivatedAccounts = allAccounts.Except(activeAccounts).ToList(); + + var workshop = _workshopApplication.GetDetails(id); + workshop.Employers = _EmployerApplication.GetAllEmployers(); - workshop.AccountsList = _accountRepository.GetAccounts() - .Where(x => x.AdminAreaPermission == "true" && !_workshopRepository.GetWorkshopAccountRelation(id).Contains(x.Id)) - .ToList(); + + workshop.AccountsList = activeAccounts; + + var adminAccounts = _accountRepository.GetAdminAccountsNew(); + workshop.SeniorContractAccountsList = adminAccounts.Where(x => x.RoleId == 3).ToList(); + workshop.JuniorContractAccountsList = adminAccounts.Where(x => x.RoleId == 5).ToList(); + workshop.SeniorInsuranceAccountList = adminAccounts.Where(x => x.RoleId == 7).ToList(); + workshop.JuniorInsuranceAccountsList = adminAccounts.Where(x => x.RoleId == 8).ToList(); + + + + workshop.EmployerIdList = _workshopRepository.GetRelation(id); workshop.AccountIdsList = _workshopRepository.GetWorkshopAccountRelation(id); - workshop.InAccountIdsList = _accountRepository.GetAccounts() - .Where(x => _workshopRepository.GetWorkshopAccountRelation(id).Contains(x.Id)) - .ToList(); + + workshop.DeActiveAccounts = allAccounts.Except(activeAccounts).ToList(); + workshop.ActiveAccounts = activeAccounts; + //workshop.InAccountIdsList = _accountRepository.GetAccounts() + // .Where(x => _workshopRepository.GetWorkshopAccountRelation(id).Contains(x.Id)) + // .ToList(); + workshop.InsuranceJobViewModels = new SelectList(insuranceJob, "Id", "InsuranceJobTitle"); Message = workshop.ArchiveCode; workshop.PermissionIds = permissionIds; diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_CreateForms/FormPermissionAccount.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_CreateForms/FormPermissionAccount.cshtml index f9b16385..bd665c7c 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_CreateForms/FormPermissionAccount.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_CreateForms/FormPermissionAccount.cshtml @@ -1,202 +1,165 @@ @model CompanyManagment.App.Contracts.Workshop.CreateWorkshop @{ - + string adminVersion = _0_Framework.Application.Version.AdminVersion; + + }
+
+
+ قرارداد ارشد + +
+
+ قرارداد ساده + +
+
+ بیمه ارشد + +
+
+ بیمه ساده + +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
1
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +@*
@@ -232,147 +195,291 @@
-
+
*@ diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml index 676f979d..ac030de9 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml @@ -1,203 +1,509 @@ -@model CompanyManagment.App.Contracts.Workshop.EditWorkshop +@using AccountManagement.Application.Contracts.Account +@using Microsoft.AspNetCore.Mvc.TagHelpers +@model CompanyManagment.App.Contracts.Workshop.EditWorkshop + @{ int index = 1; - }
+
+
+ قرارداد ارشد + +
+
+ قرارداد ساده + +
+
+ بیمه ارشد + +
+
+ بیمه ساده + +
+
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
1
+
+ @{ + int hasSeniorContract = 0; + + } + @foreach (var item in activeAccount.Where(x=>x.RoleId == 3)) + { +
+ + @item.Fullname + +
+ hasSeniorContract++; + } +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
+ @{ + int hasJuniorContract = 0; + + } + @foreach (var item in activeAccount.Where(x => x.RoleId == 5)) + { +
+ + @item.Fullname + +
+ hasJuniorContract++; + } +
+ + + + + + + + + + + + + + + + + + + +
+ @{ + int hasSeniorInsurance = 0; + + } + @foreach (var item in activeAccount.Where(x => x.RoleId == 7)) + { +
+ + @item.Fullname + +
+ hasSeniorInsurance++; + } +
+ + + + + + + + + + + + + + + + + + + +
+ @{ + int hasJuniorInsurance = 0; + + } + @foreach (var item in activeAccount.Where(x => x.RoleId == 8)) + { +
+ + @item.Fullname + +
+ hasJuniorInsurance++; + } +
+
+ + +
+
+ + + + + + + +@*
@@ -389,24 +695,7 @@ var accountText = parentDiv.find('.row-fullname').text(); var $this = $(this); - swal({ - title: "اخطار", - text: "توجه داشته باشید با حذف این کارگاه سوابق کاربر در قسمت گزارشات حذف میگردد.", - type: "warning", - showCancelButton: true, - confirmButtonColor: "#DD6B55", - confirmButtonText: "بله", - cancelButtonText: "خیر", - closeOnConfirm: false - }, function (isConfirm) { - if (isConfirm) { - parentDiv.remove(); - $('.SelectItemAccount').append(``); - updateRowNumbers(); - swal.close(); - $.Notification.autoHideNotify('success', 'bottom right', 'پیام سیستم ', "این کاربر با موفقیت حذف شده است."); - } - }); + }); }); - + *@ diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs index 08f18a94..0786c4e2 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs @@ -1,3 +1,5 @@ +using AccountManagement.Domain.AccountLeftWorkAgg; +using AccountMangement.Infrastructure.EFCore; using Company.Domain.RollCallAgg.DomainService; using CompanyManagment.App.Contracts.AndroidApkVersion; using CompanyManagment.EFCore; @@ -14,15 +16,17 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk private readonly IAndroidApkVersionApplication _application; private readonly IRollCallDomainService _rollCallDomainService; private readonly CompanyContext _context; + private readonly AccountContext _accountContext; [BindProperty] public IFormFile File { get; set; } - public IndexModel(IAndroidApkVersionApplication application, IRollCallDomainService rollCallDomainService, CompanyContext context) + public IndexModel(IAndroidApkVersionApplication application, IRollCallDomainService rollCallDomainService, CompanyContext context, AccountContext accountContext) { _application = application; _rollCallDomainService = rollCallDomainService; _context = context; + _accountContext = accountContext; } public void OnGet() @@ -36,26 +40,103 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk return Page(); } - public async Task OnPostShiftDate() - { - var customizeWorkshopSettings = _context.CustomizeWorkshopSettings.AsSplitQuery(); + + public IActionResult OnPostShiftDate() + { + //RefactorAllTheRollCallsOnEsfand(); + // AddToAccountLeftWork(); + ViewData["message"] = ""; + return Page(); + } + #region AccountLeftwork + + private void AddToAccountLeftWork() + { + List roleIds = [3, 5, 7, 8, 23, 24]; + var accounts = _accountContext.Accounts + .Where(x => roleIds.Contains(x.RoleId)).Where(x => x.AdminAreaPermission == "true"); + var accountsIds = accounts.Select(x => x.id).ToList(); + var workshopAccount = _context.WorkshopAccounts + .Where(x => accountsIds.Contains(x.AccountId)) + .GroupBy(x => x.AccountId); + + List oldAccountleftworkActiveNow = [300, 332, 333, 334, 18, 25, 14]; + List oldAccountleftworkDeActivedNow = [50, 49, 15]; + var continueWorking = _0_Framework.Application.StaticWorkshopAccounts.ContinuesWorkingDate; - customizeWorkshopSettings = customizeWorkshopSettings.Where(x => x.WorkshopId == 499); - - var rollCalls = - _context.RollCalls.Where(x => customizeWorkshopSettings.Any(a => a.WorkshopId == x.WorkshopId)) - .ToList(); - - foreach (var rollCall in rollCalls) + foreach (var item in workshopAccount) { - rollCall.SetShiftDate(_rollCallDomainService); - Console.WriteLine(rollCall.id); + + + var oldActive = item.FirstOrDefault(x => oldAccountleftworkActiveNow.Contains(x.AccountId)); + if (oldActive != null) + { + var roleId = accounts.FirstOrDefault(x => x.id == oldActive.AccountId)!.RoleId; + var startGr = item.Key != 25 ? new DateTime(2024, 07, 22) : new DateTime(2024, 08, 22); + //if (item.Key is 380 or 381) + // startGr = new DateTime(2025, 02, 19); + if (item.Key is 14 or 18) + startGr = new DateTime(2020, 05, 21); + if (item.Key is 300) + startGr = new DateTime(2024, 05, 22); + + foreach (var workshop in item) + { + _accountContext.AccountLeftWorks.Add(new AccountLeftWork(startGr, continueWorking, workshop.AccountId, workshop.WorkshopId, roleId, true)); + + } + _accountContext.SaveChanges(); + + } + + var oldDeActive = item.FirstOrDefault(x => oldAccountleftworkDeActivedNow.Contains(x.AccountId)); + if (oldDeActive != null) + { + var roleId = accounts.FirstOrDefault(x => x.id == oldDeActive.AccountId)!.RoleId; + var startGr = new DateTime(2022, 03, 21); + if (item.Key == 49) + startGr = new DateTime(2023, 04, 21); + if (item.Key == 50) + startGr = new DateTime(2023, 03, 21); + foreach (var workshop in item) + { + _accountContext.Add(new AccountLeftWork(startGr, new DateTime(2024, 07, 21), workshop.AccountId, workshop.WorkshopId, roleId, false)); + + } + _accountContext.SaveChanges(); + + } + + } - await _context.SaveChangesAsync(); - ViewData["message"] = ""; - return Page(); - } - } + Console.WriteLine("finished"); + } + + #endregion + + + //public async Task OnPostShiftDate() + //{ + // var customizeWorkshopSettings = _context.CustomizeWorkshopSettings.AsSplitQuery(); + + + // customizeWorkshopSettings = customizeWorkshopSettings.Where(x => x.WorkshopId == 499); + + // var rollCalls = + // _context.RollCalls.Where(x => customizeWorkshopSettings.Any(a => a.WorkshopId == x.WorkshopId)) + // .ToList(); + + // foreach (var rollCall in rollCalls) + // { + // rollCall.SetShiftDate(_rollCallDomainService); + // Console.WriteLine(rollCall.id); + // } + + // await _context.SaveChangesAsync(); + // ViewData["message"] = ""; + // return Page(); + //} + } } diff --git a/ServiceHost/Faces/499/43476/1.jpg b/ServiceHost/Faces/499/43476/1.jpg index 4e97a0e2..39323fe2 100644 Binary files a/ServiceHost/Faces/499/43476/1.jpg and b/ServiceHost/Faces/499/43476/1.jpg differ diff --git a/ServiceHost/Faces/499/43476/2.jpg b/ServiceHost/Faces/499/43476/2.jpg index 430bafa4..5fc360fb 100644 Binary files a/ServiceHost/Faces/499/43476/2.jpg and b/ServiceHost/Faces/499/43476/2.jpg differ diff --git a/ServiceHost/Faces/499/43476/Thumbnail.jpg b/ServiceHost/Faces/499/43476/Thumbnail.jpg index 62c06c0f..f5aa976d 100644 Binary files a/ServiceHost/Faces/499/43476/Thumbnail.jpg and b/ServiceHost/Faces/499/43476/Thumbnail.jpg differ diff --git a/ServiceHost/Faces/499/43477/1.jpg b/ServiceHost/Faces/499/43477/1.jpg index d0029959..8080308b 100644 Binary files a/ServiceHost/Faces/499/43477/1.jpg and b/ServiceHost/Faces/499/43477/1.jpg differ diff --git a/ServiceHost/Faces/499/43477/2.jpg b/ServiceHost/Faces/499/43477/2.jpg index 25caa4bc..0c670f63 100644 Binary files a/ServiceHost/Faces/499/43477/2.jpg and b/ServiceHost/Faces/499/43477/2.jpg differ diff --git a/ServiceHost/Faces/499/43477/Thumbnail.jpg b/ServiceHost/Faces/499/43477/Thumbnail.jpg index 2dc2486d..7f59de8b 100644 Binary files a/ServiceHost/Faces/499/43477/Thumbnail.jpg and b/ServiceHost/Faces/499/43477/Thumbnail.jpg differ diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/css/FormPermissionAccount.css b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/css/FormPermissionAccount.css new file mode 100644 index 00000000..29cca651 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/css/FormPermissionAccount.css @@ -0,0 +1,126 @@ +.p-2 { + padding: 2rem; +} + +#activeAccounts, #DeactivatedAccounts { + overflow-y: scroll; + height: 235px; +} + +.required_inp { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; +} + +.inputRemove { + background-color: #EBD3D3; + border: none; + display: flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; + border-radius: 5px; +} + +.disable { + pointer-events: none; + filter: grayscale(1); + opacity: 0.7; +} + +.btns-section { + display: flex; +} + +.selection-section { + display: flex; + align-items: center; + gap: 1.2rem; + padding: 0 8px 0 24px; +} + +.w-25-persent { + width: 25%; +} + +.table-permission-section { + margin: 20px 0; + border: 1px solid #2F77CA; + border-radius: 20px; + overflow: hidden; +} + +.table-permission-section .active-account-btn { + width: 100%; + border: none; + padding: 6px 0; + background-color: #61C7F8; + color: #fff; +} + +.table-number { + width: 25px; + height: 25px; + background-color: #06B6D4; + border-radius: 5px; + color: #fff; + display: flex; + align-items: center; + justify-content: center; +} + +.table-number-empty { + visibility: hidden +} + +table { + width: 100%; + color: #666; + background: #eaebec; + border-left: #2F77CA 1px solid; +} + +table tr { + text-align: right; + height: 46px; +} + +table td:first-child { + text-align: right; + border-left: 0; +} + +table td { + padding: 8px 10px; + background: #fafafa; + text-align: right; +} + +table tr:hover td { + background: #f2f2f2; +} + + +@media (max-width:768px) { + .selection-section { + overflow-x: scroll; + overflow-y: hidden; + } + + .w-25-persent { + width: 100%; + } + + .required_inp { + font-size: 12px; + white-space: nowrap; + } + + .table-permission-section .active-account-btn { + font-size: 12px; + font-weight: 900; + } +} diff --git a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalTakeImagesEdit.js b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalTakeImagesEdit.js index 67fb6cc5..69caafd1 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalTakeImagesEdit.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalTakeImagesEdit.js @@ -45,6 +45,10 @@ $(document).ready(function () { //} } + $("#next-step").on("click", function () { + set(); + }); + $(document).on('click', '.upload-image1', function () { $('.md-modal').addClass('md-show'); $('.take_snapshot1').show();