306 lines
13 KiB
C#
306 lines
13 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 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;
|
||
|
||
public ClassificationSchemeApplication(IClassificationSchemeRepository classificationSchemeRepository, IClassificationGroupRepository classificationGroupRepository, IClassificationGroupSalariesRepository classificationGroupSalariesRepository, IClassificationRialCoefficientRepository classificationRialCoefficientRepository)
|
||
{
|
||
_classificationSchemeRepository = classificationSchemeRepository;
|
||
_classificationGroupRepository = classificationGroupRepository;
|
||
_classificationGroupSalariesRepository = classificationGroupSalariesRepository;
|
||
_classificationRialCoefficientRepository = classificationRialCoefficientRepository;
|
||
}
|
||
|
||
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();
|
||
}
|
||
} |