461 lines
18 KiB
C#
461 lines
18 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Threading.Tasks;
|
||
using _0_Framework.Application;
|
||
using _0_Framework.Application.Enums;
|
||
using Company.Domain.ClassificationSchemeAgg;
|
||
using CompanyManagment.App.Contracts.ClassificationScheme;
|
||
using CompanyManagment.App.Contracts.YearlySalary;
|
||
using Microsoft.EntityFrameworkCore;
|
||
|
||
namespace CompanyManagment.Application;
|
||
|
||
public class ClassificationSchemeApplication : IClassificationSchemeApplication
|
||
{
|
||
private readonly IClassificationSchemeRepository _classificationSchemeRepository;
|
||
private readonly IClassificationGroupRepository _classificationGroupRepository;
|
||
private readonly IClassificationGroupSalariesRepository _classificationGroupSalariesRepository;
|
||
private readonly IClassificationRialCoefficientRepository _classificationRialCoefficientRepository;
|
||
private readonly IClassificationEmployeeRepository _classificationEmployeeRepository;
|
||
|
||
public ClassificationSchemeApplication(IClassificationSchemeRepository classificationSchemeRepository, IClassificationGroupRepository classificationGroupRepository, IClassificationGroupSalariesRepository classificationGroupSalariesRepository, IClassificationRialCoefficientRepository classificationRialCoefficientRepository, IClassificationEmployeeRepository classificationEmployeeRepository)
|
||
{
|
||
_classificationSchemeRepository = classificationSchemeRepository;
|
||
_classificationGroupRepository = classificationGroupRepository;
|
||
_classificationGroupSalariesRepository = classificationGroupSalariesRepository;
|
||
_classificationRialCoefficientRepository = classificationRialCoefficientRepository;
|
||
_classificationEmployeeRepository = classificationEmployeeRepository;
|
||
}
|
||
|
||
public Task<ClassificationSchemePartialModel> ClassificationSchemePartialModel(long workshopId)
|
||
{
|
||
return _classificationSchemeRepository.ClassificationSchemePartialModel(workshopId);
|
||
}
|
||
|
||
public async Task<OperationResult> CreateClassificationScheme(CreateClassificationScheme command)
|
||
{
|
||
var op = new OperationResult();
|
||
|
||
|
||
#region Validation
|
||
|
||
if (!command.ExecutionDateFa.TryToGeorgianDateTime(out var executionDateGr))
|
||
{
|
||
return op.Failed("تاریخ اجرا صحیح نمی باشد");
|
||
}
|
||
if (!command.IncludingDateFa.TryToGeorgianDateTime(out var includingDateGr))
|
||
{
|
||
return op.Failed("تاریخ شمول صحیح نمی باشد");
|
||
}
|
||
|
||
|
||
|
||
#endregion
|
||
//ایجاد طرح
|
||
var create = new ClassificationScheme(includingDateGr, executionDateGr,
|
||
command.DesignerFullName, command.DesignerPhone, command.WorkshopId, command.TypeOfCoefficient);
|
||
_classificationSchemeRepository.Create(create);
|
||
await _classificationSchemeRepository.SaveChangesAsync();
|
||
//ایجاد گروه های طرح
|
||
var groups = new List<ClassificationGroup>()
|
||
{
|
||
new ClassificationGroup("1",command.WorkshopId,create.id),
|
||
new ClassificationGroup("2",command.WorkshopId,create.id),
|
||
new ClassificationGroup("3",command.WorkshopId,create.id),
|
||
new ClassificationGroup("4",command.WorkshopId,create.id),
|
||
new ClassificationGroup("5",command.WorkshopId,create.id),
|
||
new ClassificationGroup("6",command.WorkshopId,create.id),
|
||
new ClassificationGroup("7",command.WorkshopId,create.id),
|
||
new ClassificationGroup("8",command.WorkshopId,create.id),
|
||
new ClassificationGroup("9",command.WorkshopId,create.id),
|
||
new ClassificationGroup("10",command.WorkshopId,create.id),
|
||
new ClassificationGroup("11",command.WorkshopId,create.id),
|
||
new ClassificationGroup("12",command.WorkshopId,create.id),
|
||
new ClassificationGroup("13",command.WorkshopId,create.id),
|
||
new ClassificationGroup("14",command.WorkshopId,create.id),
|
||
new ClassificationGroup("15",command.WorkshopId,create.id),
|
||
new ClassificationGroup("16",command.WorkshopId,create.id),
|
||
new ClassificationGroup("17",command.WorkshopId,create.id),
|
||
new ClassificationGroup("18",command.WorkshopId,create.id),
|
||
new ClassificationGroup("19",command.WorkshopId,create.id),
|
||
new ClassificationGroup("20",command.WorkshopId,create.id),
|
||
};
|
||
|
||
await _classificationGroupRepository.CreateGroups(groups);
|
||
|
||
|
||
|
||
return op.Succcedded();
|
||
}
|
||
|
||
public Task<EditClassificationScheme> GetClassificationScheme(long id)
|
||
{
|
||
return _classificationSchemeRepository.GetClassificationScheme(id);
|
||
}
|
||
|
||
public async Task<OperationResult> EditClassificationScheme(EditClassificationScheme command)
|
||
{
|
||
var op = new OperationResult();
|
||
|
||
|
||
#region Validation
|
||
|
||
if (!command.ExecutionDateFa.TryToGeorgianDateTime(out var executionDateGr))
|
||
{
|
||
return op.Failed("تاریخ اجرا صحیح نمی باشد");
|
||
}
|
||
if (!command.IncludingDateFa.TryToGeorgianDateTime(out var includingDateGr))
|
||
{
|
||
return op.Failed("تاریخ شمول صحیح نمی باشد");
|
||
}
|
||
var scheme = _classificationSchemeRepository.Get(command.Id);
|
||
if (scheme == null)
|
||
return op.Failed("رکورد مورد نظر وجود ندارد");
|
||
#endregion
|
||
|
||
|
||
scheme.Edit(includingDateGr, executionDateGr, command.DesignerFullName,command.DesignerPhone,command.TypeOfCoefficient);
|
||
await _classificationSchemeRepository.SaveChangesAsync();
|
||
return op.Succcedded();
|
||
}
|
||
|
||
public async Task<List<ClassificationGroupAndJobModel>> GetGroupAndJobs(long schemeId)
|
||
{
|
||
return await _classificationGroupRepository.GetGroupAndJobs(schemeId);
|
||
}
|
||
|
||
public async Task<List<EditClassificationGroupJob>> GetGroupJobs(long groupId)
|
||
{
|
||
return await _classificationGroupRepository.GetGroupJobs(groupId);
|
||
}
|
||
|
||
public async Task<bool> CheckEmployeeHasThisJob(long id, long groupId)
|
||
{
|
||
return await _classificationGroupRepository.CheckEmployeeHasThisJob(id, groupId);
|
||
}
|
||
|
||
public async Task<bool> CreateGroupJobs(List<CreateClassificationGroupJob> createClassificationGroupJob, List<long> deleteJobList)
|
||
{
|
||
var newJoblist = new List<ClassificationGroupJob>();
|
||
if (createClassificationGroupJob.Count > 0)
|
||
{
|
||
foreach (var item in createClassificationGroupJob)
|
||
{
|
||
var newJob = new ClassificationGroupJob(item.JobId, item.JobName, item.JobCode, item.ClassificationGroupId,
|
||
item.GroupNo);
|
||
newJoblist.Add(newJob);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
return await _classificationGroupRepository.CreateJobs(newJoblist, deleteJobList);
|
||
}
|
||
|
||
public async Task<SalaryAndRialCoefficientTab> GetSalariesTabData(long schemeId)
|
||
{
|
||
return await _classificationGroupSalariesRepository.GetSalariesTabData(schemeId);
|
||
}
|
||
|
||
public async Task<SalaryAndRialCoefficientModel> GetGroupToCreateSalariesModal(long schemeId)
|
||
{
|
||
return await _classificationGroupRepository.GetGroupToCreateSalariesModal(schemeId);
|
||
}
|
||
|
||
|
||
|
||
public async Task<OperationResult> CreateGroupSalaryAndCoefficient(SalaryAndRialCoefficientModel command)
|
||
{
|
||
var op = new OperationResult();
|
||
#region Validation
|
||
|
||
if (string.IsNullOrWhiteSpace(command.StartDateFa) || string.IsNullOrWhiteSpace(command.StartDateFa))
|
||
return op.Failed("تاریخ شروع و پایان نمی توانند خالی باشند");
|
||
|
||
|
||
if (command.TypeOfCoefficient == TypeOfCoefficient.RialCoefficient && command.RialCoefficient == 0)
|
||
return op.Failed("ضریب ریالی وارد نشده است");
|
||
|
||
|
||
if (command.SalariesAndCoefficientList.Any(x=> string.IsNullOrWhiteSpace(x.GroupSalaryStr) || x.GroupSalaryStr =="0"))
|
||
return op.Failed("دستمزد تمامی گروه ها می بایست تعیین شود");
|
||
|
||
|
||
if (!command.StartDateFa.TryToGeorgianDateTime(out var startDate))
|
||
{
|
||
return op.Failed("تاریخ شروع وارد شده صحیح نمی باشد");
|
||
}
|
||
if (!command.EndDateFa.TryToGeorgianDateTime(out var endDate))
|
||
{
|
||
return op.Failed("تاریخ پایان وارد شده صحیح نمی باشد");
|
||
}
|
||
|
||
if (_classificationGroupSalariesRepository.Exists(x => x.StartDate <= endDate && x.EndDate >= startDate && x.SchemeId == command.SchemeId))
|
||
{
|
||
return op.Failed("بازه تاریخ وارد شده با داده های ذخیره شده قبل تداخل دارد");
|
||
|
||
}
|
||
|
||
var year = Convert.ToInt32(command.StartDateFa.Substring(0, 4));
|
||
|
||
var endDateYear = Convert.ToInt32(command.EndDateFa.Substring(0, 4));
|
||
if(year != endDateYear)
|
||
return op.Failed("سال تاریخ شروع از سال تاریخ پایان متفاوت است");
|
||
#endregion
|
||
|
||
|
||
|
||
var createSalaries = new List<ClassificationGroupSalary>();
|
||
|
||
foreach (var item in command.SalariesAndCoefficientList)
|
||
{
|
||
item.GroupSalary = item.GroupSalaryStr.MoneyToDouble();
|
||
var create = new ClassificationGroupSalary(item.ClassificationGroupId,item.GroupNo,item.GroupSalary,startDate, endDate, year, command.SchemeId);
|
||
createSalaries.Add(create);
|
||
}
|
||
|
||
await _classificationGroupSalariesRepository.CreateSalaries(createSalaries);
|
||
|
||
if (command.TypeOfCoefficient == TypeOfCoefficient.RialCoefficient)
|
||
{
|
||
try
|
||
{
|
||
command.RialCoefficient = command.RialCoefficient;
|
||
|
||
await _classificationRialCoefficientRepository.CreateAsync(new ClassificationRialCoefficient(command.SchemeId,
|
||
command.RialCoefficient, startDate, endDate, year));
|
||
await _classificationRialCoefficientRepository.SaveChangesAsync();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
return op.Failed("فرمت مبلغ ضریب ریالی اشتباه است");
|
||
}
|
||
}
|
||
|
||
op.SendId = command.SchemeId;
|
||
return op.Succcedded();
|
||
}
|
||
|
||
public async Task<SalaryAndRialCoefficientModel> GetEditSalariesData(long schemeId, string startDate, string endDate)
|
||
{
|
||
return await _classificationGroupSalariesRepository.GetEditSalariesData(schemeId, startDate, endDate);
|
||
}
|
||
|
||
public async Task<OperationResult> EditGroupSalaryAndCoefficient(SalaryAndRialCoefficientModel command)
|
||
{
|
||
var op = new OperationResult();
|
||
#region Validation
|
||
|
||
if (string.IsNullOrWhiteSpace(command.StartDateFa) || string.IsNullOrWhiteSpace(command.StartDateFa))
|
||
return op.Failed("تاریخ شروع و پایان نمی توانند خالی باشند");
|
||
|
||
|
||
if (command.TypeOfCoefficient == TypeOfCoefficient.RialCoefficient && command.RialCoefficient == 0)
|
||
return op.Failed("ضریب ریالی وارد نشده است");
|
||
|
||
|
||
if (command.SalariesAndCoefficientList.Any(x => string.IsNullOrWhiteSpace(x.GroupSalaryStr) || x.GroupSalaryStr == "0"))
|
||
return op.Failed("دستمزد تمامی گروه ها می بایست تعیین شود");
|
||
|
||
|
||
if (!command.StartDateFa.TryToGeorgianDateTime(out var startDate))
|
||
{
|
||
return op.Failed("تاریخ شروع وارد شده صحیح نمی باشد");
|
||
}
|
||
if (!command.EndDateFa.TryToGeorgianDateTime(out var endDate))
|
||
{
|
||
return op.Failed("تاریخ پایان وارد شده صحیح نمی باشد");
|
||
}
|
||
|
||
var salariesId = command.SalariesAndCoefficientList.Select(x => x.Id).ToList();
|
||
if (_classificationGroupSalariesRepository.Exists(x => x.StartDate <= endDate && x.EndDate >= startDate && x.SchemeId == command.SchemeId && !salariesId.Contains(x.id)))
|
||
{
|
||
return op.Failed("بازه تاریخ وارد شده با داده های ذخیره شده قبل تداخل دارد");
|
||
|
||
}
|
||
|
||
var year = Convert.ToInt32(command.StartDateFa.Substring(0, 4));
|
||
|
||
var endDateYear = Convert.ToInt32(command.EndDateFa.Substring(0, 4));
|
||
if (year != endDateYear)
|
||
return op.Failed("سال تاریخ شروع از سال تاریخ پایان متفاوت است");
|
||
#endregion
|
||
|
||
|
||
|
||
foreach (var item in command.SalariesAndCoefficientList)
|
||
{
|
||
var editSalary = _classificationGroupSalariesRepository.Get(item.Id);
|
||
|
||
item.GroupSalary = item.GroupSalaryStr.MoneyToDouble();
|
||
|
||
editSalary.Edit(item.GroupSalary, startDate, endDate, year);
|
||
await _classificationGroupSalariesRepository.SaveChangesAsync();
|
||
|
||
}
|
||
|
||
if (command.TypeOfCoefficient == TypeOfCoefficient.RialCoefficient)
|
||
{
|
||
var editRialCoefficient = _classificationRialCoefficientRepository.Get(command.CoefficientId);
|
||
editRialCoefficient.Edit(command.RialCoefficient, startDate, endDate, year);
|
||
await _classificationRialCoefficientRepository.SaveChangesAsync();
|
||
|
||
}
|
||
|
||
return op.Succcedded();
|
||
}
|
||
|
||
|
||
|
||
public async Task<EmployeeInfoTab> GetEmployeeDataTab(EmployeeInfoTab command)
|
||
{
|
||
var employeeInfoTab = new EmployeeInfoTab();
|
||
var employeeInfoList = _classificationEmployeeRepository.GetEmployeeListData(command.SchemeId).GetAwaiter().GetResult();
|
||
if (employeeInfoList.Any())
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(command.FullName))
|
||
employeeInfoList = employeeInfoList.Where(x => x.FullName.Contains(command.FullName)).ToList();
|
||
|
||
employeeInfoTab.EmployeeInfoList = employeeInfoList;
|
||
employeeInfoTab.FullName = command.FullName;
|
||
|
||
|
||
}
|
||
|
||
|
||
return employeeInfoTab;
|
||
}
|
||
|
||
public async Task<List<ClassificationGroupList>> GetGroups(long schemeId)
|
||
{
|
||
return await _classificationGroupRepository.GetGroups(schemeId);
|
||
}
|
||
|
||
|
||
public async Task<OperationResult> AddEmployeeToGroup(AddEmployeeToGroup command)
|
||
{
|
||
var op = new OperationResult();
|
||
#region Validation
|
||
|
||
if (command.GroupId == 0)
|
||
return op.Failed("لطفا گروه را انتخاب کنید");
|
||
|
||
if (command.JobId == 0)
|
||
return op.Failed("لطفا سمت را انتخاب کنید");
|
||
|
||
#endregion
|
||
|
||
|
||
var scheme = _classificationSchemeRepository.GetClassificationScheme(command.SchemeId).GetAwaiter().GetResult();
|
||
|
||
var create = new ClassificationEmployee(scheme.WorkshopId, command.EmployeeId, command.SchemeId,
|
||
command.GroupId, command.JobId);
|
||
await _classificationEmployeeRepository.CreateAsync(create);
|
||
await _classificationEmployeeRepository.SaveChangesAsync();
|
||
|
||
return op.Succcedded();
|
||
}
|
||
|
||
|
||
public async Task<OperationResult> EditGroupMember(AddEmployeeToGroup command)
|
||
{
|
||
var op = new OperationResult();
|
||
#region Validation
|
||
|
||
if (command.GroupId == 0)
|
||
return op.Failed("لطفا گروه را انتخاب کنید");
|
||
|
||
if (command.JobId == 0)
|
||
return op.Failed("لطفا سمت را انتخاب کنید");
|
||
|
||
#endregion
|
||
|
||
|
||
var editGroup = _classificationEmployeeRepository.Get(command.Id);
|
||
editGroup.Edit(command.GroupId, command.JobId);
|
||
await _classificationEmployeeRepository.SaveChangesAsync();
|
||
|
||
return op.Succcedded();
|
||
}
|
||
|
||
public async Task<OperationResult> EditMultipleGroupMember(List<EditEmployeeGroupList> command)
|
||
{
|
||
var op = new OperationResult();
|
||
foreach (var item in command)
|
||
{
|
||
#region Validation
|
||
|
||
if (item.ClassificationGroupId == 0)
|
||
return op.Failed("لطفا گروه را انتخاب کنید");
|
||
|
||
if (item.ClassificationGroupJobId == 0)
|
||
return op.Failed("لطفا سمت را انتخاب کنید");
|
||
|
||
if (!item.StartGroupDateFa.TryToGeorgianDateTime(out var startDate))
|
||
{
|
||
string startDateFaild = "تاریخ شروع" + item.StartGroupDateFa + "صحیح نمیباشد";
|
||
return op.Failed(startDateFaild);
|
||
}
|
||
|
||
if (!string.IsNullOrWhiteSpace(item.EndGroupDateFa))
|
||
{
|
||
if (!item.EndGroupDateFa.TryToGeorgianDateTime(out var endDate))
|
||
{
|
||
string endDateFaild = "تاریخ پایان" + item.EndGroupDateFa + "صحیح نمیباشد";
|
||
return op.Failed(endDateFaild);
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
|
||
foreach (var item in command)
|
||
{
|
||
var edit = _classificationEmployeeRepository.Get(item.Id);
|
||
|
||
if(string.IsNullOrWhiteSpace(item.EndGroupDateFa))
|
||
{
|
||
edit.EditMultipleGroupMember(item.ClassificationGroupId, item.ClassificationGroupJobId, item.StartGroupDateFa.ToGeorgianDateTime(), null);
|
||
}
|
||
else
|
||
{
|
||
edit.EditMultipleGroupMember(item.ClassificationGroupId, item.ClassificationGroupJobId, item.StartGroupDateFa.ToGeorgianDateTime(), item.EndGroupDateFa.ToGeorgianDateTime());
|
||
}
|
||
|
||
await _classificationEmployeeRepository.SaveChangesAsync();
|
||
}
|
||
|
||
return op.Succcedded();
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// دریافت اطلاعات عضویتی پرسنل در گروه
|
||
/// </summary>
|
||
/// <param name="employeeId"></param>
|
||
/// <returns></returns>
|
||
public async Task<EditEmployeeGroup> GetEmployeeMemberizeData(long employeeId)
|
||
{
|
||
var result = new EditEmployeeGroup();
|
||
var res = await _classificationEmployeeRepository.GetEmployeeMemberizeData(employeeId);
|
||
|
||
if (res.Any())
|
||
{
|
||
result.HasMultipleGroup = res.Count > 1;
|
||
result.EditEmployeeGroupLists = res;
|
||
}
|
||
|
||
return result;
|
||
|
||
|
||
}
|
||
|
||
public async Task<BaseYearDataViewModel> BaseYearComputeOneGroup(DateTime schemeStart, DateTime? schemeEnd, DateTime contractStart, DateTime contractEnd,
|
||
string groupNo, long employeeId, long workshopId)
|
||
{
|
||
return await _classificationSchemeRepository.BaseYearComputeOneGroup(schemeStart, schemeEnd, contractStart,
|
||
contractEnd, groupNo, employeeId, workshopId);
|
||
}
|
||
} |