Insurance Edit Custom modal bug fixed - employee bank info updated

This commit is contained in:
SamSys
2025-02-05 05:27:08 +03:30
parent fb6667a0de
commit 141ae59939
26 changed files with 682 additions and 243 deletions

View File

@@ -18,6 +18,10 @@ namespace _0_Framework.InfraStructure
_context = context;
}
public void AddRange(IEnumerable<T> entities)
{
_context.AddRange(entities);
}
public void Create(T entity)
{
_context.Add(entity);

View File

@@ -7,14 +7,17 @@ namespace Company.Domain.EmployeeBankInformationAgg
{
public interface IEmployeeBankInformationRepository : IRepository<long, EmployeeBankInformation>
{
List<GroupedEmployeeBankInformationViewModel> Search(long workshopId, EmployeeBankInformationSearchModel searchParams);
void AddRange(IEnumerable<EmployeeBankInformation> entities);
void Remove(EmployeeBankInformation bankInformation);
void RemoveRange(List<EmployeeBankInformation> entities);
List<GroupedEmployeeBankInformationViewModel> Search(long workshopId, EmployeeBankInformationSearchModel searchParams);
GroupedEmployeeBankInformationViewModel GetByEmployeeId(long workshopId, long employeeId);
List<EmployeeBankInformation> GetRangeByEmployeeId(long workshopId, long employeeId);
void RemoveRange(List<EmployeeBankInformation> entities);
EmployeeBankInformationViewModel GetDetails(long id);
List<GroupedEmployeeBankInformationViewModel> GetAllByWorkshopId(long workshopId);
}
}

View File

@@ -10,7 +10,7 @@ namespace CompanyManagment.App.Contracts.EmployeeBankInformation
{
public long EmployeeId { get; set; }
public string EmployeeName { get; set; }
public long WorkshopId { get; set; }
public long WorkshopId { get; set; }
public long BankId { get; set; }
//شماره حساب

View File

@@ -14,4 +14,5 @@ public class EmployeeBankInformationViewModel
public string BankAccountNumber { get; set; }
public bool IsDefault { get; set; }
public long BankId { get; set; }
public long BankLogoMediaId { get; set; }
}

View File

@@ -11,4 +11,5 @@ public class GroupedEmployeeBankInformationViewModel
public int TotalBankAccountsCount { get; set; }
public List<EmployeeBankInformationViewModel> BankInformation { get; set; }
public List<string> BankPicturesList { get; set; }
public List<string> BankNamesList { get; set; }
}

View File

