diff --git a/0_Framework/Application/Enums/TypeOfSmsSetting.cs b/0_Framework/Application/Enums/TypeOfSmsSetting.cs index 28089ced..a604e9e6 100644 --- a/0_Framework/Application/Enums/TypeOfSmsSetting.cs +++ b/0_Framework/Application/Enums/TypeOfSmsSetting.cs @@ -45,6 +45,11 @@ public enum TypeOfSmsSetting /// SendInstitutionContractConfirmationCode, + /// + /// لینک تاییدیه ایجاد قرارداد مالی + /// + SendInstitutionContractConfirmationLink, + /// /// یادآور وظایف /// diff --git a/0_Framework/Application/Sms/ApiResultViewModel.cs b/0_Framework/Application/Sms/ApiResultViewModel.cs index 0d5c1ca1..4bb3bd47 100644 --- a/0_Framework/Application/Sms/ApiResultViewModel.cs +++ b/0_Framework/Application/Sms/ApiResultViewModel.cs @@ -30,5 +30,22 @@ public class ApiReportDto public string DeliveryState { get; set; } public string DeliveryUnixTime { get; set; } public string DeliveryColor { get; set; } + public string FullName { get; set; } + +} + +public class SmsDetailsDto +{ + + + public string MessageText { get; set; } + + public long Mobile { get; set; } + + public string SendUnixTime { get; set; } + public string DeliveryState { get; set; } + public string DeliveryUnixTime { get; set; } + public string DeliveryColor { get; set; } + public string FullName { get; set; } } \ No newline at end of file diff --git a/0_Framework/Application/Sms/ISmsService.cs b/0_Framework/Application/Sms/ISmsService.cs index 20e41608..3c02e90f 100644 --- a/0_Framework/Application/Sms/ISmsService.cs +++ b/0_Framework/Application/Sms/ISmsService.cs @@ -16,15 +16,21 @@ public interface ISmsService /// /// Task SendVerifyCodeToClient(string number, string code); - bool SendAccountsInfo(string number,string fullName, string userName); + bool SendAccountsInfo(string number, string fullName, string userName); Task GetByMessageId(int messId); Task> GetApiResult(string startDate, string endDate); #region ForApi Task> GetApiReport(string startDate, string endDate); - -#endregion + /// + /// دریافت جزئیات پیامک + /// + /// + /// + /// + Task GetSmsDetailsByMessageId(int messId, string fullName); + #endregion string DeliveryStatus(byte? dv); string DeliveryColorStatus(byte? dv); @@ -33,9 +39,9 @@ public interface ISmsService #region Mahan Task GetCreditAmount(); - + public Task SendInstitutionCreationVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId, string typeOfSms = null); - + public Task SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName, long contractingPartyId, long institutionContractId); @@ -68,7 +74,7 @@ public interface ISmsService /// /// Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id, string aprove); - + /// /// پیامک مسدودی طرف حساب /// قراردادهای قدیم diff --git a/Company.Domain/SmsResultAgg/ISmsResultRepository.cs b/Company.Domain/SmsResultAgg/ISmsResultRepository.cs index 24ee411b..395e3f4c 100644 --- a/Company.Domain/SmsResultAgg/ISmsResultRepository.cs +++ b/Company.Domain/SmsResultAgg/ISmsResultRepository.cs @@ -1,4 +1,5 @@ -using _0_Framework.Domain; +using _0_Framework.Application.Enums; +using _0_Framework.Domain; using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.App.Contracts.SmsResult.Dto; using System.Collections.Generic; @@ -22,8 +23,9 @@ public interface ISmsResultRepository : IRepository /// /// /// + /// /// - Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date); + Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting); #endregion List Search(SmsResultSearchModel searchModel); diff --git a/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs b/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs index a2c864a5..8baacff0 100644 --- a/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs +++ b/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs @@ -1,6 +1,7 @@ using _0_Framework.Application.Enums; using _0_Framework.Domain; using CompanyManagment.App.Contracts.SmsResult; +using System.Collections.Generic; using System.Threading.Tasks; namespace Company.Domain.SmsResultAgg; @@ -27,4 +28,25 @@ public interface ISmsSettingsRepository : IRepository /// /// Task RemoveItem(long id); + + + #region ForApi + + /// + /// دریافت لیست پیامک های خودکار بر اساس نوع آن + /// Api + /// + /// + /// + Task> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting); + + + + /// + /// دریافت اطلاعات تنظیمات پیامک جهت ویرایش + /// + /// + /// + Task GetSmsSettingDataToEdit(long id); + #endregion } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/SmsListData.cs b/CompanyManagment.App.Contracts/InstitutionContract/SmsListData.cs index e81a8ecf..9fb58b9e 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/SmsListData.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/SmsListData.cs @@ -1,4 +1,6 @@ -namespace CompanyManagment.App.Contracts.InstitutionContract; +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.InstitutionContract; /// /// لیست پیامکهای بدهکاران قرارداد ملی @@ -113,10 +115,30 @@ public class BlockSmsListData /// -/// لیست قراداد های آبی -/// جهت ارسال هشدار یا اقدام قضائی +///پیامک آنی یادآور /// -public class BlueWarningSmsData +public class InstantReminderSendSms { + /// + /// نام طرف حساب + /// + public string FullName { get; set; } + /// + /// مبلغ بدهی + /// + public string Amount { get; set; } + public List InstantReminderSmsList { get; set; } +} + +public class InstantReminderSmsList +{ + /// + /// شماره تماس طرف حساب + /// + public string PhoneNumber { get; set; } + + + + } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/SmsResult/CreateSmsSetting.cs b/CompanyManagment.App.Contracts/SmsResult/CreateSmsSetting.cs index f467ca34..5873ac60 100644 --- a/CompanyManagment.App.Contracts/SmsResult/CreateSmsSetting.cs +++ b/CompanyManagment.App.Contracts/SmsResult/CreateSmsSetting.cs @@ -60,3 +60,43 @@ public class SmsSettingViewModel /// public List EditSmsSettings { get; set; } } + + + +/// +/// لیست تنظیمات پیامک خودکار +/// +public class SmsSettingDto +{ + /// + /// آی دی + /// + public long Id { get; set; } + + /// + /// عدد روز از ماه + /// + public int DayOfMonth { get; set; } + + /// + /// نمایش ساعت و دقیقه + /// + public string TimeOfDayDisplay { get; set; } +} + + +public class CreateSmsSettingDto +{ + /// + /// عدد روز از ماه + /// + public int DayOfMonth { get; set; } + + /// + /// نمایش ساعت و دقیقه + /// + public string TimeOfDayDisplay { get; set; } +} + + + diff --git a/CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs b/CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs index 445ed2b0..9a1fc20a 100644 --- a/CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs +++ b/CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs @@ -9,6 +9,11 @@ public class SmsReportDto /// public string SentDate { get; set; } + /// + /// نوع پیامک + /// + public string TypeOfSms { get; set; } + } diff --git a/CompanyManagment.App.Contracts/SmsResult/ISmsResultApplication.cs b/CompanyManagment.App.Contracts/SmsResult/ISmsResultApplication.cs index 2c857396..cc8bfc54 100644 --- a/CompanyManagment.App.Contracts/SmsResult/ISmsResultApplication.cs +++ b/CompanyManagment.App.Contracts/SmsResult/ISmsResultApplication.cs @@ -1,4 +1,5 @@ using _0_Framework.Application; +using _0_Framework.Application.Enums; using CompanyManagment.App.Contracts.SmsResult.Dto; using System; using System.Collections.Generic; @@ -24,8 +25,9 @@ public interface ISmsResultApplication /// /// /// + /// /// - Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date); + Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting); #endregion diff --git a/CompanyManagment.App.Contracts/SmsResult/ISmsSettingApplication.cs b/CompanyManagment.App.Contracts/SmsResult/ISmsSettingApplication.cs index 49fdc4e8..1da9deb4 100644 --- a/CompanyManagment.App.Contracts/SmsResult/ISmsSettingApplication.cs +++ b/CompanyManagment.App.Contracts/SmsResult/ISmsSettingApplication.cs @@ -75,4 +75,45 @@ public interface ISmsSettingApplication /// /// Task InstantSendBlockSms(List command); + + + #region ForApi + + /// + /// دریافت لیست پیامک های خودکار بر اساس نوع آن + /// Api + /// + /// + /// + Task> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting); + + /// + /// دریافت اطلاعات تنظیمات پیامک جهت ویرایش + /// + /// + /// + Task GetSmsSettingDataToEdit(long id); + + /// + /// ویرایش تنظیمات پیامک + /// + /// + /// + Task EditSmsSetting(SmsSettingDto command); + + /// + /// دریافت لیست ارسال آنی + /// + /// + Task> GetInstantReminderSmsListData(TypeOfSmsSetting typeOfSmsSetting); + + /// + /// ارسال پیامک آنی + /// + /// + /// + /// + Task InstantSmsSendApi(TypeOfSmsSetting typeOfSmsSetting, List phoneNumbers); + + #endregion } \ No newline at end of file diff --git a/CompanyManagment.Application/SmsResultApplication.cs b/CompanyManagment.Application/SmsResultApplication.cs index 2c94d837..76f7b50c 100644 --- a/CompanyManagment.Application/SmsResultApplication.cs +++ b/CompanyManagment.Application/SmsResultApplication.cs @@ -1,20 +1,26 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using _0_Framework.Application; +using _0_Framework.Application; +using _0_Framework.Application.Enums; +using _0_Framework.Application.Sms; using Company.Domain.SmsResultAgg; using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.App.Contracts.SmsResult.Dto; +using CompanyManagment.EFCore.Services; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using SmsResult = Company.Domain.SmsResultAgg.SmsResult; namespace CompanyManagment.Application; public class SmsResultApplication : ISmsResultApplication { private readonly ISmsResultRepository _smsResultRepository; + private readonly ISmsService _smsService; - public SmsResultApplication(ISmsResultRepository smsResultRepository) + public SmsResultApplication(ISmsResultRepository smsResultRepository, ISmsService smsService) { _smsResultRepository = smsResultRepository; + _smsService = smsService; } @@ -25,9 +31,9 @@ public class SmsResultApplication : ISmsResultApplication return await _smsResultRepository.GetSmsReportList(searchModel); } - public async Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date) + public async Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting) { - return await _smsResultRepository.GetSmsReportExpandList(searchModel, date); + return await _smsResultRepository.GetSmsReportExpandList(searchModel, date, typeOfSmsSetting); } #endregion @@ -67,4 +73,6 @@ public class SmsResultApplication : ISmsResultApplication }).ToList(); return result; } + + } \ No newline at end of file diff --git a/CompanyManagment.Application/SmsSettingApplication.cs b/CompanyManagment.Application/SmsSettingApplication.cs index 203a9e23..6b1d5651 100644 --- a/CompanyManagment.Application/SmsSettingApplication.cs +++ b/CompanyManagment.Application/SmsSettingApplication.cs @@ -9,6 +9,8 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Hosting; namespace CompanyManagment.Application; @@ -17,12 +19,15 @@ public class SmsSettingApplication : ISmsSettingApplication private readonly ISmsSettingsRepository _smsSettingsRepository; private readonly IInstitutionContractRepository _institutionContractRepository; private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository; + private readonly IHostEnvironment _hostEnvironment; - public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository) + public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository, IHostEnvironment hostEnvironment) { _smsSettingsRepository = smsSettingsRepository; _institutionContractRepository = institutionContractRepository; _institutionContractSmsServiceRepository = institutionContractSmsServiceRepository; + _hostEnvironment = hostEnvironment; + } @@ -131,6 +136,12 @@ public class SmsSettingApplication : ISmsSettingApplication public async Task InstantSendReminderSms(List command) { var op = new OperationResult(); + if (_hostEnvironment.IsDevelopment()) + { + + return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد "); + + } string typeOfSms = "یادآور بدهی ماهانه"; string sendMessStart = "شروع یادآور آنی"; string sendMessEnd = "پایان یادآور آنی"; @@ -151,6 +162,13 @@ public class SmsSettingApplication : ISmsSettingApplication public async Task InstantSendBlockSms(List command) { var op = new OperationResult(); + + if (_hostEnvironment.IsDevelopment()) + { + + return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد "); + + } string typeOfSms = "اعلام مسدودی طرف حساب"; string sendMessStart = "شروع مسدودی آنی"; string sendMessEnd = "پایان مسدودی آنی "; @@ -165,4 +183,166 @@ public class SmsSettingApplication : ISmsSettingApplication return op.Failed("موردی انتخاب نشده است"); } } + + #region ForApi + + /// + /// دریافت لیست پیامک های خودکار بر اساس نوع آن + /// Api + /// + /// + /// + public async Task> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting) + { + return await _smsSettingsRepository.GetSmsSettingList(typeOfSmsSetting); + } + + + public async Task GetSmsSettingDataToEdit(long id) + { + return await _smsSettingsRepository.GetSmsSettingDataToEdit(id); + } + + + public async Task EditSmsSetting(SmsSettingDto command) + { + var op = new OperationResult(); + var editSmsSetting = _smsSettingsRepository.Get(command.Id); + 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 == editSmsSetting.TypeOfSmsSetting && x.id != command.Id)) + return op.Failed("رکورد ایجاد شده تکراری است"); + + + editSmsSetting.Edit(command.DayOfMonth, timeSpan); + await _smsSettingsRepository.SaveChangesAsync(); + + return op.Succcedded(); + } + + + public async Task> GetInstantReminderSmsListData(TypeOfSmsSetting typeOfSmsSetting) + { + var result = new List(); + + + if (typeOfSmsSetting == TypeOfSmsSetting.InstitutionContractDebtReminder) + { + var data = await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, TypeOfSmsSetting.InstitutionContractDebtReminder); + + if (data.Any()) + { + result = data.GroupBy(x => x.PartyName).Select(m => new InstantReminderSendSms() + { + FullName = m.Key, + Amount = m.Select(c => c.Amount).First(), + InstantReminderSmsList = m.Select(c => new InstantReminderSmsList() + { + PhoneNumber = c.PhoneNumber, + }).ToList() + + + }).ToList(); + } + } + + if (typeOfSmsSetting == TypeOfSmsSetting.BlockContractingParty) + { + var data = await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now); + + if (data.Any()) + { + result = data.GroupBy(x => x.PartyName).Select(m => new InstantReminderSendSms() + { + FullName = m.Key, + Amount = m.Select(c => c.Amount).First(), + InstantReminderSmsList = m.Select(c => new InstantReminderSmsList() + { + PhoneNumber = c.PhoneNumber, + }).ToList() + + + }).ToList(); + } + } + + return result; + } + + public async Task InstantSmsSendApi(TypeOfSmsSetting typeOfSmsSetting, List phoneNumbers) + { + + var op = new OperationResult(); + if (_hostEnvironment.IsDevelopment()) + { + var str = ""; + foreach (var item in phoneNumbers) + { + str += $" {item}, "; + } + return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد " + " لیست ارسال شما " + str); + + } + if (typeOfSmsSetting == TypeOfSmsSetting.InstitutionContractDebtReminder) + { + if (phoneNumbers.Any()) + { + var data = await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, TypeOfSmsSetting.InstitutionContractDebtReminder); + + if (data.Any()) + { + phoneNumbers = phoneNumbers.Where(x => x.Length == 11).ToList(); + var sendItems = data.Where(x => phoneNumbers.Contains(x.PhoneNumber)).ToList(); + var res = await InstantSendReminderSms(sendItems); + return res; + + } + + return op.Succcedded(); + } + + return op.Failed("موردی انتخاب نشده است"); + + } + + if (typeOfSmsSetting == TypeOfSmsSetting.BlockContractingParty) + { + if (phoneNumbers.Any()) + { + var data = await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now); + + if (data.Any()) + { + phoneNumbers = phoneNumbers.Where(x => x.Length == 11).ToList(); + var sendItems = data.Where(x => phoneNumbers.Contains(x.PhoneNumber)).ToList(); + var res = await InstantSendBlockSms(sendItems); + return res; + } + return op.Succcedded(); + } + return op.Failed("موردی انتخاب نشده است"); + } + + + + + return op.Failed("خطای انتخاب نوع ارسال"); + } + #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs index af92bbba..721c64b7 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs @@ -2126,6 +2126,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase, ISmsResultRe case TypeOfSmsSetting.SendInstitutionContractConfirmationCode: typeOfSms = "کد تاییدیه قرارداد مالی"; break; + case TypeOfSmsSetting.SendInstitutionContractConfirmationLink: + typeOfSms = "لینک تاییدیه ایجاد قرارداد مالی"; + break; case TypeOfSmsSetting.TaskReminder: typeOfSms = "یادآور وظایف"; break; @@ -147,7 +150,7 @@ public class SmsResultRepository : RepositoryBase, ISmsResultRe // مرحله 2: گروه‌بندی و انتخاب آخرین رکورد هر روز روی Client var grouped = rawQuery - .GroupBy(x => x.DateOnly) + .GroupBy(x => (x.DateOnly, x.TypeOfSms)) .Select(g => g.OrderByDescending(x => x.CreationDate).First()) .OrderByDescending(x => x.CreationDate) .ToList(); @@ -155,15 +158,16 @@ public class SmsResultRepository : RepositoryBase, ISmsResultRe // مرحله 3: تبدیل به DTO و ToFarsi var result = grouped.Select(x => new SmsReportDto { - SentDate = x.CreationDate.ToFarsi() + SentDate = x.CreationDate.ToFarsi(), + TypeOfSms = x.TypeOfSms }).ToList(); return result; } - public async Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date) + public async Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting) { - if(string.IsNullOrWhiteSpace(date)) + if(string.IsNullOrWhiteSpace(date) || string.IsNullOrWhiteSpace(typeOfSmsSetting)) return new List(); if (date.TryToGeorgianDateTime(out var searchDate) == false) @@ -198,41 +202,12 @@ public class SmsResultRepository : RepositoryBase, ISmsResultRe query = query.Where(x => x.Mobile.Contains(searchModel.Mobile)).ToList(); } - if (searchModel.TypeOfSms != TypeOfSmsSetting.All && searchModel.TypeOfSms != TypeOfSmsSetting.Warning) - { - var typeOfSms = "All"; - switch (searchModel.TypeOfSms) - { - case TypeOfSmsSetting.InstitutionContractDebtReminder: - typeOfSms = "یادآور بدهی ماهانه"; - break; - case TypeOfSmsSetting.MonthlyInstitutionContract: - typeOfSms = "صورت حساب ماهانه"; - break; - case TypeOfSmsSetting.BlockContractingParty: - typeOfSms = "اعلام مسدودی طرف حساب"; - break; - case TypeOfSmsSetting.LegalAction: - typeOfSms = "اقدام قضایی"; - break; - case TypeOfSmsSetting.InstitutionContractConfirm: - typeOfSms = "یادآور تایید قرارداد مالی"; - break; - case TypeOfSmsSetting.SendInstitutionContractConfirmationCode: - typeOfSms = "کد تاییدیه قرارداد مالی"; - break; - case TypeOfSmsSetting.TaskReminder: - typeOfSms = "یادآور وظایف"; - break; - } - query = query.Where(x => x.TypeOfSms == typeOfSms).ToList(); - } - - if (searchModel.TypeOfSms == TypeOfSmsSetting.Warning) + if (typeOfSmsSetting.Contains("هشدار")) { query = query.Where(x => x.TypeOfSms.Contains("هشدار")).ToList(); } + query = query.Where(x => x.TypeOfSms == typeOfSmsSetting).ToList(); if (searchModel.SendStatus != SendStatus.All) { diff --git a/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs b/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs index d0922b29..da3c11b3 100644 --- a/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs +++ b/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using _0_Framework.Application.Enums; using _0_Framework.InfraStructure; @@ -68,4 +69,48 @@ public class SmsSettingsRepository : RepositoryBase, ISmsSetti _context.SmsSettings.Remove(removeItem); await _context.SaveChangesAsync(); } + + + #region ForApi + /// + /// دریافت لیست پیامک های خودکار بر اساس نوع آن + /// Api + /// + /// + /// + public async Task> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting) + { + + var data = await _context.SmsSettings + .Where(x => x.TypeOfSmsSetting == typeOfSmsSetting) + .OrderBy(x => x.DayOfMonth).ThenBy(x => x.TimeOfDay) + .Select(x => + new SmsSettingDto() + { + Id = x.id, + DayOfMonth = x.DayOfMonth, + TimeOfDayDisplay = x.TimeOfDay.ToString(@"hh\:mm") + }).ToListAsync(); + + return data; + } + + public async Task GetSmsSettingDataToEdit(long id) + { + var edit = new SmsSettingDto(); + var getItem = await _context.SmsSettings.FirstOrDefaultAsync(x => x.id == id); + + if (getItem != null) + { + edit.Id = getItem.id; + edit.TimeOfDayDisplay = getItem.TimeOfDay.ToString(@"hh\:mm"); + edit.DayOfMonth = getItem.DayOfMonth; + + } + + return edit; + } + + + #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Services/SmsService.cs b/CompanyManagment.EFCore/Services/SmsService.cs index 11ea7adb..d73ac87f 100644 --- a/CompanyManagment.EFCore/Services/SmsService.cs +++ b/CompanyManagment.EFCore/Services/SmsService.cs @@ -205,6 +205,26 @@ public class SmsService : ISmsService }; return appendData; } + + public async Task GetSmsDetailsByMessageId(int messId, string fullName) + { + + SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa"); + var response = await smsIr.GetReportAsync(messId); + MessageReportResult messages = response.Data; + + var appendData = new SmsDetailsDto() + { + Mobile = messages.Mobile, + MessageText = messages.MessageText, + SendUnixTime = UnixTimeStampToDateTime(messages.SendDateTime), + DeliveryState = DeliveryStatus(messages.DeliveryState), + DeliveryUnixTime = UnixTimeStampToDateTime(messages.DeliveryDateTime), + DeliveryColor = DeliveryColorStatus(messages.DeliveryState), + FullName = fullName + }; + return appendData; + } public async Task> GetApiResult(string startDate, string endDate) { diff --git a/ServiceHost/Areas/Admin/Controllers/SmsReportController.cs b/ServiceHost/Areas/Admin/Controllers/SmsReportController.cs index 254d5d05..5a864bd8 100644 --- a/ServiceHost/Areas/Admin/Controllers/SmsReportController.cs +++ b/ServiceHost/Areas/Admin/Controllers/SmsReportController.cs @@ -1,4 +1,7 @@ -using _0_Framework.Application.Sms; +using _0_Framework.Application; +using _0_Framework.Application.Enums; +using _0_Framework.Application.Sms; +using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.App.Contracts.SmsResult.Dto; using Microsoft.AspNetCore.Mvc; @@ -9,12 +12,14 @@ namespace ServiceHost.Areas.Admin.Controllers; public class SmsReportController : AdminBaseController { private readonly ISmsResultApplication _smsResultApplication; + private readonly ISmsSettingApplication _smsSettingApplication; private readonly ISmsService _smsService; - public SmsReportController(ISmsResultApplication smsResultApplication, ISmsService smsService) + public SmsReportController(ISmsResultApplication smsResultApplication, ISmsService smsService, ISmsSettingApplication smsSettingApplication) { _smsResultApplication = smsResultApplication; _smsService = smsService; + _smsSettingApplication = smsSettingApplication; } /// @@ -35,11 +40,25 @@ public class SmsReportController : AdminBaseController /// /// /// + /// /// [HttpGet("GetExpandedList")] - public async Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date) + public async Task> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting) { - var result =await _smsResultApplication.GetSmsReportExpandList(searchModel, date); + var result =await _smsResultApplication.GetSmsReportExpandList(searchModel, date, typeOfSmsSetting); + return result; + } + + /// + /// دریافت جزئیات پیامک + /// + /// + /// + /// + [HttpGet("GetSmsDetails")] + public async Task GetSmsDetails(int messId, string fullName) + { + var result =await _smsService.GetSmsDetailsByMessageId(messId, fullName); return result; } @@ -56,4 +75,206 @@ public class SmsReportController : AdminBaseController return result; } + //تنظیمات پیامک خودکار + #region SmsSettings + + /// + /// لیست تنظیمات پیامک - یادآور + /// + /// + [HttpGet("ReminderSmsSettingList")] + public async Task> ReminderSmsSettingList() + { + var result = await _smsSettingApplication.GetSmsSettingList(TypeOfSmsSetting.InstitutionContractDebtReminder); + return result; + } + + + /// + /// لیست تنظیمات پیامک - مسدودی + /// + /// + [HttpGet("BlockSmsSettingList")] + public async Task> BlockSmsSettingList() + { + var result = await _smsSettingApplication.GetSmsSettingList(TypeOfSmsSetting.BlockContractingParty); + return result; + } + + /// + /// لیست تنظیمات پیامک - هشدار قضایی + /// + /// + [HttpGet("WarningSmsSettingList")] + public async Task> WarningSmsSettingList() + { + var result = await _smsSettingApplication.GetSmsSettingList(TypeOfSmsSetting.Warning); + return result; + } + + + /// + /// لیست تنظیمات پیامک - اقدام قضایی + /// + /// + [HttpGet("LegalActionSmsSettingList")] + public async Task> LegalActionSmsSettingList() + { + var result = await _smsSettingApplication.GetSmsSettingList(TypeOfSmsSetting.LegalAction); + return result; + } + + /// + /// لیست تنظیمات پیامک - تایید قراداد مالی + /// + /// + [HttpGet("ContractConfirmSmsSettingList")] + public async Task> ContractConfirmSmsSettingList() + { + var result = await _smsSettingApplication.GetSmsSettingList(TypeOfSmsSetting.InstitutionContractConfirm); + return result; + } + + //=====================Create========================= + + /// + /// ایجاد پیامک یادآور + /// + /// + [HttpPost("CreateReminderSmsSetting")] + public async Task> CreateReminderSmsSetting([FromBody] CreateSmsSettingDto command) + { + var result = await _smsSettingApplication.CreateSmsSetting(command.DayOfMonth, command.TimeOfDayDisplay, TypeOfSmsSetting.InstitutionContractDebtReminder); + return result; + } + + /// + /// ایجاد پیامک مسدودی + /// + /// + [HttpPost("CreateBlockSmsSetting")] + public async Task> CreateBlockSmsSetting([FromBody] CreateSmsSettingDto command) + { + var result = await _smsSettingApplication.CreateSmsSetting(command.DayOfMonth, command.TimeOfDayDisplay, TypeOfSmsSetting.BlockContractingParty); + return result; + } + + /// + /// ایجاد پیامک هشدار قضایی + /// + /// + [HttpPost("CreateWarningSmsSetting")] + public async Task> CreateWarningSmsSetting([FromBody] CreateSmsSettingDto command) + { + var result = await _smsSettingApplication.CreateSmsSetting(command.DayOfMonth, command.TimeOfDayDisplay, TypeOfSmsSetting.Warning); + return result; + } + + + /// + /// ایجاد پیامک اقدام قضایی + /// + /// + [HttpPost("CreateLegalActionSmsSetting")] + public async Task> CreateLegalActionSmsSetting([FromBody] CreateSmsSettingDto command) + { + var result = await _smsSettingApplication.CreateSmsSetting(command.DayOfMonth, command.TimeOfDayDisplay, TypeOfSmsSetting.LegalAction); + return result; + } + + + /// + /// ایجاد پیامک تایید قرارداد مالی + /// + /// + [HttpPost("CreateContractConfirmSmsSetting")] + public async Task> CreateContractConfirmSmsSetting([FromBody] CreateSmsSettingDto command) + { + var result = await _smsSettingApplication.CreateSmsSetting(command.DayOfMonth, command.TimeOfDayDisplay, TypeOfSmsSetting.InstitutionContractConfirm); + return result; + } + //=====================Edit========================= + + /// + /// دریافت اطلاعات ویرایش تنظیمات پیامک + /// + /// + /// + [HttpGet("GetEditData")] + public async Task GetEditData(long id) + { + return await _smsSettingApplication.GetSmsSettingDataToEdit(id); + } + + /// + /// ویرایش تنظیمات پیامک + /// + /// + /// + [HttpPut("EditSmsSetting")] + public async Task> EditSmsSetting([FromBody] SmsSettingDto command) + { + var result =await _smsSettingApplication.EditSmsSetting(command); + return result; + } + + //=====================Remove========================= + + /// + /// حذف تنظیمات پیامک + /// + /// + /// + [HttpDelete] + public async Task RemoveSmsSetting(long id) + { + await _smsSettingApplication.RemoveSetting(id); + } + + /// + /// دریافت لیست ارسال آنی یادآور + /// + /// + [HttpGet("GetInstantReminderSmsListData")] + public async Task> GetInstantReminderSmsListData() + { + var result =await _smsSettingApplication.GetInstantReminderSmsListData(TypeOfSmsSetting.InstitutionContractDebtReminder); + return result; + } + + /// + /// دریافت لیست ارسال آنی مسدودی + /// + /// + [HttpGet("GetInstantBlockSmsListData")] + public async Task> GetInstantBlockSmsListData() + { + var result = await _smsSettingApplication.GetInstantReminderSmsListData(TypeOfSmsSetting.BlockContractingParty); + return result; + } + + /// + /// ارسال پیامک آنی یادآور + /// + /// + /// + [HttpPost("InstantReminderSmsSend")] + public async Task> InstantReminderSmsSend([FromBody] List phoneNumbers) + { + var result = await _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.InstitutionContractDebtReminder, phoneNumbers); + return result; + } + + /// + /// ارسال پیامک آنی مسدودی + /// + /// + /// + [HttpPost("InstantBlockSmsSend")] + public async Task> InstantBlockSmsSend([FromBody] List phoneNumbers) + { + var result = await _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.BlockContractingParty, phoneNumbers); + return result; + } + #endregion } \ No newline at end of file