diff --git a/AccountManagement.Application/MediaApplication.cs b/AccountManagement.Application/MediaApplication.cs index 4f834f79..a0a37355 100644 --- a/AccountManagement.Application/MediaApplication.cs +++ b/AccountManagement.Application/MediaApplication.cs @@ -128,6 +128,8 @@ namespace AccountManagement.Application public MediaViewModel Get(long id) { var media = _mediaRepository.Get(id); + if (media == null) + return new(); return new MediaViewModel() { Category = media.Category, diff --git a/Company.Domain/RollCallAgg/DomainService/IRollCallDomainService.cs b/Company.Domain/RollCallAgg/DomainService/IRollCallDomainService.cs index 8c2c439e..c323c98f 100644 --- a/Company.Domain/RollCallAgg/DomainService/IRollCallDomainService.cs +++ b/Company.Domain/RollCallAgg/DomainService/IRollCallDomainService.cs @@ -7,138 +7,172 @@ using System.Collections.Generic; using System; using System.Linq; using _0_Framework.Application; +using OfficeOpenXml; using OfficeOpenXml.Drawing.Chart; namespace Company.Domain.RollCallAgg.DomainService; public interface IRollCallDomainService { - (WorkshopShiftStatus shiftType, IrregularShift irregularShift, ICollection regularShifts, ICollection rotatingShifts, TimeSpan BreakTime) GetEmployeeShiftDetails(long employeeId, long workshopId); - TimeOnly GetEmployeeOffSetForRegularSettings(long employeeId, long workshopId); + (WorkshopShiftStatus shiftType, IrregularShift irregularShift, ICollection regularShifts, ICollection rotatingShifts, TimeSpan BreakTime) GetEmployeeShiftDetails(long employeeId, long workshopId); + TimeOnly GetEmployeeOffSetForRegularSettings(long employeeId, long workshopId); + DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId, DateTime rollCallStartDate); } public class RollCallDomainService : IRollCallDomainService { - private readonly IRollCallRepository _rollCallRepository; + private readonly IRollCallRepository _rollCallRepository; - private readonly ICustomizeWorkshopEmployeeSettingsRepository _customizeWorkshopEmployeeSettingsRepository; - private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository; - public RollCallDomainService(IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository) - { - _rollCallRepository = rollCallRepository; - _customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository; - _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository; - } + private readonly ICustomizeWorkshopEmployeeSettingsRepository _customizeWorkshopEmployeeSettingsRepository; + private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository; + public RollCallDomainService(IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository) + { + _rollCallRepository = rollCallRepository; + _customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository; + _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository; + } - public (WorkshopShiftStatus shiftType, IrregularShift irregularShift, ICollection regularShifts, ICollection rotatingShifts, TimeSpan BreakTime) GetEmployeeShiftDetails(long employeeId, - long workshopId) - { - var employeeSettings = _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId); + public (WorkshopShiftStatus shiftType, IrregularShift irregularShift, ICollection regularShifts, ICollection rotatingShifts, TimeSpan BreakTime) GetEmployeeShiftDetails(long employeeId, + long workshopId) + { + var employeeSettings = _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId); - var offset = TimeOnly.MinValue; - WorkshopShiftStatus shiftType; + var offset = TimeOnly.MinValue; + WorkshopShiftStatus shiftType; - if (employeeSettings == null) - { + if (employeeSettings == null) + { - var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(workshopId); - shiftType = workshopSettings.WorkshopShiftStatus; + var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(workshopId); + shiftType = workshopSettings.WorkshopShiftStatus; - return (shiftType, null, - workshopSettings.CustomizeWorkshopSettingsShifts.Select(x => (CustomizeSifts)x).ToList(), - null, TimeSpan.Zero); + return (shiftType, null, + workshopSettings.CustomizeWorkshopSettingsShifts.Select(x => (CustomizeSifts)x).ToList(), + null, TimeSpan.Zero); - } - else - { + } + else + { - shiftType = employeeSettings.WorkshopShiftStatus; + shiftType = employeeSettings.WorkshopShiftStatus; - var breakTimeSpan = employeeSettings.BreakTime.BreakTimeType == BreakTimeType.WithTime - ? employeeSettings.BreakTime.BreakTimeValue.ToTimeSpan() - : TimeSpan.Zero; + var breakTimeSpan = employeeSettings.BreakTime.BreakTimeType == BreakTimeType.WithTime + ? employeeSettings.BreakTime.BreakTimeValue.ToTimeSpan() + : TimeSpan.Zero; - return (shiftType, employeeSettings.IrregularShift, - employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.Select(x => (CustomizeSifts)x).ToList(), - employeeSettings.CustomizeRotatingShifts, breakTimeSpan); + return (shiftType, employeeSettings.IrregularShift, + employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.Select(x => (CustomizeSifts)x).ToList(), + employeeSettings.CustomizeRotatingShifts, breakTimeSpan); - } + } - } + } - public TimeOnly GetEmployeeOffSetForRegularSettings(long employeeId, long workshopId) - { - var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(workshopId); - var employeeSettings = _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId); + public TimeOnly GetEmployeeOffSetForRegularSettings(long employeeId, long workshopId) + { + var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(workshopId); + var employeeSettings = _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId); - if (workshopSettings == null) - return TimeOnly.MinValue; + if (workshopSettings == null) + return TimeOnly.MinValue; - if (employeeSettings == null && workshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) - return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts - .Select(x => (CustomizeSifts)x).ToList()); + if (employeeSettings == null && workshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) + return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts + .Select(x => (CustomizeSifts)x).ToList()); - if (employeeSettings == null) - return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts.Select(x => (CustomizeSifts)x).ToList()); + if (employeeSettings == null) + return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts.Select(x => (CustomizeSifts)x).ToList()); - if (workshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) - { - // تعریف بازه‌های زمانی - var workshopStartTime = workshopSettings.CustomizeWorkshopSettingsShifts.MinBy(x => x.Placement).StartTime; // شروع کارگاه - var workshopEndTime = workshopSettings.CustomizeWorkshopSettingsShifts.MaxBy(x => x.Placement).EndTime; // پایان کارگاه + if (workshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) + { + // تعریف بازه‌های زمانی + var workshopStartTime = workshopSettings.CustomizeWorkshopSettingsShifts.MinBy(x => x.Placement).StartTime; // شروع کارگاه + var workshopEndTime = workshopSettings.CustomizeWorkshopSettingsShifts.MaxBy(x => x.Placement).EndTime; // پایان کارگاه - var employeeStartTime = employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MinBy(x => x.Placement).StartTime; // شروع بازه پرسنل - var employeeEndTime = employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MaxBy(x => x.Placement).EndTime; // پایان پرسنل + var employeeStartTime = employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MinBy(x => x.Placement).StartTime; // شروع بازه پرسنل + var employeeEndTime = employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MaxBy(x => x.Placement).EndTime; // پایان پرسنل - // تبدیل زمان‌ها به TimeSpan برای مقایسه - var workshopStartTimeSpan = workshopStartTime.ToTimeSpan(); - var workshopEndTimeSpan = workshopEndTime.ToTimeSpan(); - var employeeStartTimeSpan = employeeStartTime.ToTimeSpan(); - var employeeEndTimeSpan = employeeEndTime.ToTimeSpan(); + // تبدیل زمان‌ها به TimeSpan برای مقایسه + var workshopStartTimeSpan = workshopStartTime.ToTimeSpan(); + var workshopEndTimeSpan = workshopEndTime.ToTimeSpan(); + var employeeStartTimeSpan = employeeStartTime.ToTimeSpan(); + var employeeEndTimeSpan = employeeEndTime.ToTimeSpan(); - // مدیریت زمان‌های بعد از نیمه شب - if (workshopEndTimeSpan < workshopStartTimeSpan) - workshopEndTimeSpan = workshopEndTimeSpan.Add(TimeSpan.FromDays(1)); // افزودن یک روز به پایان بازه اول + // مدیریت زمان‌های بعد از نیمه شب + if (workshopEndTimeSpan < workshopStartTimeSpan) + workshopEndTimeSpan = workshopEndTimeSpan.Add(TimeSpan.FromDays(1)); // افزودن یک روز به پایان بازه اول - if (employeeEndTimeSpan < employeeStartTimeSpan) - employeeEndTimeSpan = employeeEndTimeSpan.Add(TimeSpan.FromDays(1)); // افزودن یک روز به پایان بازه دوم + if (employeeEndTimeSpan < employeeStartTimeSpan) + employeeEndTimeSpan = employeeEndTimeSpan.Add(TimeSpan.FromDays(1)); // افزودن یک روز به پایان بازه دوم - // محاسبه بزرگ‌ترین زمان شروع و کوچک‌ترین زمان پایان - var overlapStart = workshopStartTimeSpan > employeeStartTimeSpan ? workshopStartTimeSpan : employeeStartTimeSpan; - var overlapEnd = workshopEndTimeSpan < employeeEndTimeSpan ? workshopEndTimeSpan : employeeEndTimeSpan; + // محاسبه بزرگ‌ترین زمان شروع و کوچک‌ترین زمان پایان + var overlapStart = workshopStartTimeSpan > employeeStartTimeSpan ? workshopStartTimeSpan : employeeStartTimeSpan; + var overlapEnd = workshopEndTimeSpan < employeeEndTimeSpan ? workshopEndTimeSpan : employeeEndTimeSpan; - if (overlapStart >= overlapEnd) // اگر بازه هم‌پوشانی وجود ندارد - return Tools.CalculateOffset(employeeSettings.CustomizeWorkshopEmployeeSettingsShifts - .Select(x => (CustomizeSifts)x).ToList()); + if (overlapStart >= overlapEnd) // اگر بازه هم‌پوشانی وجود ندارد + return Tools.CalculateOffset(employeeSettings.CustomizeWorkshopEmployeeSettingsShifts + .Select(x => (CustomizeSifts)x).ToList()); - var overlapDuration = (overlapEnd - overlapStart).TotalMinutes; // مدت زمان هم‌پوشانی بر حسب دقیقه - var duration2 = (employeeEndTime - employeeStartTime).TotalMinutes; // مدت زمان بازه دوم + var overlapDuration = (overlapEnd - overlapStart).TotalMinutes; // مدت زمان هم‌پوشانی بر حسب دقیقه + var duration2 = (employeeEndTime - employeeStartTime).TotalMinutes; // مدت زمان بازه دوم - var overlapPercentage = (overlapDuration / duration2) * 100; // درصد هم‌پوشانی + var overlapPercentage = (overlapDuration / duration2) * 100; // درصد هم‌پوشانی - if (overlapPercentage < 40) - { - return Tools.CalculateOffset(employeeSettings.CustomizeWorkshopEmployeeSettingsShifts - .Select(x => (CustomizeSifts)x).ToList()); - } + if (overlapPercentage < 40) + { + return Tools.CalculateOffset(employeeSettings.CustomizeWorkshopEmployeeSettingsShifts + .Select(x => (CustomizeSifts)x).ToList()); + } - return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts - .Select(x => (CustomizeSifts)x).ToList()); - } + return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts + .Select(x => (CustomizeSifts)x).ToList()); + } - else if (employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) - { - return Tools.CalculateOffset(employeeSettings.CustomizeWorkshopEmployeeSettingsShifts - .Select(x => (CustomizeSifts)x).ToList()); - } + else if (employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) + { + return Tools.CalculateOffset(employeeSettings.CustomizeWorkshopEmployeeSettingsShifts + .Select(x => (CustomizeSifts)x).ToList()); + } - else - { - return TimeOnly.MinValue; - } - } + else + { + return TimeOnly.MinValue; + } + } + + public DateTime GetEmployeeShiftDateByRollCallStartDate(long workshopId, long employeeId, DateTime rollCallStartDate) + { + var shiftDetails = GetEmployeeShiftDetails(employeeId, workshopId); + + var offset = GetEmployeeOffSetForRegularSettings(employeeId, workshopId); + + return shiftDetails.shiftType switch + { + WorkshopShiftStatus.Regular => CalculateRegularShiftDate(rollCallStartDate, offset), + WorkshopShiftStatus.Rotating => rollCallStartDate.Date, + WorkshopShiftStatus.Irregular => rollCallStartDate.Date, + _ => throw new ArgumentOutOfRangeException() + }; + } + + private DateTime CalculateRegularShiftDate(DateTime startDate, TimeOnly offset) + { + DateTime nextOffSetDateTime; + if (startDate.TimeOfDay >= offset.ToTimeSpan()) + { + nextOffSetDateTime = startDate.AddDays(1).Date + offset.ToTimeSpan(); + } + else + nextOffSetDateTime = startDate.Date + offset.ToTimeSpan(); + + if (nextOffSetDateTime.TimeOfDay >= TimeSpan.FromHours(12)) + return nextOffSetDateTime.Date; + + + return nextOffSetDateTime.AddDays(-1).Date; + } } \ No newline at end of file diff --git a/Company.Domain/RollCallAgg/RollCall.cs b/Company.Domain/RollCallAgg/RollCall.cs index d7f75edf..cf0fd32c 100644 --- a/Company.Domain/RollCallAgg/RollCall.cs +++ b/Company.Domain/RollCallAgg/RollCall.cs @@ -61,34 +61,9 @@ namespace Company.Domain.RollCallAgg public void SetShiftDate(IRollCallDomainService service) { - var shiftDetails = service.GetEmployeeShiftDetails(EmployeeId, WorkshopId); - - var offset = service.GetEmployeeOffSetForRegularSettings(EmployeeId, WorkshopId); - - ShiftDate = shiftDetails.shiftType switch - { - WorkshopShiftStatus.Regular => CalculateRegularShiftDate(StartDate!.Value, offset), - WorkshopShiftStatus.Rotating => StartDate!.Value.Date, - WorkshopShiftStatus.Irregular => StartDate!.Value.Date, - _ => throw new ArgumentOutOfRangeException() - }; + ShiftDate = service.GetEmployeeShiftDateByRollCallStartDate(WorkshopId, EmployeeId, StartDate!.Value); } - private DateTime CalculateRegularShiftDate(DateTime startDate, TimeOnly offset) - { - DateTime nextOffSetDateTime; - if (startDate.TimeOfDay >= offset.ToTimeSpan()) - { - nextOffSetDateTime = startDate.AddDays(1).Date + offset.ToTimeSpan(); - } - else - nextOffSetDateTime = startDate.Date + offset.ToTimeSpan(); - - if (nextOffSetDateTime.TimeOfDay >= TimeSpan.FromHours(12)) - return nextOffSetDateTime.Date; - - return nextOffSetDateTime.AddDays(-1).Date; - } } diff --git a/CompanyManagment.App.Contracts/RollCall/EditRollCall.cs b/CompanyManagment.App.Contracts/RollCall/EditRollCall.cs index 03d529cd..7b686948 100644 --- a/CompanyManagment.App.Contracts/RollCall/EditRollCall.cs +++ b/CompanyManagment.App.Contracts/RollCall/EditRollCall.cs @@ -1,6 +1,9 @@ -namespace CompanyManagment.App.Contracts.RollCall; +using System; + +namespace CompanyManagment.App.Contracts.RollCall; public class EditRollCall : CreateRollCall { public long Id { get; set; } + public DateTime ShiftDate { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/RollCall/EmployeeRollCallsViewModel.cs b/CompanyManagment.App.Contracts/RollCall/EmployeeRollCallsViewModel.cs index 5b5a10a6..debe2286 100644 --- a/CompanyManagment.App.Contracts/RollCall/EmployeeRollCallsViewModel.cs +++ b/CompanyManagment.App.Contracts/RollCall/EmployeeRollCallsViewModel.cs @@ -11,5 +11,6 @@ namespace CompanyManagment.App.Contracts.RollCall public string DateFa { get; set; } public List RollCalls { get; set; } public List EditableDates { get; set; } - } + public string TotalRollCallsDuration { get; set; } + } } diff --git a/CompanyManagment.Application/BankApplication.cs b/CompanyManagment.Application/BankApplication.cs index 1f3a794b..7dabda37 100644 --- a/CompanyManagment.Application/BankApplication.cs +++ b/CompanyManagment.Application/BankApplication.cs @@ -55,7 +55,7 @@ namespace CompanyManagment.Application if(command.BankLogoPictureFile != null && command.BankLogoPictureFile.Length >0 ) { var uploadResult = _mediaApplication.UploadFile(command.BankLogoPictureFile, command.BankName, - _basePath, 10, [".jpg", ".jpeg", ".png"]); + _basePath, 10, [".jpg", ".jpeg", ".png",".svg"]); if (uploadResult.IsSuccedded == false) return uploadResult; mediaId = uploadResult.SendId; @@ -81,7 +81,7 @@ namespace CompanyManagment.Application if (command.BankLogoPictureFile != null && command.BankLogoPictureFile.Length > 0) { var uploadResult = _mediaApplication.UploadFile(command.BankLogoPictureFile, command.BankName, - _basePath, 10, [".jpg", ".jpeg", ".png"]); + _basePath, 10, [".jpg", ".jpeg", ".png",".svg"]); if (uploadResult.IsSuccedded == false) return uploadResult; _mediaApplication.DeleteFile(entity.BankLogoMediaId); @@ -93,11 +93,10 @@ namespace CompanyManagment.Application return op.Succcedded(); } - public List Search(string name) { var banks = _bankRepository.Search(name); - var medias = _mediaApplication.GetRange(banks.Select(x => x.Id)); + var medias = _mediaApplication.GetRange(banks.Select(x => x.BankLogoPictureMediaId)); return banks.Select(x=> new BankViewModel() { BankLogoPicturePath = medias.FirstOrDefault(y=>y.Id == x.BankLogoPictureMediaId)?.Path ??"", diff --git a/CompanyManagment.Application/RollCallApplication.cs b/CompanyManagment.Application/RollCallApplication.cs index c6fd6229..a969c16f 100644 --- a/CompanyManagment.Application/RollCallApplication.cs +++ b/CompanyManagment.Application/RollCallApplication.cs @@ -199,613 +199,465 @@ public class RollCallApplication : IRollCallApplication } - /// - /// افزودن حضور غیاب به صورت دستی. اگر آیدی رکورد صفر باشد رکورد جدید، در غیر این صورت ویرایش می کند - /// - /// + /// + /// افزودن حضور غیاب به صورت دستی. اگر آیدی رکورد صفر باشد رکورد جدید، در غیر این صورت ویرایش می کند + /// + /// - #region ManualEditWithDates - //public OperationResult ManualEdit(CreateOrEditEmployeeRollCall command) - //{ - // var operation = new OperationResult(); + #region ManualEditWithDates + //public OperationResult ManualEdit(CreateOrEditEmployeeRollCall command) + //{ + // var operation = new OperationResult(); - // DateTime date = command.DateFa.ToGeorgianDateTime(); - // if (date == Tools.GetUndefinedDateTime()) - // return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد"); + // DateTime date = command.DateFa.ToGeorgianDateTime(); + // if (date == Tools.GetUndefinedDateTime()) + // return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد"); - // if (date >= DateTime.Now.Date) - // { - // return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد"); - // } + // if (date >= DateTime.Now.Date) + // { + // return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد"); + // } - // var twoDaysEarlier = date.AddDays(-2).Date; - // var twoDaysLater = date.AddDays(2).Date >= DateTime.Today - // ? (date.AddDays(1).Date >= DateTime.Today ? DateTime.Today : date.AddDays(1).Date) - // : date.AddDays(2).Date; + // var twoDaysEarlier = date.AddDays(-2).Date; + // var twoDaysLater = date.AddDays(2).Date >= DateTime.Today + // ? (date.AddDays(1).Date >= DateTime.Today ? DateTime.Today : date.AddDays(1).Date) + // : date.AddDays(2).Date; - // if (command.WorkshopId < 1) - // { - // return operation.Failed("خطای سیستمی"); - // } + // if (command.WorkshopId < 1) + // { + // return operation.Failed("خطای سیستمی"); + // } - // if (command.RollCallRecords == null || command.RollCallRecords.Count == 0) - // return operation.Failed("خطای سیستمی"); + // if (command.RollCallRecords == null || command.RollCallRecords.Count == 0) + // return operation.Failed("خطای سیستمی"); - // if (_leaveRepository.HasDailyLeave(command.EmployeeId, command.WorkshopId, date)) - // return operation.Failed("در روز مرخصی کارمند نمی توانید حضور غیاب ثبت کنید"); + // if (_leaveRepository.HasDailyLeave(command.EmployeeId, command.WorkshopId, date)) + // return operation.Failed("در روز مرخصی کارمند نمی توانید حضور غیاب ثبت کنید"); - // var employeeStatuses = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(command.EmployeeId) - // .FirstOrDefault(x => x.WorkshopId == command.WorkshopId)?.Statuses; + // var employeeStatuses = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(command.EmployeeId) + // .FirstOrDefault(x => x.WorkshopId == command.WorkshopId)?.Statuses; - // var employeeRollCalls = _rollCallRepository.GetEmployeeRollCallsHistoryAllInDates(command.WorkshopId, command.EmployeeId, twoDaysEarlier, twoDaysLater); + // var employeeRollCalls = _rollCallRepository.GetEmployeeRollCallsHistoryAllInDates(command.WorkshopId, command.EmployeeId, twoDaysEarlier, twoDaysLater); - // //if (employeeRollCalls.Any(x => x.StartDate.Value.Date== x.EndDate == null)) - // // return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); + // //if (employeeRollCalls.Any(x => x.StartDate.Value.Date== x.EndDate == null)) + // // return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); - // if (command.RollCallRecords.Any(x => string.IsNullOrWhiteSpace(x.StartTime) || string.IsNullOrWhiteSpace(x.EndTime))) - // return operation.Failed("ساعات شروع و پایان نمیتوانند خالی باشد"); + // if (command.RollCallRecords.Any(x => string.IsNullOrWhiteSpace(x.StartTime) || string.IsNullOrWhiteSpace(x.EndTime))) + // return operation.Failed("ساعات شروع و پایان نمیتوانند خالی باشد"); - // DateTime day = command.DateFa.ToGeorgianDateTime(); - // if (day == Tools.GetUndefinedDateTime()) - // return operation.Failed("خطای سیستمی"); + // DateTime day = command.DateFa.ToGeorgianDateTime(); + // if (day == Tools.GetUndefinedDateTime()) + // return operation.Failed("خطای سیستمی"); - // List newRollCallDates = new(); + // List newRollCallDates = new(); - // foreach (var record in command.RollCallRecords) - // { - // if (record.StartDate.TryToGeorgianDateTime(out var startDateGr) == false || record.EndDate.TryToGeorgianDateTime(out var endDateGr) == false) - // return operation.Failed("فرمت تاریخ صحیح نمی باشد"); + // foreach (var record in command.RollCallRecords) + // { + // if (record.StartDate.TryToGeorgianDateTime(out var startDateGr) == false || record.EndDate.TryToGeorgianDateTime(out var endDateGr) == false) + // return operation.Failed("فرمت تاریخ صحیح نمی باشد"); - // if (TimeOnly.TryParse(record.StartTime, out var startTimeOnly) == false || TimeOnly.TryParse(record.EndTime, out var endTimeOnly) == false) - // return operation.Failed("فرمت ساعت صحیح نمی باشد"); - // DateTime startDateTime = startDateGr + startTimeOnly.ToTimeSpan(); - // DateTime endDateTime = endDateGr + endTimeOnly.ToTimeSpan(); + // if (TimeOnly.TryParse(record.StartTime, out var startTimeOnly) == false || TimeOnly.TryParse(record.EndTime, out var endTimeOnly) == false) + // return operation.Failed("فرمت ساعت صحیح نمی باشد"); + // DateTime startDateTime = startDateGr + startTimeOnly.ToTimeSpan(); + // DateTime endDateTime = endDateGr + endTimeOnly.ToTimeSpan(); - // if (startDateTime >= endDateTime) - // return operation.Failed("زمان ورود نمی تواند بعد یا مساوی زمان خروج باشد"); + // if (startDateTime >= endDateTime) + // return operation.Failed("زمان ورود نمی تواند بعد یا مساوی زمان خروج باشد"); - // if (endDateTime.Date >= DateTime.Today) - // return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید"); + // if (endDateTime.Date >= DateTime.Today) + // return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید"); - // var rollCall = new EditRollCall - // { - // StartDate = startDateTime, - // EndDate = endDateTime, - // Id = record.RollCallId - // }; - // newRollCallDates.Add(rollCall); - // } + // var rollCall = new EditRollCall + // { + // StartDate = startDateTime, + // EndDate = endDateTime, + // Id = record.RollCallId + // }; + // newRollCallDates.Add(rollCall); + // } - // if (newRollCallDates.Any(x => newRollCallDates.Any(y => x != y && x.EndDate >= y.StartDate && x.StartDate <= y.EndDate))) - // return operation.Failed("بازه های وارد شده با هم تداخل دارند"); + // if (newRollCallDates.Any(x => newRollCallDates.Any(y => x != y && x.EndDate >= y.StartDate && x.StartDate <= y.EndDate))) + // return operation.Failed("بازه های وارد شده با هم تداخل دارند"); - // foreach (var activity in newRollCallDates) - // { + // foreach (var activity in newRollCallDates) + // { - // //مرخصی روزانه در بالا چک شده است - // var leave = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, command.EmployeeId, activity.StartDate.Value, activity.EndDate.Value) - // .Where(x => x.PaidLeaveType == "ساعتی"); - // if (leave.Any()) - // return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد"); - // } + // //مرخصی روزانه در بالا چک شده است + // var leave = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, command.EmployeeId, activity.StartDate.Value, activity.EndDate.Value) + // .Where(x => x.PaidLeaveType == "ساعتی"); + // if (leave.Any()) + // return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد"); + // } - // if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate >= y.StartDateGr && x.EndDate <= y.EndDateGr))) - // return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); + // if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate >= y.StartDateGr && x.EndDate <= y.EndDateGr))) + // return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); - // if (newRollCallDates.Any(x => - // x.StartDate.Value.Date < date.Date.AddDays(-1) || - // x.EndDate.Value.Date > date.Date.AddDays(1))) - // { - // return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید بیشتر از یک روز از ثبت حضور غیاب عقب تر یا جلو تر ببرید"); - // } + // if (newRollCallDates.Any(x => + // x.StartDate.Value.Date < date.Date.AddDays(-1) || + // x.EndDate.Value.Date > date.Date.AddDays(1))) + // { + // return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید بیشتر از یک روز از ثبت حضور غیاب عقب تر یا جلو تر ببرید"); + // } - // if (newRollCallDates.Any(x => employeeRollCalls.Any(y => - // y.StartDate.Value.Date != command.DateFa.ToGeorgianDateTime().Date && - // x.EndDate >= y.StartDate.Value && x.StartDate <= y.EndDate.Value))) - // return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد"); + // if (newRollCallDates.Any(x => employeeRollCalls.Any(y => + // y.StartDate.Value.Date != command.DateFa.ToGeorgianDateTime().Date && + // x.EndDate >= y.StartDate.Value && x.StartDate <= y.EndDate.Value))) + // return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد"); - // var checkoutViewModels = _checkoutRepository.SimpleSearch(new CheckoutSearchModel() { WorkshopId = command.WorkshopId, EmployeeId = command.EmployeeId }); + // var checkoutViewModels = _checkoutRepository.SimpleSearch(new CheckoutSearchModel() { WorkshopId = command.WorkshopId, EmployeeId = command.EmployeeId }); - // if (checkoutViewModels.Any(x => x.HasRollCall && x.WorkshopId == command.WorkshopId && x.EmployeeId == command.EmployeeId && - // newRollCallDates.Any(y => (y.StartDate.Value.Date >= x.ContractStartGr.Date) - // && (y.StartDate.Value.Date <= x.ContractEndGr.Date)))) - // return operation.Failed("برای بازه های وارد شده فیش حقوقی ثبت شده است"); + // if (checkoutViewModels.Any(x => x.HasRollCall && x.WorkshopId == command.WorkshopId && x.EmployeeId == command.EmployeeId && + // newRollCallDates.Any(y => (y.StartDate.Value.Date >= x.ContractStartGr.Date) + // && (y.StartDate.Value.Date <= x.ContractEndGr.Date)))) + // return operation.Failed("برای بازه های وارد شده فیش حقوقی ثبت شده است"); - // var name = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId).EmployeeFullName; - // var rollCallsAsEntityModels = newRollCallDates.Select(x => new RollCall(command.WorkshopId, command.EmployeeId, name, x.StartDate, x.EndDate, - // Convert.ToInt32(x.StartDate.Value.ToFarsi().Substring(0, 4)), Convert.ToInt32(x.StartDate.ToFarsi().Substring(5, 2)), RollCallModifyType.EditByEmployer)).ToList(); - // _rollCallRepository.RemoveEmployeeRollCallsInDate(command.WorkshopId, command.EmployeeId, date); + // var name = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId).EmployeeFullName; + // var rollCallsAsEntityModels = newRollCallDates.Select(x => new RollCall(command.WorkshopId, command.EmployeeId, name, x.StartDate, x.EndDate, + // Convert.ToInt32(x.StartDate.Value.ToFarsi().Substring(0, 4)), Convert.ToInt32(x.StartDate.ToFarsi().Substring(5, 2)), RollCallModifyType.EditByEmployer)).ToList(); + // _rollCallRepository.RemoveEmployeeRollCallsInDate(command.WorkshopId, command.EmployeeId, date); - // _rollCallRepository.AddRange(rollCallsAsEntityModels); - // _rollCallRepository.SaveChanges(); - // return operation.Succcedded(); - //} - #endregion + // _rollCallRepository.AddRange(rollCallsAsEntityModels); + // _rollCallRepository.SaveChanges(); + // return operation.Succcedded(); + //} + #endregion - #region ManualEditWithoutDates_Old + #region ManualEditWithDates + public OperationResult ManualEdit(CreateOrEditEmployeeRollCall command) + { + var operation = new OperationResult(); - public OperationResult ManualEdit(CreateOrEditEmployeeRollCall command) - { - var operation = new OperationResult(); + DateTime date = command.DateFa.ToGeorgianDateTime(); + if (date == Tools.GetUndefinedDateTime()) + return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد"); + + if (date >= DateTime.Now.Date) + { + return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد"); + } + + var twoDaysEarlier = date.AddDays(-2).Date; + var twoDaysLater = date.AddDays(2).Date >= DateTime.Today + ? (date.AddDays(1).Date >= DateTime.Today ? DateTime.Today : date.AddDays(1).Date) + : date.AddDays(2).Date; + + if (command.WorkshopId < 1) + { + return operation.Failed("خطای سیستمی"); + } + + if (command.RollCallRecords == null || command.RollCallRecords.Count == 0) + return operation.Failed("خطای سیستمی"); - DateTime date = command.DateFa.ToGeorgianDateTime(); - if (date == Tools.GetUndefinedDateTime()) - return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد"); + if (_leaveRepository.HasDailyLeave(command.EmployeeId, command.WorkshopId, date)) + return operation.Failed("در روز مرخصی کارمند نمی توانید حضور غیاب ثبت کنید"); - if (date >= DateTime.Now.Date) + var employeeStatuses = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(command.EmployeeId) + .FirstOrDefault(x => x.WorkshopId == command.WorkshopId)?.Statuses; + + var employeeRollCalls = _rollCallRepository.GetEmployeeRollCallsHistoryAllInDates(command.WorkshopId, command.EmployeeId, twoDaysEarlier, twoDaysLater); + + //if (employeeRollCalls.Any(x => x.StartDate.Value.Date== x.EndDate == null)) + // return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); + + if (command.RollCallRecords.Any(x => string.IsNullOrWhiteSpace(x.StartTime) || string.IsNullOrWhiteSpace(x.EndTime))) + return operation.Failed("ساعات شروع و پایان نمیتوانند خالی باشد"); + + + DateTime day = command.DateFa.ToGeorgianDateTime(); + + + var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(command.WorkshopId); + var employeeSettings = + _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings( + command.WorkshopId, command.EmployeeId)?.WorkshopShiftStatus; + + if (employeeSettings == null && workshopSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular) + { + return operation.Failed("لطفا ابتدا برای این پرسنل گروهبندی انجام دهید "); + } + + if (day == Tools.GetUndefinedDateTime()) + return operation.Failed("خطای سیستمی"); + + List newRollCallDates = new(); + + foreach (var record in command.RollCallRecords) + { + if (record.StartDate.TryToGeorgianDateTime(out var startDateGr) == false || record.EndDate.TryToGeorgianDateTime(out var endDateGr) == false) + return operation.Failed("فرمت تاریخ صحیح نمی باشد"); + + + if (TimeOnly.TryParse(record.StartTime, out var startTimeOnly) == false || TimeOnly.TryParse(record.EndTime, out var endTimeOnly) == false) + return operation.Failed("فرمت ساعت صحیح نمی باشد"); + DateTime startDateTime = startDateGr + startTimeOnly.ToTimeSpan(); + DateTime endDateTime = endDateGr + endTimeOnly.ToTimeSpan(); + + if (startDateTime >= endDateTime) + return operation.Failed("زمان ورود نمی تواند بعد یا مساوی زمان خروج باشد"); + + if (endDateTime.Date >= DateTime.Today) + return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید"); + + var rollCall = new EditRollCall + { + StartDate = startDateTime, + EndDate = endDateTime, + Id = record.RollCallId + }; + newRollCallDates.Add(rollCall); + } + + + + + if (newRollCallDates.Any(x => newRollCallDates.Any(y => x != y && x.EndDate >= y.StartDate && x.StartDate <= y.EndDate))) + return operation.Failed("بازه های وارد شده با هم تداخل دارند"); + + + + + foreach (var activity in newRollCallDates) + { + + //مرخصی روزانه در بالا چک شده است + var leave = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, command.EmployeeId, activity.StartDate.Value, activity.EndDate.Value) + .Where(x => x.PaidLeaveType == "ساعتی"); + if (leave.Any()) + return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد"); + } + + if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate >= y.StartDateGr && x.EndDate <= y.EndDateGr))) + return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); + + + + newRollCallDates.ForEach(x => + { + x.ShiftDate = + _rollCallDomainService.GetEmployeeShiftDateByRollCallStartDate(command.WorkshopId, command.EmployeeId, + x.StartDate!.Value); + }); + + if (newRollCallDates.Any(x => x.ShiftDate.Date != date.Date)) + { + return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید از تاریخ شیفت عقب تر یا جلو تر ببرید"); + } + + + if (new TimeSpan(newRollCallDates.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks)) > TimeSpan.FromHours(26)) { - return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد"); - } - //from new - var twoDaysEarlier = date.AddDays(-2).Date; - var twoDaysLater = date.AddDays(2).Date >= DateTime.Today - ? (date.AddDays(1).Date >= DateTime.Today ? DateTime.Today : date.AddDays(1).Date) - : date.AddDays(2).Date; - //--- - - if (command.WorkshopId < 1) - { - return operation.Failed("خطای سیستمی"); - } - - if (command.RollCallRecords == null || command.RollCallRecords.Count == 0) - return operation.Failed("خطای سیستمی"); - - if (_leaveRepository.HasDailyLeave(command.EmployeeId, command.WorkshopId, date)) - return operation.Failed("در روز مرخصی کارمند نمی توانید حضور غیاب ثبت کنید"); - - var employeeStatuses = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(command.EmployeeId) - .FirstOrDefault(x => x.WorkshopId == command.WorkshopId)?.Statuses; - var employeeRollCalls = _rollCallRepository.GetEmployeeRollCallsHistoryAllInDates(command.WorkshopId, command.EmployeeId, twoDaysEarlier, twoDaysLater); - - //comented from new - //var employeeRollCalls = _rollCallRepository.GetWorkshopEmployeeRollCallsForDate(command.WorkshopId, command.EmployeeId, date); - - //comented from new - //if (employeeRollCalls.Any(x => x.EndDate == null)) - // return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); - - - if (command.RollCallRecords.Any(x => string.IsNullOrWhiteSpace(x.StartTime) || string.IsNullOrWhiteSpace(x.EndTime))) - return operation.Failed("ساعات شروع و پایان نمیتوانند خالی باشد"); - DateTime day = command.DateFa.ToGeorgianDateTime(); - - - var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(command.WorkshopId); - var employeeSettings = - _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings( - command.WorkshopId, command.EmployeeId)?.WorkshopShiftStatus; - - if (employeeSettings == null && workshopSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular) - { - return operation.Failed("لطفا ابتدا برای این پرسنل گروهبندی انجام دهید "); - } - - List<(TimeOnly start, TimeOnly end, long rollCallId)> preprocessedRollCalls = new(); - try - { - preprocessedRollCalls = command.RollCallRecords.Select(x => - { - - if (!TimeOnly.TryParseExact(x.StartTime, "HH:mm", out TimeOnly start)) - throw new Exception(); - if (!TimeOnly.TryParseExact(x.EndTime, "HH:mm", out TimeOnly end)) - throw new Exception(); - return (start, end, x.RollCallId); - - }).ToList(); - } - catch (Exception e) - { - - return operation.Failed("فرمت ساعات ورودی نادرست می باشد"); - } - - List<(DateTime Start, DateTime End, long RollCallId)> result = new(); - - if (employeeSettings == WorkshopShiftStatus.Regular) - { - - TimeOnly offset = - _rollCallDomainService.GetEmployeeOffSetForRegularSettings(command.EmployeeId, command.WorkshopId); - - var startWorkingPeriod = day.Date + offset.ToTimeSpan(); - - if (offset > new TimeOnly(12, 0, 0)) - startWorkingPeriod = startWorkingPeriod.AddDays(-1); - - - foreach (var preprocessedRollCall in preprocessedRollCalls) - { - DateTime startDateTime = startWorkingPeriod.Date.Add(preprocessedRollCall.start.ToTimeSpan()); - - if (preprocessedRollCall.start.ToTimeSpan() < offset.ToTimeSpan()) - { - startDateTime = startDateTime.AddDays(1); - } - - DateTime endDateTime = startDateTime.Date + preprocessedRollCall.end.ToTimeSpan(); - - if (startDateTime > endDateTime) - { - endDateTime = endDateTime.AddDays(1); - } - - if (result.Any(x => endDateTime > x.Start && startDateTime < x.End)) - return operation.Failed("بازه های وارد شده با هم تداخل دارند"); - - result.Add(new(startDateTime, endDateTime, preprocessedRollCall.rollCallId)); - } - - } - else - { - #region RollCallTimes validation and parse to DateTime - - - if (day == Tools.GetUndefinedDateTime()) - return operation.Failed("خطای سیستمی"); - DateTime previousEnd = new DateTime(); - preprocessedRollCalls = preprocessedRollCalls.OrderBy(x => x.start).ToList(); - - - foreach (var item in preprocessedRollCalls) - { - (DateTime Start, DateTime End, long RollCallId) rollCallWithDateTime = - new() - { - Start = new DateTime(DateOnly.FromDateTime(day), item.start), - End = new DateTime(DateOnly.FromDateTime(day), item.end), - RollCallId = item.rollCallId - - }; - - if (previousEnd != new DateTime()) - { - if (rollCallWithDateTime.Start < previousEnd) - { - rollCallWithDateTime.Start = rollCallWithDateTime.Start.AddDays(1); - } - - if (rollCallWithDateTime.Start == previousEnd) - return operation.Failed("ساعت ورود نمی تواند با ساعت خروج حضور غیاب دیگری در آن روز برابر باشد"); - - } - - while (rollCallWithDateTime.Start >= rollCallWithDateTime.End) - { - rollCallWithDateTime.End = rollCallWithDateTime.End.AddDays(1); - } - - result.Add(rollCallWithDateTime); - previousEnd = rollCallWithDateTime.End; - } - - var firstShiftStart = result.OrderBy(x => x.Start).FirstOrDefault().Start; - var lastShiftEnd = result.OrderByDescending(x => x.Start).FirstOrDefault().End; - var lastShiftStart = result.OrderByDescending(x => x.Start).FirstOrDefault().Start; - - if (firstShiftStart.AddDays(1) < lastShiftEnd) - return operation.Failed("بازه زمانی وارد شده نا معتبر است"); - - - if (firstShiftStart.Date != lastShiftStart.Date) - return operation.Failed("شروع رکورد حضور غیاب نمی تواند در روز های بعد از تاریخ تعیین شده باشد"); - - #endregion - } - - if (result.Sum(x => (x.End - x.Start).TotalHours) > 24) - { - return operation.Failed("بازه زمانی نمیتواند بیشتر از 24 ساعت باشد"); - } - - //from new - foreach (var activity in result) - { - - //مرخصی روزانه در بالا چک شده است - var leave = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, command.EmployeeId, activity.Start, activity.End) - .Where(x => x.PaidLeaveType == "ساعتی"); - if (leave.Any()) - return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد"); + return operation.Failed("بازه حضور پرسنل نمی تواند بیشتر از 26 ساعت باشد"); } - if (result.Any(x => - x.Start.Date < date.Date.AddDays(-1) || - x.End.Date > date.Date.AddDays(1))) - { - return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید بیشتر از یک روز از ثبت حضور غیاب عقب تر یا جلو تر ببرید"); - } + if (newRollCallDates.Any(x => employeeRollCalls.Any(y => + y.StartDate.Value.Date != command.DateFa.ToGeorgianDateTime().Date && + x.EndDate >= y.StartDate.Value && x.StartDate <= y.EndDate.Value))) + return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد"); - //مهم - //رول کال روز جاری - #region NewValidation - var currentDayRollCall = employeeRollCalls.FirstOrDefault(x => x.EndDate == null); - if (currentDayRollCall != null && result.Any(x => x.End >= currentDayRollCall.StartDate)) - return operation.Failed("بازه های وارد شده با حضور غیاب جاری تداخل زمانی دارد"); - #endregion + var checkoutViewModels = _checkoutRepository.SimpleSearch(new CheckoutSearchModel() { WorkshopId = command.WorkshopId, EmployeeId = command.EmployeeId }); - if (result.Any(x => employeeRollCalls.Any(y => y.DateGr.Date != command.DateFa.ToGeorgianDateTime().Date && - x.End >= y.StartDate.Value && x.Start <= y.EndDate.Value))) - return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد"); + if (checkoutViewModels.Any(x => x.HasRollCall && x.WorkshopId == command.WorkshopId && x.EmployeeId == command.EmployeeId && + newRollCallDates.Any(y => (y.StartDate.Value.Date >= x.ContractStartGr.Date) + && (y.StartDate.Value.Date <= x.ContractEndGr.Date)))) + return operation.Failed("برای بازه های وارد شده فیش حقوقی ثبت شده است"); - var checkoutViewModels = _checkoutRepository.SimpleSearch(new CheckoutSearchModel() { WorkshopId = command.WorkshopId, EmployeeId = command.EmployeeId }); - if (checkoutViewModels.Any(x => x.HasRollCall && x.WorkshopId == command.WorkshopId && x.EmployeeId == command.EmployeeId && - result.Any(y => (y.Start.Date >= x.ContractStartGr.Date) - && (y.Start.Date <= x.ContractEndGr.Date)))) - return operation.Failed("برای بازه های وارد شده فیش حقوقی ثبت شده است"); - //--- + if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate >= y.StartDateGr && x.EndDate <= y.EndDateGr))) + return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); - if (result == null || !result.All(newRollcall => employeeStatuses.Any(status => newRollcall.Start >= status.StartDateGr && newRollcall.End <= status.EndDateGr))) - return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); + var currentDayRollCall = employeeRollCalls.FirstOrDefault(x => x.EndDate == null); + if (currentDayRollCall != null && newRollCallDates.Any(x => x.EndDate!.Value >= currentDayRollCall.StartDate)) + return operation.Failed("بازه های وارد شده با حضور غیاب جاری تداخل زمانی دارد"); - var name = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId).EmployeeFullName; - var rollCallsAsEntityModels = result.Select(x => new RollCall(command.WorkshopId, command.EmployeeId, name, x.Start, x.End, - Convert.ToInt32(x.Start.ToFarsi().Substring(0, 4)), Convert.ToInt32(x.Start.ToFarsi().Substring(5, 2)), _rollCallDomainService, RollCallModifyType.EditByEmployer)).ToList(); - _rollCallRepository.RemoveEmployeeRollCallsInDate(command.WorkshopId, command.EmployeeId, date); + var name = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId).EmployeeFullName; + var rollCallsAsEntityModels = newRollCallDates.Select(x => new RollCall(command.WorkshopId, command.EmployeeId, name, x.StartDate!.Value, x.EndDate, + Convert.ToInt32(x.StartDate.Value.ToFarsi().Substring(0, 4)), Convert.ToInt32(x.StartDate.ToFarsi().Substring(5, 2)), _rollCallDomainService, RollCallModifyType.EditByEmployer)).ToList(); + _rollCallRepository.RemoveEmployeeRollCallsInDate(command.WorkshopId, command.EmployeeId, date); - _rollCallRepository.AddRange(rollCallsAsEntityModels); - _rollCallRepository.SaveChanges(); - return operation.Succcedded(); - } - public OperationResult ManualEditForUndefined(CreateOrEditEmployeeRollCall command) - { - var operation = new OperationResult(); + _rollCallRepository.AddRange(rollCallsAsEntityModels); + _rollCallRepository.SaveChanges(); + return operation.Succcedded(); + } + public OperationResult ManualEditForUndefined(CreateOrEditEmployeeRollCall command) + { + var operation = new OperationResult(); + DateTime date = command.DateFa.ToGeorgianDateTime(); + if (date == Tools.GetUndefinedDateTime()) + return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد"); - DateTime date = command.DateFa.ToGeorgianDateTime(); - if (date == Tools.GetUndefinedDateTime()) - return operation.Failed("فرمت تاریخ وارد شده صحیح نمی باشد"); + if (date >= DateTime.Now.Date) + { + return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد"); + } - if (date >= DateTime.Now.Date) - { - return operation.Failed("امکان اضافه کردن حضور غیاب برای روز جاری و روز های آینده وجود ندارد"); - } - //from new - var twoDaysEarlier = date.AddDays(-2).Date; - var twoDaysLater = date.AddDays(2).Date >= DateTime.Today - ? (date.AddDays(1).Date >= DateTime.Today ? DateTime.Today : date.AddDays(1).Date) - : date.AddDays(2).Date; - //--- + var twoDaysEarlier = date.AddDays(-2).Date; + var twoDaysLater = date.AddDays(2).Date >= DateTime.Today + ? (date.AddDays(1).Date >= DateTime.Today ? DateTime.Today : date.AddDays(1).Date) + : date.AddDays(2).Date; - if (command.WorkshopId < 1) - { - return operation.Failed("خطای سیستمی"); - } + if (command.WorkshopId < 1) + { + return operation.Failed("خطای سیستمی"); + } - if (command.RollCallRecords == null || command.RollCallRecords.Count == 0) - return operation.Failed("خطای سیستمی"); + if (command.RollCallRecords == null || command.RollCallRecords.Count == 0) + return operation.Failed("خطای سیستمی"); - if (_leaveRepository.HasDailyLeave(command.EmployeeId, command.WorkshopId, date)) - return operation.Failed("در روز مرخصی کارمند نمی توانید حضور غیاب ثبت کنید"); - var employeeStatuses = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(command.EmployeeId) - .FirstOrDefault(x => x.WorkshopId == command.WorkshopId)?.Statuses; - var employeeRollCalls = _rollCallRepository.GetEmployeeRollCallsHistoryAllInDates(command.WorkshopId, command.EmployeeId, twoDaysEarlier, twoDaysLater); + if (_leaveRepository.HasDailyLeave(command.EmployeeId, command.WorkshopId, date)) + return operation.Failed("در روز مرخصی کارمند نمی توانید حضور غیاب ثبت کنید"); - //comented from new - //var employeeRollCalls = _rollCallRepository.GetWorkshopEmployeeRollCallsForDate(command.WorkshopId, command.EmployeeId, date); + var employeeStatuses = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(command.EmployeeId) + .FirstOrDefault(x => x.WorkshopId == command.WorkshopId)?.Statuses; - //comented from new - //if (employeeRollCalls.Any(x => x.EndDate == null)) - // return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); + var employeeRollCalls = _rollCallRepository.GetEmployeeRollCallsHistoryAllInDates(command.WorkshopId, command.EmployeeId, twoDaysEarlier, twoDaysLater); + //if (employeeRollCalls.Any(x => x.StartDate.Value.Date== x.EndDate == null)) + // return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); - if (command.RollCallRecords.Any(x => string.IsNullOrWhiteSpace(x.StartTime) || string.IsNullOrWhiteSpace(x.EndTime))) - return operation.Failed("ساعات شروع و پایان نمیتوانند خالی باشد"); - DateTime day = command.DateFa.ToGeorgianDateTime(); + if (command.RollCallRecords.Any(x => string.IsNullOrWhiteSpace(x.StartTime) || string.IsNullOrWhiteSpace(x.EndTime))) + return operation.Failed("ساعات شروع و پایان نمیتوانند خالی باشد"); - var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(command.WorkshopId); - var employeeSettings = - _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings( - command.WorkshopId, command.EmployeeId)?.WorkshopShiftStatus; + DateTime day = command.DateFa.ToGeorgianDateTime(); - if (employeeSettings == null && workshopSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular) - { - return operation.Failed("لطفا ابتدا برای این پرسنل گروهبندی انجام دهید "); - } - List<(TimeOnly start, TimeOnly end, long rollCallId)> preprocessedRollCalls = new(); - try - { - preprocessedRollCalls = command.RollCallRecords.Select(x => - { + var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(command.WorkshopId); + var employeeSettings = + _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings( + command.WorkshopId, command.EmployeeId)?.WorkshopShiftStatus; - if (!TimeOnly.TryParseExact(x.StartTime, "HH:mm", out TimeOnly start)) - throw new Exception(); - if (!TimeOnly.TryParseExact(x.EndTime, "HH:mm", out TimeOnly end)) - throw new Exception(); - return (start, end, x.RollCallId); + if (employeeSettings == null && workshopSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular) + { + return operation.Failed("لطفا ابتدا برای این پرسنل گروهبندی انجام دهید "); + } - }).ToList(); - } - catch (Exception e) - { + if (day == Tools.GetUndefinedDateTime()) + return operation.Failed("خطای سیستمی"); - return operation.Failed("فرمت ساعات ورودی نادرست می باشد"); - } + List newRollCallDates = new(); - List<(DateTime Start, DateTime End, long RollCallId)> result = new(); + foreach (var record in command.RollCallRecords) + { + if (record.StartDate.TryToGeorgianDateTime(out var startDateGr) == false || record.EndDate.TryToGeorgianDateTime(out var endDateGr) == false) + return operation.Failed("فرمت تاریخ صحیح نمی باشد"); - if (workshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular || employeeSettings == WorkshopShiftStatus.Regular) - { - TimeOnly offset = - _rollCallDomainService.GetEmployeeOffSetForRegularSettings(command.EmployeeId, command.WorkshopId); + if (TimeOnly.TryParse(record.StartTime, out var startTimeOnly) == false || TimeOnly.TryParse(record.EndTime, out var endTimeOnly) == false) + return operation.Failed("فرمت ساعت صحیح نمی باشد"); + DateTime startDateTime = startDateGr + startTimeOnly.ToTimeSpan(); + DateTime endDateTime = endDateGr + endTimeOnly.ToTimeSpan(); - var startWorkingPeriod = day.Date + offset.ToTimeSpan(); + if (startDateTime >= endDateTime) + return operation.Failed("زمان ورود نمی تواند بعد یا مساوی زمان خروج باشد"); - if (offset > new TimeOnly(12, 0, 0)) - startWorkingPeriod = startWorkingPeriod.AddDays(-1); - foreach (var preprocessedRollCall in preprocessedRollCalls) - { - DateTime startDateTime = startWorkingPeriod.Date.Add(preprocessedRollCall.start.ToTimeSpan()); + if (endDateTime.Date >= DateTime.Today) + return operation.Failed("نمی توانید برای روز جاری یا روز های آینده حضور غیاب ثبت کنید"); - if (preprocessedRollCall.start.ToTimeSpan() < offset.ToTimeSpan()) - { - startDateTime = startDateTime.AddDays(1); - } + var rollCall = new EditRollCall + { + StartDate = startDateTime, + EndDate = endDateTime, + Id = record.RollCallId, + }; + newRollCallDates.Add(rollCall); + } - DateTime endDateTime = startDateTime.Date + preprocessedRollCall.end.ToTimeSpan(); + newRollCallDates.ForEach(x => + { - if (startDateTime > endDateTime) - { - endDateTime = endDateTime.AddDays(1); - } + }); + if (newRollCallDates.Any(x => newRollCallDates.Any(y => x != y && x.EndDate >= y.StartDate && x.StartDate <= y.EndDate))) + return operation.Failed("بازه های وارد شده با هم تداخل دارند"); - if (result.Any(x => endDateTime > x.Start && startDateTime < x.End)) - return operation.Failed("بازه های وارد شده با هم تداخل دارند"); - result.Add(new(startDateTime, endDateTime, preprocessedRollCall.rollCallId)); - } - } - else - { - #region RollCallTimes validation and parse to DateTime + foreach (var activity in newRollCallDates) + { - if (day == Tools.GetUndefinedDateTime()) - return operation.Failed("خطای سیستمی"); - DateTime previousEnd = new DateTime(); - preprocessedRollCalls = preprocessedRollCalls.OrderBy(x => x.start).ToList(); + //مرخصی روزانه در بالا چک شده است + var leave = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, command.EmployeeId, activity.StartDate.Value, activity.EndDate.Value) + .Where(x => x.PaidLeaveType == "ساعتی"); + if (leave.Any()) + return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد"); + } + if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate >= y.StartDateGr && x.EndDate <= y.EndDateGr))) + return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); - foreach (var item in preprocessedRollCalls) - { - (DateTime Start, DateTime End, long RollCallId) rollCallWithDateTime = - new() - { - Start = new DateTime(DateOnly.FromDateTime(day), item.start), - End = new DateTime(DateOnly.FromDateTime(day), item.end), - RollCallId = item.rollCallId - }; + newRollCallDates.ForEach(x => + { + x.ShiftDate = + _rollCallDomainService.GetEmployeeShiftDateByRollCallStartDate(command.WorkshopId, command.EmployeeId, + x.StartDate!.Value); + }); + if (newRollCallDates.Any(x => x.ShiftDate.Date != date.Date)) + { + return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید از تاریخ شیفت عقب تر یا جلو تر ببرید"); + } + if (new TimeSpan(newRollCallDates.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks)) > TimeSpan.FromHours(26)) + { + return operation.Failed("بازه حضور پرسنل نمی تواند بیشتر از 26 ساعت باشد"); + } - if (previousEnd != new DateTime()) - { - if (rollCallWithDateTime.Start < previousEnd) - { - rollCallWithDateTime.Start = rollCallWithDateTime.Start.AddDays(1); - } + if (newRollCallDates.Any(x => employeeRollCalls.Any(y => + y.StartDate.Value.Date != command.DateFa.ToGeorgianDateTime().Date && + x.EndDate >= y.StartDate.Value && x.StartDate <= y.EndDate.Value))) + return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد"); - if (rollCallWithDateTime.Start == previousEnd) - return operation.Failed("ساعت ورود نمی تواند با ساعت خروج حضور غیاب دیگری در آن روز برابر باشد"); - } + var checkoutViewModels = _checkoutRepository.SimpleSearch(new CheckoutSearchModel() { WorkshopId = command.WorkshopId, EmployeeId = command.EmployeeId }); - while (rollCallWithDateTime.Start >= rollCallWithDateTime.End) - { - rollCallWithDateTime.End = rollCallWithDateTime.End.AddDays(1); - } + if (checkoutViewModels.Any(x => x.HasRollCall && x.WorkshopId == command.WorkshopId && x.EmployeeId == command.EmployeeId && + newRollCallDates.Any(y => (y.StartDate.Value.Date >= x.ContractStartGr.Date) + && (y.StartDate.Value.Date <= x.ContractEndGr.Date)))) + return operation.Failed("برای بازه های وارد شده فیش حقوقی ثبت شده است"); - result.Add(rollCallWithDateTime); - previousEnd = rollCallWithDateTime.End; - } + if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate >= y.StartDateGr && x.EndDate <= y.EndDateGr))) + return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); - var firstShiftStart = result.OrderBy(x => x.Start).FirstOrDefault().Start; - var lastShiftEnd = result.OrderByDescending(x => x.Start).FirstOrDefault().End; - var lastShiftStart = result.OrderByDescending(x => x.Start).FirstOrDefault().Start; + var currentDayRollCall = employeeRollCalls.FirstOrDefault(x => x.EndDate == null); - if (firstShiftStart.AddDays(1) < lastShiftEnd) - return operation.Failed("بازه زمانی وارد شده نا معتبر است"); + if (currentDayRollCall != null && newRollCallDates.Any(x => x.EndDate!.Value >= currentDayRollCall.StartDate)) + return operation.Failed("بازه های وارد شده با حضور غیاب جاری تداخل زمانی دارد"); - if (firstShiftStart.Date != lastShiftStart.Date) - return operation.Failed("شروع رکورد حضور غیاب نمی تواند در روز های بعد از تاریخ تعیین شده باشد"); + var name = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId).EmployeeFullName; + var rollCallsAsEntityModels = newRollCallDates.Select(x => new RollCall(command.WorkshopId, command.EmployeeId, name, x.StartDate!.Value, x.EndDate, + Convert.ToInt32(x.StartDate.Value.ToFarsi().Substring(0, 4)), Convert.ToInt32(x.StartDate.ToFarsi().Substring(5, 2)), _rollCallDomainService, RollCallModifyType.EditByEmployer)).ToList(); + _rollCallRepository.RemoveEmployeeRollCallsWithUndefinedInDate(command.WorkshopId, command.EmployeeId, date); - #endregion - } - if (result.Sum(x => (x.End - x.Start).TotalHours) > 24) - { - return operation.Failed("بازه زمانی نمیتواند بیشتر از 24 ساعت باشد"); - } + _rollCallRepository.AddRange(rollCallsAsEntityModels); + _rollCallRepository.SaveChanges(); + return operation.Succcedded(); + } + #endregion - //from new - foreach (var activity in result) - { - - //مرخصی روزانه در بالا چک شده است - var leave = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(command.WorkshopId, command.EmployeeId, activity.Start, activity.End) - .Where(x => x.PaidLeaveType == "ساعتی"); - if (leave.Any()) - return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد"); - } - - - if (result.Any(x => - x.Start.Date < date.Date.AddDays(-1) || - x.End.Date > date.Date.AddDays(1))) - { - return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید بیشتر از یک روز از ثبت حضور غیاب عقب تر یا جلو تر ببرید"); - } - - //مهم - //رول کال روز جاری - #region NewValidation - var currentDayRollCall = employeeRollCalls.FirstOrDefault(x => x.EndDate == null); - - if (currentDayRollCall != null && result.Any(x => x.End >= currentDayRollCall.StartDate)) - return operation.Failed("بازه های وارد شده با حضور غیاب جاری تداخل زمانی دارد"); - #endregion - - - - if (result.Any(x => employeeRollCalls.Any(y => y.DateGr.Date != command.DateFa.ToGeorgianDateTime().Date && - x.End >= y.StartDate.Value && x.Start <= y.EndDate.Value))) - - return operation.Failed("بازه های وارد شده با حضور غیاب های مربوط به روز های قبل و بعد تداخل زمانی دارد"); - - var checkoutViewModels = _checkoutRepository.SimpleSearch(new CheckoutSearchModel() { WorkshopId = command.WorkshopId, EmployeeId = command.EmployeeId }); - - if (checkoutViewModels.Any(x => x.HasRollCall && x.WorkshopId == command.WorkshopId && x.EmployeeId == command.EmployeeId && - result.Any(y => (y.Start.Date >= x.ContractStartGr.Date) - && (y.Start.Date <= x.ContractEndGr.Date)))) - return operation.Failed("برای بازه های وارد شده فیش حقوقی ثبت شده است"); - //--- - - - if (result == null || !result.All(x => employeeStatuses.Any(y => x.Start >= y.StartDateGr || x.End <= y.EndDateGr))) - return operation.Failed("کارمند در بازه وارد شده غیر فعال است"); - - - var name = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId).EmployeeFullName; - var rollCallsAsEntityModels = result.Select(x => new RollCall(command.WorkshopId, command.EmployeeId, name, x.Start, x.End, - Convert.ToInt32(x.Start.ToFarsi().Substring(0, 4)), Convert.ToInt32(x.Start.ToFarsi().Substring(5, 2)), _rollCallDomainService, RollCallModifyType.EditByEmployer)).ToList(); - _rollCallRepository.RemoveEmployeeRollCallsWithUndefinedInDate(command.WorkshopId, command.EmployeeId, date); - - - _rollCallRepository.AddRange(rollCallsAsEntityModels); - _rollCallRepository.SaveChanges(); - return operation.Succcedded(); - } - - #endregion - - public List GetWorkshopEmployeeRollCallsForDate(long workshopId, long employeeId, string dateFa) + public List GetWorkshopEmployeeRollCallsForDate(long workshopId, long employeeId, string dateFa) { DateTime date = Tools.ToGeorgianDateTime(dateFa); if (date == Tools.GetUndefinedDateTime()) diff --git a/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml b/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml index a5b3c1a7..8a30cba1 100644 --- a/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml @@ -185,6 +185,13 @@ حضورغیاب +
  • + + + + + بانک ها +
  • diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Bank/CreateBankModal.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/CreateBankModal.cshtml new file mode 100644 index 00000000..891ff654 --- /dev/null +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/CreateBankModal.cshtml @@ -0,0 +1,60 @@ +@model CompanyManagment.App.Contracts.Bank.CreateBank + +@{ + string adminVersion = _0_Framework.Application.Version.AdminVersion; + + +} + +
    + +
    + + + + \ No newline at end of file diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Bank/EditBankModal.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/EditBankModal.cshtml new file mode 100644 index 00000000..8921d4b5 --- /dev/null +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/EditBankModal.cshtml @@ -0,0 +1,63 @@ +@model CompanyManagment.App.Contracts.Bank.EditBank + +@{ + string adminVersion = _0_Framework.Application.Version.AdminVersion; + + +} + +
    + + + +
    + + + + diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Bank/Index.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/Index.cshtml new file mode 100644 index 00000000..c7085c68 --- /dev/null +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/Index.cshtml @@ -0,0 +1,177 @@ +@page +@model ServiceHost.Areas.AdminNew.Pages.Company.Bank.IndexModel + +@{ + string adminVersion = _0_Framework.Application.Version.AdminVersion; + ViewData["Title"] = " - " + "لیست بانک ها"; + int index = 1; + int i = 0; +} + +@section Styles { + + + + + + + + + + + + +} + + + +
    +
    +
    + +
    +

    لیست بانک ها

    +
    +
    +
    +
    + + + + + +
    +
    + +
    + + +
    + + +
    + لیست بانک ها +
    + +
    +
    +
    + +
    +
    + +
    +
    ردیف
    +
    نام بانک
    +
    عکس
    +
    عملیات
    +
    + +
    +
    + @foreach (var item in Model.BanksList) + { +
    +
    + +
    +
    +
    @item.BankName
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
    + index++; + } +
    + +
    +
    + +
    + +
    +
    + + + + + +@section Script { + + + + + + + + +} \ No newline at end of file diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Bank/Index.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/Index.cshtml.cs new file mode 100644 index 00000000..945e1e60 --- /dev/null +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Bank/Index.cshtml.cs @@ -0,0 +1,93 @@ +using _0_Framework.Application; + +using CompanyManagment.App.Contracts.Bank; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace ServiceHost.Areas.AdminNew.Pages.Company.Bank +{ + [Authorize] + public class IndexModel : PageModel + { + private readonly IBankApplication _bankApplication; + private readonly IWebHostEnvironment _hostEnvironment; + + public IndexModel(IBankApplication bankApplication, IWebHostEnvironment hostEnvironment) + { + _bankApplication = bankApplication; + _hostEnvironment = hostEnvironment; + } + + public List BanksList; + + public void OnGet() + { + BanksList = _bankApplication.Search(""); + } + + public IActionResult OnGetCreate() + { + var command = new CreateBank(); + return Partial("CreateBankModal", command); + } + + public IActionResult OnPostCreate(CreateBank command) + { + var result = _bankApplication.Create(command); + return new JsonResult(new + { + success = result.IsSuccedded, + message = result.Message + }); + } + + public IActionResult OnGetEdit(long id) + { + var entity = _bankApplication.GetBy(id); + var command = new EditBank() + { + Id = entity.Id, + BankName = entity.BankName + }; + return Partial("EditBankModal", command); + } + + public IActionResult OnPostEdit(EditBank command) + { + var result = _bankApplication.Edit(command); + return new JsonResult(new + { + success = result.IsSuccedded, + message = result.Message + }); + } + + public IActionResult OnPostDelete(long id) + { + var result = _bankApplication.Remove(id); + return new JsonResult(new + { + success = result.IsSuccedded, + message = result.Message + }); + } + + public IActionResult OnGetShowPicture(string filePath) + { + if (string.IsNullOrEmpty(filePath)) + return NotFound(); + + var path = Path.Combine(_hostEnvironment.ContentRootPath, filePath); + + if (!System.IO.File.Exists(path)) + return NotFound(); + + + var contentType = Tools.GetContentTypeImage(Path.GetExtension(path)); + return PhysicalFile(path, contentType); + } + + + } +} diff --git a/ServiceHost/Areas/AdminNew/Pages/Shared/_Menu.cshtml b/ServiceHost/Areas/AdminNew/Pages/Shared/_Menu.cshtml index 30e6132b..838f925e 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Shared/_Menu.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Shared/_Menu.cshtml @@ -253,6 +253,13 @@ حضورغیاب
  • +
  • + + + + + بانک ها +
  • diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/PrintOneMobile.cshtml b/ServiceHost/Areas/Client/Pages/Company/Employees/PrintOneMobile.cshtml index b639b5e6..3524f0cf 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Employees/PrintOneMobile.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/PrintOneMobile.cshtml @@ -379,7 +379,6 @@ var close = document.getElementById("closingOnePrint"); function printElement(elem) { - debugger; var domClone = elem.cloneNode(true); diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml b/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml index c13b2190..0519eab5 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml @@ -116,7 +116,7 @@ - + diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml.cs index c1839776..c560bd2e 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/CaseHistory.cshtml.cs @@ -1,4 +1,5 @@ -using _0_Framework.Application; + +using _0_Framework.Application; using _0_Framework.Domain.CustomizeCheckoutShared.Enums; using CompanyManagment.App.Contracts.CustomizeWorkshopSettings; using CompanyManagment.App.Contracts.Leave; @@ -19,6 +20,7 @@ using Microsoft.AspNetCore.Http.HttpResults; using static System.Runtime.InteropServices.JavaScript.JSType; using Company.Domain.empolyerAgg; + namespace ServiceHost.Areas.Client.Pages.Company.RollCall { [Authorize] @@ -65,11 +67,11 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall public override void OnPageHandlerExecuting(PageHandlerExecutingContext context) { - if (context.HttpContext.Request.Query["handler"].ToString().ToLower().Trim() == "edit") - { + //if (context.HttpContext.Request.Query["handler"].ToString().ToLower().Trim() == "edit") + //{ - } - else + //} + //else if (IrregularWorkshopHaveGroupedAllPersonnelValidation(_workshopId) == false) context.HttpContext.Response.Redirect("./grouping"); @@ -78,16 +80,16 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall public bool IrregularWorkshopHaveGroupedAllPersonnelValidation(long workshopId) { - //var isWorkshopIrregular = _customizeWorkshopSettingsApplication - // .GetWorkshopSettingsDetails(workshopId).WorkshopShiftStatus == WorkshopShiftStatus.Irregular; + //var isWorkshopIrregular = _customizeWorkshopSettingsApplication + // .GetWorkshopSettingsDetails(workshopId).WorkshopShiftStatus == WorkshopShiftStatus.Irregular; - //if (isWorkshopIrregular == false) - // return true; - var employeesWithoutGroup = _customizeWorkshopSettingsApplication.HasAnyEmployeeWithoutGroup(workshopId); - if (employeesWithoutGroup) - return false; - return true; - } + //if (isWorkshopIrregular == false) + // return true; + var employeesWithoutGroup = _customizeWorkshopSettingsApplication.HasAnyEmployeeWithoutGroup(workshopId); + if (employeesWithoutGroup) + return false; + return true; + } public IActionResult OnGet() { @@ -212,14 +214,19 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall var result = _rollCallApplication.GetWorkshopEmployeeRollCallsForDate(_workshopId, employeeId, date); //var dates = _rollCallApplication.GetEditableDatesForManualEdit(date.ToGeorgianDateTime()); var name = _rollCallEmployeeApplication.GetByEmployeeIdAndWorkshopId(employeeId, _workshopId); - var command = new EmployeeRollCallsViewModel() + + var total = new TimeSpan(result.Sum(x => + (x.EndDate!.Value.Ticks - x.StartDate!.Value.Ticks))); + + var command = new EmployeeRollCallsViewModel() { EmployeeFullName = name.EmployeeFullName, EmployeeId = employeeId, DateFa = date, //EditableDates = dates, - RollCalls = result - }; + RollCalls = result, + TotalRollCallsDuration = total.ToFarsiHoursAndMinutes("-") + }; return Partial("ModalEditRollCall", command); } @@ -418,5 +425,35 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall $"{workshopFullName} - {caseHistoryRollCallExcelForOneDay.DayOfWeekFa}،{caseHistoryRollCallExcelForOneDay.DateFa}.xlsx"); } - } + + public IActionResult OnPostCalculateRollCallsTotalDuration(List rollCalls) + { + var withoutNull = rollCalls.Where(x => x.StartDateFa != null && x.StartTime !=null && + x.EndDateFa != null && x.EndTime!=null); + + var ticks = withoutNull.Sum(x => + ((x.EndDateFa.ToGeorgianDateTime().Ticks + TimeOnly.Parse(x.EndTime).Ticks) - (x.StartDateFa.ToGeorgianDateTime().Ticks + TimeOnly.Parse(x.StartTime).Ticks))); + + var timeSpan = new TimeSpan(ticks); + + return new JsonResult(new + { + result = timeSpan.ToFarsiHoursAndMinutes("-") + }); + + + } + + public IActionResult OnGetLeaveCreate(CreateLeave command) + { + return Partial("LeaveCreate", command); + } + } + public class CalculateRollCallsTotalDuration + { + public string StartDateFa { get; set; } + public string StartTime { get; set; } + public string EndDateFa { get; set; } + public string EndTime { get; set; } + } } diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml b/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml index b8190976..ca5a2afd 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml @@ -13,6 +13,7 @@ + }
    @@ -42,7 +43,43 @@
    - + +
    + + +
    @if (Model.GroupedAllEmployees==false) @@ -90,7 +127,8 @@
    ردیف
    نام پرسنل
    -
    ساعت کاری
    +
    نوع ساعت کاری
    +
    ساعت کاری
    عملیات
    @@ -117,6 +155,7 @@ var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val(); var loadWorkshopSettingsDataAjax = `@Url.Page("./Grouping", "WorkshopSettingsDataAjax")`; var loadEmployeesGroupAjax = `@Url.Page("./Grouping", "EmployeesGroupAjax")`; + var loadEmployeesGroupSettingsByEmployeeIdAjax = `@Url.Page("./Grouping", "EmployeesGroupSettingsByEmployeeId")`; var removeGroupAjax = `@Url.Page("./Grouping", "DeleteGroup")`; var removeEmployeeFromGroupAjax = `@Url.Page("./Grouping", "RemoveEmployee")`; var workshopSettingId = Number((@Model.RollCallWorkshopSettings.Id)); diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs index 464db1d6..004626e2 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs @@ -12,6 +12,8 @@ using Microsoft.AspNetCore.Mvc.Formatters; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; using _0_Framework.Domain.CustomizeCheckoutShared.Enums; using _0_Framework.Infrastructure; +using CompanyManagment.App.Contracts.RollCallEmployee; +using Company.Domain.EmployeeAgg; namespace ServiceHost.Areas.Client.Pages.Company.RollCall { @@ -22,6 +24,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall private readonly IPasswordHasher _passwordHasher; private readonly IWorkshopApplication _workshopApplication; private readonly IEmployeeApplication _employeeApplication; + private readonly IRollCallEmployeeApplication _rollCallEmployeeApplication; private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication; private readonly IHttpContextAccessor _contextAccessor; private readonly IAuthHelper _authHelper; @@ -29,8 +32,9 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall private readonly long _workshopId; public string WorkshopFullName; public CustomizeWorkshopSettingsViewModel RollCallWorkshopSettings; + public List RollCallEmployeeList; - public GroupingModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, ICustomizeWorkshopSettingsApplication rollCallWorkshopSettingsApplication, IEmployeeApplication employeeApplication, IHttpContextAccessor contextAccessor, IAuthHelper authHelper) + public GroupingModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, ICustomizeWorkshopSettingsApplication rollCallWorkshopSettingsApplication, IEmployeeApplication employeeApplication, IHttpContextAccessor contextAccessor, IAuthHelper authHelper, IRollCallEmployeeApplication rollCallEmployeeApplication) { _passwordHasher = passwordHasher; _workshopApplication = workshopApplication; @@ -38,30 +42,33 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall _employeeApplication = employeeApplication; _contextAccessor = contextAccessor; _authHelper = authHelper; + _rollCallEmployeeApplication = rollCallEmployeeApplication; var workshopHash = _contextAccessor.HttpContext?.User.FindFirstValue("WorkshopSlug"); _workshopId = _passwordHasher.SlugDecrypt(workshopHash); if (_workshopId < 1) throw new InvalidDataException("اختلال در کارگاه"); - - } + public bool IrregularWorkshopHaveGroupedAllPersonnelValidation(long workshopId) { - //var isWorkshopIrregular = _customizeWorkshopSettingsApplication - // .GetWorkshopSettingsDetails(workshopId).WorkshopShiftStatus == WorkshopShiftStatus.Irregular; + //var isWorkshopIrregular = _customizeWorkshopSettingsApplication + // .GetWorkshopSettingsDetails(workshopId).WorkshopShiftStatus == WorkshopShiftStatus.Irregular; - //if (isWorkshopIrregular == false) - // return true; - var employeesWithoutGroup = _customizeWorkshopSettingsApplication.HasAnyEmployeeWithoutGroup(workshopId); - if (employeesWithoutGroup) - return false; - return true; - } + //if (isWorkshopIrregular == false) + // return true; + var employeesWithoutGroup = _customizeWorkshopSettingsApplication.HasAnyEmployeeWithoutGroup(workshopId); + if (employeesWithoutGroup) + return false; + return true; + } public IActionResult OnGet() { //if (_workshopId != 11) // return Redirect("/Client/Company/RollCall"); + + RollCallEmployeeList = _rollCallEmployeeApplication.GetEmployeeRollCalls(_workshopId); + var account = _authHelper.CurrentAccountInfo(); GroupedAllEmployees = IrregularWorkshopHaveGroupedAllPersonnelValidation(_workshopId); @@ -99,7 +106,17 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall }); } - public IActionResult OnGetCreateGroup(long workshopSettingId) + public IActionResult OnGetEmployeesGroupSettingsByEmployeeId(long employeeId) + { + var result = _customizeWorkshopSettingsApplication.GetEmployeesGroupSettingsByEmployeeId(employeeId, _workshopId); + return new JsonResult(new + { + success = true, + data = result + }); + } + + public IActionResult OnGetCreateGroup(long workshopSettingId) { var command = new CreateCustomizeWorkshopGroupSettings { diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/LeaveCreate.cshtml b/ServiceHost/Areas/Client/Pages/Company/RollCall/LeaveCreate.cshtml new file mode 100644 index 00000000..1038bcec --- /dev/null +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/LeaveCreate.cshtml @@ -0,0 +1,192 @@ +@model CompanyManagment.App.Contracts.Leave.CreateLeave + +@{ + string clientVersion = _0_Framework.Application.Version.StyleVersion; + + +} + + +
    + + + +
    + + + + + + + + \ No newline at end of file diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalAddRollCall.cshtml b/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalAddRollCall.cshtml index 5c2185ca..643ca05f 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalAddRollCall.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalAddRollCall.cshtml @@ -11,8 +11,12 @@ border: 1px solid #eb3434 !important; } + .modalRollCallWidth { + max-width: 670px; + } + .modal-dialog, .modal-content { - height: 420px; + height: 510px; } .timeWorkTitle { @@ -21,6 +25,7 @@ font-size: 12px; margin: auto 0 auto 6px; white-space: nowrap; + width: 100px; } .groupBox { @@ -31,18 +36,19 @@ margin: 6px 3px; } - .groupBox .form-control { - background-color: #ffffff; - } + .groupBox .form-control { + background-color: #ffffff; + padding: .375rem .35rem; + } - .groupBox .form-control::placeholder { - color: #bfbfbf; - opacity: 1; /* Firefox */ - } + .groupBox .form-control::placeholder { + color: #bfbfbf; + opacity: 1; /* Firefox */ + } - .groupBox .form-control::-ms-input-placeholder { /* Edge 12-18 */ - color: #bfbfbf; - } + .groupBox .form-control::-ms-input-placeholder { /* Edge 12-18 */ + color: #bfbfbf; + } .btnAddTimeWork { display: flex; @@ -56,15 +62,20 @@ padding: 4px 8px; } + .removeBtn { + width: 42px + } + .btnRemoveTimeWork { display: flex; align-items: center; - justify-content: center; + justify-content: space-between; background-color: #F87171; border-radius: 7px; - padding: 3px; - width: 30px; - height: 30px; + /* padding: 3px; */ + width: 24px; + height: 24px; + font-size: 12px; } .ShowMessage { @@ -81,9 +92,74 @@ } .heightControll { - height: 190px; + height: 240px; overflow-y: scroll; } + + + .allSumtxt { + font-size: 13px; + font-weight: 500; + color: #7f7f7f; + position: absolute; + top: 7px; + left: 6px; + } + + .startDatetxt { + font-size: 12px; + font-weight: 500; + color: #5C5C5C; + background-color: #ECFCCA; + border: 1px solid #AAE729; + width: 140px; + padding: 5px; + text-align: center; + border-radius: 6px; + } + + .endDatetxt { + font-size: 12px; + font-weight: 500; + color: #5C5C5C; + background-color: #ECFCCA; + border: 1px solid #AAE729; + width: 140px; + padding: 4px 5px; + text-align: center; + border-radius: 6px; + } + + .cusDateTime { + width: 66px; + } + + @@media (max-width: 768px) { + .cusDateTime { + width: 100%; + } + + .mainDate { + width: 70px; + } + + .startDatetxt { + font-size: 10px; + font-weight: 800; + width: 70px; + } + + .endDatetxt { + font-size: 10px; + font-weight: 800; + width: 70px; + } + + .form-control-date { + font-size: 10px; + font-weight: 700; + } + } } @@ -101,38 +177,50 @@
    - +
    + + +
    -
    - +
    + +
    + +
    +
    -
    -
    +
    +
    نوبت اول
    -
    -
    -
    از
    - -
    +
    + - + + +
    -
    -
    الی
    - -
    +
    + الی +
    -
    +
    + + + - +
    + +
    +
    -
    @@ -186,7 +274,9 @@ var antiForgeryToken = $('@Html.AntiForgeryToken()').val(); var saveRollCallWorkTimeAjax = `@Url.Page("./CaseHistory", "ManualCreateOrEdit")`; var employeeListAjax = `@Url.Page("./CaseHistory", "EmployeeList")`; - var checkEmployeeData = `@Url.Page("./CaseHistory", "CheckEmployeeData")`; + var dayOfWeekDataUrl = `@Url.Page("./CaseHistory", "DayOfWeek")`; + var totalWorkingDataUrl = `@Url.Page("./CaseHistory", "TotalWorking")`; + var calculateRollCallsTotalDurationDataUrl = `@Url.Page("./CaseHistory", "CalculateRollCallsTotalDuration")`; \ No newline at end of file diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditRollCall.cshtml b/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditRollCall.cshtml index 4b3e312f..f7be708f 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditRollCall.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditRollCall.cshtml @@ -17,11 +17,11 @@ } .modalRollCallWidth { - max-width: 550px; + max-width: 670px; } .modal-dialog, .modal-content { - height: 420px; + height: 510px; } .timeWorkTitle { @@ -30,6 +30,7 @@ font-size: 12px; margin: auto 0 auto 6px; white-space: nowrap; + width: 100px; } .groupBox { @@ -40,18 +41,19 @@ margin: 6px 3px; } - .groupBox .form-control { - background-color: #ffffff; - } + .groupBox .form-control { + background-color: #ffffff; + padding: .375rem .35rem; + } - .groupBox .form-control::placeholder { - color: #bfbfbf; - opacity: 1; /* Firefox */ - } + .groupBox .form-control::placeholder { + color: #bfbfbf; + opacity: 1; /* Firefox */ + } - .groupBox .form-control::-ms-input-placeholder { /* Edge 12-18 */ - color: #bfbfbf; - } + .groupBox .form-control::-ms-input-placeholder { /* Edge 12-18 */ + color: #bfbfbf; + } .btnAddTimeWork { display: flex; @@ -65,15 +67,20 @@ padding: 4px 8px; } + .removeBtn { + width: 42px + } + .btnRemoveTimeWork { display: flex; align-items: center; - justify-content: center; + justify-content: space-between; background-color: #F87171; border-radius: 7px; - padding: 3px; - width: 30px; - height: 30px; + /* padding: 3px; */ + width: 24px; + height: 24px; + font-size: 12px; } .ShowMessage { @@ -90,9 +97,129 @@ } .heightControll { - height: 190px; + height: 240px; overflow-y: scroll; } + + .irregularText { + color: #5C5C5C; + font-size: 12px; + } + + .irregularBox { + position: relative; + width: 100%; + overflow: hidden; + background-color: #F5F5F5; + border-radius: 9px; + border: 1px solid #E7E7E7; + padding: 10px; + } + + .irrregularContent { + flex-shrink: 0; + width: 100%; + height: 100%; + transform: translateX(100%); + transition: transform 1s ease-in-out, opacity 1s ease-in-out; + opacity: 0; + position: absolute; + top: 0; + left: 0; + } + + .irrregularContent.active { + transform: translateX(0); + opacity: 1; + position: relative; + z-index: 1; + } + + .navButton { + background-color: transparent; + color: white; + border: none; + padding: 10px 20px; + cursor: pointer; + font-size: 16px; + margin: 10px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: background-color 0.3s ease; + } + + .navigation svg path { + transition: fill 0.3s ease; + } + + + + .allSumtxt { + font-size: 13px; + font-weight: 500; + color: #7f7f7f; + position: absolute; + top: 7px; + left: 6px; + } + + + .startDatetxt { + font-size: 12px; + font-weight: 500; + color: #5C5C5C; + background-color: #ECFCCA; + border: 1px solid #AAE729; + width: 140px; + padding: 5px; + text-align: center; + border-radius: 6px; + } + + .endDatetxt { + font-size: 12px; + font-weight: 500; + color: #5C5C5C; + background-color: #ECFCCA; + border: 1px solid #AAE729; + width: 140px; + padding: 4px 5px; + text-align: center; + border-radius: 6px; + } + + .cusDateTime { + width: 66px; + } + + @@media (max-width: 768px){ + .cusDateTime { + width: 100%; + } + + .mainDate { + width: 70px; + } + + .startDatetxt { + font-size: 10px; + font-weight: 800; + width: 70px; + } + + .endDatetxt { + font-size: 10px; + font-weight: 800; + width: 70px; + } + + .form-control-date { + font-size: 10px; + font-weight: 700; + } + } } @@ -111,13 +238,20 @@
    - +
    + + +
    -
    - - +
    + + +
    + +
    +
    @@ -161,66 +295,87 @@ }
    -
    -
    -
    +
    +
    + نوبت @txtString +
    + +
    +
    + @item.StartDayOfWeekFa + +
    + +
    + +
    +
    نوبت @txtString
    +
    الی
    -
    -
    از
    - -
    - -
    -
    الی
    - +
    + +
    + + @item.EndDayOfWeekFa +
    + @if (index == 0) { -
    +
    } else { -
    +
    } -
    - index++; } } else {
    -
    -
    -
    +
    +
    + نوبت اول +
    + +
    +
    + - + +
    + +
    + +
    +
    نوبت اول
    +
    الی
    -
    -
    از
    - -
    - -
    -
    الی
    - +
    + +
    + + - +
    -
    +
    @@ -279,12 +434,138 @@
    + + + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    شروع بکار
    + +
    +
    +
    +
    +
    پایان کار
    + +
    +
    -
    -

    + @* if the date is same, then need col-12 *@ +
    +
    +
    1403/08/25
    +
    شنبه
    +
    +
    +
    +
    +
    1403/08/26
    +
    یکشنبه
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    شروع بکار
    + +
    +
    +
    +
    +
    پایان کار
    + +
    +
    + + + @* if the date is same, then need col-12 *@ +
    +
    +
    1403/08/25
    +
    شنبه
    +
    +
    +
    +
    +
    1403/08/26
    +
    یکشنبه
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    شروع بکار
    + +
    +
    +
    +
    +
    پایان کار
    + +
    +
    + + + @* if the date is same, then need col-12 *@ +
    +
    +
    1403/08/25
    +
    شنبه
    +
    +
    +
    +
    +
    1403/08/26
    +
    یکشنبه
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +

    +
    -
    @@ -316,9 +597,14 @@ var antiForgeryToken = $('@Html.AntiForgeryToken()').val(); var saveRollCallWorkTimeAjax = `@Url.Page("./CaseHistory", "ManualCreateOrEdit")`; var loadByEmployeeRollCallWorkTimeAjax = `@Url.Page("./CaseHistory", "ManualCreateOrEdit")`; - var employeeListAjax = `@Url.Page("./CaseHistory", "EmployeeList")`; + var dayOfWeekDataUrl = `@Url.Page("./CaseHistory", "DayOfWeek")`; + var totalWorkingDataUrl = `@Url.Page("./CaseHistory", "TotalWorking")`; + var calculateRollCallsTotalDurationDataUrl = `@Url.Page("./CaseHistory", "CalculateRollCallsTotalDuration")`; var saveRollCallWorkTimeFromWorkFlowAjax = `@Url.Page("./RollCall", "ManualCreateOrEdit")`; + var calculateRollCallsTotalDurationDataWorkFlowUrl = `@Url.Page("./RollCall", "CalculateRollCallsTotalDuration")`; + var dayOfWeekDataWorkFlowUrl = `@Url.Page("./RollCall", "DayOfWeek")`; + //var itemsEditableDatesData = @@Html.Raw(Json.Serialize(Model.EditableDates)); \ No newline at end of file diff --git a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs index c70fb004..c0892050 100644 --- a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs @@ -44,10 +44,10 @@ namespace ServiceHost.Areas.Client.Pages.Company.WorkFlow public IActionResult OnGet() { - WorkshopFullName = _authHelper.GetWorkshopName(); - //CountRollCall = _workFlowApplication.GetAllWorkFlowCount(_workshopId); + WorkshopFullName = _authHelper.GetWorkshopName(); + //CountRollCall = _workFlowApplication.GetAllWorkFlowCount(_workshopId); - HasRollCallService = _rollCallServiceApplication.GetActiveServiceByWorkshopId(_workshopId) != null; + HasRollCallService = _rollCallServiceApplication.GetActiveServiceByWorkshopId(_workshopId) != null; return Page(); } diff --git a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/LeaveCreate.cshtml b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/LeaveCreate.cshtml index a24d307e..2a93a5d4 100644 --- a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/LeaveCreate.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/LeaveCreate.cshtml @@ -152,7 +152,7 @@
    diff --git a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/ModalEditRollCallUndefined.cshtml b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/ModalEditRollCallUndefined.cshtml index 13ddd7a0..5cf1f9d0 100644 --- a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/ModalEditRollCallUndefined.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/ModalEditRollCallUndefined.cshtml @@ -17,11 +17,11 @@ } .modalRollCallWidth { - max-width: 550px; + max-width: 670px; } .modal-dialog, .modal-content { - height: 420px; + height: 510px; } .timeWorkTitle { @@ -30,6 +30,7 @@ font-size: 12px; margin: auto 0 auto 6px; white-space: nowrap; + width: 100px; } .groupBox { @@ -42,6 +43,7 @@ .groupBox .form-control { background-color: #ffffff; + padding: .375rem .35rem; } .groupBox .form-control::placeholder { @@ -65,15 +67,20 @@ padding: 4px 8px; } + .removeBtn { + width: 42px + } + .btnRemoveTimeWork { display: flex; align-items: center; - justify-content: center; + justify-content: space-between; background-color: #F87171; border-radius: 7px; - padding: 3px; - width: 30px; - height: 30px; + /* padding: 3px; */ + width: 24px; + height: 24px; + font-size: 12px; } .ShowMessage { @@ -90,9 +97,74 @@ } .heightControll { - height: 190px; + height: 240px; overflow-y: scroll; } + + + .allSumtxt { + font-size: 13px; + font-weight: 500; + color: #7f7f7f; + position: absolute; + top: 7px; + left: 6px; + } + + .startDatetxt { + font-size: 12px; + font-weight: 500; + color: #5C5C5C; + background-color: #ECFCCA; + border: 1px solid #AAE729; + width: 140px; + padding: 5px; + text-align: center; + border-radius: 6px; + } + + .endDatetxt { + font-size: 12px; + font-weight: 500; + color: #5C5C5C; + background-color: #ECFCCA; + border: 1px solid #AAE729; + width: 140px; + padding: 4px 5px; + text-align: center; + border-radius: 6px; + } + + .cusDateTime { + width: 66px; + } + + @@media (max-width: 768px) { + .cusDateTime { + width: 100%; + } + + .mainDate { + width: 70px; + } + + .startDatetxt { + font-size: 10px; + font-weight: 800; + width: 70px; + } + + .endDatetxt { + font-size: 10px; + font-weight: 800; + width: 70px; + } + + .form-control-date { + font-size: 10px; + font-weight: 700; + } + } } @@ -111,14 +183,22 @@
    - +
    + + +
    -
    - - +
    + +
    + +
    + +
    +
    @if (@Model.RollCalls.Count > 0) @@ -160,30 +240,42 @@ }
    -
    -
    -
    +
    +
    + نوبت @txtString +
    + +
    +
    + @item.StartDayOfWeekFa + +
    + +
    + +
    +
    نوبت @txtString
    +
    الی
    +
    + +
    + +
    + + @(string.IsNullOrWhiteSpace(item.EndDayOfWeekFa) ? "-" : item.EndDayOfWeekFa) +
    -
    -
    از
    - -
    - -
    -
    الی
    - -
    @if (index == 0) { -
    +
    } else { -
    +
    } -
    - index++; } } else {
    -
    -
    -
    +
    +
    + نوبت اول +
    + +
    +
    + - + +
    + +
    + +
    +
    نوبت اول
    +
    الی
    +
    + +
    + +
    + + - +
    -
    -
    از
    - -
    - -
    -
    الی
    - -
    - -
    +
    @@ -234,8 +335,8 @@ - - + + @switch (count) { case 0: @@ -280,6 +381,132 @@ + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    شروع بکار
    + +
    +
    +
    +
    +
    پایان کار
    + +
    +
    + + + @* if the date is same, then need col-12 *@ +
    +
    +
    1403/08/25
    +
    شنبه
    +
    +
    +
    +
    +
    1403/08/26
    +
    یکشنبه
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    شروع بکار
    + +
    +
    +
    +
    +
    پایان کار
    + +
    +
    + + + @* if the date is same, then need col-12 *@ +
    +
    +
    1403/08/25
    +
    شنبه
    +
    +
    +
    +
    +
    1403/08/26
    +
    یکشنبه
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    شروع بکار
    + +
    +
    +
    +
    +
    پایان کار
    + +
    +
    + + + @* if the date is same, then need col-12 *@ +
    +
    +
    1403/08/25
    +
    شنبه
    +
    +
    +
    +
    +
    1403/08/26
    +
    یکشنبه
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +

    @@ -313,7 +540,9 @@ diff --git a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml.cs index 74162b08..fa9a09ff 100644 --- a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml.cs @@ -322,8 +322,9 @@ namespace ServiceHost.Areas.Client.Pages.Company.WorkFlow }; - return Partial("ModalEditRollCallAction", command); - } + //return Partial("ModalEditRollCallAction", command); + return Partial("../RollCall/ModalEditRollCall", command); + } public IActionResult OnGetEditRollCallForUndefined(long employeeId, string date) { @@ -339,8 +340,8 @@ namespace ServiceHost.Areas.Client.Pages.Company.WorkFlow RollCalls = result }; - return Partial("ModalEditRollCallUndefined", command); - } + return Partial("ModalEditRollCallUndefined", command); + } public IActionResult OnPostManualCreateOrEditForUndefined(CreateOrEditEmployeeRollCall command) { @@ -353,5 +354,44 @@ namespace ServiceHost.Areas.Client.Pages.Company.WorkFlow message = result.Message, }); } + + public IActionResult OnGetDayOfWeek(string dateFa) + { + if (dateFa.TryToGeorgianDateTime(out DateTime date) == false) + return new JsonResult(new + { + success = true, + message = "", + }); + return new JsonResult(new + { + success = true, + message = date.DayOfWeek.DayOfWeeKToPersian(), + }); + } + + public IActionResult OnPostCalculateRollCallsTotalDuration(List rollCalls) + { + var withoutNull = rollCalls.Where(x => x.StartDateFa != null && x.StartTime != null && + x.EndDateFa != null && x.EndTime != null); + + var ticks = withoutNull.Sum(x => + ((x.EndDateFa.ToGeorgianDateTime().Ticks + TimeOnly.Parse(x.EndTime).Ticks) - (x.StartDateFa.ToGeorgianDateTime().Ticks + TimeOnly.Parse(x.StartTime).Ticks))); + + var timeSpan = new TimeSpan(ticks); + + return new JsonResult(new + { + result = timeSpan.ToFarsiHoursAndMinutes("-") + }); + } + } + + public class CalculateRollCallsTotalDuration + { + public string StartDateFa { get; set; } + public string StartTime { get; set; } + public string EndDateFa { get; set; } + public string EndTime { get; set; } } } diff --git a/ServiceHost/ServiceHost.csproj b/ServiceHost/ServiceHost.csproj index 7bff2a5d..6102c223 100644 --- a/ServiceHost/ServiceHost.csproj +++ b/ServiceHost/ServiceHost.csproj @@ -19,7 +19,6 @@ - @@ -28,7 +27,6 @@ - @@ -37,7 +35,6 @@ - @@ -46,7 +43,6 @@ - @@ -97,6 +93,9 @@ + + + @@ -389,6 +388,9 @@ + + + @@ -584,6 +586,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -777,6 +822,7 @@ + @@ -791,6 +837,8 @@ + + @@ -802,6 +850,8 @@ + + diff --git a/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/CreateBankModal.css b/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/CreateBankModal.css new file mode 100644 index 00000000..553ad89a --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/CreateBankModal.css @@ -0,0 +1,96 @@ +.errored { + animation: shake 300ms; + color: #eb3434 !important; + background-color: #fef2f2 !important; + border: 1px solid #eb3434 !important; +} + +.textLFontColor, +.form-control { + color: #797979; + font-size: 12px; + font-weight: 500; +} + +/*.form-control-number { + border: 1px solid #C6C6C6; + border-radius: 6px; + width: 40px; +} + +.form-control-currency { + border: 1px solid #C6C6C6; + border-radius: 6px; + width: 120px; +} + +.form-control-select { + border: 1px solid #C6C6C6; + border-radius: 6px; + width: 80px; +}*/ + +.textLFontColor span { + font-size: 16px; + font-weight: 600; +} + +.btnCreateNew { + font-size: 14px; + font-weight: 500; + background-color: #84CC16; + color: #FFFFFF; + border-radius: 8px; + padding: 10px 70px; + width:100%; +} + +.closeBtn { + font-size: 14px; + font-weight: 500; + background-color: #454545; + color: #FFFFFF; + border-radius: 8px; + padding: 10px 70px; + width:100%; +} + +.btnCreateNew:hover { + background-color: #5f9213; +} + +.btnCreateNew, +.btn-cancel2 { + width: 100% !important; +} + +.spanTitleText { + font-size: 13px; + font-weight: 500; + color: #454545; +} + +@media (max-width:1366px) { + .spanTitleText { + font-size: 12px; + } +} + +@media (max-width:768px) { + .form-control { + margin: 0 !important; + } + + .spanTitleText { + font-size: 11px; + } +} + +@media (max-width:576px) { + .btnCreateNew, .btn-cancel2 { + width: 100% !important; + padding: 10px 40px; + display: flex; + justify-content: center; + } +} \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/EditBankModal.css b/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/EditBankModal.css new file mode 100644 index 00000000..7545ef6f --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/EditBankModal.css @@ -0,0 +1,95 @@ +.errored { + animation: shake 300ms; + color: #eb3434 !important; + background-color: #fef2f2 !important; + border: 1px solid #eb3434 !important; +} + +.textLFontColor, +.form-control { + color: #797979; + font-size: 12px; + font-weight: 500; +} + +/*.form-control-number { + border: 1px solid #C6C6C6; + border-radius: 6px; + width: 40px; +} + +.form-control-currency { + border: 1px solid #C6C6C6; + border-radius: 6px; + width: 120px; +} + +.form-control-select { + border: 1px solid #C6C6C6; + border-radius: 6px; + width: 80px; +}*/ + +.textLFontColor span { + font-size: 16px; + font-weight: 600; +} + +.btnEdit { + font-size: 14px; + font-weight: 500; + background-color: #84CC16; + color: #FFFFFF; + border-radius: 8px; + padding: 10px 70px; +} + +.closeBtn { + font-size: 14px; + font-weight: 500; + background-color: #454545; + color: #FFFFFF; + border-radius: 8px; + padding: 10px 70px; + width: 100%; +} + +.btnCreateNew:hover { + background-color: #5f9213; +} + +.btnCreateNew, +.btn-cancel2 { + width: 100% !important; +} + +.spanTitleText { + font-size: 13px; + font-weight: 500; + color: #454545; +} + +@media (max-width:1366px) { + .spanTitleText { + font-size: 12px; + } +} + +@media (max-width:768px) { + .form-control { + margin: 0 !important; + } + + .spanTitleText { + font-size: 11px; + } +} + +@media (max-width:576px) { + .btnCreateNew, .btn-cancel2 { + width: 100% !important; + padding: 10px 40px; + display: flex; + justify-content: center; + } +} \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/Index.css b/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/Index.css new file mode 100644 index 00000000..a38b26d9 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdminNew/Bank/css/Index.css @@ -0,0 +1,99 @@ +.goToTop { + position: fixed; + bottom: -10px; + margin-right: 100px; + z-index: 100; + color: #fff; + background-color: #25acacd6; +} + +.goToTop:hover { + color: #fff; + background-color: #2ca4a4; +} + +.table-rollcall .width4::before { + display: none; +} + +.tooltipfull-container { + cursor: pointer; + position: relative; +} + +.bankImage { + /*height: 30px;*/ + width: 35px; + object-fit: cover; + object-position: center; + border-radius: 5px; +} + +.tooltipfull { + opacity: 0; + z-index: 99; + color: #fff; + display: grid; + font-size: 12px; + padding: 5px 10px; + border-radius: 8px; + background: #23a8a8; + border: 1px solid #23a8a8; + -webkit-transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + position: absolute; + right: -2px; + bottom: 30px; + white-space: nowrap; +} + +.tooltipfull-container:hover .tooltipfull, a:hover .tooltipfull { + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + +.tooltipfull:before, .tooltipfull:after { + content: ''; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 10px solid #23a8a8; + position: absolute; + bottom: -10px; + right: 20px; +} + +.close-btn-search { + position: absolute; + top: 50%; + left: 4px; + transform: translateY(-50%); + color: #fff; + background-color: #f87171; + width: 26px; + height: 26px; + display: flex; + align-items: center; + justify-content: center; +} + +@media screen and (max-width: 767px) { + .goToTop { + position: fixed; + bottom: 54px; + margin-right: 39%; + z-index: 100; + color: #fff; + background-color: #25acac70; + } +} \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/CreateBankModal.js b/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/CreateBankModal.js new file mode 100644 index 00000000..8f074a95 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/CreateBankModal.js @@ -0,0 +1,58 @@ +$(document).ready(function () { + $("#createData").click(function () { + $(".btnCreateNew .spinner-loading").css("display", "flex"); + var name = $("#bankName").val(); + + if (name) { + createBank(name); + } else { + showAlertMessage('.alert-msg', 'نام بانک را مشخص کنید.', 3500); + } + }); +}); + +function showAlertMessage(selector, message, timeout) { + $(selector).show(); + $(selector + ' p').text(message); + setTimeout(function () { + $(selector).hide(); + $(selector + ' p').text(''); + }, timeout); +} + +function createBank(name) { + + var formData = new FormData(); + formData.append('command.BankName', name); + formData.append('command.BankLogoPictureFile', $('#BankLogoPictureFile')[0].files[0]); + + + $.ajax({ + async: false, + dataType: 'json', + type: 'POST', + url: createBankURL, + data: formData, + processData: false, // Important for FormData + contentType: false, // Important for FormData + headers: { 'RequestVerificationToken': antiForgeryToken }, + success: function (response) { + console.log(response); + if (response.success) { + showAlertMessage('.alert-success-msg', 'بانک با موفقیت ایجاد شد.', 3500); + setTimeout(function () { + $(".btnCreateNew .spinner-loading").css("display", "none"); + location.reload(); + }, 500); + } else { + showAlertMessage('.alert-msg', response.message, 3500); + $(".btnEdit .spinner-loading").css("display", "none"); + } + }, + error: function () { + showAlertMessage('.alert-msg', response.message, 3500); + $(".btnEdit .spinner-loading").css("display", "none"); + + } + }); +} \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/EditBankModal.js b/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/EditBankModal.js new file mode 100644 index 00000000..a81e6fc4 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/EditBankModal.js @@ -0,0 +1,61 @@ +$(document).ready(function () { + $("#EditData").click(function () { + $(".btnEdit .spinner-loading").css("display", "flex"); + var name = $("#bankNameEdit").val(); + + if (name) { + editBank(name); + } else { + showAlertMessage('.alert-msg', 'نام بانک را مشخص کنید.', 3500); + } + }); +}); + +function showAlertMessage(selector, message, timeout) { + $(selector).show(); + $(selector + ' p').text(message); + setTimeout(function () { + $(selector).hide(); + $(selector + ' p').text(''); + }, timeout); +} + +function editBank(name) { + var id = $("#bankIdEdit").val(); + console.log(id); + + var formData = new FormData(); + formData.append('command.id', id); + formData.append('command.BankName', name); + formData.append('command.BankLogoPictureFile', $('#BankLogoPictureFile')[0].files[0]); + + + $.ajax({ + async: false, + dataType: 'json', + type: 'POST', + url: editBankUrl, + data: formData, + processData: false, // Important for FormData + contentType: false, // Important for FormData + headers: { 'RequestVerificationToken': antiForgeryToken }, + success: function (response) { + console.log(response); + if (response.success) { + showAlertMessage('.alert-success-msg', 'بانک با موفقیت ویرایش شد.', 3500); + setTimeout(function () { + $(".btnEdit .spinner-loading").css("display", "none"); + location.reload(); + }, 500); + + } else { + showAlertMessage('.alert-msg', response.message, 3500); + $(".btnEdit .spinner-loading").css("display", "none"); + } + }, + error: function () { + showAlertMessage('.alert-msg', response.message, 3500); + $(".btnEdit .spinner-loading").css("display", "none"); + } + }); +} \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/Index.js b/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/Index.js new file mode 100644 index 00000000..59e451c3 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsAdminNew/Bank/js/Index.js @@ -0,0 +1,54 @@ +$(document).ready(function () { + + $(".removeBank").click(function () { + var id = $(this).data("remove-id"); + console.log(id); + swal.fire({ + title: "اخطار", + text: "آیا میخواهید این بانک را حذف کنید؟", + icon: "warning", + showCancelButton: true, + confirmButtonText: "بله", + cancelButtonText: "خیر", + confirmButtonColor: '#84cc16', + reverseButtons: true + }).then((result) => { + if (result.isConfirmed) { + removeBank(id); + } else { + return; + } + }); + }); + function removeBank(id) { + $.ajax({ + async: false, + type: 'POST', + url: deleteBankUrl, + data: {id:id}, + headers: { 'RequestVerificationToken': antiForgeryToken }, + success: function (response) { + console.log(response); + if (response.success) { + showAlertMessage('.alert-success-msg', 'با موفقیت حذف شد.', 3500); + location.reload(); + } else { + showAlertMessage('.alert-msg', response.message, 3500); + } + }, + error: function () { + showAlertMessage('.alert-msg', response.message, 3500); + } + }); + } + + function showAlertMessage(selector, message, timeout) { + $(selector).show(); + $(selector + ' p').text(message); + setTimeout(function () { + $(selector).hide(); + $(selector + ' p').text(''); + }, timeout); + } + +}); diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ansar - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ansar - Color.svg new file mode 100644 index 00000000..308f096f --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ansar - Color.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ayandeh - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ayandeh - Color.svg new file mode 100644 index 00000000..c9c0b360 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ayandeh - Color.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Bank Markazi - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Bank Markazi - Color.svg new file mode 100644 index 00000000..cc6bc354 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Bank Markazi - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Caspian - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Caspian - Color.svg new file mode 100644 index 00000000..c4e1aec1 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Caspian - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Dey - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Dey - Color.svg new file mode 100644 index 00000000..79e981e8 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Dey - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Eghtesad Novin - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Eghtesad Novin - Color.svg new file mode 100644 index 00000000..7119c8a0 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Eghtesad Novin - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Futurebank - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Futurebank - Color.svg new file mode 100644 index 00000000..dab15301 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Futurebank - Color.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Gardeshgari - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Gardeshgari - Color.svg new file mode 100644 index 00000000..03a7d612 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Gardeshgari - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ghavamin - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ghavamin - Color.svg new file mode 100644 index 00000000..ecfb765e --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Ghavamin - Color.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Hekmat - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Hekmat - Color.svg new file mode 100644 index 00000000..d6bf2b38 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Hekmat - Color.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Europe - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Europe - Color.svg new file mode 100644 index 00000000..45bba1b9 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Europe - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Venezuela - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Venezuela - Color.svg new file mode 100644 index 00000000..00da2d35 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Venezuela - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Zamin - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Zamin - Color.svg new file mode 100644 index 00000000..126c2841 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Iran Zamin - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Karafarin - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Karafarin - Color.svg new file mode 100644 index 00000000..767284f5 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Karafarin - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Keshavarzi - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Keshavarzi - Color.svg new file mode 100644 index 00000000..f3a06f56 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Keshavarzi - Color.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Khavar Mianeh - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Khavar Mianeh - Color.svg new file mode 100644 index 00000000..71f42167 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Khavar Mianeh - Color.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Kosar - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Kosar - Color.svg new file mode 100644 index 00000000..36cb34e6 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Kosar - Color.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Maskan - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Maskan - Color.svg new file mode 100644 index 00000000..add1f08e --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Maskan - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mehr Eghtesad - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mehr Eghtesad - Color.svg new file mode 100644 index 00000000..2c804be8 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mehr Eghtesad - Color.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mehr Iran - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mehr Iran - Color.svg new file mode 100644 index 00000000..7892e891 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mehr Iran - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Melall - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Melall - Color.svg new file mode 100644 index 00000000..1ab3c5e7 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Melall - Color.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mellat - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mellat - Color.svg new file mode 100644 index 00000000..e80afad9 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Mellat - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Melli - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Melli - Color.svg new file mode 100644 index 00000000..ae0251bc --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Melli - Color.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Noor - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Noor - Color.svg new file mode 100644 index 00000000..065560f4 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Noor - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Parsian - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Parsian - Color.svg new file mode 100644 index 00000000..8618577a --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Parsian - Color.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Pasargad - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Pasargad - Color.svg new file mode 100644 index 00000000..22034524 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Pasargad - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Postbank - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Postbank - Color.svg new file mode 100644 index 00000000..b59996d2 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Postbank - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Refah - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Refah - Color.svg new file mode 100644 index 00000000..4291e72b --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Refah - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Resalat - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Resalat - Color.svg new file mode 100644 index 00000000..5541b4df --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Resalat - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Saderat - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Saderat - Color.svg new file mode 100644 index 00000000..76e2284a --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Saderat - Color.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Saman - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Saman - Color.svg new file mode 100644 index 00000000..2f607747 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Saman - Color.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sanat Madan - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sanat Madan - Color.svg new file mode 100644 index 00000000..1cfcd5e9 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sanat Madan - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sarmayeh - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sarmayeh - Color.svg new file mode 100644 index 00000000..12ff34e7 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sarmayeh - Color.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sepah - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sepah - Color.svg new file mode 100644 index 00000000..836af6f9 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sepah - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Shahr - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Shahr - Color.svg new file mode 100644 index 00000000..0c52f86b --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Shahr - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sina - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sina - Color.svg new file mode 100644 index 00000000..90540450 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Sina - Color.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Standard Chartered - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Standard Chartered - Color.svg new file mode 100644 index 00000000..d113ce86 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Standard Chartered - Color.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Taavon Eslami - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Taavon Eslami - Color.svg new file mode 100644 index 00000000..bcf5dc0a --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Taavon Eslami - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tejarat - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tejarat - Color.svg new file mode 100644 index 00000000..e3e09704 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tejarat - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee - Color.svg new file mode 100644 index 00000000..0f090aa8 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee Saderat - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee Saderat - Color.svg new file mode 100644 index 00000000..8cada01c --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee Saderat - Color.svg @@ -0,0 +1,3 @@ + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee Taavon - Color.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee Taavon - Color.svg new file mode 100644 index 00000000..cfb8959f --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/Bank - Tosee Taavon - Color.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/images/banks svg/shetab.svg b/ServiceHost/wwwroot/AssetsClient/images/banks svg/shetab.svg new file mode 100644 index 00000000..a4e359a4 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/images/banks svg/shetab.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/CaseHistory.css b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/CaseHistory.css index b3a0e243..350323b4 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/CaseHistory.css +++ b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/CaseHistory.css @@ -71,6 +71,22 @@ box-shadow: 0px 4px 5px 0px rgba(0, 0, 0, 0.03) inset; } +.btn-leave-casehistory { + border: 1px solid transparent; + width: 30px; + height: 30px; + border-radius: 5px; + padding: 3px 1px; + color: #d97706; + margin: auto 1px auto 2px; + background: rgba(217, 119, 6, 0.18); + transition: ease .2s; +} + +.btn-leave-casehistory span { + display: none; +} + .toggleRollCall { cursor: pointer; font-size: 12px; diff --git a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/Group.css b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/Group.css index 1a1e8b3d..4088b8e3 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/Group.css +++ b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/css/Group.css @@ -67,7 +67,7 @@ } #ajaxDataMain { - height: 700px; + height: 650px; border-radius: 10px; padding: 3px; overflow-y: auto; @@ -75,7 +75,7 @@ } #loadAccountItems { - height: 700px; + height: 650px; background-color: #ffffff; border-radius: 10px; padding: 1px 6px; @@ -341,10 +341,10 @@ button.btn-edit:hover { @media(max-width: 1366px) { #loadAccountItems { - height: 400px; + height: 350px; } #ajaxDataMain { - height: 400px; + height: 350px; } .widthBtn { diff --git a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/CaseHistory.js b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/CaseHistory.js index 987db53e..e4c6b0c6 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/CaseHistory.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/CaseHistory.js @@ -460,6 +460,19 @@ function caseHistoryLoadAjax() {
    عملیات:
    + + + + +
    -
    +
    + +
    +
    -
    +
    `; - console.log('--------------------------------------------------------'); - console.log(item); + if (item.workshopShiftStatus === 0) { + html += `
    منظم
    `; + } else if (item.workshopShiftStatus === 1) { + html += `
    مختلط
    `; + } else { + html += `
    گردشی
    `; + } if (item.workshopShiftStatus === 0) { item.rollCallWorkshopShifts.forEach(function (itemShifts) { @@ -168,7 +232,7 @@ function loadEmployeeAjax(groupSettingId) { headers: { "RequestVerificationToken": `${antiForgeryToken}` }, success: function (response) { var responseDataEmployee = response.data; - + if (response.success) { if (responseDataEmployee.length > 0) { @@ -184,8 +248,8 @@ function loadEmployeeAjax(groupSettingId) { isShiftChangedGlobal = true; } - htmlEmployee += `
    -
    + htmlEmployee += `
    +
    @@ -197,11 +261,28 @@ function loadEmployeeAjax(groupSettingId) {
    نام پرسنل:
    نام پرسنل:
    -
    ${itemEmployee.name}
    +
    ${itemEmployee + .name}
    -
    +
    +
    نام پرسنل:
    +
    +
    نام پرسنل:
    +
    `; + if (itemEmployee.workshopShiftStatus === 0) { + htmlEmployee += `منظم`; + } else if (itemEmployee.workshopShiftStatus === 1) { + htmlEmployee += `مختلط`; + } else { + htmlEmployee += `گردشی`; + } + htmlEmployee += `
    +
    +
    + +
    ساعت کاری:
    ساعت کاری:
    @@ -416,4 +497,12 @@ function editGroup(groupId) { function editEmployee(employee_id, groupId) { var array_employees = [employee_id]; window.location.href = `#showmodal=/Client/Company/RollCall/Grouping?groupId=${groupId}&employeeId=${array_employees}&handler=EditEmployee`; +} + +function updateIndexesGrouping() { + let indexGrouping = 0; + + $(`.itemResultEmployee .row-index2`).each(function () { + $(this).text(indexGrouping++); + }); } \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/LeaveCreate.js b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/LeaveCreate.js new file mode 100644 index 00000000..2d8c9c4b --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/LeaveCreate.js @@ -0,0 +1,664 @@ +$(document).ready(function () { + + $('.loading').hide(); + + document.getElementById("MainModal").style.visibility = "visible"; + + //******************** شرط استحقاقی و استعلاجی ******************** + $(document).on("change", ".LeaveType", function () { + if ($('#paid').is(':checked')) { + $('#dailyType').css('visibility', 'visible'); + } + + if ($('#sick').is(':checked')) { + $('#dailyType').css('visibility', 'hidden'); + $('#daily').prop('checked', true); + if ($('#daily').is(':checked')) { + $('#end_date_estehghaghi').show(); + $('.time_paid').hide(); + } + } + }); + + // شرط ساعتی و روزانه + $(document).on("change", ".LeaveTime", function () { + if ($('#daily').is(':checked')) { + $('#end_date_estehghaghi').show(); + $('.time_paid').hide(); + } + + if ($('#hourly').is(':checked')) { + $('#end_date_estehghaghi').hide(); + $('.time_paid').show(); + } + }); + //******************** شرط استحقاقی و استعلاجی ******************** + + + //******************** بلور کردن باکس ******************** + $('#IsAccepted').on('change', function () { + if ($(this).is(':checked')) { + $('#blur-div').addClass('blur'); + $('#descriptionAcceptedCheck').text(''); + $('#descriptionAcceptedCheck').attr('disabled', true); + + } else { + $('#blur-div').removeClass('blur'); + $('#descriptionAcceptedCheck').attr('disabled', false); + } + }); + + + if ($('#IsAccepted').is(':checked')) { + $('#blur-div').addClass('blur'); + $('#descriptionAcceptedCheck').text(''); + $('#descriptionAcceptedCheck').attr('disabled', true); + } else { + $('#blur-div').removeClass('blur'); + $('#descriptionAcceptedCheck').attr('disabled', false); + } + //******************** بلور کردن باکس ******************** + + $(document).ready(function () { + $(document).on("change", "#IsAccepted", function () { + var IsAcceptedCheck = $('#IsAccepted').is(':checked'); + if (IsAcceptedCheck) { + $('#descriptionAcceptedCheck').removeClass('errored'); + $('#descriptionAcceptedCheck').addClass('disable-input'); + $("#descriptionAcceptedCheck").prop('disabled', true); + } else { + $('#descriptionAcceptedCheck').removeClass('disable-input'); + $("#descriptionAcceptedCheck").prop('disabled', false); + } + }) + }); + + $('#printSingle').on('click', function () { + var id = $('#printSingleID').val(); + var parametr = '&id=' + id; + var url = PrintOneMobileUrl; + location.href = url + parametr; + }); + + $('#save').on('click', function () { + $('#save').addClass("disable"); + var workshopSelect = $("#workshopSelect").val(); + var employeeSelect = $("#employeeSelect").val(); + + if (workshopSelect == '') { + $('.alert-msg').show(); + $('.alert-msg p').text('لطفا کارگاه را انتخاب کنید ...'); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + return false; + } + + if (employeeSelect == '') { + $('.alert-msg').show(); + $('.alert-msg p').text('لطفا پرسنل را انتخاب کنید ...'); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + return false; + } + + $("#descriptionAcceptedCheck").on("change", function () { + $('#descriptionAcceptedCheck').removeClass('errored'); + }); + + var IsAcceptedCheck = $('#IsAccepted').is(':checked'); + var descriptionAcceptedCheck = $('#descriptionAcceptedCheck').val(); + + if (!IsAcceptedCheck && descriptionAcceptedCheck.length === 0) { + $('#descriptionAcceptedCheck').addClass('errored'); + $('.alert-msg').show(); + $('.alert-msg p').text('لطفا توضیحات در صورت عدم موافقت را پر کنید.'); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + return false; + } + + var dateFa = startLeave.replaceAll("/", ""); + var dateEmployeeID = $('#employeeId').val() + '-' + dateFa; + + if ($('.errored').length < 1) { + $.ajax({ + async: false, + dataType: 'json', + type: 'POST', + url: leaveSaveAjax, + headers: { "RequestVerificationToken": antiForgeryToken }, + data: $('#create-leave-form').serialize(), + success: function (response) { + if (response.isSuccedded) { + $('.alert-success-msg').show(); + $('.alert-success-msg p').text(response.message); + setTimeout(function () { + $('.alert-success-msg').hide(); + $('.alert-success-msg p').text(''); + }, 1500); + + $('#save').addClass("disable"); + $('#printSingleID').val(response.printID); + $('#printSingle').show(); + //$('#MainModal').modal('hide'); + _RefreshCountMenu(); + CountWorkFlowOfAbsentAndCut(); + + //var menuActive = $('#navbar-animmenu li.active').data('menu'); + //switch (menuActive) { + // case "absent": + // loadWorkFlowsAbsentsList(); + // break; + // case "cut": + // LoadWorkFlowsCutList(); + // break; + // case "lunchBreak": + // loadWorkFlowEmployeesWithoutLunchBreakList(); + // break; + // case "undefined": + // loadUndefinedRollCallsList(); + // break; + // case "overlappingLeave": + // loadOverlappingLeavesList(); + // break; + // default: + //} + + var menuActive = $('#navbar-animmenu li.active').data('menu'); + switch (menuActive) { + case "absent": + /*loadWorkFlowsAbsentsList();*/ + $(`[data-absent-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`absent_${dateFa}`); + updateMainWorkFlow(`absentMain_${dateFa}`); + break; + case "cut": + //LoadWorkFlowsCutList(); + $(`[data-cut-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`cut_${dateFa}`); + updateMainWorkFlow(`cutMain_${dateFa}`); + break; + case "lunchBreak": + //loadWorkFlowEmployeesWithoutLunchBreakList(); + $(`[data-break-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`break_${dateFa}`); + updateMainWorkFlow(`breakMain_${dateFa}`); + break; + case "undefined": + //loadUndefinedRollCallsList(); + $(`[data-undefined-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`undefined_${dateFa}`); + updateMainWorkFlow(`undefinedMain_${dateFa}`); + break; + case "overlappingLeave": + //loadOverlappingLeavesList(); + $(`[data-leave-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`leave_${dateFa}`); + updateMainWorkFlow(`leaveMain_${dateFa}`); + break; + default: + } + + } else { + $('.alert-msg').show(); + $('.alert-msg p').text(response.message); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + + $('#save').removeClass("disable"); + } + }, + error: function (err) { + $('#save').removeClass("disable"); + console.log(err); + } + }); + } else { + $('#save').removeClass("disable"); + + $('.alert-msg').show(); + $('.alert-msg p').text('لطفا خطاها را برطرف کنید.'); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + } + }); + + $(".date").on('input', function () { + var value = $(this).val(); + $(this).val(convertPersianNumbersToEnglish(value)); + }).mask("0000/00/00"); + + $('.date').on('input', function () { + let startDate = this.value; + if (startDate.length == 10) { + let submitcheck = dateValidcheck(this); + if (submitcheck) { + + $(this).removeClass('errored'); + if ($('#StartLeave').val() != '' && $('#EndLeave').val() != '') { + computeDays(); + } + + } else { + $(this).addClass('errored'); + } + + } else { + $(this).addClass('errored'); + } + }); + + function dateValidcheck(inputField1) { + + let persianNumbers = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g], + arabicNumbers = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g], + fixNumbers = function (str) { + if (typeof str === 'string') { + for (var i = 0; i < 10; i++) { + str = str.replace(persianNumbers[i], i).replace(arabicNumbers[i], i); + } + } + return str; + }; + let getdate = inputField1.value; + + let m1, m2; + let y1, y2, y3, y4; + let d1, d2; + let s1, s2; + for (var i = 0; i < getdate.length; i++) { + if (i === 0) { + y1 = fixNumbers(getdate[i]); + } + if (i === 1) { + y2 = fixNumbers(getdate[i]); + } + if (i === 2) { + y3 = fixNumbers(getdate[i]); + } + if (i === 3) { + y4 = fixNumbers(getdate[i]); + } + if (i === 4) { + s1 = fixNumbers(getdate[i]); + } + if (i === 5) { + m1 = fixNumbers(getdate[i]); + } + if (i === 6) { + m2 = fixNumbers(getdate[i]); + } + if (i === 7) { + s2 = fixNumbers(getdate[i]); + } + if (i === 8) { + d1 = fixNumbers(getdate[i]); + } + if (i === 9) { + d2 = fixNumbers(getdate[i]); + } + + } + let yRes = y1 + y2 + y3 + y4; + let year = parseInt(yRes); + let mRes = m1 + m2; + let month = parseInt(mRes); + let dRes = d1 + d2; + let day = parseInt(dRes); + let fixResult = yRes + s1 + mRes + s2 + dRes; + let test1 = checkEnValid(inputField1.value); + + let isValid = /^([1][3-4][0-9][0-9][/])([0][1-9]|[1][0-2])([/])([0][1-9]|[1-2][0-9]|[3][0-1])$/.test(fixResult); + + + if (isValid && test1) { + // inputField1.style.backgroundColor = '#a6e9a6'; + start1valid = true; + } else { + if (inputField1.value != "") { + // inputField1.style.backgroundColor = '#f94c4c'; + $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', "لطفا تاریخ را بصورت صحیح وارد کنید"); + start1valid = false; + } + } + return start1valid; + + } + + function checkEnValid(fixDate1) { + + let persianNumbers = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g], + arabicNumbers = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g], + fixNumbers = function (str) { + if (typeof str === 'string') { + for (var i = 0; i < 10; i++) { + str = str.replace(persianNumbers[i], i).replace(arabicNumbers[i], i); + } + } + return str; + }; + let getdate = fixDate1; + + let m1, m2; + let y1, y2, y3, y4; + let d1, d2; + for (let i = 0; i < getdate.length; i++) { + if (i === 0) { + y1 = fixNumbers(getdate[i]); + } + if (i === 1) { + y2 = fixNumbers(getdate[i]); + } + if (i === 2) { + y3 = fixNumbers(getdate[i]); + } + if (i === 3) { + y4 = fixNumbers(getdate[i]); + } + if (i === 5) { + m1 = fixNumbers(getdate[i]); + } + if (i === 6) { + m2 = fixNumbers(getdate[i]); + } + if (i === 8) { + d1 = fixNumbers(getdate[i]); + } + if (i === 9) { + d2 = fixNumbers(getdate[i]); + } + } + let yRes = y1 + y2 + y3 + y4; + let year = parseInt(yRes); + let mRes = m1 + m2; + let month = parseInt(mRes); + let dRes = d1 + d2; + let day = parseInt(dRes); + let kabiseh = false; + if (month <= 6 && day > 31) { + return false; + } else if (month > 6 && month < 12 && day > 30) { + return false; + } else if (month === 12) { + + switch (year) { + case 1346: + kabiseh = true; + break; + case 1350: + kabiseh = true; + break; + case 1354: + kabiseh = true; + break; + case 1358: + kabiseh = true; + break; + case 1362: + kabiseh = true; + break; + case 1366: + kabiseh = true; + break; + case 1370: + kabiseh = true; + break; + case 1375: + kabiseh = true; + break; + case 1379: + kabiseh = true; + break; + case 1383: + kabiseh = true; + break; + case 1387: + kabiseh = true; + break; + case 1391: + kabiseh = true; + break; + case 1395: + kabiseh = true; + break; + case 1399: + kabiseh = true; + break; + case 1403: + kabiseh = true; + break; + case 1408: + kabiseh = true; + break; + case 1412: + kabiseh = true; + break; + case 1416: + kabiseh = true; + break; + case 1420: + kabiseh = true; + break; + case 1424: + kabiseh = true; + break; + case 1428: + kabiseh = true; + break; + case 1432: + kabiseh = true; + break; + case 1436: + kabiseh = true; + break; + case 1441: + kabiseh = true; + break; + case 1445: + kabiseh = true; + break; + default: + kabiseh = false; + + } + if (kabiseh == true && day > 30) { + return false; + } else if (kabiseh == false && day > 29) { + return false; + } else { + return true; + } + } else { + return true; + } + } + + $('input:radio[name="PaidLeaveType"]').change(function () { + if ($(this).is(':checked') && $(this).val() === 'روزانه') { + $("#hours").val(''); + $("#hours").attr("disabled", "disabled"); + $("#endLeave").removeAttr("disabled"); + $('.endLeaveLabal').show(); + $('#StartHoures').removeClass("invalidTime"); + $('#StartHoures').val(''); + $('#EndHours').removeClass("invalidTime"); + $('#EndHours').val(''); + $("#endLeave").show(); + $('.res').remove(); + $('.validTime').removeClass("validTime"); + $('.sumHourseDiv').hide(); + $('.sumDaysDiv').show(); + } else if ($(this).is(':checked') && $(this).val() === 'ساعتی') { + $("#endLeave").val(''); + $("#endLeave").attr("disabled", "disabled"); + $("#endLeave").hide(); + $('.endLeaveLabal').hide(); + $("#hours").removeAttr("disabled"); + $('.sumHourseDiv').show(); + $('.sumDaysDiv').hide(); + } + }); + /////////////////Time Input Validatet///////////////// + + $(".dateTime").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + new Cleave(this, { + time: true, + timePattern: ['h', 'm'] + }); + }); + + $("#StartHoures, #EndHours").on("keyup", validateTimeOrder); + function parseTimeToMinutes(time) { + const [hours, minutes] = time.split(':').map(Number); + return hours * 60 + minutes; + } + + function validateTimeOrder() { + const startTime = $("#StartHoures").val(); + const endTime = $("#EndHours").val(); + + if (startTime && endTime) { + const startMinutes = parseTimeToMinutes(startTime); + const endMinutes = parseTimeToMinutes(endTime); + + if (startMinutes >= endMinutes) { + $('.alert-msg').show(); + $('.alert-msg p').text('ساعت شروع و پایان نامعتبر است'); + + $("#StartHoures, #EndHours").addClass("invalidTime").removeClass("validTime"); + + return false; + } else { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + + $("#StartHoures, #EndHours").addClass("validTime").removeClass("invalidTime"); + + } + + if ($("#StartHoures").val().length === 5 && $("#EndHours").val().length === 5) { + computeHourse(); + } + } else { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + } + return true; + } + + //$('#StartHoures').on("keyup", + // function () { + // var isValid = /^([2][0-3]|[1][0-9]|[0-9]|[0][0-9])([:][0-5][0-9])$/.test($(this).val()); + // if (isValid) { + // $(this).addClass("validTime"); + // $(this).removeClass("invalidTime"); + // if ($('#EndHours').hasClass('validTime') && $('#EndHours').val() != null) { + // computeHourse(); + // } + // } else { + // $(this).removeClass("validTime"); + // $(this).addClass("invalidTime"); + // } + // }); + //$('#EndHours').on("keyup", + // function () { + // var isValid = /^([2][0-3]|[1][0-9]|[0-9]|[0][0-9])([:][0-5][0-9])$/.test($(this).val()); + // if (isValid) { + // $(this).addClass("validTime"); + // $(this).removeClass("invalidTime"); + // if ($('#StartHoures').hasClass('validTime') && $('#StartHoures').val() != null) { + // computeHourse(); + // } + // } else { + // $(this).removeClass("validTime"); + // $(this).addClass("invalidTime"); + // } + // }); + + function computeHourse() { + $('.res').remove(); + $.ajax({ + async: false, + dataType: 'json', + type: 'GET', + url: computeLeaveHourlyAjax, + headers: { "RequestVerificationToken": antiForgeryToken }, + data: { "startHours": $('#StartHoures').val(), "endHours": $('#EndHours').val() }, + success: function (response) { + let res = `${response.res}`; + $('.sumHours').append(res); + }, + failure: function (response) { + console.log(5, response); + } + }); + } + + function computeDays() { + $('.resultDays').remove(); + $.ajax({ + async: false, + dataType: 'json', + type: 'GET', + url: computeLeaveDailyAjax, + headers: { "RequestVerificationToken": antiForgeryToken }, + data: { "startDay": $('#StartLeave').val(), "endDay": $('#EndLeave').val() }, + success: function (response) { + if (response.status == false) { + $('.sumDays').addClass("note"); + } else { + $('.sumDays').removeClass("note"); + } + let res = `${response.res}`; + $('.sumDays').append(res); + }, + failure: function (response) { + console.log(5, response); + } + }); + } +}); + +$(document).ready(function () { + + var selectEmployeeValue = $('#employeeSelect').val(); + if (selectEmployeeValue == '') { + $('#cardSectionLeave').addClass('blur'); + $("#cardSectionLeave div *").prop('disabled', true); + } + + var selectWorkshopValue = $('#workshopSelect').val(); + if (selectWorkshopValue == '') { + $('#cardSectionLeave').addClass('blur'); + $("#cardSectionLeave div *").prop('disabled', true); + } + + $('#employeeSelect').change(function () { + var selectValue = $('#employeeSelect').val(); + + if (selectValue == '') { + $('#cardSectionLeave').addClass('blur'); + $("#cardSectionLeave div *").prop('disabled', true); + } else { + $('#cardSectionLeave').removeClass('blur'); + $("#cardSectionLeave div *").prop('disabled', false); + $('#descriptionAcceptedCheck').attr('disabled', true); + } + }); +}); \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalAddRollCall.js b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalAddRollCall.js index 980176bb..b8699eaa 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalAddRollCall.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalAddRollCall.js @@ -1,5 +1,4 @@ $(document).ready(function () { - $("#modalWorkshopFullname").text($('#caseHistoryWorkshopFullname').text()); $('.btn-register').addClass('disable'); @@ -10,13 +9,33 @@ }); // فعال و غیر فعال شدن برای تنظیمات ساعت کاری براساس ورودی هایی که اعمال میشود - if ($('#employeeSelectAddModal').val() !== '0' && $('.form-control-date').val() !== '') { + if ($('#employeeSelectAddModal').val() !== '0' && $('.form-control-date-main').val() !== '') { $('.heightControll').removeClass('disable'); } else { $('.heightControll').addClass('disable'); } + $(".form-control-date-main").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + new Cleave(this, { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + }); + $(".form-control-date").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + new Cleave(this, { date: true, delimiter: '/', @@ -25,6 +44,12 @@ }); $(".dateTime").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + new Cleave(this, { time: true, timePattern: ['h', 'm'] @@ -38,13 +63,22 @@ $(".btnAddTimeWork").on("click", function () { var currentCount = $('.groupBox').length; var $inputs = $('.dateTime'); + var $inputsDate = $('.form-control-date'); var allFilled = true; + $inputsDate.each(function () { + if ($(this).val() === '') { + allFilled = false; + $('.btn-register').addClass('disable'); + showAlert('ابتدا تاریخ و ساعت شروع و پایان را وارد نمائید.', $(this)); + } + }); + $inputs.each(function () { if ($(this).val() === '') { allFilled = false; $('.btn-register').addClass('disable'); - showAlert('ابتدا ساعت شروع و پایان را وارد نمائید.', $(this)); + showAlert('ابتدا تاریخ و ساعت شروع و پایان را وارد نمائید.', $(this)); } }); @@ -73,37 +107,91 @@ var timeWorkHtml = `
    -
    -
    -
    نوبت ${namePlacementPersian}
    -
    -
    -
    از
    - -
    -
    -
    الی
    - -
    -
    +
    +
    + نوبت ${namePlacementPersian} +
    + +
    +
    + - + +
    + +
    + +
    +
    + نوبت ${namePlacementPersian} +
    +
    الی
    +
    + +
    + +
    + + - +
    +
    + +
    -
    -
    -
    `; +
    +
    +
    + `; $('#appendChildTimeWorkHtml').append(timeWorkHtml); - new Cleave(`input[name="Command.RollCallRecords[${currentCount}].StartTime"]`, { + + const newStartDateInput = $(`input[name="Command.RollCallRecords[${currentCount}].StartDate"]`); + const newEndDateInput = $(`input[name="Command.RollCallRecords[${currentCount}].EndDate"]`); + const newStartTimeInput = $(`input[name="Command.RollCallRecords[${currentCount}].StartTime"]`); + const newEndTimeInput = $(`input[name="Command.RollCallRecords[${currentCount}].EndTime"]`); + + newStartDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + newEndDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newStartTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newEndTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + new Cleave(newStartDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newEndDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newStartTimeInput[0], { time: true, timePattern: ['h', 'm'] }); - new Cleave(`input[name="Command.RollCallRecords[${currentCount}].EndTime"]`, { + new Cleave(newEndTimeInput[0], { time: true, timePattern: ['h', 'm'] }); @@ -131,6 +219,8 @@ // Update Remove button enable/disable state updateRemoveButtons(); + + fetchTotalsRollCall(); }); }); @@ -160,6 +250,14 @@ function updateAddButtonText(currentCount) { } let allFilled = true; + $('.form-control-date').each(function () { + const value = $(this).val().trim(); + if (value === "" || !dateValidCheck(value)) { + allFilled = false; + return false; // Break the loop + } + }); + $('.dateTime').each(function () { const value = $(this).val().trim(); if (value === "" || !timeValidCheck(value)) { @@ -202,37 +300,117 @@ function ajaxPersonals() { }); } -$(document).on('keyup', ".dateTime", function () { +$(document).on('keyup', ".dateTime, .form-control-date", function () { let $input = $(this); let value = $input.val(); let lengthValue = value.length; let currentCount = $('.groupBox').length; - if (lengthValue >= 5) { - if (!timeValidCheck(value)) { - showAlert('ساعت را به درستی وارد نمائید', $input); - updateAddButtonText(currentCount); - } else { - clearAlert($input); - // validateAllTimes(); - updateAddButtonText(currentCount); + const $groupBox = $input.closest('.groupBox'); - // focusNextTimeInput($input); + const startDate = $groupBox.find('.StartDate').val(); + const startTime = $groupBox.find('[name*="StartTime"]').val(); + const endDate = $groupBox.find('.EndDate').val(); + const endTime = $groupBox.find('[name*="EndTime"]').val(); + + // Validate input based on the field type + if ($input.hasClass('form-control-date')) { + // Date validation logic + if (lengthValue >= 10) { + if (!dateValidCheck(value)) { + showAlert('تاریخ را به درستی وارد نمائید', $input); + } else { + clearAlert($input); + dayOfWeekLoad(this, value); + } + } else { + if ($input.hasClass('StartDate')) { + $groupBox.find('.startDatetxt').text('-'); + } else if ($input.hasClass('EndDate')) { + $groupBox.find('.endDatetxt').text('-'); + } + } + } else if ($input.hasClass('dateTime')) { + if (lengthValue >= 5) { + if (!timeValidCheck(value)) { + showAlert('ساعت را به درستی وارد نمائید', $input); + } else { + clearAlert($input); + } } - } else { - updateAddButtonText(currentCount); } + + //if (startDate.length >= 10 && endDate.length >= 10) { + // if (!validateDates(startDate, endDate)) { + // showAlert('حضور غیاب در حال ویرایش را نمیتوانید بیشتر از یک روز از ثبت حضور غیاب عقب تر یا جلو تر ببرید', $input); + // } + //} + + if (startDate.length >= 10 && startTime.length >= 5 && endDate.length >= 10 && endTime.length >= 5) { + //totalWorkingDataLoad(startDate, startTime, endDate, endTime, $groupBox); + fetchTotalsRollCall(); + } + + updateAddButtonText(currentCount); }); -//function focusNextTimeInput(currentInput) { -// var inputs = $(".dateTime"); -// var currentIndex = inputs.index(currentInput); - -// if (currentIndex !== -1 && currentIndex < inputs.length - 1) { -// $(inputs[currentIndex + 1]).focus(); -// } +//function validateDates(startDate, endDate) { +// return itemsEditableDatesData.some(entry => entry.startFa === startDate && entry.endFa === endDate); //} + +function dayOfWeekLoad(input, value) { + $.ajax({ + url: dayOfWeekDataUrl, + type: 'GET', + data: { dateFa: value }, + success: function (response) { + if (response.success) { + const $groupBox = $(input).closest('.groupBox'); + if ($(input).hasClass('StartDate')) { + $groupBox.find('.startDatetxt').text(response.message); + } else if ($(input).hasClass('EndDate')) { + $groupBox.find('.endDatetxt').text(response.message); + } + } else { + $('.alert-msg').show(); + $('.alert-msg p').text(response.message); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); +} + +function totalWorkingDataLoad(startDateVal, startTimeVal, endDateVal, endTimeVal, $groupBox) { + $.ajax({ + url: totalWorkingDataUrl, + type: 'GET', + data: { startDate: startDateVal, startTime: startTimeVal, endDate: endDateVal, endTime: endTimeVal }, + success: function (response) { + if (response) { + //$groupBox.find('.ti').text(response.message); + } else { + $('.alert-msg').show(); + $('.alert-msg p').text(response.message); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); +} + + function showAlert(message, inputElement) { inputElement.addClass("errored"); $('.alert-msg').show().find('p').text(message); @@ -251,47 +429,11 @@ function timeValidCheck(value) { return timePattern.test(value); } -//function validateAllTimes() { -// let timeRanges = []; +function dateValidCheck(value) { + const datePattern = /^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/; + return datePattern.test(value); +} -// $(".groupBox").each(function () { -// let startTime = $(this).find('input[name*="StartTime"]').val(); -// let endTime = $(this).find('input[name*="EndTime"]').val(); - -// if (startTime.length === 5 && endTime.length === 5) { -// let startParts = startTime.split(':'); -// let endParts = endTime.split(':'); -// let startInMinutes = parseInt(startParts[0]) * 60 + parseInt(startParts[1]); -// let endInMinutes = parseInt(endParts[0]) * 60 + parseInt(endParts[1]); -// timeRanges.push({ start: startInMinutes, end: endInMinutes }); -// } -// }); - -// // Check for conflicts and order -// for (let i = 0; i < timeRanges.length; i++) { -// for (let j = 0; j < i; j++) { -// if (timeRanges[i].start >= timeRanges[i].end) { -// showAlert('زمان شروع باید قبل از زمان پایان باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } - -// // Check for overlap with previous entries -// if (timeRanges[i].start < timeRanges[j].end && timeRanges[i].end > timeRanges[j].start) { -// showAlert('زمان‌ها نباید تداخل داشته باشند', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } -// // Check if the current start time is before the previous start time -// if (i > 0 && timeRanges[i].start < timeRanges[i - 1].start) { -// showAlert('ساعت جدید نباید کوچکتر از ساعت‌های قبلی باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } -// } -// } -//} - -//$(document).on('click', '.btn-register', function () { - -//}); $('.btn-register').click(function() { var loading = $('.btn-register .spinner-loading'); @@ -314,18 +456,16 @@ $('.btn-register').click(function() { $('.alert-success-msg').hide(); $('.alert-success-msg p').text(''); loading.hide(); - $('#MainModal').modal('hide'); //window.location.reload(); }, 2000); - setTimeout(function () { - hasData = true; - dateIndex = 0; - dateEmployeeIndex = null; - $('#caseHistoryLoadData').html(''); - caseHistoryLoadAjax(); - loadUntilHeightExceeds(); - }, 1000); + hasData = true; + dateIndex = 0; + dateEmployeeIndex = null; + $('#caseHistoryLoadData').html(''); + caseHistoryLoadAjax(); + loadUntilHeightExceeds(); + $('#MainModal').modal('hide'); } else { $('.alert-msg').show(); @@ -346,7 +486,7 @@ $('.btn-register').click(function() { $(document).on('change', '#employeeSelectAddModal', function () { const employeeId = $('#employeeSelectAddModal').val(); - const dateFa = $('.form-control-date').val(); + const dateFa = $('.form-control-date-main').val(); // Toggle .heightControll based on conditions toggleHeightControl(); @@ -357,13 +497,11 @@ $(document).on('change', '#employeeSelectAddModal', function () { } }); -$(document).on('keyup', '.form-control-date', function () { - // Toggle .heightControll based on conditions +$(document).on('keyup', '.form-control-date-main', function () { toggleHeightControl(); - // Trigger fetching of roll call data if input length is valid const employeeId = $('#employeeSelectAddModal').val(); - const dateFa = $('.form-control-date').val(); + const dateFa = $('.form-control-date-main').val(); if (dateFa.length >= 10 && employeeId !== '0') { fetchAndDisplayRollCallData(employeeId, dateFa); @@ -372,7 +510,7 @@ $(document).on('keyup', '.form-control-date', function () { function toggleHeightControl() { - if ($('#employeeSelectAddModal').val() !== '0' && $('.form-control-date').val().length >= 10) { + if ($('#employeeSelectAddModal').val() !== '0' && $('.form-control-date-main').val().length >= 10) { $('.heightControll').removeClass('disable'); $('.btn-register').removeClass('disable'); } else { @@ -381,6 +519,9 @@ function toggleHeightControl() { } } + + +//var itemsEditableDatesData = []; // Function to handle the AJAX request and generate HTML for roll call data function fetchAndDisplayRollCallData(employeeId, dateFa) { let htmlElement = ''; @@ -395,12 +536,13 @@ function fetchAndDisplayRollCallData(employeeId, dateFa) { data: { 'employeeId': employeeId, 'date': dateFa }, success: function (response) { const rollCallData = response.data; + //itemsEditableDatesData = response.editableDates; - console.log(response); + // console.log(response); if (response.hasLeave) { htmlElement = ` -
    این پرسنل مرخصی ثبت شده است.
    +
    برای این پرسنل مرخصی ثبت شده است.
    `; $('#appendChildTimeWorkHtml').html(htmlElement); $('.btn-register').addClass('disable'); @@ -442,52 +584,102 @@ function fetchAndDisplayRollCallData(employeeId, dateFa) { namePlacementPersian = ""; } - htmlElement += `
    -
    -
    -
    نوبت ${namePlacementPersian}
    -
    -
    -
    از
    - -
    -
    -
    الی
    - -
    `; + htmlElement += ` +
    +
    +
    + نوبت ${namePlacementPersian} +
    - if (indexRollCallTime === 0) { - htmlElement += `
    -
    `; - } else { - htmlElement += `
    - -
    `; - } +
    +
    + ${employee.startDayOfWeekFa} + +
    + +
    +
    +
    + نوبت ${namePlacementPersian} +
    +
    الی
    +
    + +
    + +
    + + ${employee.endDayOfWeekFa} +
    +
    `; + if (indexRollCallTime === 0) { + htmlElement += `
    `; + } else { + htmlElement += `
    + +
    `; + } + htmlElement += ` +
    +
    `; htmlElement += `
    `; $('#appendChildTimeWorkHtml').html(htmlElement); - // Apply time formatting with Cleave.js - new Cleave(`input[name="Command.RollCallRecords[${indexRollCallTime}].StartTime"]`, - { - time: true, - timePattern: ['h', 'm'] - }); + const newStartDateInput = $(`input[name="Command.RollCallRecords[${indexRollCallTime}].StartDate"]`); + const newEndDateInput = $(`input[name="Command.RollCallRecords[${indexRollCallTime}].EndDate"]`); + const newStartTimeInput = $(`input[name="Command.RollCallRecords[${indexRollCallTime}].StartTime"]`); + const newEndTimeInput = $(`input[name="Command.RollCallRecords[${indexRollCallTime}].EndTime"]`); + + newStartDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + newEndDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newStartTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newEndTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + new Cleave(newStartDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newEndDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newStartTimeInput[0], { + time: true, + timePattern: ['h', 'm'] + }); + + new Cleave(newEndTimeInput[0], { + time: true, + timePattern: ['h', 'm'] + }); - new Cleave(`input[name="Command.RollCallRecords[${indexRollCallTime}].EndTime"]`, - { - time: true, - timePattern: ['h', 'm'] - }); // Update add button text updateAddButtonText(indexRollCallTime + 1); @@ -497,55 +689,184 @@ function fetchAndDisplayRollCallData(employeeId, dateFa) { $(".btnAddTimeWork").hide(); } }); + + + $(".form-control-date").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + new Cleave(this, { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + }); + $(".dateTime").each(function () { + let element = $(this); + + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + new Cleave(this, { + time: true, + timePattern: ['h', 'm'] + }); + }); + } else { var namePlacementPersian = "اول"; var nameBtnPersian = "دوم"; - htmlElement += `
    -
    -
    -
    نوبت ${namePlacementPersian}
    + htmlElement += ` +
    +
    +
    + نوبت ${namePlacementPersian} +
    + +
    +
    + - + +
    + +
    + +
    +
    + نوبت ${namePlacementPersian} +
    +
    الی
    +
    + +
    + +
    + + - +
    +
    + +
    +
    +
    -
    -
    از
    - -
    -
    -
    الی
    - -
    -
    -
    -
    -
    `; + `; // Update add button text updateAddButtonText(1); $('#appendChildTimeWorkHtml').html(htmlElement); - // Apply time formatting with Cleave.js - new Cleave(`input[name="Command.RollCallRecords[0].StartTime"]`, - { - time: true, - timePattern: ['h', 'm'] - }); + const newStartDateInput = $(`input[name="Command.RollCallRecords[0].StartDate"]`); + const newEndDateInput = $(`input[name="Command.RollCallRecords[0].EndDate"]`); + const newStartTimeInput = $(`input[name="Command.RollCallRecords[0].StartTime"]`); + const newEndTimeInput = $(`input[name="Command.RollCallRecords[0].EndTime"]`); - new Cleave(`input[name="Command.RollCallRecords[0].EndTime"]`, - { - time: true, - timePattern: ['h', 'm'] - }); + newStartDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + newEndDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newStartTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newEndTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + new Cleave(newStartDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newEndDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newStartTimeInput[0], { + time: true, + timePattern: ['h', 'm'] + }); + + new Cleave(newEndTimeInput[0], { + time: true, + timePattern: ['h', 'm'] + }); } // Update Remove button enable/disable state updateRemoveButtons(); + fetchTotalsRollCall(); } }, error: function (err) { console.log('Error fetching roll call data:', err); } }); +} + +function getTimeWorkData() { + var rollCalls = []; + + $('.groupBox.timeWork').each(function () { + var startDate = $(this).find('.StartDate').val(); + var startTime = $(this).find('.StartTime').val(); + var endDate = $(this).find('.EndDate').val(); + var endTime = $(this).find('.EndTime').val(); + + const calculateRollCallsTotalDuration = {}; + calculateRollCallsTotalDuration.StartDateFa = startDate; + calculateRollCallsTotalDuration.StartTime = startTime; + calculateRollCallsTotalDuration.EndDateFa = endDate ; + calculateRollCallsTotalDuration.EndTime = endTime ; + + rollCalls.push(calculateRollCallsTotalDuration); + }); + + return rollCalls; +} + +function fetchTotalsRollCall() { + const employeeId = $('#employeeSelectAddModal').val(); + const dateFa = $('.form-control-date-main').val(); + + if (employeeId !== '0' && dateFa !== '') { + var rollCalls = getTimeWorkData(); + $.ajax({ + dataType: 'json', + type: 'POST', + url: calculateRollCallsTotalDurationDataUrl, + data: { rollCalls }, + headers: { "RequestVerificationToken": antiForgeryToken }, + success: function (response) { + if (response) { + $('#resultCalculateRollCallsTotal').show(); + $('#resultCalculateRollCallsTotal').text(response.result); + } else { + $('#resultCalculateRollCallsTotal').hide(); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); + } } \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalEditRollCall.js b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalEditRollCall.js index f5228e18..28aa3a9f 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalEditRollCall.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/RollCall/js/ModalEditRollCall.js @@ -6,6 +6,12 @@ $(document).ready(function () { $('.btn-register').addClass('disable'); $(".form-control-date").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + new Cleave(this, { date: true, delimiter: '/', @@ -14,6 +20,25 @@ $(document).ready(function () { }); $(".dateTime").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + new Cleave(this, { + time: true, + timePattern: ['h', 'm'] + }); + }); + + $(".dateTimeIrregular").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + new Cleave(this, { time: true, timePattern: ['h', 'm'] @@ -25,13 +50,22 @@ $(document).ready(function () { $(".btnAddTimeWork").on("click", function () { var currentCount = $('.groupBox').length; var $inputs = $('.dateTime'); + var $inputsDate = $('.form-control-date'); var allFilled = true; + $inputsDate.each(function () { + if ($(this).val() === '') { + allFilled = false; + $('.btn-register').addClass('disable'); + showAlert('ابتدا تاریخ و ساعت شروع و پایان را وارد نمائید.', $(this)); + } + }); + $inputs.each(function () { if ($(this).val() === '') { allFilled = false; $('.btn-register').addClass('disable'); - showAlert('ابتدا ساعت شروع و پایان را وارد نمائید.', $(this)); + showAlert('ابتدا تاریخ و ساعت شروع و پایان را وارد نمائید.', $(this)); } }); @@ -60,38 +94,91 @@ $(document).ready(function () { } var timeWorkHtml = ` -
    -
    -
    -
    نوبت ${namePlacementPersian}
    -
    -
    -
    از
    - -
    -
    -
    الی
    - -
    -
    - -
    -
    -
    `; +
    +
    +
    + نوبت ${namePlacementPersian} +
    + +
    +
    + - + +
    + +
    + +
    +
    + نوبت ${namePlacementPersian} +
    +
    الی
    +
    + +
    + +
    + + - +
    +
    + +
    + +
    +
    +
    `; $('#appendChildTimeWorkHtml').append(timeWorkHtml); - new Cleave(`input[name="Command.RollCallRecords[${currentCount}].StartTime"]`, { + const newStartDateInput = $(`input[name="Command.RollCallRecords[${currentCount}].StartDate"]`); + const newEndDateInput = $(`input[name="Command.RollCallRecords[${currentCount}].EndDate"]`); + const newStartTimeInput = $(`input[name="Command.RollCallRecords[${currentCount}].StartTime"]`); + const newEndTimeInput = $(`input[name="Command.RollCallRecords[${currentCount}].EndTime"]`); + + newStartDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + newEndDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newStartTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newEndTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + + new Cleave(newStartDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newEndDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newStartTimeInput[0], { time: true, timePattern: ['h', 'm'] }); - new Cleave(`input[name="Command.RollCallRecords[${currentCount}].EndTime"]`, { + new Cleave(newEndTimeInput[0], { time: true, timePattern: ['h', 'm'] }); @@ -102,11 +189,11 @@ $(document).ready(function () { $(".btnAddTimeWork").hide(); } - // Update Remove button enable/disable state updateRemoveButtons(); } }); + $(document).on("click", ".btnRemoveTimeWork", function () { $(this).closest(".groupBox").remove(); var currentCount = $('.groupBox').length; @@ -119,7 +206,78 @@ $(document).ready(function () { // Update Remove button enable/disable state updateRemoveButtons(); + + fetchTotalsRollCall(); }); + + + + + + //-------------------------------------------------------------- + const $boxes = $('.irrregularContent'); + const $forwardArrow = $('#nextBox').parent().find('svg path:first-child'); + const $backwardArrow = $('#prevBox').parent().find('svg path:first-child'); + let currentIndex = 0; + + const updateBoxes = () => { + $boxes.each((index, box) => { + const $box = $(box); + if (index < currentIndex) { + // Previous boxes + $box.css({ + transform: 'translateX(-100%)', + opacity: 0, + position: 'absolute', + }); + } else if (index === currentIndex) { + // Current box + $box.addClass('active').css({ + transform: 'translateX(0)', + opacity: 1, + position: 'relative', + }); + } else { + // Next boxes + $box.css({ + transform: 'translateX(100%)', + opacity: 0, + position: 'absolute', + }); + } + }); + + if (currentIndex === 0) { + $backwardArrow.attr('fill', '#D9D9D9'); + $forwardArrow.attr('fill', '#2DBDBD'); + } else if (currentIndex === $boxes.length - 1) { + $backwardArrow.attr('fill', '#2DBDBD'); + $forwardArrow.attr('fill', '#D9D9D9'); + } else { + $backwardArrow.attr('fill', '#2DBDBD'); + $forwardArrow.attr('fill', '#2DBDBD'); + } + }; + + $('#nextBox').on('click', function () { + if (currentIndex < $boxes.length - 1) { + currentIndex++; + updateBoxes(); + } + }); + + $('#prevBox').on('click', function () { + if (currentIndex > 0) { + currentIndex--; + updateBoxes(); + } + }); + + updateBoxes(); + //-------------------------------------------------------------- + + + fetchTotalsRollCall(); }); function updateRemoveButtons() { $(".btnRemoveTimeWork").addClass("disable"); @@ -147,6 +305,14 @@ function updateAddButtonText(currentCount) { } let allFilled = true; + $('.form-control-date').each(function () { + const value = $(this).val().trim(); + if (value === "" || !dateValidCheck(value)) { + allFilled = false; + return false; // Break the loop + } + }); + $('.dateTime').each(function () { const value = $(this).val().trim(); if (value === "" || !timeValidCheck(value)) { @@ -162,37 +328,121 @@ function updateAddButtonText(currentCount) { } } -$(document).on('keyup', ".dateTime", function () { +$(document).on('keyup', ".dateTime, .form-control-date", function () { let $input = $(this); let value = $input.val(); let lengthValue = value.length; let currentCount = $('.groupBox').length; - if (lengthValue >= 5) { - if (!timeValidCheck(value)) { - showAlert('ساعت را به درستی وارد نمائید', $input); - updateAddButtonText(currentCount); - } else { - clearAlert($input); - // validateAllTimes(); - updateAddButtonText(currentCount); + const $groupBox = $input.closest('.groupBox'); - // focusNextTimeInput($input); + const startDate = $groupBox.find('.StartDate').val(); + const startTime = $groupBox.find('[name*="StartTime"]').val(); + const endDate = $groupBox.find('.EndDate').val(); + const endTime = $groupBox.find('[name*="EndTime"]').val(); + + // Validate input based on the field type + if ($input.hasClass('form-control-date')) { + // Date validation logic + if (lengthValue >= 10) { + if (!dateValidCheck(value)) { + showAlert('تاریخ را به درستی وارد نمائید', $input); + } else { + clearAlert($input); + dayOfWeekLoad(this, value); + } + } else { + if ($input.hasClass('StartDate')) { + $groupBox.find('.startDatetxt').text('-'); + } else if ($input.hasClass('EndDate')) { + $groupBox.find('.endDatetxt').text('-'); + } + } + } else if ($input.hasClass('dateTime')) { + if (lengthValue >= 5) { + if (!timeValidCheck(value)) { + showAlert('ساعت را به درستی وارد نمائید', $input); + } else { + clearAlert($input); + } } - } else { - updateAddButtonText(currentCount); } + + //if (startDate.length >= 10 && endDate.length >= 10) { + // if (!validateDates(startDate, endDate)) { + // showAlert('حضور غیاب در حال ویرایش را نمیتوانید بیشتر از یک روز از ثبت حضور غیاب عقب تر یا جلو تر ببرید', $input); + // } + //} + + if (startDate.length >= 10 && startTime.length >= 5 && endDate.length >= 10 && endTime.length >= 5) { + //totalWorkingDataLoad(startDate, startTime, endDate, endTime, $groupBox); + fetchTotalsRollCall(); + } + + updateAddButtonText(currentCount); }); -//function focusNextTimeInput(currentInput) { -// var inputs = $(".dateTime"); -// var currentIndex = inputs.index(currentInput); - -// if (currentIndex !== -1 && currentIndex < inputs.length - 1) { -// $(inputs[currentIndex + 1]).focus(); -// } +//function validateDates(startDate, endDate) { +// return itemsEditableDatesData.some(entry => entry.startFa === startDate && entry.endFa === endDate); //} +function dayOfWeekLoad(input, value) { + var dayOfWeekUrl = ``; + if (urlPathname.indexOf('/Client/Company/WorkFlow/RollCall') > -1) { + dayOfWeekUrl = dayOfWeekDataWorkFlowUrl; + } else { + dayOfWeekUrl = dayOfWeekDataUrl; + } + + $.ajax({ + url: dayOfWeekUrl, + type: 'GET', + data: { dateFa: value }, + success: function (response) { + if (response.success) { + const $groupBox = $(input).closest('.groupBox'); + if ($(input).hasClass('StartDate')) { + $groupBox.find('.startDatetxt').text(response.message); + } else if ($(input).hasClass('EndDate')) { + $groupBox.find('.endDatetxt').text(response.message); + } + } else { + $('.alert-msg').show(); + $('.alert-msg p').text(response.message); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); +} +function totalWorkingDataLoad(startDateVal, startTimeVal, endDateVal, endTimeVal, $groupBox) { + $.ajax({ + url: totalWorkingDataUrl, + type: 'GET', + data: { startDate: startDateVal, startTime: startTimeVal, endDate: endDateVal, endTime: endTimeVal }, + success: function (response) { + if (response) { + //$groupBox.find('.ti').text(response.message); + } else { + $('.alert-msg').show(); + $('.alert-msg p').text(response.message); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); +} + function showAlert(message, inputElement) { inputElement.addClass("errored"); $('.alert-msg').show().find('p').text(message); @@ -211,45 +461,13 @@ function timeValidCheck(value) { return timePattern.test(value); } -//function validateAllTimes() { -// let timeRanges = []; - -// $(".groupBox").each(function () { -// let startTime = $(this).find('input[name*="StartTime"]').val(); -// let endTime = $(this).find('input[name*="EndTime"]').val(); - -// if (startTime.length === 5 && endTime.length === 5) { -// let startParts = startTime.split(':'); -// let endParts = endTime.split(':'); -// let startInMinutes = parseInt(startParts[0]) * 60 + parseInt(startParts[1]); -// let endInMinutes = parseInt(endParts[0]) * 60 + parseInt(endParts[1]); -// timeRanges.push({ start: startInMinutes, end: endInMinutes }); -// } -// }); - -// // Check for conflicts and order -// for (let i = 0; i < timeRanges.length; i++) { -// for (let j = 0; j < i; j++) { -// if (timeRanges[i].start >= timeRanges[i].end) { -// showAlert('زمان شروع باید قبل از زمان پایان باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } - -// // Check for overlap with previous entries -// if (timeRanges[i].start < timeRanges[j].end && timeRanges[i].end > timeRanges[j].start) { -// showAlert('زمان‌ها نباید تداخل داشته باشند', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } -// // Check if the current start time is before the previous start time -// if (i > 0 && timeRanges[i].start < timeRanges[i - 1].start) { -// showAlert('ساعت جدید نباید کوچکتر از ساعت‌های قبلی باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } -// } -// } -//} +function dateValidCheck(value) { + const datePattern = /^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/; + return datePattern.test(value); +} $('.btn-register').click(function () { + var urlPostEditRollCall = ``; if (urlPathname.indexOf('/Client/Company/WorkFlow/RollCall') > -1) { urlPostEditRollCall = saveRollCallWorkTimeFromWorkFlowAjax; @@ -261,9 +479,7 @@ $('.btn-register').click(function () { var dateEmployeeID = $('#employeeID').val() + '-' + dateFa; var loading = $('.btn-register .spinner-loading'); - var data = $('#create-form').serialize(); - $.ajax({ async: false, dataType: 'json', @@ -291,6 +507,26 @@ $('.btn-register').click(function () { //loadUndefinedRollCallsList(); //loadOverlappingLeavesList(); + //var menuActive = $('#navbar-animmenu li.active').data('menu'); + //switch (menuActive) { + // case "absent": + // loadWorkFlowsAbsentsList(); + // break; + // case "cut": + // LoadWorkFlowsCutList(); + // break; + // case "lunchBreak": + // loadWorkFlowEmployeesWithoutLunchBreakList(); + // break; + // case "undefined": + // loadUndefinedRollCallsList(); + // break; + // case "overlappingLeave": + // loadOverlappingLeavesList(); + // break; + // default: + //} + var menuActive = $('#navbar-animmenu li.active').data('menu'); switch (menuActive) { case "absent": @@ -326,7 +562,6 @@ $('.btn-register').click(function () { default: } - $('#MainModal').modal('hide'); } @@ -340,28 +575,7 @@ $('.btn-register').click(function () { $('#MainModal').modal('hide'); } - - - //loading.show(); - //$('.alert-success-msg').show(); - //$('.alert-success-msg p').text(response.message); - //setTimeout(function () { - // $('.alert-success-msg').hide(); - // $('.alert-success-msg p').text(''); - // loading.hide(); - // //$('#MainModal').modal('hide'); - // window.location.reload(); - //}, 2000); - - //setTimeout(function () { - // window.location.reload(); - // //hasData = true; - // //dateIndex = 0; - // //dateEmployeeIndex = null; - // //$('#caseHistoryLoadData').html(''); - // //caseHistoryLoadAjax(); - // //loadUntilHeightExceeds(); - //}, 1000); + //window.location.reload(); } else { $('.alert-msg').show(); @@ -386,4 +600,59 @@ function toggleHeightControl() { } else { $('.heightControll').addClass('disable'); } +} + +function getTimeWorkData() { + var rollCalls = []; + + $('.groupBox').each(function () { + var startDate = $(this).find('.StartDate').val(); + var startTime = $(this).find('.StartTime').val(); + var endDate = $(this).find('.EndDate').val(); + var endTime = $(this).find('.EndTime').val(); + + const calculateRollCallsTotalDuration = {}; + calculateRollCallsTotalDuration.StartDateFa = startDate; + calculateRollCallsTotalDuration.StartTime = startTime; + calculateRollCallsTotalDuration.EndDateFa = endDate; + calculateRollCallsTotalDuration.EndTime = endTime; + + rollCalls.push(calculateRollCallsTotalDuration); + }); + + return rollCalls; +} + +function fetchTotalsRollCall() { + const employeeId = $('#employeeSelectAddModal').val(); + const dateFa = $('.form-control-date-main').val(); + + var calculateRollCallUrl = ``; + if (urlPathname.indexOf('/Client/Company/WorkFlow/RollCall') > -1) { + calculateRollCallUrl = calculateRollCallsTotalDurationDataWorkFlowUrl; + } else { + calculateRollCallUrl = calculateRollCallsTotalDurationDataUrl; + } + + if (employeeId !== '0' && dateFa !== '') { + var rollCalls = getTimeWorkData(); + $.ajax({ + dataType: 'json', + type: 'POST', + url: calculateRollCallUrl, + data: { rollCalls }, + headers: { "RequestVerificationToken": antiForgeryToken }, + success: function (response) { + if (response) { + $('#resultCalculateRollCallsTotal').show(); + $('#resultCalculateRollCallsTotal').text(response.result); + } else { + $('#resultCalculateRollCallsTotal').hide(); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); + } } \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/LeaveCreate.js b/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/LeaveCreate.js index 955e161f..0d9e0a09 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/LeaveCreate.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/LeaveCreate.js @@ -81,6 +81,7 @@ }); $('#save').on('click', function () { + $('#save').addClass("disable"); var workshopSelect = $("#workshopSelect").val(); var employeeSelect = $("#employeeSelect").val(); @@ -142,6 +143,7 @@ $('.alert-success-msg p').text(''); }, 1500); + $('#save').addClass("disable"); $('#printSingleID').val(response.printID); $('#printSingle').show(); //$('#MainModal').modal('hide'); @@ -210,13 +212,18 @@ $('.alert-msg').hide(); $('.alert-msg p').text(''); }, 3500); - } + + $('#save').removeClass("disable"); + } }, error: function (err) { + $('#save').removeClass("disable"); console.log(err); } }); } else { + $('#save').removeClass("disable"); + $('.alert-msg').show(); $('.alert-msg p').text('لطفا خطاها را برطرف کنید.'); setTimeout(function () { diff --git a/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/ModalEditRollCallUndefined.js b/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/ModalEditRollCallUndefined.js index 4a0c6caf..f86c0484 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/ModalEditRollCallUndefined.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/ModalEditRollCallUndefined.js @@ -1,11 +1,15 @@ -var urlPathname = location.pathname; - -$(document).ready(function () { +$(document).ready(function () { $("#modalWorkshopFullname").text($('#caseHistoryWorkshopFullname').text()); $('.btn-register').addClass('disable'); $(".form-control-date").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + new Cleave(this, { date: true, delimiter: '/', @@ -14,6 +18,25 @@ $(document).ready(function () { }); $(".dateTime").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + new Cleave(this, { + time: true, + timePattern: ['h', 'm'] + }); + }); + + $(".dateTimeIrregular").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + new Cleave(this, { time: true, timePattern: ['h', 'm'] @@ -25,13 +48,22 @@ $(document).ready(function () { $(".btnAddTimeWork").on("click", function () { var currentCount = $('.groupBox').length; var $inputs = $('.dateTime'); + var $inputsDate = $('.form-control-date'); var allFilled = true; + $inputsDate.each(function () { + if ($(this).val() === '') { + allFilled = false; + $('.btn-register').addClass('disable'); + showAlert('ابتدا تاریخ و ساعت شروع و پایان را وارد نمائید.', $(this)); + } + }); + $inputs.each(function () { if ($(this).val() === '') { allFilled = false; $('.btn-register').addClass('disable'); - showAlert('ابتدا ساعت شروع و پایان را وارد نمائید.', $(this)); + showAlert('ابتدا تاریخ و ساعت شروع و پایان را وارد نمائید.', $(this)); } }); @@ -60,38 +92,91 @@ $(document).ready(function () { } var timeWorkHtml = ` -
    -
    -
    -
    نوبت ${namePlacementPersian}
    -
    -
    -
    از
    - -
    -
    -
    الی
    - -
    -
    - -
    -
    -
    `; +
    +
    +
    + نوبت ${namePlacementPersian} +
    + +
    +
    + - + +
    + +
    + +
    +
    + نوبت ${namePlacementPersian} +
    +
    الی
    +
    + +
    + +
    + + - +
    +
    + +
    + +
    +
    +
    `; $('#appendChildTimeWorkHtml').append(timeWorkHtml); - new Cleave(`input[name="Command.RollCallRecords[${currentCount}].StartTime"]`, { + const newStartDateInput = $(`input[name="Command.RollCallRecords[${currentCount}].StartDate"]`); + const newEndDateInput = $(`input[name="Command.RollCallRecords[${currentCount}].EndDate"]`); + const newStartTimeInput = $(`input[name="Command.RollCallRecords[${currentCount}].StartTime"]`); + const newEndTimeInput = $(`input[name="Command.RollCallRecords[${currentCount}].EndTime"]`); + + newStartDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + newEndDateInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newStartTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + newEndTimeInput.on('input', function () { + const value = convertPersianNumbersToEnglish($(this).val()); + $(this).val(value); + }); + + + new Cleave(newStartDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newEndDateInput[0], { + date: true, + delimiter: '/', + datePattern: ['Y', 'm', 'd'] + }); + + new Cleave(newStartTimeInput[0], { time: true, timePattern: ['h', 'm'] }); - new Cleave(`input[name="Command.RollCallRecords[${currentCount}].EndTime"]`, { + new Cleave(newEndTimeInput[0], { time: true, timePattern: ['h', 'm'] }); @@ -102,11 +187,11 @@ $(document).ready(function () { $(".btnAddTimeWork").hide(); } - // Update Remove button enable/disable state updateRemoveButtons(); } }); + $(document).on("click", ".btnRemoveTimeWork", function () { $(this).closest(".groupBox").remove(); var currentCount = $('.groupBox').length; @@ -119,7 +204,78 @@ $(document).ready(function () { // Update Remove button enable/disable state updateRemoveButtons(); + + fetchTotalsRollCall(); }); + + + + + + //-------------------------------------------------------------- + const $boxes = $('.irrregularContent'); + const $forwardArrow = $('#nextBox').parent().find('svg path:first-child'); + const $backwardArrow = $('#prevBox').parent().find('svg path:first-child'); + let currentIndex = 0; + + const updateBoxes = () => { + $boxes.each((index, box) => { + const $box = $(box); + if (index < currentIndex) { + // Previous boxes + $box.css({ + transform: 'translateX(-100%)', + opacity: 0, + position: 'absolute', + }); + } else if (index === currentIndex) { + // Current box + $box.addClass('active').css({ + transform: 'translateX(0)', + opacity: 1, + position: 'relative', + }); + } else { + // Next boxes + $box.css({ + transform: 'translateX(100%)', + opacity: 0, + position: 'absolute', + }); + } + }); + + if (currentIndex === 0) { + $backwardArrow.attr('fill', '#D9D9D9'); + $forwardArrow.attr('fill', '#2DBDBD'); + } else if (currentIndex === $boxes.length - 1) { + $backwardArrow.attr('fill', '#2DBDBD'); + $forwardArrow.attr('fill', '#D9D9D9'); + } else { + $backwardArrow.attr('fill', '#2DBDBD'); + $forwardArrow.attr('fill', '#2DBDBD'); + } + }; + + $('#nextBox').on('click', function () { + if (currentIndex < $boxes.length - 1) { + currentIndex++; + updateBoxes(); + } + }); + + $('#prevBox').on('click', function () { + if (currentIndex > 0) { + currentIndex--; + updateBoxes(); + } + }); + + updateBoxes(); + //-------------------------------------------------------------- + + + fetchTotalsRollCall(); }); function updateRemoveButtons() { $(".btnRemoveTimeWork").addClass("disable"); @@ -147,6 +303,14 @@ function updateAddButtonText(currentCount) { } let allFilled = true; + $('.form-control-date').each(function () { + const value = $(this).val().trim(); + if (value === "" || !dateValidCheck(value)) { + allFilled = false; + return false; // Break the loop + } + }); + $('.dateTime').each(function () { const value = $(this).val().trim(); if (value === "" || !timeValidCheck(value)) { @@ -162,37 +326,114 @@ function updateAddButtonText(currentCount) { } } -$(document).on('keyup', ".dateTime", function () { +$(document).on('keyup', ".dateTime, .form-control-date", function () { let $input = $(this); let value = $input.val(); let lengthValue = value.length; let currentCount = $('.groupBox').length; - if (lengthValue >= 5) { - if (!timeValidCheck(value)) { - showAlert('ساعت را به درستی وارد نمائید', $input); - updateAddButtonText(currentCount); - } else { - clearAlert($input); - // validateAllTimes(); - updateAddButtonText(currentCount); + const $groupBox = $input.closest('.groupBox'); - // focusNextTimeInput($input); + const startDate = $groupBox.find('.StartDate').val(); + const startTime = $groupBox.find('[name*="StartTime"]').val(); + const endDate = $groupBox.find('.EndDate').val(); + const endTime = $groupBox.find('[name*="EndTime"]').val(); + + // Validate input based on the field type + if ($input.hasClass('form-control-date')) { + // Date validation logic + if (lengthValue >= 10) { + if (!dateValidCheck(value)) { + showAlert('تاریخ را به درستی وارد نمائید', $input); + } else { + clearAlert($input); + dayOfWeekLoad(this, value); + } + } else { + if ($input.hasClass('StartDate')) { + $groupBox.find('.startDatetxt').text('-'); + } else if ($input.hasClass('EndDate')) { + $groupBox.find('.endDatetxt').text('-'); + } + } + } else if ($input.hasClass('dateTime')) { + if (lengthValue >= 5) { + if (!timeValidCheck(value)) { + showAlert('ساعت را به درستی وارد نمائید', $input); + } else { + clearAlert($input); + } } - } else { - updateAddButtonText(currentCount); } + + //if (startDate.length >= 10 && endDate.length >= 10) { + // if (!validateDates(startDate, endDate)) { + // showAlert('حضور غیاب در حال ویرایش را نمیتوانید بیشتر از یک روز از ثبت حضور غیاب عقب تر یا جلو تر ببرید', $input); + // } + //} + + if (startDate.length >= 10 && startTime.length >= 5 && endDate.length >= 10 && endTime.length >= 5) { + //totalWorkingDataLoad(startDate, startTime, endDate, endTime, $groupBox); + fetchTotalsRollCall(); + } + + updateAddButtonText(currentCount); }); -//function focusNextTimeInput(currentInput) { -// var inputs = $(".dateTime"); -// var currentIndex = inputs.index(currentInput); - -// if (currentIndex !== -1 && currentIndex < inputs.length - 1) { -// $(inputs[currentIndex + 1]).focus(); -// } +//function validateDates(startDate, endDate) { +// return itemsEditableDatesData.some(entry => entry.startFa === startDate && entry.endFa === endDate); //} +function dayOfWeekLoad(input, value) { + $.ajax({ + url: dayOfWeekDataWorkFlowUrl, + type: 'GET', + data: { dateFa: value }, + success: function (response) { + if (response.success) { + const $groupBox = $(input).closest('.groupBox'); + if ($(input).hasClass('StartDate')) { + $groupBox.find('.startDatetxt').text(response.message); + } else if ($(input).hasClass('EndDate')) { + $groupBox.find('.endDatetxt').text(response.message); + } + } else { + $('.alert-msg').show(); + $('.alert-msg p').text(response.message); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); +} +function totalWorkingDataLoad(startDateVal, startTimeVal, endDateVal, endTimeVal, $groupBox) { + $.ajax({ + url: totalWorkingDataUrl, + type: 'GET', + data: { startDate: startDateVal, startTime: startTimeVal, endDate: endDateVal, endTime: endTimeVal }, + success: function (response) { + if (response) { + //$groupBox.find('.ti').text(response.message); + } else { + $('.alert-msg').show(); + $('.alert-msg p').text(response.message); + setTimeout(function () { + $('.alert-msg').hide(); + $('.alert-msg p').text(''); + }, 3500); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); +} + function showAlert(message, inputElement) { inputElement.addClass("errored"); $('.alert-msg').show().find('p').text(message); @@ -211,62 +452,25 @@ function timeValidCheck(value) { return timePattern.test(value); } -//function validateAllTimes() { -// let timeRanges = []; - -// $(".groupBox").each(function () { -// let startTime = $(this).find('input[name*="StartTime"]').val(); -// let endTime = $(this).find('input[name*="EndTime"]').val(); - -// if (startTime.length === 5 && endTime.length === 5) { -// let startParts = startTime.split(':'); -// let endParts = endTime.split(':'); -// let startInMinutes = parseInt(startParts[0]) * 60 + parseInt(startParts[1]); -// let endInMinutes = parseInt(endParts[0]) * 60 + parseInt(endParts[1]); -// timeRanges.push({ start: startInMinutes, end: endInMinutes }); -// } -// }); - -// // Check for conflicts and order -// for (let i = 0; i < timeRanges.length; i++) { -// for (let j = 0; j < i; j++) { -// if (timeRanges[i].start >= timeRanges[i].end) { -// showAlert('زمان شروع باید قبل از زمان پایان باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } - -// // Check for overlap with previous entries -// if (timeRanges[i].start < timeRanges[j].end && timeRanges[i].end > timeRanges[j].start) { -// showAlert('زمان‌ها نباید تداخل داشته باشند', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } -// // Check if the current start time is before the previous start time -// if (i > 0 && timeRanges[i].start < timeRanges[i - 1].start) { -// showAlert('ساعت جدید نباید کوچکتر از ساعت‌های قبلی باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]')); -// return; -// } -// } -// } -//} +function dateValidCheck(value) { + const datePattern = /^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/; + return datePattern.test(value); +} $('.btn-register').click(function () { - var dateFa = $('#dateFa').val().replaceAll("/", ""); var dateEmployeeID = $('#employeeID').val() + '-' + dateFa; var loading = $('.btn-register .spinner-loading'); - var data = $('#create-form').serialize(); - $.ajax({ async: false, dataType: 'json', type: 'POST', - url: saveRollCallWorkTimeAjax, + url: saveRollCallManualCreateOrEditForUndefinedUrl, headers: { "RequestVerificationToken": antiForgeryToken }, data: data, success: function (response) { - if (response.success) { loading.show(); $('.alert-success-msg').show(); @@ -277,86 +481,48 @@ $('.btn-register').click(function () { loading.hide(); }, 2000); - if (urlPathname.indexOf('/Client/Company/WorkFlow/RollCall') > -1) { - _RefreshCountMenu(); - CountWorkFlowOfAbsentAndCut(); - //LoadWorkFlowsCutList(); - //loadWorkFlowsAbsentsList(); - //loadWorkFlowEmployeesWithoutLunchBreakList(); - //loadUndefinedRollCallsList(); - //loadOverlappingLeavesList(); + _RefreshCountMenu(); + CountWorkFlowOfAbsentAndCut(); - var menuActive = $('#navbar-animmenu li.active').data('menu'); - switch (menuActive) { - case "absent": - /*loadWorkFlowsAbsentsList();*/ - $(`[data-absent-employee-date="${dateEmployeeID}"]`).remove(); - updateIndexesWorkFlow(`absent_${dateFa}`); - updateMainWorkFlow(`absentMain_${dateFa}`); - break; - case "cut": - //LoadWorkFlowsCutList(); - $(`[data-cut-employee-date="${dateEmployeeID}"]`).remove(); - updateIndexesWorkFlow(`cut_${dateFa}`); - updateMainWorkFlow(`cutMain_${dateFa}`); - break; - case "lunchBreak": - //loadWorkFlowEmployeesWithoutLunchBreakList(); - $(`[data-break-employee-date="${dateEmployeeID}"]`).remove(); - updateIndexesWorkFlow(`break_${dateFa}`); - updateMainWorkFlow(`breakMain_${dateFa}`); - break; - case "undefined": - //loadUndefinedRollCallsList(); - $(`[data-undefined-employee-date="${dateEmployeeID}"]`).remove(); - updateIndexesWorkFlow(`undefined_${dateFa}`); - updateMainWorkFlow(`undefinedMain_${dateFa}`); - break; - case "overlappingLeave": - //loadOverlappingLeavesList(); - $(`[data-leave-employee-date="${dateEmployeeID}"]`).remove(); - updateIndexesWorkFlow(`leave_${dateFa}`); - updateMainWorkFlow(`leaveMain_${dateFa}`); - break; - default: - } - - - $('#MainModal').modal('hide'); + var menuActive = $('#navbar-animmenu li.active').data('menu'); + switch (menuActive) { + case "absent": + /*loadWorkFlowsAbsentsList();*/ + $(`[data-absent-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`absent_${dateFa}`); + updateMainWorkFlow(`absentMain_${dateFa}`); + break; + case "cut": + //LoadWorkFlowsCutList(); + $(`[data-cut-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`cut_${dateFa}`); + updateMainWorkFlow(`cutMain_${dateFa}`); + break; + case "lunchBreak": + //loadWorkFlowEmployeesWithoutLunchBreakList(); + $(`[data-break-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`break_${dateFa}`); + updateMainWorkFlow(`breakMain_${dateFa}`); + break; + case "undefined": + //loadUndefinedRollCallsList(); + $(`[data-undefined-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`undefined_${dateFa}`); + updateMainWorkFlow(`undefinedMain_${dateFa}`); + break; + case "overlappingLeave": + //loadOverlappingLeavesList(); + $(`[data-leave-employee-date="${dateEmployeeID}"]`).remove(); + updateIndexesWorkFlow(`leave_${dateFa}`); + updateMainWorkFlow(`leaveMain_${dateFa}`); + break; + default: } - if (urlPathname.indexOf('/Client/Company/RollCall/CaseHistory') > -1) { - hasData = true; - dateIndex = 0; - dateEmployeeIndex = null; - $('#caseHistoryLoadData').html(''); - caseHistoryLoadAjax(); - loadUntilHeightExceeds(); - $('#MainModal').modal('hide'); - } + $('#MainModal').modal('hide'); + - - - //loading.show(); - //$('.alert-success-msg').show(); - //$('.alert-success-msg p').text(response.message); - //setTimeout(function () { - // $('.alert-success-msg').hide(); - // $('.alert-success-msg p').text(''); - // loading.hide(); - // //$('#MainModal').modal('hide'); - // window.location.reload(); - //}, 2000); - - //setTimeout(function () { - // window.location.reload(); - // //hasData = true; - // //dateIndex = 0; - // //dateEmployeeIndex = null; - // //$('#caseHistoryLoadData').html(''); - // //caseHistoryLoadAjax(); - // //loadUntilHeightExceeds(); - //}, 1000); + //window.location.reload(); } else { $('.alert-msg').show(); @@ -381,4 +547,52 @@ function toggleHeightControl() { } else { $('.heightControll').addClass('disable'); } +} + +function getTimeWorkData() { + var rollCalls = []; + + $('.groupBox').each(function () { + var startDate = $(this).find('.StartDate').val(); + var startTime = $(this).find('.StartTime').val(); + var endDate = $(this).find('.EndDate').val(); + var endTime = $(this).find('.EndTime').val(); + + const calculateRollCallsTotalDuration = {}; + calculateRollCallsTotalDuration.StartDateFa = startDate; + calculateRollCallsTotalDuration.StartTime = startTime; + calculateRollCallsTotalDuration.EndDateFa = endDate; + calculateRollCallsTotalDuration.EndTime = endTime; + + rollCalls.push(calculateRollCallsTotalDuration); + }); + + return rollCalls; +} + +function fetchTotalsRollCall() { + const employeeId = $('#employeeSelectAddModal').val(); + const dateFa = $('.form-control-date-main').val(); + + if (employeeId !== '0' && dateFa !== '') { + var rollCalls = getTimeWorkData(); + $.ajax({ + dataType: 'json', + type: 'POST', + url: calculateRollCallsTotalDurationDataWorkFlowUrl, + data: { rollCalls }, + headers: { "RequestVerificationToken": antiForgeryToken }, + success: function (response) { + if (response) { + $('#resultCalculateRollCallsTotal').show(); + $('#resultCalculateRollCallsTotal').text(response.result); + } else { + $('#resultCalculateRollCallsTotal').hide(); + } + }, + error: function (xhr, status, error) { + console.error(xhr.responseText); + } + }); + } } \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/RollCall.js b/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/RollCall.js index c515dd8e..c273da0c 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/RollCall.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/WorkFlow/js/RollCall.js @@ -475,7 +475,7 @@ function loadEmployeeListByWorkFlowsCut(date) { تایید -