@@ -6,7 +6,8 @@ namespace CompanyManagment.App.Contracts.EmployeeBankInformation
public interface IEmployeeBankInformationApplication
{
OperationResult Create(CreateEmployeeInformation command);
OperationResult Edit(EditEmployeeInformation command);
OperationResult GroupCreate(long workshopId, List<CreateEmployeeInformation> command);
OperationResult Edit(EditEmployeeInformation command);
List<GroupedEmployeeBankInformationViewModel> Search(long workshopId, EmployeeBankInformationSearchModel searchParams);
GroupedEmployeeBankInformationViewModel GetByEmployeeId(long workshopId, long employeeId);
EmployeeBankInformationViewModel GetDetails(long id);

View File

@@ -1305,17 +1305,6 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
double salary = command.Salary.MoneyToDouble();
var employeesShifts =
command.ShiftViewModel.Select(x =>
{
if (!TimeOnly.TryParseExact(x.StartTime, "HH:mm", out TimeOnly start))
throw new InvalidDataException();
if (!TimeOnly.TryParseExact(x.EndTime, "HH:mm", out TimeOnly end))
throw new InvalidDataException();
return new CustomizeWorkshopEmployeeSettingsShift(start, end, x.Placement);
}).ToList();
bool isChanged;
if (fridayPay == entity.FridayPay && overTimePay == entity.OverTimePay && baseYearsPay == entity.BaseYearsPay && bonusesPay == entity.BonusesPay

View File

@@ -17,51 +17,63 @@ namespace CompanyManagment.Application
}
//todo: add CardNumber, BankAccountNumber, etc validations
public OperationResult Create(CreateEmployeeInformation command)
{
OperationResult op = new();
{
var workshopEmployeeBankInfoList =
_employeeBankInformationRepository.GetAllByWorkshopId(command.WorkshopId);
if (HasAtLeastOneFormFilled(command) == false)
return op.Failed("لطفا حداقل یکی از مشخصات بانکی را کامل کنید");
OperationResult op = ValidateCreateOperation(workshopEmployeeBankInfoList,command);
//if (_employeeBankInformationRepository.Exists(x =>
// x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId &&
// x.BankId == command.BankId))
// return op.Failed("این کاربر در بانک انتخاب شده حساب دارد");
if (op.IsSuccedded == false)
return op;
if (!string.IsNullOrWhiteSpace(command.BankAccountNumber) && _employeeBankInformationRepository.Exists(x =>
x.WorkshopId == command.WorkshopId &&
x.BankAccountNumber == command.BankAccountNumber))
return op.Failed("این شماره حساب قبلا ثبت شده است");
if (!string.IsNullOrWhiteSpace(command.CardNumber) && _employeeBankInformationRepository.Exists(x =>
x.WorkshopId == command.WorkshopId &&
x.CardNumber == command.CardNumber))
return op.Failed("این شماره کارت قبلا ثبت شده است");
if (!string.IsNullOrWhiteSpace(command.ShebaNumber) && _employeeBankInformationRepository.Exists(x =>
x.WorkshopId == command.WorkshopId &&
x.ShebaNumber == command.ShebaNumber))
return op.Failed("این شماره شبا قبلا ثبت شده است");
var entity = new EmployeeBankInformation(command.EmployeeId, command.WorkshopId, command.BankId,
var entity = new EmployeeBankInformation(command.EmployeeId, command.WorkshopId, command.BankId,
command.BankAccountNumber, command.CardNumber, command.ShebaNumber);
if(HasNoRecordInWorkshop(command.WorkshopId,command.EmployeeId))
if (HasNoRecordInWorkshop(command.WorkshopId, command.EmployeeId, workshopEmployeeBankInfoList))
entity.SetDefault();
_employeeBankInformationRepository.Create(entity);
_employeeBankInformationRepository.SaveChanges();
return op.Succcedded(entity.id);
}
public OperationResult SetDefault(long workshopId, long bankInfoId)
public OperationResult GroupCreate(long workshopId,List<CreateEmployeeInformation> command)
{
var workshopEmployeeBankInfoList =
_employeeBankInformationRepository.GetAllByWorkshopId(workshopId);
OperationResult op = new();
//Validations
foreach (var newEBI in command)
{
op = ValidateCreateOperation(workshopEmployeeBankInfoList, newEBI);
if (op.IsSuccedded == false)
return op;
}
//ShapeShifting
var entities = command.Select(x=> new EmployeeBankInformation(x.EmployeeId, workshopId, x.BankId,
x.BankAccountNumber, x.CardNumber, x.ShebaNumber)).ToList();
entities.ForEach(newEBI =>
{
if (HasNoRecordInWorkshop(workshopId, newEBI.EmployeeId, workshopEmployeeBankInfoList))
newEBI.SetDefault();
});
_employeeBankInformationRepository.AddRange(entities);
_employeeBankInformationRepository.SaveChanges();
return op.Succcedded();
}
public OperationResult SetDefault(long workshopId, long bankInfoId)
{
OperationResult op = new();
@@ -100,6 +112,7 @@ namespace CompanyManagment.Application
if (HasAtLeastOneFormFilled(command) == false)
return op.Failed("لطفا حداقل یکی از مشخصات بانکی را کامل کنید");
//if (_employeeBankInformationRepository.Exists(x =>
// x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId &&
// x.BankId == command.BankId && x.id!= command.Id))
@@ -116,6 +129,11 @@ namespace CompanyManagment.Application
x.CardNumber == command.CardNumber && x.id != command.Id))
return op.Failed("این شماره کارت قبلا ثبت شده است");
if (!string.IsNullOrWhiteSpace(command.ShebaNumber) && _employeeBankInformationRepository.Exists(x =>
x.WorkshopId == command.WorkshopId &&
x.ShebaNumber == command.ShebaNumber && x.id != command.Id))
return op.Failed("این شماره شبا قبلا ثبت شده است");
if (!string.IsNullOrWhiteSpace(command.ShebaNumber) && _employeeBankInformationRepository.Exists(x =>
x.WorkshopId == command.WorkshopId &&
x.ShebaNumber == command.ShebaNumber && x.id != command.Id))
@@ -189,6 +207,34 @@ namespace CompanyManagment.Application
#region Private Methods
private OperationResult ValidateCreateOperation(List<GroupedEmployeeBankInformationViewModel> workshopEmployeeBankInfoList, CreateEmployeeInformation command)
{
OperationResult op = new();
//if (workshopEmployeeBankInfoList.Exists(x =>
// x.EmployeeId == command.EmployeeId && x.WorkshopId == workshopId &&
// x.BankId == command.BankId))
// return op.Failed("این کاربر در بانک انتخاب شده حساب دارد");
if (HasAtLeastOneFormFilled(command) == false)
return op.Failed("لطفا حداقل یکی از مشخصات بانکی را کامل کنید");
//Conditions below and multiple accesses to DB can be optimized if needed
if (!string.IsNullOrWhiteSpace(command.BankAccountNumber) && workshopEmployeeBankInfoList.Exists(x =>
x.BankInformation.Exists(y => y.BankAccountNumber == command.BankAccountNumber)))
return op.Failed("این شماره حساب قبلا ثبت شده است");
if (!string.IsNullOrWhiteSpace(command.CardNumber) && workshopEmployeeBankInfoList.Exists(x =>
x.BankInformation.Exists(y => y.CardNumber == command.CardNumber)))
return op.Failed("این شماره کارت قبلا ثبت شده است");
if (!string.IsNullOrWhiteSpace(command.ShebaNumber) && workshopEmployeeBankInfoList.Exists(x =>
x.BankInformation.Exists(y => y.ShebaNumber == command.ShebaNumber)))
return op.Failed("این شماره شبا قبلا ثبت شده است");
return op.Succcedded();
}
private bool HasAtLeastOneFormFilled(CreateEmployeeInformation inputs)
{
return !string.IsNullOrWhiteSpace(inputs.BankAccountNumber) ||
@@ -196,12 +242,13 @@ namespace CompanyManagment.Application
!string.IsNullOrWhiteSpace(inputs.ShebaNumber);
}
private bool HasNoRecordInWorkshop(long workshopId, long employeeId)
private bool HasNoRecordInWorkshop(long workshopId, long employeeId,List<GroupedEmployeeBankInformationViewModel> workshopRecords)
{
return !_employeeBankInformationRepository.Exists(x =>
return !workshopRecords.Exists(x =>
x.WorkshopId == workshopId && x.EmployeeId == employeeId);
}
#endregion
}
}

View File

@@ -388,8 +388,8 @@ public class InsuranceListApplication: IInsuranceListApplication
x.Year == searchModel.Year && x.Month == searchModel.Month &&
searchModel.WorkshopIds.Contains(x.WorkshopId)))
{
var startMonthFa = $"{searchModel.Year}/{searchModel.Month}/01";
DateTime startDateGr = startMonthFa.ToGeorgianDateTime();
var startMonthFa = $"{searchModel.Year}/{searchModel.Month.PadLeft(2, '0')}/01";
DateTime startDateGr = startMonthFa.ToGeorgianDateTime();
DateTime endDateGr = startMonthFa.FindeEndOfMonth()
.ToGeorgianDateTime();
int endOfMonth = Convert.ToInt32((startMonthFa.FindeEndOfMonth()).Substring(8, 2));
@@ -423,7 +423,9 @@ public class InsuranceListApplication: IInsuranceListApplication
//بدست آوردن پایه سنوات
var baseYears = _insuranceListRepositpry.GetEmployeeInsuranceBaseYear(employee.EmployeeId, workshopId,
workingDays.countWorkingDays, startDateGr, endDateGr,workingDays.startWork, workingDays.endWork, workingDays.hasLeftWorkInMonth);
baseYears.baseYear = employee.JobId is 10 or 16 or 17 or 18 ? 0 : baseYears.baseYear;
//آیا کارفرما یا مدیر عامل است؟
bool isManager = employee.JobId is 10 or 16 or 17 or 18 ;
baseYears.baseYear = isManager ? 0 : baseYears.baseYear;
Console.WriteLine(employee.JobId + " - "+ baseYears.baseYear);
//جمع مزد روزانه و پایه سنوات
var dailyWagePlusBaseYears = dailyWage + baseYears.baseYear;
@@ -433,7 +435,7 @@ public class InsuranceListApplication: IInsuranceListApplication
var monthlySalary = GetRoundValue(dailyWagePlusBaseYears * workingDays.countWorkingDays);
//حق تاهل
var marriedAllowance = employee.MaritalStatus == "متاهل" ? yearlysaleries.MarriedAllowance : 0;
var marriedAllowance = employee.MaritalStatus == "متاهل" && !isManager ? yearlysaleries.MarriedAllowance : 0;
//محاسبه مزایای ماهانه
var monthlyBenefits = GetMonthlyBenefits(endOfMonth, yearlysaleries.ConsumableItems, yearlysaleries.HousingAllowance, marriedAllowance, workingDays.countWorkingDays, searchModel.TypeOfInsuranceSendWorkshop, employee.JobId, employee.EmployeeId,employee.IncludeStatus);
@@ -514,7 +516,7 @@ public class InsuranceListApplication: IInsuranceListApplication
DailyWagePlusBaseYears = dailyWagePlusBaseYears,
//حق تاهل
MarriedAllowance = employee.MaritalStatus == "متاهل" ? yearlysaleries.MarriedAllowance : 0,
MarriedAllowance = marriedAllowance,
//دستمزد ماهانه
MonthlySalary = monthlySalary,
@@ -1370,7 +1372,7 @@ public class InsuranceListApplication: IInsuranceListApplication
{
var result = new MainEmployeeDetailsViewModel();
var workshopId = searchModel.WorkshopIds.FirstOrDefault();
var startMonthFa = $"{searchModel.Year}/{searchModel.Month}/01";
var startMonthFa = $"{searchModel.Year}/{searchModel.Month.PadLeft(2, '0')}/01";
DateTime startDateGr = startMonthFa.ToGeorgianDateTime();
DateTime endDateGr = startMonthFa.FindeEndOfMonth()
.ToGeorgianDateTime();
@@ -1396,6 +1398,9 @@ public class InsuranceListApplication: IInsuranceListApplication
var leftWorkFa = workingDays.hasLeftWorkInMonth ? employeeData.LeftWorkDateGr.ToFarsi() : "";
var startWorkFa = employeeData.StartWorkDateGr.ToFarsi();
//آیا کارفرما است
bool isManager = employeeData.JobId is 10 or 16 or 17 or 18;
//محاسبه حق بیمه سهم کارفرما
var employerShare = (employeeData.BenefitsIncludedContinuous * 20) / 100;
@@ -1456,7 +1461,7 @@ public class InsuranceListApplication: IInsuranceListApplication
DailyWagePlusBaseYears = employeeData.DailyWagePlusBaseYears,
//حق تاهل
MarriedAllowance = employeeData.MarriedAllowance,
MarriedAllowance = isManager ? 0 : employeeData.MarriedAllowance,
//دستمزد ماهانه
MonthlySalary = employeeData.MonthlySalary,

View File

@@ -48,22 +48,31 @@ namespace CompanyManagment.EFCore.Repository
var bankInfoList = bankInfoQuery.ToList();
var groupedBanks = bankInfoList.GroupBy(x => x.Bank).Select(x => x.Key).ToList();
var groupedBanks = bankInfoList.GroupBy(x => x.EmployeeId)
.Select(x => new { EmployeeId=x.Key,Banks= x.Select(y=>y.Bank).ToList() }).ToList();
//Get bank logos from account context
var mediaIds = groupedBanks.Select(x => x.BankLogoMediaId).ToList();
var mediaIds = groupedBanks.SelectMany(x => x.Banks.Select(y=>y.BankLogoMediaId)).ToList();
var banksLogos = _accountContext.Medias.Where(y => mediaIds.Contains(y.id))
.Select(media => new { media.Path, MediaId = media.id }).ToList();
return bankInfoList.GroupBy(x => x.EmployeeId).Select(x => new GroupedEmployeeBankInformationViewModel()
return bankInfoList.GroupBy(x => x.EmployeeId).Select(x =>
{
BankPicturesList = banksLogos.Select(y => y.Path).ToList(),
EmployeeId = x.Key,
WorkshopId = workshopId,
EmployeeName = x.FirstOrDefault()?.FullName ?? "",
TotalBankAccountsCount = x.Count(),
PersonnelCode = personnelCodes.FirstOrDefault(y => y.EmployeeId == x.Key)?.PersonnelCode.ToString() ?? "",
var banks = groupedBanks.First(y => y.EmployeeId == x.Key).Banks;
return new GroupedEmployeeBankInformationViewModel()
{
BankPicturesList = banksLogos.Where(y => banks.Any(z => y.MediaId == z.BankLogoMediaId))
.Select(y => y.Path).ToList(),
EmployeeId = x.Key,
WorkshopId = workshopId,
EmployeeName = x.FirstOrDefault()?.FullName ?? "",
TotalBankAccountsCount = x.Count(),
PersonnelCode =
personnelCodes.FirstOrDefault(y => y.EmployeeId == x.Key)?.PersonnelCode.ToString() ?? "",
BankNamesList = banks.Select(y => y.BankName).ToList()
};
}).ToList();
}
@@ -86,12 +95,15 @@ namespace CompanyManagment.EFCore.Repository
var groupedBanks = bankInfoList.GroupBy(x => x.Bank).Select(x => x.Key).ToList();
var mediaIds = groupedBanks.Select(x => x.BankLogoMediaId).ToList();
var banksLogos = _accountContext.Medias.Where(y => mediaIds.Contains(y.id))
.Select(media => new { media.Path, MediaId = media.id }).ToList();
return new GroupedEmployeeBankInformationViewModel()
var banksLogos = _accountContext.Medias.Where(y => mediaIds.Contains(y.id))
.Select(media => new { media.Path, MediaId = media.id });
var banksLogosList = banksLogos.ToList();
var result = new GroupedEmployeeBankInformationViewModel()
{
BankPicturesList = banksLogos.Select(y => y.Path).ToList(),
BankPicturesList = banksLogosList.Select(y => y.Path).ToList(),
EmployeeId = employeeId,
WorkshopId = workshopId,
EmployeeName = entities.FirstOrDefault()?.Employee.FullName ?? "",
@@ -101,6 +113,7 @@ namespace CompanyManagment.EFCore.Repository
{
Id = y.id,
BankId = y.BankId,
BankLogoMediaId=y.Bank.BankLogoMediaId,
BankAccountNumber = y.BankAccountNumber,
BankName = y.Bank.BankName,
CardNumber = y.CardNumber,
@@ -108,7 +121,12 @@ namespace CompanyManagment.EFCore.Repository
IsDefault = y.IsDefault
}).OrderByDescending(y=>y.IsDefault).ToList()
};
result.BankInformation.ForEach(x =>
{
x.BankLogoPath = banksLogos.FirstOrDefault(z => z.MediaId == x.BankLogoMediaId)?.Path ?? "";
});
return result;
}
public List<EmployeeBankInformation> GetRangeByEmployeeId(long workshopId, long employeeId)
@@ -117,6 +135,8 @@ namespace CompanyManagment.EFCore.Repository
x.WorkshopId == workshopId && x.EmployeeId == employeeId).ToList();
}
public void RemoveRange(List<EmployeeBankInformation> entities)
{
_companyContext.EmployeeBankInformationSet.RemoveRange(entities);
@@ -160,30 +180,38 @@ namespace CompanyManagment.EFCore.Repository
var bankInfoList = bankInfoQuery.ToList();
var groupedBanks = bankInfoList.GroupBy(x => x.EmployeeId).Select(x =>new{EmployeeId=x.Key,Banks=x.Select(y=>y.Bank).ToList()}).ToList();
//Get bank logos from account context
var groupedBanks = bankInfoList.GroupBy(x => x.Bank).Select(x => x.Key).ToList();
var mediaIds = groupedBanks.Select(x => x.BankLogoMediaId).ToList();
var mediaIds = groupedBanks.SelectMany(x => x.Banks.Select(y=>y.BankLogoMediaId)).ToList();
var banksLogos = _accountContext.Medias.Where(y => mediaIds.Contains(y.id))
.Select(media => new { media.Path, MediaId = media.id }).ToList();
return bankInfoQuery.GroupBy(x => x.Employee).Select(x => new GroupedEmployeeBankInformationViewModel()
return bankInfoList.GroupBy(x => x.Employee).Select(x =>
{
BankPicturesList = banksLogos.Select(y => y.Path).ToList(),
EmployeeId = x.Key.id,
WorkshopId = workshopId,
EmployeeName = x.Key.FullName,
TotalBankAccountsCount = x.Count(),
PersonnelCode = personnelCodes.FirstOrDefault(y => y.EmployeeId == x.Key.id).PersonnelCode.ToString(),
BankInformation = x.OrderByDescending(y=>y.IsDefault).Select(y => new EmployeeBankInformationViewModel()
{
Id = y.id,
BankAccountNumber = y.BankAccountNumber,
BankName = y.Bank.BankName,
CardNumber = y.CardNumber,
ShebaNumber = y.ShebaNumber,
IsDefault = y.IsDefault,
}).ToList()
var banks = groupedBanks.First(y => y.EmployeeId == x.Key.id).Banks;
return new GroupedEmployeeBankInformationViewModel()
{
BankPicturesList = banksLogos.Where(y => banks.Any(z => y.MediaId == z.BankLogoMediaId))
.Select(y => y.Path).ToList(),
BankNamesList = banks.Select(y => y.BankName).ToList(),
EmployeeId = x.Key.id,
WorkshopId = workshopId,
EmployeeName = x.Key.FullName,
TotalBankAccountsCount = x.Count(),
PersonnelCode = personnelCodes.FirstOrDefault(y => y.EmployeeId == x.Key.id).PersonnelCode
.ToString(),
BankInformation = x.OrderByDescending(y => y.IsDefault).Select(y =>
new EmployeeBankInformationViewModel()
{
Id = y.id,
BankAccountNumber = y.BankAccountNumber,
BankName = y.Bank.BankName,
CardNumber = y.CardNumber,
ShebaNumber = y.ShebaNumber,
IsDefault = y.IsDefault,
}).ToList()
};
}).ToList();

View File

@@ -364,7 +364,7 @@
</div>
<div class="col-md-4 col-4 col-sm-4" style="padding:10px">
<label for="MonthlySalary"> حقوق ماهیانه مشمول </label>
<label for="MonthlySalary"> حقوق ماهیانه + پایه سنوات </label>
<input type="text" class="input s7" id="MonthlySalary" name="MonthlySalary" disabled="disabled">
</div>
<div class="col-md-4 col-4 col-sm-4" style="padding:10px">
@@ -731,7 +731,7 @@
$(this).find('td:eq(2)').text($('#StartWorkDate').val());
$(this).find('td:eq(3)').text(jobName);
$(this).find('td:eq(4)').text($('#InsuranceShare').val());
var monthlySalary = getNumberValue($('#MonthlySalary').val());
var monthlySalaryPlusBaseyear = getNumberValue($('#hiddenMonthlySalaryPlusBaseYear').val());
var benefitsIncludedContinuous = getNumberValue($('#BenefitsIncludedContinuous').val());
var benefitsIncluded = Number(monthlySalaryPlusBaseyear) + Number(benefitsIncludedContinuous);
@@ -755,8 +755,8 @@
$(this).find('td:eq(7)').text($('#BenefitsIncludedContinuous').val());
$(this).find('td:eq(7)').attr('data-monthlybenefits', benefitsIncludedContinuous);
$(this).find('td:eq(8)').text($('#MonthlySalary').val());
$(this).find('td:eq(8)').attr("data-monthlysalary", monthlySalary);
$(this).find('td:eq(8)').text($('#hiddenMonthlySalaryPlusBaseYear').val());
$(this).find('td:eq(8)').attr("data-monthlysalary", monthlySalaryPlusBaseyear);
$(this).find('td:eq(11)').text($('#DailyWage').val());
$(this).find('td:eq(11)').attr("data-dailywage", getNumberValue($('#DailyWage').val()));
@@ -968,7 +968,7 @@
// console.log(response);
$("#WorkingDays").val(response.workingDay);
$("#DailyWage").val(response.dailyWag);
$("#MonthlySalary").val(response.monthlySalary);
$("#MonthlySalary").val(response.monthlySalaryPlusBaseYear);
$("#InsuranceShare").val(response.insuranceShare);
$("#BenefitsIncludedContinuous").val(response.benefitsIncludedContinuous);
$("#hiddenMonthlySalaryPlusBaseYear").val(response.monthlySalaryPlusBaseYear);

View File

@@ -308,7 +308,7 @@
<input type="hidden" class="input s7 " id="yearlySalaryItem">
</div>
<div class="col-md-4 col-4 col-sm-4" style="padding:10px">
<label for="MonthlySalary"> حقوق ماهیانه مشمول </label>
<label for="MonthlySalary"> حقوق ماهیانه + پایه سنوات </label>
<input type="text" class="input s7" id="MonthlySalary" name="MonthlySalary" disabled="disabled">
</div>
<div class="col-md-4 col-4 col-sm-4" style="padding:10px">
@@ -673,7 +673,7 @@
$(this).find('td:eq(2)').text($('#StartWorkDate').val());
$(this).find('td:eq(3)').text(jobName);
$(this).find('td:eq(4)').text($('#InsuranceShare').val());
var monthlySalary = getNumberValue($('#MonthlySalary').val());
var monthlySalaryPlusBaseyear = getNumberValue($('#hiddenMonthlySalaryPlusBaseYear').val());
var benefitsIncludedContinuous = getNumberValue($('#BenefitsIncludedContinuous').val());
var benefitsIncluded = Number(monthlySalaryPlusBaseyear) + Number(benefitsIncludedContinuous);
@@ -697,8 +697,8 @@
$(this).find('td:eq(7)').text($('#BenefitsIncludedContinuous').val());
$(this).find('td:eq(7)').attr('data-monthlybenefits', benefitsIncludedContinuous);
$(this).find('td:eq(8)').text($('#MonthlySalary').val());
$(this).find('td:eq(8)').attr("data-monthlysalary", monthlySalary);
$(this).find('td:eq(8)').text($('#hiddenMonthlySalaryPlusBaseYear').val());
$(this).find('td:eq(8)').attr("data-monthlysalary", monthlySalaryPlusBaseyear);
$(this).find('td:eq(11)').text($('#DailyWage').val());
$(this).find('td:eq(11)').attr("data-dailywage", getNumberValue($('#DailyWage').val()));
@@ -977,7 +977,7 @@
success: function(response) { // console.log(response);
$("#WorkingDays").val(response.workingDay);
$("#DailyWage").val(response.dailyWag);
$("#MonthlySalary").val(response.monthlySalary);
$("#MonthlySalary").val(response.monthlySalaryPlusBaseYear);
$("#InsuranceShare").val(response.insuranceShare);
$("#BenefitsIncludedContinuous").val(response.benefitsIncludedContinuous);
$("#hiddenMonthlySalaryPlusBaseYear").val(response.monthlySalaryPlusBaseYear);

View File

@@ -1,5 +1,6 @@
using System.Text;
using _0_Framework.Application;
using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.Employer;
using CompanyManagment.App.Contracts.InsuranceList;
@@ -923,8 +924,11 @@ public class IndexModel : PageModel
{
var benefitsIncludedContinuousL = benefitsIncludedContinuous.MoneyToDouble();
bool isManager = jobId is "10" or "16" or "17" or "18";
if (isManager)
maritalStatus = 0;
double sum = 0;
double sum = 0;
var employeeMaritalStatus = _employeeApplication.GetDetails(employeeId);
if (employeeMaritalStatus.MaritalStatus == "متاهل")
sum = consumableItems.MoneyToDouble() + housingAllowance.MoneyToDouble() + maritalStatus;
@@ -986,7 +990,7 @@ public class IndexModel : PageModel
{
monthlySalaryPlusBaseYear = monthlySalaryL,
monthlySalaryPlusBaseYear = monthlySalaryL.ToMoney(),
monthlySalary = monthlySalaryWithOutBaseYear.ToMoney(),
benefitsIncludedContinuous = benefitsIncludedContinuousL.ToMoney(),
insuranceShare = insuranceShareL.ToMoney(),

View File

@@ -23,7 +23,7 @@
<div class="col-12 my-1">
<span class="spanTitleText">اسامی پرسنل</span>
<div class="select-alert select-alert-employee">
<select class="form-select select2Option" aria-label="انتخاب پرسنل ..." asp-for="@Model.EmployeeId" id="employeeSelectCreate">
<select class="form-select select2Option disable" aria-label="انتخاب پرسنل ..." asp-for="@Model.EmployeeId" id="employeeSelectCreate">
</select>
</div>
</div>
@@ -51,6 +51,18 @@
<input class="form-control" id="BankAccountNumber" asp-for="@Model.BankAccountNumber" placeholder="شماره حساب را وارد نمائید" style="direction: ltr" />
</div>
<div class="col-12 my-1">
<button type="button" class="btnCreateNew position-relative" onclick="addDataToTable()" id="addNewItemBtn">
<span class="text-nowrap">افزودن</span>
</button>
<button type="button" class="btnEditNew position-relative" onclick="saveEditNewItem()" id="editNewItemBtn" style="display: none">
<span class="text-nowrap">ویرایش</span>
</button>
</div>
<div class="col-12 my-1">
<div class="data-load">
@@ -62,7 +74,7 @@
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
<div class="Rtable-cell column-heading width3 text-center">تعداد افزودن</div>
<div class="Rtable-cell column-heading width4">بانک</div>
<div class="Rtable-cell column-heading width5">عملیات</div>
<div class="Rtable-cell column-heading width5 text-end">عملیات</div>
</div>
<div class="w-100" id="dataLoad"></div>
@@ -73,7 +85,7 @@
<div class="text-center d-flex align-items-center justify-content-center" id="emptyData">
<div class="">
<img src="/assetsclient/images/empty2.png" width="250px" alt="" class="img-fluid"/>
<h5 style="font-size: 14px;">هیچ اطلاعات بانکی وارد نشده است!</h5>
<h5 style="font-size: 14px;">هیچ اطلاعات بانکی را وارد نشده است!</h5>
</div>
</div>
</div>
@@ -90,8 +102,8 @@
<button type="button" class="btn-cancel2 justify-content-center" data-bs-dismiss="modal" aria-label="Close">انصراف</button>
</div>
<div class="col-6 text-start">
<button type="button" class="btnCreateNew position-relative" id="createData">
<span class="text-nowrap">ثبت</span>
<button type="button" class="btnCreateNew position-relative disable" id="createData">
<span class="text-nowrap">ثبت نهایی</span>
<div class="spinner-loading loading" style="display: none;">
<span class="spinner-border spinner-border-sm loading text-white" role="status" aria-hidden="true"></span>
</div>
@@ -104,18 +116,16 @@
</div>
</form>
<!-- The Modal -->
<div id="modalCustom" class="modalCustom">
<partial name="_Partials/EditBankInfoModal" />
</div>
<script src="~/assetsclient/js/site.js?ver=@clientVersion"></script>
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
<script src="~/admintheme/js/jquery.mask_1.14.16.min.js"></script>
<script src="~/assetsclient/js/jquery-mask-v1.13.4.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script>
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
var saveNewEmployeeBankAjax = `@Url.Page("./Index", "Create")`;
var saveGroupNewEmployeeBankAjax = `@Url.Page("./Index", "GroupCreate")`;
var getDetailsAjaxUrl = `@Url.Page("./Index", "DetailsAjax")`;
var removeBankAjax = `@Url.Page("./Index", "Delete")`;
</script>
<script src="~/assetsclient/pages/employeesbankinfo/js/createbankinfomodal.js?ver=@clientVersion"></script>

View File

@@ -60,7 +60,7 @@
<div class="col-12">
<div class="row search-personal-section">
<div class="col-3 col-xxl-2">
<div class="col-3 col-xxl-2 pe-0">
<select class="form-select employeeName select2OptionIndex" id="employeeSelectIndex" aria-label="انتخاب پرسنل ...">
</select>
</div>
@@ -167,7 +167,7 @@
</div>
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
<div class="Rtable-cell column-heading width3 text-center">شماره پرسنلی</div>
<div class="Rtable-cell column-heading width4">تعداد کارت ثبت شده</div>
<div class="Rtable-cell column-heading width4 text-center">تعداد کارت ثبت شده</div>
<div class="Rtable-cell column-heading width5">بانک</div>
<div class="Rtable-cell column-heading text-end pe-2 width6">عملیات</div>
</div>

View File

@@ -24,8 +24,10 @@ namespace ServiceHost.Areas.Client.Pages.Company.EmployeesBankInfo
private readonly long _workshopId;
public string WorkshopFullName;
public int PageIndex = 0;
private readonly IWebHostEnvironment _hostEnvironment;
public IndexModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, IHttpContextAccessor contextAccessor, IAuthHelper authHelper, IEmployeeBankInformationApplication employeeBankInformationApplication, IEmployeeApplication employeeApplication, IBankApplication bankApplication)
public IndexModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, IHttpContextAccessor contextAccessor, IAuthHelper authHelper, IEmployeeBankInformationApplication employeeBankInformationApplication, IEmployeeApplication employeeApplication, IBankApplication bankApplication, IWebHostEnvironment hostEnvironment)
{
_passwordHasher = passwordHasher;
_workshopApplication = workshopApplication;
@@ -34,6 +36,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.EmployeesBankInfo
_employeeBankInformationApplication = employeeBankInformationApplication;
_employeeApplication = employeeApplication;
_bankApplication = bankApplication;
_hostEnvironment = hostEnvironment;
var workshopHash = _contextAccessor.HttpContext?.User.FindFirstValue("WorkshopSlug");
_workshopId = _passwordHasher.SlugDecrypt(workshopHash);
@@ -42,12 +45,13 @@ namespace ServiceHost.Areas.Client.Pages.Company.EmployeesBankInfo
throw new InvalidDataException("اختلال در کارگاه");
}
public void OnGet()
{
WorkshopFullName = _workshopApplication.GetWorkshopFullname(_workshopId);
}
public void OnGet()
{
var workshop = _workshopApplication.GetWorkshopInfo(_workshopId);
WorkshopFullName = workshop.WorkshopFullName;
}
public IActionResult OnGetEmployeeListAjax()
public IActionResult OnGetEmployeeListAjax()
{
var resultData = _employeeApplication.GetWorkingEmployeesByWorkshopId(_workshopId);
return new JsonResult(new
@@ -132,6 +136,17 @@ namespace ServiceHost.Areas.Client.Pages.Company.EmployeesBankInfo
});
}
public IActionResult OnPostGroupCreate(List<CreateEmployeeInformation> command)
{
var result = _employeeBankInformationApplication.GroupCreate(_workshopId, command);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message,
id = result.SendId
});
}
//public IActionResult OnGetEdit(long id)
//{
// var dataBankInfo = _employeeBankInformationApplication.GetDetails(id);
@@ -151,13 +166,8 @@ namespace ServiceHost.Areas.Client.Pages.Company.EmployeesBankInfo
public IActionResult OnPostEdit(EditEmployeeInformation command)
{
command.WorkshopId = _workshopId;
if (!string.IsNullOrWhiteSpace(command.CardNumber))
command.CardNumber = command.CardNumber.Replace("-", "");
if (!string.IsNullOrWhiteSpace(command.ShebaNumber))
command.ShebaNumber = command.ShebaNumber.Replace("-", "");
command.CardNumber = command.CardNumber.Replace("-", "");
command.ShebaNumber = command.ShebaNumber.Replace("-", "");
var result = _employeeBankInformationApplication.Edit(command);
return new JsonResult(new
{
@@ -185,5 +195,20 @@ namespace ServiceHost.Areas.Client.Pages.Company.EmployeesBankInfo
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);
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

@@ -20,6 +20,10 @@
font-weight: 500;
}
.form-control::placeholder {
color: #94a3b8;
}
.textLFontColor span {
font-size: 16px;
font-weight: 600;
@@ -38,6 +42,21 @@
background-color: #5f9213;
}
.btnEditNew {
font-size: 14px;
font-weight: 500;
background-color: #0ea5e9;
color: #FFFFFF;
border-radius: 8px;
padding: 10px 70px;
width: 100%;
}
.btnEditNew:hover {
background-color: #0284c7;
}
.btnCreateNew,
.btn-cancel2 {
width: 100% !important;

View File

@@ -10,6 +10,14 @@
border-radius: 7px;
}
.bankIcon {
height: 30px;
/*width: 35px;*/
object-fit: cover;
object-position: center;
border-radius: 5px;
}
.goToTop {
position: fixed;
bottom: -10px;
@@ -35,7 +43,7 @@
}
.width2 {
width: 18% !important;
width: 10% !important;
}
.width3 {
@@ -47,7 +55,7 @@
}
.width5 {
width: 10% !important;
width: 18% !important;
}
.width6 {

View File

@@ -1,6 +1,8 @@
var urlPathname = location.pathname;
var filledBankCount = 0;
hasModalCreate = true;
var newItemIndex = 1;
var command = [];
$(document).ready(function () {
$('.loading').hide();
@@ -17,7 +19,7 @@ $(document).ready(function () {
return data.text;
}
});
$("#CardNumber").each(function () {
$("#CardNumber").mask("0000-0000-0000-0000");
$("#CardNumber").attr("placeholder", "XXXX-XXXX-XXXX-XXXX");
@@ -99,45 +101,147 @@ function ajaxCreateBanks() {
});
}
$(document).on('click', 'button[data-edit-id]', function () {
// Get the data attributes from the clicked button
var editId = $(this).data('edit-id');
var employeeId = $(this).data('edit-employeeid');
var employeeName = $(this).data('edit-employeename');
var bankId = $(this).data('edit-bankid');
var cardNumber = $(this).data('edit-cardnumber');
var shebaNumber = $(this).data('edit-sheba-number');
var bankAccountNumber = $(this).data('edit-bankaccountnumber');
$(document).on('change', '#employeeSelectCreate', function () {
var selectedValueId = $(this).val();
$('#modalCustom').find('#editId').val(editId);
$('#modalCustom').find('#bankSelectEdit').val(bankId);
$('#modalCustom').find('#employeeId').val(employeeId);
$.ajax({
url: getDetailsAjaxUrl,
type: 'GET',
data: {
employeeId: selectedValueId
},
success: function (response) {
if (response.success) {
if (response.data.bankInformation.length > 0) {
$('#CardNumberEdit').mask("0000-0000-0000-0000", {
placeholder: "XXXX-XXXX-XXXX-XXXX"
var n = 1;
var html = `<div></div>`;
response.data.bankInformation.forEach(function (item) {
let resultBankCount = 0;
if (item.bankAccountNumber !== null) resultBankCount++;
if (item.cardNumber !== null) resultBankCount++;
if (item.shebaNumber !== null) resultBankCount++;
html += `
<div class="Rtable-row align-items-center openAction load-create-row" id="Employees" data-employee-id="${response.data.employeeId}">
<div class="Rtable-cell width1 widthNumberCustom1">
<label for="${n}" class="Rtable-cell--content prevent-select">
<span class="d-flex justify-content-center align-items-center justify-content-center row-number">
${n}
</span>
</label>
</div>
<div class="Rtable-cell justify-content-start width2">
<div class="Rtable-cell--content text-start">${response.data.employeeName}</div>
</div>
<div class="Rtable-cell d-md-flex justify-content-center d-none width3">
<div class="Rtable-cell--content">${resultBankCount}</div>
</div>
<div class="Rtable-cell d-md-block d-none width4">
<div class="Rtable-cell--content">${item.bankName}</div>
</div>
<div class="Rtable-cell width5 text-end">
<div class="Rtable-cell--content align-items-center justify-content-end d-none text-end">
<button class="btn-edit position-relative d-md-block d-none disable">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
<button onclick="alertRemoveBank(${item.id})" type="button" class="btn-none d-md-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-width="1.5" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-width="1.5" stroke-linecap="round" />
</svg>
<span class="mx-1">حذف</span>
</button>
</div>
</div>
</div>`;
n++;
});
$('#emptyData').addClass("d-none");
filledBankCount = 0;
$('.data-load .wrapper').show();
$('#dataLoad').html(html);
} else {
$('#emptyData').removeClass("d-none");
$('.data-load .wrapper').hide();
$('#dataLoad').html("");
}
}
},
error: function (xhr, status, error) {
console.error('AJAX error:', error);
}
});
$('#CardNumberEdit').val(cardNumber).keyup();
$('#ShebaNumberEdit').mask("IR-00-0000-0000-0000-0000-0000-00", {
placeholder: "IR-XX-XXXX-XXXX-XXXX-XXXX-XXXX-XX"
});
$('#ShebaNumberEdit').val(shebaNumber).keyup();
//$('#modalCustom').find('#CardNumberEdit').val(cardNumber);
//$('#modalCustom').find('#ShebaNumberEdit').val(shebaNumber);
$('#modalCustom').find('#BankAccountNumberEdit').val(bankAccountNumber);
$('#EmployeeNameShow').text(employeeName);
ajaxBanksListEdit(bankId);
});
$('#createData').on('click', SaveDataAjax);
function SaveDataAjax() {
var loading = $('#createData .spinner-loading');
$('#createData').addClass('disable');
//var data = $('#create-form').serialize();
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
url: saveGroupNewEmployeeBankAjax,
headers: { "RequestVerificationToken": antiForgeryToken },
data: { command },
success: function (response) {
if (response.success) {
loading.show();
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 2000);
//$('#emptyData').addClass("d-none");
//loadDataCreate(response.id, employeeSelectName, bankSelectName, filledBankCount);
loading.hide();
$('#createData').removeClass('disable');
$('#EmployeeBankListAjax').html('');
loadEmployeeBankList();
$('#MainModal').modal('hide');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
}, 3500);
loading.hide();
$('#createData').removeClass('disable');
}
},
error: function (err) {
loading.hide();
$('#createData').removeClass('disable');
console.log(err);
}
});
}
function addDataToTable() {
var employeeSelectName = $('#select2-employeeSelectCreate-container').text();
var employeeSelect = $('#employeeSelectCreate').val();
var bankSelectName = $('#select2-bankSelectCreate-container').text();
@@ -146,6 +250,7 @@ function SaveDataAjax() {
var shebaNumber = $('#ShebaNumber');
var bankAccountNumber = $('#BankAccountNumber');
filledBankCount = 0;
if (cardNumber.val() !== '') {
filledBankCount++;
}
@@ -187,7 +292,7 @@ function SaveDataAjax() {
$('.alert-msg').show();
$('.alert-msg p').text('لطفا حداقل یکی از فیلدها را وارد نمائید');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
@@ -227,60 +332,56 @@ function SaveDataAjax() {
}, 3500);
return;
}
$('#createData').addClass('disable');
var data = $('#create-form').serialize();
$.ajax({
async: false,
dataType: 'json',
type: 'POST',
url: saveNewEmployeeBankAjax,
headers: { "RequestVerificationToken": antiForgeryToken },
data: data,
success: function (response) {
if (response.success) {
loading.show();
$('.alert-success-msg').show();
$('.alert-success-msg p').text(response.message);
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 2000);
var newId = newItemIndex++;
//const createEmployeeInformation = {};
//createEmployeeInformation.EmployeeId = employeeSelect;
//createEmployeeInformation.BankId = bankSelect;
//createEmployeeInformation.BankAccountNumber = bankAccountNumber.val();
//createEmployeeInformation.CardNumber = cardNumber.val();
//createEmployeeInformation.ShebaNumber = shebaNumber.val();
//createEmployeeInformation.newItemId = newId;
$('#emptyData').addClass("d-none");
let employeeData = {
EmployeeId: employeeSelect,
BankId: bankSelect,
BankAccountNumber: bankAccountNumber.val(),
CardNumber: cardNumber.val().replace(/-/g, ""),
ShebaNumber: shebaNumber.val().replace(/-/g, ""),
newItemId: newId
};
loadDataCreate(response.id, employeeSelectName, bankSelectName, filledBankCount, employeeSelect, bankSelect, cardNumber.val(), shebaNumber.val(), bankAccountNumber.val());
let isDuplicate = command.some(existingItem =>
existingItem.EmployeeId === employeeData.EmployeeId &&
existingItem.BankId === employeeData.BankId &&
existingItem.BankAccountNumber === employeeData.BankAccountNumber &&
existingItem.CardNumber === employeeData.CardNumber &&
existingItem.ShebaNumber === employeeData.ShebaNumber
);
$('#EmployeeBankListAjax').html('');
loadEmployeeBankList();
if (!isDuplicate) {
command.push(employeeData);
} else {
$('.alert-msg').show();
$('.alert-msg p').text('این داده قبلاً وارد شده است');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
shebaNumber.removeClass('errored');
}, 3500);
return;
}
loading.hide();
$('#createData').removeClass('disable');
} else {
$('.alert-msg').show();
$('.alert-msg p').text(response.message);
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
}, 3500);
loading.hide();
$('#createData').removeClass('disable');
}
},
error: function (err) {
loading.hide();
$('#createData').removeClass('disable');
console.log(err);
}
});
loadDataCreate(newId, employeeSelectName, bankSelectName, filledBankCount);
}
function loadDataCreate(id, employeeName, bankName, bankCount, employeeId, bankId, cardNumber, shebaNumber, bankAccountNumber) {
function loadDataCreate(newId, employeeName, bankName, bankCount) {
$('.select-alert-employee .select2.select2-container.select2-container--default').addClass("disable");
$('#createData').removeClass("disable");
var n = $('#dataLoad .Rtable-row').length + 1;
var html = `<div></div>
<div class="Rtable-row align-items-center openAction load-create-row" id="Employees" data-employee-id="${id}">
<div class="Rtable-row align-items-center openAction load-create-row" id="Employees" data-item-new-id="${newId}">
<div class="Rtable-cell width1 widthNumberCustom1">
<label for="${n}" class="Rtable-cell--content prevent-select">
<span class="d-flex justify-content-center align-items-center justify-content-center row-number">
@@ -292,15 +393,22 @@ function loadDataCreate(id, employeeName, bankName, bankCount, employeeId, bankI
<div class="Rtable-cell--content text-start">${employeeName}</div>
</div>
<div class="Rtable-cell d-md-flex justify-content-center d-none width3">
<div class="Rtable-cell--content">${bankCount}</div>
<div class="Rtable-cell--content" id="bankCount">${bankCount}</div>
</div>
<div class="Rtable-cell d-md-block d-none width4">
<div class="Rtable-cell--content">${bankName}</div>
<div class="Rtable-cell--content" id="bankName">${bankName}</div>
</div>
<div class="Rtable-cell width5">
<div class="Rtable-cell--content align-items-center justify-content-end d-flex text-end">
<button onclick="alertRemoveBank(${id})" type="button" class="btn-delete d-md-block d-none">
<div class="Rtable-cell width5 text-end">
<div class="Rtable-cell--content align-items-center justify-content-end d-flex text-end">
<button onclick="editNewItem(${newId})" type="button" class="btn-edit position-relative d-md-block d-none">
<svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
<path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
</svg>
<span class="mx-1">ویرایش</span>
</button>
<button onclick="alertRemoveRecordAfterAddNewItem(${newId})" type="button" class="btn-delete d-md-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-width="1.5" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-width="1.5" stroke-linecap="round" />
@@ -313,23 +421,11 @@ function loadDataCreate(id, employeeName, bankName, bankCount, employeeId, bankI
</div>
</div>`;
//<button type="button" onclick="openModalEdit()"
//data-edit-id="${id}"
//data-edit-employeeId="${employeeId}"
//data-edit-employeeName="${employeeName}"
//data-edit-bankId="${bankId}"
//data-edit-cardNumber="${cardNumber}"
//data-edit-sheba-number="${shebaNumber}"
//data-edit-bankAccountNumber="${bankAccountNumber}"
//class="btn-edit position-relative d-md-block d-none">
// <svg width="20" height="20" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
// <path d="M12.6027 6.838L5.85304 13.5876C5.84201 13.5987 5.83107 13.6096 5.8202 13.6204C5.65773 13.7825 5.5139 13.9261 5.41254 14.1051C5.31117 14.2841 5.2621 14.4813 5.20667 14.704C5.20296 14.7189 5.19923 14.7339 5.19545 14.7491L4.5813 17.2057C4.57908 17.2145 4.57686 17.2234 4.57462 17.2323C4.53537 17.389 4.49347 17.5564 4.47972 17.6969C4.46458 17.8516 4.46811 18.1127 4.67752 18.3221L5.03035 17.9693L4.67752 18.3221C4.88693 18.5315 5.14799 18.535 5.30272 18.5199C5.44326 18.5062 5.6106 18.4643 5.76728 18.425C5.77622 18.4228 5.78512 18.4205 5.79398 18.4183L8.25057 17.8042C8.26569 17.8004 8.28069 17.7967 8.29558 17.793C8.51832 17.7375 8.71549 17.6885 8.89452 17.5871C9.07356 17.4857 9.21708 17.3419 9.37921 17.1794C9.39005 17.1686 9.40097 17.1576 9.412 17.1466L16.1616 10.397L16.1849 10.3737C16.4983 10.0603 16.7684 9.79025 16.9556 9.54492C17.1562 9.282 17.3081 8.98958 17.3081 8.6292C17.3081 8.26759 17.1541 7.97384 16.9522 7.71001C16.7633 7.46303 16.4905 7.1903 16.1731 6.87292L16.1499 6.84972L16.1267 6.82652C15.8093 6.5091 15.5366 6.23634 15.2896 6.04738C15.0258 5.84553 14.732 5.69156 14.3704 5.69156C14.01 5.69156 13.7176 5.84345 13.4547 6.04405C13.2094 6.23123 12.9393 6.5013 12.6259 6.81474L12.6027 6.838Z" stroke-width="1.5" stroke="#4DA9D1" />
// <path d="M11.9939 7.20397L14.8457 5.30273L17.6976 8.15459L15.7964 11.0064L11.9939 7.20397Z" fill="#4DA9D1" />
// </svg>
// <span class="mx-1">ویرایش</span>
// </button>
$('#bankSelectCreate').val("0").trigger('change');
$('#CardNumber').val("");
$('#ShebaNumber').val("");
$('#BankAccountNumber').val("");
filledBankCount = 0;
$('.data-load .wrapper').show();
$('#dataLoad').append(html);
}
@@ -368,7 +464,7 @@ function removeBank(id) {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 2000);
$(`[data-employee-id="${id}"]`).remove();
updateRows();
$('#EmployeeBankListAjax').html('');
@@ -388,13 +484,198 @@ function removeBank(id) {
});
}
function alertRemoveRecordAfterAddNewItem(id) {
swal({
title: "آیا از حذف این حساب اطمینان دارید؟",
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
removeRecordAfterAddNewItem(id);
}
});
}
function removeRecordAfterAddNewItem(id) {
$(`[data-item-new-id="${id}"]`).remove();
updateRows();
$('.alert-success-msg').show();
$('.alert-success-msg p').text("عملیات با موفقیت انجام شد");
setTimeout(function () {
$('.alert-success-msg').hide();
$('.alert-success-msg p').text('');
}, 2000);
command = command.filter(employee => employee.newItemId !== id);
//let indexToDelete = command.findIndex(employee => employee.newItemId === id);
//if (indexToDelete !== -1) {
// command.splice(indexToDelete, 1);
//}
if (command.length === 0) {
$('.select-alert-employee .select2.select2-container.select2-container--default').removeClass("disable");
$('#createData').addClass("disable");
}
}
function editNewItem(newId) {
$('#addNewItemBtn').hide();
$('#editNewItemBtn').show();
$('#createData').addClass("disable");
let employeeBankInfo = command.find(employee => employee.newItemId === newId);
$('#editNewItemBtn').attr('onclick', 'saveEditNewItem(' + newId + ')');
$('#bankSelectCreate').val(employeeBankInfo.BankId).trigger('change');
$('#CardNumber').val(employeeBankInfo.CardNumber);
$('#ShebaNumber').val(employeeBankInfo.ShebaNumber);
$('#BankAccountNumber').val(employeeBankInfo.BankAccountNumber);
$('#CardNumber').mask("0000-0000-0000-0000", {
placeholder: "XXXX-XXXX-XXXX-XXXX"
});
$('#CardNumber').val(cardNumber).keyup();
$('#ShebaNumber').mask("IR-00-0000-0000-0000-0000-0000-00", {
placeholder: "IR-XX-XXXX-XXXX-XXXX-XXXX-XXXX-XX"
});
$('#ShebaNumber').val(shebaNumber).keyup();
}
function saveEditNewItem(newId) {
var employeeSelect = $('#employeeSelectCreate').val();
var bankSelectName = $('#select2-bankSelectCreate-container').text();
var bankSelect = $('#bankSelectCreate').val();
var cardNumber = $('#CardNumber');
var shebaNumber = $('#ShebaNumber');
var bankAccountNumber = $('#BankAccountNumber');
filledBankCount = 0;
if (cardNumber.val() !== '') {
filledBankCount++;
}
if (shebaNumber.val() !== '') {
filledBankCount++;
}
if (bankAccountNumber.val() !== '') {
filledBankCount++;
}
if (employeeSelect === "0") {
$('.alert-msg').show();
$('.alert-msg p').text('لطفا اسامی پرسنل را کلیک و مشخص نمائید');
$('.select-alert-employee').addClass('errored');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
$('.select-alert-employee').removeClass('errored');
}, 3500);
return;
}
if (bankSelect === "0") {
$('.alert-msg').show();
$('.alert-msg p').text('لطفا نام بانک را کلیک و مشخص نمائید');
$('.select-alert-bank').addClass('errored');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
$('.select-alert-bank').removeClass('errored');
}, 3500);
return;
}
if (!cardNumber.val() && !shebaNumber.val() && !bankAccountNumber.val()) {
cardNumber.addClass('errored');
shebaNumber.addClass('errored');
bankAccountNumber.addClass('errored');
$('.alert-msg').show();
$('.alert-msg p').text('لطفا حداقل یکی از فیلدها را وارد نمائید');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
cardNumber.removeClass('errored');
shebaNumber.removeClass('errored');
bankAccountNumber.removeClass('errored');
}, 3500);
return;
}
var cardNumberLength = cardNumber.val().length;
if (cardNumberLength > 0 && cardNumberLength !== 19) {
cardNumber.addClass('errored');
$('.alert-msg').show();
$('.alert-msg p').text('شماره کارت باید 16 رقم باشد');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
cardNumber.removeClass('errored');
}, 3500);
return;
}
var shebaNumberLength = shebaNumber.val().length;
if (shebaNumber.val() && shebaNumberLength !== 33) {
shebaNumber.addClass('errored');
$('.alert-msg').show();
$('.alert-msg p').text('شماره کارت باید 24 رقم باشد');
setTimeout(function () {
$('.alert-msg').hide();
$('.alert-msg p').text('');
shebaNumber.removeClass('errored');
}, 3500);
return;
}
let updatedData = {
EmployeeId: employeeSelect,
BankId: bankSelect,
BankAccountNumber: bankAccountNumber.val(),
CardNumber: cardNumber.val().replace(/-/g, ""),
ShebaNumber: shebaNumber.val().replace(/-/g, ""),
newItemId: newId
};
let indexToEdit = command.findIndex(employee => employee.newItemId === newId);
if (indexToEdit !== -1) {
command[indexToEdit] = { ...command[indexToEdit], ...updatedData };
}
$('#bankSelectCreate').val("0").trigger('change');
$('#CardNumber').val("");
$('#ShebaNumber').val("");
$('#BankAccountNumber').val("");
$('#editNewItemBtn').attr('onclick', 'saveEditNewItem()');
$(`[data-item-new-id="${newId}"] #bankCount`).text(filledBankCount);
$(`[data-item-new-id="${newId}"] #bankName`).text(bankSelectName);
$('#addNewItemBtn').show();
$('#editNewItemBtn').hide();
$('#createData').removeClass("disable");
}
function updateRows() {
$('.load-create-row.width1').each(function (index) {
$(this).find('span.row-number').text(index + 1);
});
}
function openModalEdit() {
var modalCustom = document.getElementById("modalCustom");
modalCustom.style.display = "block";
}

