using _0_Framework.Application; using _0_Framework.Application.Enums; using Company.Domain.InstitutionContractAgg; using Company.Domain.SmsResultAgg; using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.EFCore.Repository; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace CompanyManagment.Application; public class SmsSettingApplication : ISmsSettingApplication { private readonly ISmsSettingsRepository _smsSettingsRepository; private readonly IInstitutionContractRepository _institutionContractRepository; private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository; public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository) { _smsSettingsRepository = smsSettingsRepository; _institutionContractRepository = institutionContractRepository; _institutionContractSmsServiceRepository = institutionContractSmsServiceRepository; } public async Task GetSmsSettingsByType(TypeOfSmsSetting typeOfSmsSetting) { return await _smsSettingsRepository.GetSmsSettingsByType(typeOfSmsSetting); } /// /// ایجاد تنظیمات پیامک یادآور /// /// /// /// /// public async Task CreateSmsSetting(int dayOfMonth, string timeOfDay, TypeOfSmsSetting typeOfSmsSetting) { var op = new OperationResult(); var timeSpan = new TimeSpan(); if (string.IsNullOrWhiteSpace(timeOfDay)) return op.Failed("ساعت وارد نشده است"); try { timeSpan = TimeSpan.ParseExact(timeOfDay, @"hh\:mm", null); } catch (Exception e) { return op.Failed("فرمت ساعت اشتباه است"); } if (dayOfMonth < 1 || dayOfMonth > 31) { return op.Failed("عدد روز می بایست بین 1 تا 31 باشد"); } if (_smsSettingsRepository.Exists(x => x.DayOfMonth == dayOfMonth && x.TimeOfDay == timeSpan && x.TypeOfSmsSetting == typeOfSmsSetting)) return op.Failed("رکورد ایجاد شده تکراری است"); var create = new SmsSetting(typeOfSmsSetting, dayOfMonth, timeSpan); await _smsSettingsRepository.CreateAsync(create); await _smsSettingsRepository.SaveChangesAsync(); return op.Succcedded(); } public async Task GetSmsSettingToEdit(long id) { return await _smsSettingsRepository.GetSmsSettingToEdit(id); } public async Task EditeSmsSetting(EditSmsSetting command) { var op = new OperationResult(); var timeSpan = new TimeSpan(); if (string.IsNullOrWhiteSpace(command.TimeOfDayDisplay)) return op.Failed("ساعت وارد نشده است"); try { timeSpan = TimeSpan.ParseExact(command.TimeOfDayDisplay, @"hh\:mm", null); } catch (Exception e) { return op.Failed("فرمت ساعت اشتباه است"); } if (command.DayOfMonth < 1 || command.DayOfMonth > 31) { return op.Failed("عدد روز می بایست بین 1 تا 31 باشد"); } if (_smsSettingsRepository.Exists(x => x.DayOfMonth == command.DayOfMonth && x.TimeOfDay == timeSpan && x.TypeOfSmsSetting == command.TypeOfSmsSetting && x.id != command.Id)) return op.Failed("رکورد ایجاد شده تکراری است"); var editSmsSetting = _smsSettingsRepository.Get(command.Id); editSmsSetting.Edit(command.DayOfMonth, timeSpan); await _smsSettingsRepository.SaveChangesAsync(); return op.Succcedded(); } public async Task RemoveSetting(long id) { await _smsSettingsRepository.RemoveItem(id); } public async Task> GetSmsListData(TypeOfSmsSetting typeOfSmsSetting) { return await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, typeOfSmsSetting); } public async Task> GetBlockSmsListData(TypeOfSmsSetting typeOfSmsSetting) { return await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now); } public async Task InstantSendReminderSms(List command) { var op = new OperationResult(); string typeOfSms = "یادآور بدهی ماهانه"; string sendMessStart = "شروع یادآور آنی"; string sendMessEnd = "پایان یادآور آنی"; if (command.Any()) { await _institutionContractSmsServiceRepository.SendReminderSmsToContractingParties(command, typeOfSms, sendMessStart, sendMessEnd); return op.Succcedded(); } else { return op.Failed("موردی انتخاب نشده است"); } } public async Task InstantSendBlockSms(List command) { var op = new OperationResult(); string typeOfSms = "اعلام مسدودی طرف حساب"; string sendMessStart = "شروع مسدودی آنی"; string sendMessEnd = "پایان مسدودی آنی "; if (command.Any()) { await _institutionContractSmsServiceRepository.SendBlockSmsToContractingParties(command, typeOfSms, sendMessStart, sendMessEnd); return op.Succcedded(); } else { return op.Failed("موردی انتخاب نشده است"); } } }