diff --git a/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs b/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs index 8b752706..a2c864a5 100644 --- a/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs +++ b/Company.Domain/SmsResultAgg/ISmsSettingsRepository.cs @@ -7,7 +7,24 @@ namespace Company.Domain.SmsResultAgg; public interface ISmsSettingsRepository : IRepository { + /// + /// ویرایش پیامک خودکار + /// + /// + /// + Task GetSmsSettingToEdit(long id); - + /// + /// دریافت لیست پیامک های خودکار بر اساس نوع آن + /// + /// + /// Task GetSmsSettingsByType(TypeOfSmsSetting typeOfSmsSetting); + + /// + /// حذف از دیتابیس + /// + /// + /// + Task RemoveItem(long id); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/SmsResult/ISmsSettingApplication.cs b/CompanyManagment.App.Contracts/SmsResult/ISmsSettingApplication.cs new file mode 100644 index 00000000..d3bc23ea --- /dev/null +++ b/CompanyManagment.App.Contracts/SmsResult/ISmsSettingApplication.cs @@ -0,0 +1,49 @@ +using System.Threading.Tasks; +using _0_Framework.Application; +using _0_Framework.Application.Enums; + +namespace CompanyManagment.App.Contracts.SmsResult; + +public interface ISmsSettingApplication +{ + + /// + /// دریافت لیست پیامک های خودکار بر اساس نوع آن + /// + /// + /// + public Task GetSmsSettingsByType(TypeOfSmsSetting typeOfSmsSetting); + + /// + /// ایجاد تنظیمات پیامک یادآور + /// + /// + /// + /// + /// + Task CreateSmsSetting(int dayOfMonth, string timeOfDay, TypeOfSmsSetting typeOfSmsSetting); + + /// + /// ویرایش پیامک خودکار + /// + /// + /// + Task GetSmsSettingToEdit(long id); + + /// + /// ایجاد تنظیمات پیامک یادآور + /// + /// + /// + /// + /// + Task EditeSmsSetting(EditSmsSetting command); + + /// + /// حذف از دیتابیس + /// + /// + /// + Task RemoveSetting(long id); + +} \ No newline at end of file diff --git a/CompanyManagment.Application/SmsSettingApplication.cs b/CompanyManagment.Application/SmsSettingApplication.cs new file mode 100644 index 00000000..886b53c3 --- /dev/null +++ b/CompanyManagment.Application/SmsSettingApplication.cs @@ -0,0 +1,106 @@ +using System; +using System.Threading.Tasks; +using _0_Framework.Application; +using _0_Framework.Application.Enums; +using Company.Domain.SmsResultAgg; +using CompanyManagment.App.Contracts.SmsResult; + +namespace CompanyManagment.Application; + +public class SmsSettingApplication : ISmsSettingApplication +{ + private readonly ISmsSettingsRepository _smsSettingsRepository; + + public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository) + { + _smsSettingsRepository = smsSettingsRepository; + } + + + 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); + } +} \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs b/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs index 6e9f9a46..d0922b29 100644 --- a/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs +++ b/CompanyManagment.EFCore/Repository/SmsSettingsRepository.cs @@ -16,8 +16,32 @@ public class SmsSettingsRepository : RepositoryBase, ISmsSetti _context = context; } + /// + /// ویرایش پیامک خودکار + /// + /// + /// + public async Task GetSmsSettingToEdit(long id) + { + var edit = new EditSmsSetting(); + 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; + edit.TypeOfSmsSetting = getItem.TypeOfSmsSetting; + } + return edit; + } + + /// + /// دریافت لیست پیامک های خودکار بر اساس نوع آن + /// + /// + /// public async Task GetSmsSettingsByType(TypeOfSmsSetting typeOfSmsSetting) { var result = new SmsSettingViewModel(); @@ -37,4 +61,11 @@ public class SmsSettingsRepository : RepositoryBase, ISmsSetti return result; } + + public async Task RemoveItem(long id) + { + var removeItem = Get(id); + _context.SmsSettings.Remove(removeItem); + await _context.SaveChangesAsync(); + } } \ No newline at end of file diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index 9b312c2b..f12b5868 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -535,6 +535,7 @@ public class PersonalBootstrapper #region SmsSettings services.AddTransient(); + services.AddTransient(); #endregion //=========End Of Main==================================== diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml index db492248..c7300fcb 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml @@ -1,5 +1,8 @@ @page +@using _0_Framework.Application.Enums +@using Microsoft.AspNetCore.Mvc.TagHelpers @model ServiceHost.Areas.Admin.Pages.Company.SmsResult.SmsSettingsModel +@Html.AntiForgeryToken() @{ string adminVersion = _0_Framework.Application.Version.AdminVersion; @@ -121,7 +124,19 @@ $(document).ready(function () { - + $('.time-input').mask('00:00', { + translation: { + '0': {pattern: /[0-9]/}, + // برای اولین رقم ساعت فقط 0-2 + 'H': {pattern: /[0-2]/}, + // اگر اولین رقم 2 باشد دومین رقم فقط 0-3 + 'h': {pattern: /[0-3]/}, + // برای دقیقه + 'M': {pattern: /[0-5]/}, + 'm': {pattern: /[0-9]/}, + } + }); + // پیش‌فرض: لود تب اول با workshopId @@ -181,7 +196,38 @@ + function remove(id){ + var urlAjaxToRemove = '@Url.Page("/Company/SmsResult/SmsSettings", "RemoveSetting")'; + $.ajax({ + dataType: 'json', + type: 'GET', + url: urlAjaxToRemove, + headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() }, + data: { id: id }, + + success: function (response) { + if(response.isSuccess){ + $.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message); + + + setTimeout(function () { + $(".li-wizard.step.active").trigger("click"); + + + + }, 500); + }else{ + $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message); + } + + }, + failure: function (response) { + //console.log(5, response); + } + }); + } + } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs index 6eecf3d2..0d479a9a 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml.cs @@ -1,17 +1,19 @@ using _0_Framework.Application.Enums; using Company.Domain.SmsResultAgg; +using CompanyManagment.App.Contracts.SmsResult; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; +using ServiceHost.Areas.Admin.Pages.Company.Bill; namespace ServiceHost.Areas.Admin.Pages.Company.SmsResult { public class SmsSettingsModel : PageModel { - private readonly ISmsSettingsRepository _smsSettingsRepository; + private readonly ISmsSettingApplication _smsSettingApplication; - public SmsSettingsModel(ISmsSettingsRepository smsSettingsRepository) + public SmsSettingsModel(ISmsSettingApplication smsSettingApplication) { - _smsSettingsRepository = smsSettingsRepository; + _smsSettingApplication = smsSettingApplication; } public void OnGet() @@ -19,53 +21,123 @@ namespace ServiceHost.Areas.Admin.Pages.Company.SmsResult } + //=================================== ایجاد ========================================// + + #region Create + /// + /// لود مدال ایجاد پیامک خودکار + /// + /// + public async Task OnGetCreateSmsSetting(TypeOfSmsSetting typeOfSmsSetting) + { + var createModel = new CreateSmsSetting(); + createModel.TypeOfSmsSetting = typeOfSmsSetting; + return Partial("_SmsSettingPartials/_CreateSmsSetting", createModel); + } + + + /// + /// ذخیره مدال ایجاد پیامک خودکار + /// + /// + /// + /// + /// + public async Task OnPostCreateSmsSetting(int dayOfMonth, string timeOfDay, TypeOfSmsSetting typeOfSmsSetting) + { + var result = await _smsSettingApplication.CreateSmsSetting(dayOfMonth, timeOfDay, typeOfSmsSetting); + + return new JsonResult(new + { + isSuccess = result.IsSuccedded, + message = result.Message + }); + + + } + #endregion + + //=================================== ویرایش ========================================// + + #region Edit + /// + /// لود مدال ویرایش پیامک خودکار + /// + /// + public async Task OnGetEditSmsSettings(long id, TypeOfSmsSetting typeOfSmsSetting) + { + var editModel = await _smsSettingApplication.GetSmsSettingToEdit(id); + return Partial("_SmsSettingPartials/_EditSmsSetting", editModel); + + + } + + /// + /// ذخیره مودال ویرایش پیامک خودکار + /// + /// + /// + /// + public async Task OnPostEditSmsSettings(EditSmsSetting command) + { + var result = await _smsSettingApplication.EditeSmsSetting(command); + return new JsonResult(new + { + isSuccess = result.IsSuccedded, + message = result.Message + }); + } + #endregion + //=================================== حذف ========================================// + /// + /// حذف از دیتابیس + /// + /// + /// + public async Task OnGetRemoveSetting(long id) + { + try + { + await _smsSettingApplication.RemoveSetting(id); + + return new JsonResult(new + { + isSuccess = true, + message = "حذف شد" + }); + } + catch (Exception e) + { + return new JsonResult(new + { + isSuccess = false, + message = "خطا در حذف اطلاعات" + }); + } + + + + } + //=================================== تب ها ========================================// + + #region Tabs /// /// تب پیامک یادآور /// /// - public IActionResult OnGetInstitutionContractDebtReminderTab() + public async Task OnGetInstitutionContractDebtReminderTab() { - var modelData = _smsSettingsRepository.GetSmsSettingsByType(TypeOfSmsSetting.InstitutionContractDebtReminder).GetAwaiter().GetResult(); + var modelData = await _smsSettingApplication.GetSmsSettingsByType(TypeOfSmsSetting.InstitutionContractDebtReminder); return Partial("_SmsSettingPartials/ReminderSmsListData", modelData); } - /// - /// لود مدال ایجاد پیامک یاد آور - /// - /// - public IActionResult OnGetCreateReminderSetting() - { - - return Partial("_SmsSettingPartials/_CreateReminderSms"); - } - - /// - /// ذخیره مدال ایجاد پیامک یاد آور - /// - /// - /// - /// - public IActionResult OnPostCreateReminderSetting(int dayOfMonth, string timeOfDay) - { - var timeSpan = TimeSpan.ParseExact(timeOfDay, @"hh\:mm", null); - var create = new SmsSetting(TypeOfSmsSetting.InstitutionContractDebtReminder, dayOfMonth, timeSpan); - _smsSettingsRepository.Create(create); - _smsSettingsRepository.SaveChanges(); - - return new JsonResult(new - { - isSuccess = true, - message = "با موفقیت ذخیره شد" - }); - } - /// /// تب پیامک مسدودی /// /// - public IActionResult OnGetBlockContractingPartyTab() + public async Task OnGetBlockContractingPartyTab() { - var modelData = _smsSettingsRepository.GetSmsSettingsByType(TypeOfSmsSetting.BlockContractingParty).GetAwaiter().GetResult(); + var modelData = await _smsSettingApplication.GetSmsSettingsByType(TypeOfSmsSetting.BlockContractingParty); return Partial("_SmsSettingPartials/BlockSmsListData", modelData); } @@ -73,9 +145,9 @@ namespace ServiceHost.Areas.Admin.Pages.Company.SmsResult /// تب پیامک اقدام قضائی /// /// - public IActionResult OnGetLegalActionTab() + public async Task OnGetLegalActionTab() { - var modelData = _smsSettingsRepository.GetSmsSettingsByType(TypeOfSmsSetting.LegalAction).GetAwaiter().GetResult(); + var modelData = await _smsSettingApplication.GetSmsSettingsByType(TypeOfSmsSetting.LegalAction); return Partial("_SmsSettingPartials/LegalActionSmsListData", modelData); } @@ -84,11 +156,12 @@ namespace ServiceHost.Areas.Admin.Pages.Company.SmsResult /// تب پیامک هشدار قضایی /// /// - public IActionResult OnGetWarningTab() + public async Task OnGetWarningTab() { - var modelData = _smsSettingsRepository.GetSmsSettingsByType(TypeOfSmsSetting.Warning).GetAwaiter().GetResult(); + var modelData = await _smsSettingApplication.GetSmsSettingsByType(TypeOfSmsSetting.Warning); return Partial("_SmsSettingPartials/WarningSmsListData", modelData); - } + } + #endregion } } diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/BlockSmsListData.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/BlockSmsListData.cshtml index d7f3421c..da5f1314 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/BlockSmsListData.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/BlockSmsListData.cshtml @@ -1,9 +1,11 @@ -@model CompanyManagment.App.Contracts.SmsResult.SmsSettingViewModel +@using _0_Framework.Application.Enums +@model CompanyManagment.App.Contracts.SmsResult.SmsSettingViewModel +@Html.AntiForgeryToken() @{ int index = 1; }
@@ -116,8 +117,8 @@ }
- + @@ -130,7 +131,7 @@ - + diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/ReminderSmsListData.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/ReminderSmsListData.cshtml index 597d66d6..8cdcf3da 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/ReminderSmsListData.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/ReminderSmsListData.cshtml @@ -1,4 +1,5 @@ -@model CompanyManagment.App.Contracts.SmsResult.SmsSettingViewModel +@using _0_Framework.Application.Enums +@model CompanyManagment.App.Contracts.SmsResult.SmsSettingViewModel @{ int index = 1; @@ -52,7 +53,7 @@
+ style="border-radius:5px;" href="#showmodal=@Url.Page("./SmsSettings", "CreateSmsSetting", new {typeOfSmsSetting = TypeOfSmsSetting.InstitutionContractDebtReminder})"> @@ -111,8 +112,8 @@ }
- + @@ -125,7 +126,7 @@ - + diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/WarningSmsListData.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/WarningSmsListData.cshtml index d705bcd4..ec3ea690 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/WarningSmsListData.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/WarningSmsListData.cshtml @@ -1,4 +1,5 @@ -@model CompanyManagment.App.Contracts.SmsResult.SmsSettingViewModel +@using _0_Framework.Application.Enums +@model CompanyManagment.App.Contracts.SmsResult.SmsSettingViewModel @{ int index = 1; @@ -50,14 +51,12 @@ }
@@ -115,8 +117,8 @@ }
- + @@ -129,7 +131,7 @@ - + diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateReminderSms.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateSmsSetting.cshtml similarity index 51% rename from ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateReminderSms.cshtml rename to ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateSmsSetting.cshtml index cb404bf6..a1553eea 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateReminderSms.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/_SmsSettingPartials/_CreateSmsSetting.cshtml @@ -1,4 +1,5 @@ -@model CompanyManagment.App.Contracts.SmsResult.CreateSmsSetting +@using _0_Framework.Application.Enums +@model CompanyManagment.App.Contracts.SmsResult.CreateSmsSetting @Html.AntiForgeryToken() @{ @@ -9,13 +10,42 @@ } .modal .modal-dialog .modal-content{ - padding-bottom : 10px; + padding-bottom : 10px !important; + + } + + .modal-dialog{ + width: 27% !important; + max-width: 27% !important; + } + + + + input{ + text-align:center; } }