using System.Collections.Generic; using _0_Framework.Application; using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Position; using AccountManagement.Domain.AccountAgg; using TaskManager.Domain.PositionAgg; namespace TaskManager.Application; public class PositionApplication:IPositionApplication { private readonly IPositionRepository _positionRepository; private readonly IAccountRepository _accountRepository; private readonly IAccountApplication _accountApplication; public PositionApplication(IPositionRepository positionRepository, IAccountRepository accountRepository, IAccountApplication accountApplication) { _positionRepository = positionRepository; _accountRepository = accountRepository; _accountApplication = accountApplication; } //ساخت پوزیشن public OperationResult Create(CreatePosition command) { var operation = new OperationResult(); if (string.IsNullOrWhiteSpace(command.Name)) { return operation.Failed("لطفا نام سمت را وارد کنید"); } if (command.Value==0) { return operation.Failed("لطفا سطح سمت را وارد کنید"); } if (command.Value>5) { return operation.Failed(" سطح سمت وارد شده معتبر نمیباشد"); } if (_positionRepository.Exists(x=>x.PositionValue==command.Value)) { return operation.Failed("سطح انتخاب شده قبلا تعریف شده است"); } var position = new Position(command.Name, command.Value); _positionRepository.Create(position); _positionRepository.SaveChanges(); return operation.Succcedded(position.id); } //ذخیره لیست پرسنل برای سمت خود public OperationResult SaveAccountPosition(List accountIds, long positionId) { var operation = new OperationResult(); if (!_positionRepository.Exists(x=>x.id==positionId)) { return operation.Failed("چنین سمتی وجود ندارد"); } if (accountIds.Count<1) { return operation.Failed("لطفا شخصی برای ذخیره انتخاب کنید"); } foreach (var id in accountIds) { var account = _accountRepository.Get(id); account.SetPosition(positionId); } _accountRepository.SaveChanges(); return operation.Succcedded(positionId); } public List GetNoPositionAccounts() { return _positionRepository.GetNoPositionAccounts(); } public List GetUnUsedPositionValues() { return _positionRepository.GetUnUsedPositionValues(); } public OperationResult Remove(long id) { var operation = new OperationResult(); if (!_positionRepository.Exists(x=>x.id==id)) { return operation.Failed("سمت مورد نظر یافت نشد"); } if (_accountApplication.GetAccountsByPositionId(id).Count>0) { return operation.Failed("شما نمیتوانید سمتی که در آن شخصی وجود دارد را حذف کنید."); } _positionRepository.Remove(id); _positionRepository.SaveChanges(); return operation.Succcedded(); } //ویرایش پوزیشن public OperationResult Edit(EditPosition command) { var operation = new OperationResult(); if (_positionRepository.Exists(x=>x.id!=command.Id&&x.PositionName==command.Name)) { return operation.Failed("سمتی با این نام وجود دارد"); } if (_positionRepository.Exists(x => x.id != command.Id && x.PositionValue == command.Value)) { return operation.Failed("سمتی با این سطح وجود دارد"); } var position = _positionRepository.Get(command.Id); position.Edit(command.Name,command.Value); _positionRepository.SaveChanges(); return operation.Succcedded(command.Id); } //گرفتن تمامی پوزیشن ها برای نمایش public List GetPositions()=> _positionRepository.GetPositions(); //ذخیره پوزیشن public OperationResult Save() { _positionRepository.SaveChanges(); return new OperationResult().Succcedded(); } //حذف یک شخص از یک گروه public OperationResult RemoveAccountFromPosition(long positionId, long AccountId) { var operation=new OperationResult(); if (!_accountRepository.Exists(x => x.id == AccountId)) { return operation.Failed("چنین شخصی وجود ندارد"); } var account = _accountRepository.GetIncludePositions(AccountId); if (account.Position.id != positionId) { return operation.Failed("چنین شخصی در این گروه وجود ندارد"); } account.DeletePositionId(); _positionRepository.SaveChanges(); return operation.Succcedded(); } //حذف یک لیستی از اشخاص از یک گروه public OperationResult RemoveAccountListFromPosition(List accountIdList, long PositionId) { var operation= new OperationResult(); foreach (var account in accountIdList) { var acc = _accountRepository.GetIncludePositions(account); acc.DeletePositionId(); } _accountRepository.SaveChanges(); return operation.Succcedded(); } public List GetLowerPosition() { return _positionRepository.GetLowerPosition(); } //گرفتن بالاترین سطح قابل ذخیره public int GetLastPositionValue() { return _positionRepository.GetLastPositionValue(); } }