View File

@@ -89,14 +89,17 @@ function loadDetailsAjax() {
headers: { "RequestVerificationToken": antiForgeryToken },
success: function (response) {
var responseData = response.data;
console.log(responseData);
if (response.success) {
if (responseData.bankInformation.length > 0) {
responseData.bankInformation.forEach(function (item) {
index++;
html += `<div class="" data-bank-information-id="${item.id}">
<div id="DefaultDiv" class="card border p-2 ${item.isDefault ? `active` : ``}" data-default-div-id="${item.id}">
<div class="mb-2" id="detailBankName">${item.bankName}</div>
<div class="mb-2 d-flex align-items-center gap-2" id="detailBankName">
<img class="bankIcon" src="/Client/Company/EmployeesBankInfo/Index?handler=ShowPicture&filePath=${item.bankLogoPath}"/>
<span>${item.bankName}</span>
</div>
<div>
<div class="d-flex align-items-center justify-content-between" style="font-size: 12px;">
<div>شماره کارت:</div>

View File

@@ -138,11 +138,13 @@ function loadEmployeeBankList() {
responseData.forEach(function (item) {
index++;
html += `<div></div>
<div class="Rtable-row align-items-center openAction ${item.isBlack === "true" ? `withdraw` : ``}" id="Employees">
<div class="Rtable-row align-items-center openAction ${item.isBlack === "true" ? `withdraw` : ``
}" id="Employees">
<div class="Rtable-cell width1 widthNumberCustom1">
<label for="${index}" class="Rtable-cell--content prevent-select">
<span class="d-flex justify-content-center align-items-center justify-content-center">
<input id="${index}" type="checkbox" class="d-none form-check-input foo" name="foo" value="${item.Id}">
<input id="${index
}" type="checkbox" class="d-none form-check-input foo" name="foo" value="${item.Id}">
${index}
</span>
</label>
@@ -153,11 +155,15 @@ function loadEmployeeBankList() {
<div class="Rtable-cell d-md-flex justify-content-center d-none width3">
<div class="Rtable-cell--content">${item.personnelCode}</div>
</div>
<div class="Rtable-cell d-md-block d-none width4">
<div class="Rtable-cell--content">${item.totalBankAccountsCount}</div>
<div class="Rtable-cell d-md-block d-none width4 text-center">
<div class="Rtable-cell--content text-center">${item.totalBankAccountsCount}</div>
</div>
<div class="Rtable-cell d-md-block d-none width5">
<div class="Rtable-cell--content ">بانک ها</div>
<div class="Rtable-cell--content d-flex gap-1" style="white-space: nowrap;overflow: hidden !important;text-overflow: ellipsis;">`;
item.bankPicturesList.forEach(function (itemBank, index) {
html += `<img class="bankIcon" src="/Client/Company/EmployeesBankInfo/Index?handler=ShowPicture&filePath=${itemBank}"/>`;
});
html += `</div>
</div>
<div class="Rtable-cell width6">
<div class="Rtable-cell--content align-items-center justify-content-end d-flex text-end">
@@ -199,9 +205,13 @@ function loadEmployeeBankList() {
<span class="span1">تعداد کارت ثبت شده:</span>
<span class="span1">${item.totalBankAccountsCount}</span>
</div>
<div class="d-flex align-items-center justify-content-between">
<div class="d-flex justify-content-between align-item-center">
<span class="span1">بانک:</span>
<span class="span1">بانک</span>
<span class="span1 text">`;
item.bankPicturesList.forEach(function (itemBank, index) {
html += `<img class="bankIcon" src="/Client/Company/EmployeesBankInfo/Index?handler=ShowPicture&filePath=${itemBank}"/>${index !== item.bankPicturesList.length - 1 ? '، ' : ''}`;
});
html += `</span>
</div>
<div class="col-md-12 col-12 text-center">
<button onclick="openEditEmployeeBankModal(${item.employeeId})" class="btn-edit position-relative">