using System; using System.Collections.Generic; using System.IO; using System.Linq; using _0_Framework.Application; using Company.Domain.CheckoutAgg; using Company.Domain.CustomizeCheckoutAgg; using Company.Domain.CustomizeCheckoutTempAgg; using Company.Domain.RewardAgg; using CompanyManagment.App.Contracts.Reward; using Microsoft.AspNetCore.Components.Forms; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; namespace CompanyManagment.Application; public class RewardApplication : IRewardApplication { private readonly IRewardRepository _rewardRepository; private readonly IAuthHelper _authHelper; private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository; private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository; public RewardApplication(IRewardRepository rewardRepository, IAuthHelper authHelper, ICustomizeCheckoutRepository customizeCheckoutRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository) { _rewardRepository = rewardRepository; _authHelper = authHelper; _customizeCheckoutRepository = customizeCheckoutRepository; _customizeCheckoutTempRepository = customizeCheckoutTempRepository; } public List GetSearchList(RewardSearchModel searchModel) { return _rewardRepository.GetSearchList(searchModel); } public EditRewardViewModel GetDetails(long id) { return _rewardRepository.GetDetails(id); } public OperationResult Remove(long id) { OperationResult op = new OperationResult(); var entity = _rewardRepository.Get(id); if (entity == null) return op.Failed("این آیتم وجود ندارد"); var month = Convert.ToInt32(entity.GrantDate.ToFarsi().Substring(5, 2)); var year = Convert.ToInt32(entity.GrantDate.ToFarsi().Substring(0, 4)); if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == entity.WorkshopId && entity.EmployeeId == x.EmployeeId && x.YearInt == year && x.MonthInt == month)) { return op.Failed("این پرسنل در این تاریخ دارای فیش حقوقی است"); } if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == entity.WorkshopId && entity.EmployeeId == x.EmployeeId && x.YearInt == year && x.MonthInt == month && x.ContractStart <= entity.GrantDate && x.ContractEnd >= entity.GrantDate)) { return op.Failed("این پرسنل در این تاریخ دارای فیش حقوقی موقت است"); } _rewardRepository.Remove(entity); _rewardRepository.SaveChanges(); return op.Succcedded(); } public OperationResult RemoveRange(IEnumerable ids) { OperationResult op = new OperationResult(); var rewards = _rewardRepository.GetBy(ids); _rewardRepository.RemoveRange(rewards); _rewardRepository.SaveChanges(); return op.Succcedded(); } public OperationResult Create(CreateRewardViewModel command) { var op = new OperationResult(); #region Validation if (!command.GrantDate.TryToGeorgianDateTime(out var grantDate)) { return op.Failed("تاریخ وارد شده نامعتبر است"); } if (grantDate > DateTime.Now) { return op.Failed("تاریخ پرداخت پاداش می بایست تاریخ امروز یا قبل تر باشد"); } if (command.Amount.Length > 15) { return op.Failed("مبلغ وارد شده معتبر نیست"); } var month = Convert.ToInt32(command.GrantDate.Substring(5, 2)); var year = Convert.ToInt32(command.GrantDate.Substring(0, 4)); if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year && x.MonthInt == month)) { return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است پاداشی دهید"); } if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeIds.Contains(x.EmployeeId) && x.YearInt == year && x.MonthInt == month && x.ContractStart <= grantDate && x.ContractEnd >= grantDate)) { return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است پاداشی دهید"); } #endregion var (userId, userType) = _authHelper.GetUserTypeWithId(); foreach (var employeeId in command.EmployeeIds) { var entity = new Reward(employeeId, command.WorkshopId, command.Amount.MoneyToDouble(), command.Description, userId, userType,grantDate,command.Title); _rewardRepository.Create(entity); } _rewardRepository.SaveChanges(); return op.Succcedded(); } public OperationResult Edit(EditRewardViewModel command) { var op = new OperationResult(); if (!command.GrantDate.TryToGeorgianDateTime(out var grantDate)) { return op.Failed("تاریخ وارد شده نامعتبر است"); } if (grantDate > DateTime.Now) { return op.Failed("تاریخ پرداخت پاداش می بایست تاریخ امروز یا قبل تر باشد"); } if (command.Amount.Length > 15) { return op.Failed("مبلغ وارد شده معتبر نیست"); } var entity = _rewardRepository.Get(command.Id); if (entity == null) return op.Failed("چنین آیتمی وجود ندارد"); var month = Convert.ToInt32(command.GrantDate.Substring(5, 2)); var year = Convert.ToInt32(command.GrantDate.Substring(0, 4)); if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == command.WorkshopId && command.EmployeeId == x.EmployeeId && x.YearInt == year && x.MonthInt == month)) { return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی صادر شده است پاداشی دهید"); } var (userId, userType) = _authHelper.GetUserTypeWithId(); if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && entity.EmployeeId == x.EmployeeId && x.YearInt == year && x.MonthInt == month && x.ContractStart <= grantDate && x.ContractEnd >= grantDate)) { return op.Failed("شما نمیتوانید برای پرسنلی در تاریخی که برای فیش حقوقی موقت صادر شده است پاداشی دهید"); } entity.Edit(command.Amount.MoneyToDouble(),command.Description,userId,userType, grantDate,command.Title); _rewardRepository.SaveChanges(); return op.Succcedded(entity.id); } #region Pooya /// /// گروهبندی بر اساس ماه هنگام جستجو با انتخاب کارمند /// public RewardsGroupedViewModel GetSearchListAsGrouped(RewardSearchModel searchModel) { return _rewardRepository.GetSearchListAsGrouped(searchModel); } #endregion }