diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index 4c8f4408..b2708d08 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -41,6 +41,23 @@ public static class Tools return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$"); } + /// + /// تاریخ شروع و تعداد ماه را میگیرد و تاریخ پایان قراردا را بر میگرداند + /// + /// + /// + /// + public static (DateTime endDateGr, string endDateFa) FindEndOfContract(string startDate, string monthPlus) + { + + int startYear = Convert.ToInt32(startDate.Substring(0, 4)); + int startMonth = Convert.ToInt32(startDate.Substring(5, 2)); + int startDay = Convert.ToInt32(startDate.Substring(8, 2)); + var start = new PersianDateTime(startYear, startMonth, startDay); + var end = (start.AddMonths(Convert.ToInt32(monthPlus))).AddDays(-1); + return ($"{end}".ToGeorgianDateTime(), $"{end}"); + + } /// /// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs index ea15028c..6e654328 100644 --- a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs +++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Threading.Tasks; using _0_Framework.Application; using CompanyManagment.App.Contracts.InstitutionPlan; @@ -55,14 +56,14 @@ public interface ITemporaryClientRegistrationApplication /// /// Task GetTotalPaymentAndWorkshopList(long contractingPartyTempId, - string periodModel = "12", string paymentModel = "OneTime"); + string periodModel = "12", string paymentModel = "OneTime", string contractStartType = "currentMonth"); /// /// ایجاد یا ویرایش قرارداد موقت /// /// /// - Task CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax); + Task CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax, DateTime contractStart); /// /// دریافت کد برای کلاینت diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ReviewAndPaymentViewModel.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ReviewAndPaymentViewModel.cs index 2a1c47c4..10912190 100644 --- a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ReviewAndPaymentViewModel.cs +++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ReviewAndPaymentViewModel.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace CompanyManagment.App.Contracts.TemporaryClientRegistration; @@ -114,4 +115,47 @@ public class ReviewAndPaymentViewModel /// لیست اقساط ماهیانه /// public List MonthlyInstallments { get; set; } + + + /// + /// تاریخ شروع قرارداد در اول ماه جاری + /// - + /// شمسی + /// + public string ContractStartCurrentMonthFa { get; set; } + + /// + /// تاریخ شروع قرارداد در اول ماه جاری + /// - + /// میلادی + /// + public DateTime ContractStartCurrentMonthGr { get; set; } + + /// + /// تاریخ شروع قرارداد در اول ماه بعد + /// - + /// شمسی + /// + public string ContractStartNextMonthFa{ get; set; } + + /// + /// تاریخ شروع قرارداد در اول ماه بعد + /// - + /// میلادی + /// + public DateTime ContractStartNextMonthGr { get; set; } + + /// + /// تاریخ پایان قرارداد + /// - + /// میلادی + /// + public DateTime ContractEndGr { get; set; } + + /// + /// تاریخ پایان قرارداد + /// - + /// شمسی + /// + public string ContractEndFa { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs index c7307dd1..356e239d 100644 --- a/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs +++ b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs @@ -18,683 +18,701 @@ namespace CompanyManagment.Application; public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrationApplication { - private readonly IContractingPartyTempRepository _contractingPartyTempRepository; - private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository; - private readonly IUidService _uidService; - private readonly IWorkshopTempRepository _workshopTempRepository; - private readonly IPlanPercentageRepository _planPercentageRepository; - private readonly IWorkshopServicesTempRepository _workshopServicesTempRepository; - private readonly IInstitutionContractTempRepository _institutionContractTempRepository; - private readonly ISmsService _smsService; - - public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService, IWorkshopTempRepository workshopTempRepository, IPlanPercentageRepository planPercentageRepository, IWorkshopServicesTempRepository workshopServicesTempRepository, IInstitutionContractTempRepository institutionContractTempRepository, ISmsService smsService) - { - _contractingPartyTempRepository = contractingPartyTempRepository; - _personalContractingPartyRepository = personalContractingPartyRepository; - _uidService = uidService; - _workshopTempRepository = workshopTempRepository; - _planPercentageRepository = planPercentageRepository; - _workshopServicesTempRepository = workshopServicesTempRepository; - _institutionContractTempRepository = institutionContractTempRepository; - _smsService = smsService; - } - - /// - /// احراز هویت - /// - /// - /// - /// - /// - public async Task> CreateContractingPartyTemp(string nationalCode, string dateOfBirth, string mobile) - { - var op = new OperationResult(); - - #region Validations - - if (string.IsNullOrWhiteSpace(nationalCode) || string.IsNullOrWhiteSpace(dateOfBirth) || - string.IsNullOrWhiteSpace(mobile)) - return op.Failed("هیچ یک از فیلد ها نمیتواند خالی باشد"); - - - if (nationalCode.NationalCodeValid() != "valid") - return op.Failed("کد ملی نا معتبر است"); - - if (!dateOfBirth.IsPersianDateValid()) - return op.Failed("تاریخ تولد نا معتبر است"); - - if (!mobile.IsMobileValid()) - return op.Failed("شماره همراه نا معتبر است"); - - - - #endregion - - - var getExistContractingParty = await _contractingPartyTempRepository.CheckExistOrAuthenticated(nationalCode, dateOfBirth); - - //اگر طرف حساب قبلا در دیتابیس وجود داشت - if (getExistContractingParty) - { - return op.Failed("طرف حساب با این مشخصات در سیستم وجود دارد"); - } - //اگر طرف حساب وجود نداشت - else - { - //دریافت اطلاعات طرف حساب موقت که قبلا ایجاد شده - var getExistTemp = _contractingPartyTempRepository.GetByNationalCode(nationalCode); - - var dateOfBirthGr = dateOfBirth.ToGeorgianDateTime(); - - - //اگر طرف حساب موقت قبلا ایجاد شده دیتای آن را برمیگرداند - if (getExistTemp != null) - { - var institutionContractTemp = await - _institutionContractTempRepository.GetInstitutionContractTemp(0, getExistTemp.Id); - - if (institutionContractTemp != null) - { - - if (institutionContractTemp.RegistrationStatus == "Completed") - return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید"); - } - - if (getExistTemp.DateOfBirth != dateOfBirthGr) - return op.Failed("تاریخ تولد مطابقت ندارد"); - if (getExistTemp.Phone != mobile) - return op.Failed("شما قبلا با شماره همراه دیگری ثبت نام نموده اید"); - return op.Succcedded(getExistTemp); - - } - //چک کردن مطابقت شماره همراه و کد ملی - var isMachMobilAndNationalCode = await _uidService.IsMachPhoneWithNationalCode(nationalCode, mobile); - if (isMachMobilAndNationalCode == null) - return op.Failed("خطا در سرویس احراز هویت"); - if (!isMachMobilAndNationalCode.IsMatched) - return op.Failed("شماره همراه وارد شده با کد ملی مطابقت ندارد"); - - //دریافت اطلاعات احراز هویت - var apiRespons = await _uidService.GetPersonalInfo(nationalCode, dateOfBirth); - - if (apiRespons == null) - return op.Failed("خطا در سرویس احراز هویت"); - if (apiRespons.ResponseContext.Status.Code != 0) - return op.Failed($"{apiRespons.ResponseContext.Status.Message}"); - - var idNumber = apiRespons.IdentificationInformation.ShenasnamehNumber == "0" - ? apiRespons.IdentificationInformation.NationalId - : apiRespons.IdentificationInformation.ShenasnamehNumber; - - //ایجاد طرف حساب موقت - var createTemp = new ContractingPartyTemp(apiRespons.BasicInformation.FirstName, - apiRespons.BasicInformation.LastName, nationalCode, idNumber, mobile, - apiRespons.BasicInformation.FatherName, "", "", "", - apiRespons.IdentificationInformation.ShenasnameSeri, - apiRespons.IdentificationInformation.ShenasnameSerial, apiRespons.BasicInformation.GenderEnum, - dateOfBirthGr); - await _contractingPartyTempRepository.CreateAsync(createTemp); - await _contractingPartyTempRepository.SaveChangesAsync(); - - var result = new ContractingPartyTempViewModel(); - result.Id = createTemp.id; - result.FName = createTemp.FName; - result.LName = createTemp.LName; - result.DateOfBirthFa = dateOfBirth; - result.FatherName = createTemp.FatherName; - result.IdNumberSerial = createTemp.IdNumberSerial; - result.IdNumber = idNumber; - - return op.Succcedded(result); - } - - - - } - - /// - /// تکمیل اطلاعات - /// - /// - /// - /// - /// - /// - - public async Task UpdateAddress(long id, string state, string city, string address) - { - var op = new OperationResult(); - var contractingPartyTemp = _contractingPartyTempRepository.Get(id); - - if (string.IsNullOrWhiteSpace(state) || string.IsNullOrWhiteSpace(city) || string.IsNullOrWhiteSpace(address)) - return op.Failed("اطلاعات ادرس را تکمیل کنید"); - - contractingPartyTemp.UpdateAddress(state, city, address); - await _contractingPartyTempRepository.SaveChangesAsync(); - - return op.Succcedded(); - } - - /// - /// دریافت کارگاه های ذخیره شده - /// - /// - /// - public Task> GetWorkshopTemp(long contractingPartyTempId) - { - return _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId); - } - - /// - /// ایجاد یا ویرایش کارگاه و سرویس های آن - /// - /// - /// - public async Task CreateOrUpdateWorkshopTemp(List command, long contractingPartyTempId) - { - var op = new OperationResult(); - var updateWorkshopList = command.Where(x => x.Id > 0).ToList(); - var createNewWorkshopList = command.Where(x => x.Id == 0).ToList(); - - if (updateWorkshopList.Count == 0 && createNewWorkshopList.Count == 0) - return op.Failed("هیچ مجموعه ای ایجاد نشده است"); - var oldWorkshops = await _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId); - - #region Update - if (updateWorkshopList.Count > 0) - { - var updateListIds = updateWorkshopList.Select(x => x.Id).ToList(); - var oldWorkshopsIds = oldWorkshops.Select(x => x.Id).ToList(); - var exceptWorkshops = oldWorkshopsIds.Except(updateListIds).ToList(); - if (exceptWorkshops.Any()) - await _workshopTempRepository.RemoveWorkshopTemps(exceptWorkshops); - - - foreach (var workshop in updateWorkshopList) - { - - if (string.IsNullOrWhiteSpace(workshop.WorkshopName)) - return op.Failed("نام مجموعه نمی تواند خالی باشد"); - if (workshop.CountPerson == 0) - op.Failed($"تعداد پرسنل مجوعه {workshop.WorkshopName} صفر است"); - if (workshop.ContractAndCheckout == false && workshop.CustomizeCheckout == false && - workshop.RollCall == false && workshop.Insurance == false) - op.Failed($"برای مجموعه {workshop.WorkshopName} هیچ سرویسی انتخاب نشده است"); - var existWorkshops = _workshopTempRepository.Get(workshop.Id); - - if (existWorkshops != null) - { - if (workshop.ContractAndCheckout) - workshop.ContractAndCheckoutInPerson = true; - if (workshop.Insurance) - workshop.InsuranceInPerson = true; - - //دریافت مبالغ سرویس ها - var plan = _planPercentageRepository.GetInstitutionPlanForWorkshop(workshop); - if (plan.OnlineAndInPersonSumAmountDouble > 0) - { - //ویرایش مشخصات کارگاه - existWorkshops.Edit(workshop.WorkshopName, workshop.CountPerson, plan.OnlineAndInPersonSumAmountDouble); - await _workshopTempRepository.SaveChangesAsync(); - - //حذف سرویس های قبلی - _workshopServicesTempRepository.RemoveServices(workshop.Id); - - //سرویس قرداد - if (workshop.ContractAndCheckout) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("ContractAndCheckout", workshop.CountPerson, workshop.Id)); - //سرویس خدمات حضوری قرارداد - if (workshop.ContractAndCheckoutInPerson) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("ContractAndCheckoutInPerson", workshop.CountPerson, workshop.Id)); - - //سرویس بیمه - if (workshop.Insurance) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("Insurance", workshop.CountPerson, workshop.Id)); - //سرویس خدمات حضوری بیمه - if (workshop.InsuranceInPerson) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("InsuranceInPerson", workshop.CountPerson, workshop.Id)); - - //سرویس حضورغیاب - if (workshop.RollCall) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("RollCall", workshop.CountPerson, workshop.Id)); - //سرویس فیش غیر رسمی - if (workshop.CustomizeCheckout) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("CustomizeCheckout", workshop.CountPerson, workshop.Id)); - - await _workshopServicesTempRepository.SaveChangesAsync(); - } - - } - - } - - } - #endregion - - #region Create - - if (createNewWorkshopList.Count > 0) - { - foreach (var workshop in createNewWorkshopList) - { - - if (string.IsNullOrWhiteSpace(workshop.WorkshopName)) - return op.Failed("نام مجموعه نمی تواند خالی باشد"); - if (workshop.CountPerson == 0) - op.Failed($"تعداد پرسنل مجوعه {workshop.WorkshopName} صفر است"); - if (workshop.ContractAndCheckout == false && workshop.CustomizeCheckout == false && - workshop.RollCall == false && workshop.Insurance == false) - op.Failed($"برای مجموعه {workshop.WorkshopName} هیچ سرویسی انتخاب نشده است"); - - if (workshop.ContractAndCheckout) - workshop.ContractAndCheckoutInPerson = true; - if (workshop.Insurance) - workshop.InsuranceInPerson = true; - - //دریافت مبالغ سرویس ها - var plan = _planPercentageRepository.GetInstitutionPlanForWorkshop(workshop); - if (plan.OnlineAndInPersonSumAmountDouble > 0) - { - - - var createNewWorkshopTemp = new WorkshopTemp(workshop.WorkshopName, workshop.CountPerson, - workshop.ContractingPartyTempId, plan.OnlineAndInPersonSumAmountDouble); - await _workshopTempRepository.CreateAsync(createNewWorkshopTemp); - await _workshopTempRepository.SaveChangesAsync(); - - - - //سرویس قرداد - if (workshop.ContractAndCheckout) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("ContractAndCheckout", workshop.CountPerson, createNewWorkshopTemp.id)); - //سرویس خدمات حضوری قرارداد - if (workshop.ContractAndCheckoutInPerson) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("ContractAndCheckoutInPerson", workshop.CountPerson, createNewWorkshopTemp.id)); - - //سرویس بیمه - if (workshop.Insurance) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("Insurance", workshop.CountPerson, createNewWorkshopTemp.id)); - //سرویس خدمات حضوری بیمه - if (workshop.InsuranceInPerson) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("InsuranceInPerson", workshop.CountPerson, createNewWorkshopTemp.id)); - - //سرویس حضورغیاب - if (workshop.RollCall) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("RollCall", workshop.CountPerson, createNewWorkshopTemp.id)); - //سرویس فیش غیر رسمی - if (workshop.CustomizeCheckout) - await _workshopServicesTempRepository.CreateAsync( - new WorkshopServicesTemp("CustomizeCheckout", workshop.CountPerson, createNewWorkshopTemp.id)); - - await _workshopServicesTempRepository.SaveChangesAsync(); - } - - } - } - - #endregion - - - return op.Succcedded(); - } - - /// - /// دریافت جمع کل خدمات برای یک کارگاه - /// - /// - /// - public InstitutionPlanViewModel GetInstitutionPlanForWorkshop(WorkshopTempViewModel workshop) - { - return _planPercentageRepository.GetInstitutionPlanForWorkshop(workshop); - } - - - /// - /// بررسی و پرداخت - /// اطلاعات کامل مبالغ - /// - /// - /// - public async Task GetTotalPaymentAndWorkshopList(long contractingPartyTempId, string periodModel = "12", string paymentModel = "OneTime") + private readonly IContractingPartyTempRepository _contractingPartyTempRepository; + private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository; + private readonly IUidService _uidService; + private readonly IWorkshopTempRepository _workshopTempRepository; + private readonly IPlanPercentageRepository _planPercentageRepository; + private readonly IWorkshopServicesTempRepository _workshopServicesTempRepository; + private readonly IInstitutionContractTempRepository _institutionContractTempRepository; + private readonly ISmsService _smsService; + + public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService, IWorkshopTempRepository workshopTempRepository, IPlanPercentageRepository planPercentageRepository, IWorkshopServicesTempRepository workshopServicesTempRepository, IInstitutionContractTempRepository institutionContractTempRepository, ISmsService smsService) { - - //دریافت کارگاه ها - var workshops = await _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId); + _contractingPartyTempRepository = contractingPartyTempRepository; + _personalContractingPartyRepository = personalContractingPartyRepository; + _uidService = uidService; + _workshopTempRepository = workshopTempRepository; + _planPercentageRepository = planPercentageRepository; + _workshopServicesTempRepository = workshopServicesTempRepository; + _institutionContractTempRepository = institutionContractTempRepository; + _smsService = smsService; + } - double totalPayment1MonthDouble = 0; + /// + /// احراز هویت + /// + /// + /// + /// + /// + public async Task> CreateContractingPartyTemp(string nationalCode, string dateOfBirth, string mobile) + { + var op = new OperationResult(); - //بدست آوردن جمع کل برای یک ماه - foreach (var workshop in workshops) - { - totalPayment1MonthDouble += workshop.WorkshopServicesAmount; - } + #region Validations - if (totalPayment1MonthDouble == 0) - return new ReviewAndPaymentViewModel(); - - var result = new ReviewAndPaymentViewModel(); - - int months = 0; - months = periodModel switch - { - "1" => 1, - "3" => 3, - "6" => 6, - "12" => 12, - _ => 12, - }; - //رند کردن مبالغ کارگاه ها - var roundAmount = (((Convert.ToInt32(totalPayment1MonthDouble))) / 1000000) * 1000000; - double roundAmount2 = roundAmount; - //بدست آوردن جمع کل مبالغ کارگاه بر اساس مدت قراداد - result.SumOfWorkshopsPaymentDouble = months * roundAmount2; - result.SumOfWorkshopsPaymentPaymentStr = result.SumOfWorkshopsPaymentDouble.ToMoney(); + if (string.IsNullOrWhiteSpace(nationalCode) || string.IsNullOrWhiteSpace(dateOfBirth) || + string.IsNullOrWhiteSpace(mobile)) + return op.Failed("هیچ یک از فیلد ها نمیتواند خالی باشد"); - result.PeriodModel = periodModel; - result.PaymentModel = paymentModel; + if (nationalCode.NationalCodeValid() != "valid") + return op.Failed("کد ملی نا معتبر است"); + + if (!dateOfBirth.IsPersianDateValid()) + return op.Failed("تاریخ تولد نا معتبر است"); + + if (!mobile.IsMobileValid()) + return op.Failed("شماره همراه نا معتبر است"); - var tenPercent = result.SumOfWorkshopsPaymentDouble * 10 / 100; - //مالیات - result.ValueAddedTaxDouble = tenPercent; - result.ValueAddedTaxSt = tenPercent.ToMoney(); + + #endregion + + + var getExistContractingParty = await _contractingPartyTempRepository.CheckExistOrAuthenticated(nationalCode, dateOfBirth); + + //اگر طرف حساب قبلا در دیتابیس وجود داشت + if (getExistContractingParty) + { + return op.Failed("طرف حساب با این مشخصات در سیستم وجود دارد"); + } + //اگر طرف حساب وجود نداشت + else + { + //دریافت اطلاعات طرف حساب موقت که قبلا ایجاد شده + var getExistTemp = _contractingPartyTempRepository.GetByNationalCode(nationalCode); + + var dateOfBirthGr = dateOfBirth.ToGeorgianDateTime(); + + + //اگر طرف حساب موقت قبلا ایجاد شده دیتای آن را برمیگرداند + if (getExistTemp != null) + { + var institutionContractTemp = await + _institutionContractTempRepository.GetInstitutionContractTemp(0, getExistTemp.Id); + + if (institutionContractTemp != null) + { + + if (institutionContractTemp.RegistrationStatus == "Completed") + return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید"); + } + + if (getExistTemp.DateOfBirth != dateOfBirthGr) + return op.Failed("تاریخ تولد مطابقت ندارد"); + if (getExistTemp.Phone != mobile) + return op.Failed("شما قبلا با شماره همراه دیگری ثبت نام نموده اید"); + return op.Succcedded(getExistTemp); + + } + //چک کردن مطابقت شماره همراه و کد ملی + var isMachMobilAndNationalCode = await _uidService.IsMachPhoneWithNationalCode(nationalCode, mobile); + if (isMachMobilAndNationalCode == null) + return op.Failed("خطا در سرویس احراز هویت"); + if (!isMachMobilAndNationalCode.IsMatched) + return op.Failed("شماره همراه وارد شده با کد ملی مطابقت ندارد"); + + //دریافت اطلاعات احراز هویت + var apiRespons = await _uidService.GetPersonalInfo(nationalCode, dateOfBirth); + + if (apiRespons == null) + return op.Failed("خطا در سرویس احراز هویت"); + if (apiRespons.ResponseContext.Status.Code != 0) + return op.Failed($"{apiRespons.ResponseContext.Status.Message}"); + + var idNumber = apiRespons.IdentificationInformation.ShenasnamehNumber == "0" + ? apiRespons.IdentificationInformation.NationalId + : apiRespons.IdentificationInformation.ShenasnamehNumber; + + //ایجاد طرف حساب موقت + var createTemp = new ContractingPartyTemp(apiRespons.BasicInformation.FirstName, + apiRespons.BasicInformation.LastName, nationalCode, idNumber, mobile, + apiRespons.BasicInformation.FatherName, "", "", "", + apiRespons.IdentificationInformation.ShenasnameSeri, + apiRespons.IdentificationInformation.ShenasnameSerial, apiRespons.BasicInformation.GenderEnum, + dateOfBirthGr); + await _contractingPartyTempRepository.CreateAsync(createTemp); + await _contractingPartyTempRepository.SaveChangesAsync(); + + var result = new ContractingPartyTempViewModel(); + result.Id = createTemp.id; + result.FName = createTemp.FName; + result.LName = createTemp.LName; + result.DateOfBirthFa = dateOfBirth; + result.FatherName = createTemp.FatherName; + result.IdNumberSerial = createTemp.IdNumberSerial; + result.IdNumber = idNumber; + + return op.Succcedded(result); + } + + + + } + + /// + /// تکمیل اطلاعات + /// + /// + /// + /// + /// + /// + + public async Task UpdateAddress(long id, string state, string city, string address) + { + var op = new OperationResult(); + var contractingPartyTemp = _contractingPartyTempRepository.Get(id); + + if (string.IsNullOrWhiteSpace(state) || string.IsNullOrWhiteSpace(city) || string.IsNullOrWhiteSpace(address)) + return op.Failed("اطلاعات ادرس را تکمیل کنید"); + + contractingPartyTemp.UpdateAddress(state, city, address); + await _contractingPartyTempRepository.SaveChangesAsync(); + + return op.Succcedded(); + } + + /// + /// دریافت کارگاه های ذخیره شده + /// + /// + /// + public Task> GetWorkshopTemp(long contractingPartyTempId) + { + return _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId); + } + + /// + /// ایجاد یا ویرایش کارگاه و سرویس های آن + /// + /// + /// + public async Task CreateOrUpdateWorkshopTemp(List command, long contractingPartyTempId) + { + var op = new OperationResult(); + var updateWorkshopList = command.Where(x => x.Id > 0).ToList(); + var createNewWorkshopList = command.Where(x => x.Id == 0).ToList(); + + if (updateWorkshopList.Count == 0 && createNewWorkshopList.Count == 0) + return op.Failed("هیچ مجموعه ای ایجاد نشده است"); + var oldWorkshops = await _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId); + + #region Update + if (updateWorkshopList.Count > 0) + { + var updateListIds = updateWorkshopList.Select(x => x.Id).ToList(); + var oldWorkshopsIds = oldWorkshops.Select(x => x.Id).ToList(); + var exceptWorkshops = oldWorkshopsIds.Except(updateListIds).ToList(); + if (exceptWorkshops.Any()) + await _workshopTempRepository.RemoveWorkshopTemps(exceptWorkshops); + + + foreach (var workshop in updateWorkshopList) + { + + if (string.IsNullOrWhiteSpace(workshop.WorkshopName)) + return op.Failed("نام مجموعه نمی تواند خالی باشد"); + if (workshop.CountPerson == 0) + op.Failed($"تعداد پرسنل مجوعه {workshop.WorkshopName} صفر است"); + if (workshop.ContractAndCheckout == false && workshop.CustomizeCheckout == false && + workshop.RollCall == false && workshop.Insurance == false) + op.Failed($"برای مجموعه {workshop.WorkshopName} هیچ سرویسی انتخاب نشده است"); + var existWorkshops = _workshopTempRepository.Get(workshop.Id); + + if (existWorkshops != null) + { + if (workshop.ContractAndCheckout) + workshop.ContractAndCheckoutInPerson = true; + if (workshop.Insurance) + workshop.InsuranceInPerson = true; + + //دریافت مبالغ سرویس ها + var plan = _planPercentageRepository.GetInstitutionPlanForWorkshop(workshop); + if (plan.OnlineAndInPersonSumAmountDouble > 0) + { + //ویرایش مشخصات کارگاه + existWorkshops.Edit(workshop.WorkshopName, workshop.CountPerson, plan.OnlineAndInPersonSumAmountDouble); + await _workshopTempRepository.SaveChangesAsync(); + + //حذف سرویس های قبلی + _workshopServicesTempRepository.RemoveServices(workshop.Id); + + //سرویس قرداد + if (workshop.ContractAndCheckout) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("ContractAndCheckout", workshop.CountPerson, workshop.Id)); + //سرویس خدمات حضوری قرارداد + if (workshop.ContractAndCheckoutInPerson) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("ContractAndCheckoutInPerson", workshop.CountPerson, workshop.Id)); + + //سرویس بیمه + if (workshop.Insurance) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("Insurance", workshop.CountPerson, workshop.Id)); + //سرویس خدمات حضوری بیمه + if (workshop.InsuranceInPerson) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("InsuranceInPerson", workshop.CountPerson, workshop.Id)); + + //سرویس حضورغیاب + if (workshop.RollCall) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("RollCall", workshop.CountPerson, workshop.Id)); + //سرویس فیش غیر رسمی + if (workshop.CustomizeCheckout) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("CustomizeCheckout", workshop.CountPerson, workshop.Id)); + + await _workshopServicesTempRepository.SaveChangesAsync(); + } + + } + + } + + } + #endregion + + #region Create + + if (createNewWorkshopList.Count > 0) + { + foreach (var workshop in createNewWorkshopList) + { + + if (string.IsNullOrWhiteSpace(workshop.WorkshopName)) + return op.Failed("نام مجموعه نمی تواند خالی باشد"); + if (workshop.CountPerson == 0) + op.Failed($"تعداد پرسنل مجوعه {workshop.WorkshopName} صفر است"); + if (workshop.ContractAndCheckout == false && workshop.CustomizeCheckout == false && + workshop.RollCall == false && workshop.Insurance == false) + op.Failed($"برای مجموعه {workshop.WorkshopName} هیچ سرویسی انتخاب نشده است"); + + if (workshop.ContractAndCheckout) + workshop.ContractAndCheckoutInPerson = true; + if (workshop.Insurance) + workshop.InsuranceInPerson = true; + + //دریافت مبالغ سرویس ها + var plan = _planPercentageRepository.GetInstitutionPlanForWorkshop(workshop); + if (plan.OnlineAndInPersonSumAmountDouble > 0) + { + + + var createNewWorkshopTemp = new WorkshopTemp(workshop.WorkshopName, workshop.CountPerson, + workshop.ContractingPartyTempId, plan.OnlineAndInPersonSumAmountDouble); + await _workshopTempRepository.CreateAsync(createNewWorkshopTemp); + await _workshopTempRepository.SaveChangesAsync(); + + + + //سرویس قرداد + if (workshop.ContractAndCheckout) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("ContractAndCheckout", workshop.CountPerson, createNewWorkshopTemp.id)); + //سرویس خدمات حضوری قرارداد + if (workshop.ContractAndCheckoutInPerson) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("ContractAndCheckoutInPerson", workshop.CountPerson, createNewWorkshopTemp.id)); + + //سرویس بیمه + if (workshop.Insurance) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("Insurance", workshop.CountPerson, createNewWorkshopTemp.id)); + //سرویس خدمات حضوری بیمه + if (workshop.InsuranceInPerson) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("InsuranceInPerson", workshop.CountPerson, createNewWorkshopTemp.id)); + + //سرویس حضورغیاب + if (workshop.RollCall) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("RollCall", workshop.CountPerson, createNewWorkshopTemp.id)); + //سرویس فیش غیر رسمی + if (workshop.CustomizeCheckout) + await _workshopServicesTempRepository.CreateAsync( + new WorkshopServicesTemp("CustomizeCheckout", workshop.CountPerson, createNewWorkshopTemp.id)); + + await _workshopServicesTempRepository.SaveChangesAsync(); + } + + } + } + + #endregion + + + return op.Succcedded(); + } + + /// + /// دریافت جمع کل خدمات برای یک کارگاه + /// + /// + /// + public InstitutionPlanViewModel GetInstitutionPlanForWorkshop(WorkshopTempViewModel workshop) + { + return _planPercentageRepository.GetInstitutionPlanForWorkshop(workshop); + } + + + /// + /// بررسی و پرداخت + /// اطلاعات کامل مبالغ + /// + /// + /// + public async Task GetTotalPaymentAndWorkshopList(long contractingPartyTempId, string periodModel = "12", string paymentModel = "OneTime", string contractStartType = "currentMonth") + { + + //دریافت کارگاه ها + var workshops = await _workshopTempRepository.GetWorkshopTemp(contractingPartyTempId); + + double totalPayment1MonthDouble = 0; + + //بدست آوردن جمع کل برای یک ماه + foreach (var workshop in workshops) + { + totalPayment1MonthDouble += workshop.WorkshopServicesAmount; + } + + if (totalPayment1MonthDouble == 0) + return new ReviewAndPaymentViewModel(); + + var result = new ReviewAndPaymentViewModel(); + + int months = 0; + months = periodModel switch + { + "1" => 1, + "3" => 3, + "6" => 6, + "12" => 12, + _ => 12, + }; + //رند کردن مبالغ کارگاه ها + var roundAmount = (((Convert.ToInt64(totalPayment1MonthDouble))) / 1000000) * 1000000; + double roundAmount2 = roundAmount; + //بدست آوردن جمع کل مبالغ کارگاه بر اساس مدت قراداد + result.SumOfWorkshopsPaymentDouble = months * roundAmount2; + result.SumOfWorkshopsPaymentPaymentStr = result.SumOfWorkshopsPaymentDouble.ToMoney(); + + + result.PeriodModel = periodModel; + result.PaymentModel = paymentModel; + + + var tenPercent = result.SumOfWorkshopsPaymentDouble * 10 / 100; + //مالیات + result.ValueAddedTaxDouble = tenPercent; + result.ValueAddedTaxSt = tenPercent.ToMoney(); //پرداخت یکجا #region OneTimePaymentResult - double discountOneTimePeyment = result.SumOfWorkshopsPaymentDouble - tenPercent; - - - //مبلغ بدون مالیات و با تخفیف - result.OneTimeWithoutTaxPaymentDouble = discountOneTimePeyment; - result.OneTimeWithoutTaxPaymentStr = discountOneTimePeyment.ToMoney(); - - //مبلغ با مالیات - result.OneTimeTotalPaymentDouble = discountOneTimePeyment + tenPercent; - result.OneTimeTotalPaymentStr = result.OneTimeTotalPaymentDouble.ToMoney(); + double discountOneTimePeyment = result.SumOfWorkshopsPaymentDouble - tenPercent; + + + //مبلغ بدون مالیات و با تخفیف + result.OneTimeWithoutTaxPaymentDouble = discountOneTimePeyment; + result.OneTimeWithoutTaxPaymentStr = discountOneTimePeyment.ToMoney(); + + //مبلغ با مالیات + result.OneTimeTotalPaymentDouble = discountOneTimePeyment + tenPercent; + result.OneTimeTotalPaymentStr = result.OneTimeTotalPaymentDouble.ToMoney(); #endregion //پرداخت ماهیانه #region MonthlyPaymentResult - //مبلغ بدون مالیات - result.MonthlyWithoutTaxPaymentDouble = result.SumOfWorkshopsPaymentDouble; - result.MonthlyWithoutTaxPaymentStr = result.SumOfWorkshopsPaymentDouble.ToMoney(); - - // مبلغ با مالیات - result.MonthlyTotalPaymentDouble = result.SumOfWorkshopsPaymentDouble + tenPercent; - result.MonthlyTotalPaymentStr = result.MonthlyTotalPaymentDouble.ToMoney(); - var installmentList = new List(); + //مبلغ بدون مالیات + result.MonthlyWithoutTaxPaymentDouble = result.SumOfWorkshopsPaymentDouble; + result.MonthlyWithoutTaxPaymentStr = result.SumOfWorkshopsPaymentDouble.ToMoney(); - var startDate = (DateTime.Now).ToFarsi(); + // مبلغ با مالیات + result.MonthlyTotalPaymentDouble = result.SumOfWorkshopsPaymentDouble + tenPercent; + result.MonthlyTotalPaymentStr = result.MonthlyTotalPaymentDouble.ToMoney(); + var installmentList = new List(); - if (periodModel == "1") - { + var startDate = (DateTime.Now).ToFarsi(); + result.ContractStartCurrentMonthFa = $"{startDate.Substring(0, 8)}01"; + result.ContractStartCurrentMonthGr = result.ContractStartCurrentMonthFa.ToGeorgianDateTime(); + startDate = result.ContractStartCurrentMonthFa; - installmentList.Add(new MonthlyInstallment() - { - InstallmentAmountStr = result.MonthlyTotalPaymentStr, - InstallmentCounter = "قسط شماره یک", - InstalmentDate = startDate + result.ContractStartNextMonthGr = ((startDate.FindeEndOfMonth()).ToGeorgianDateTime()).AddDays(1); + result.ContractStartNextMonthFa = result.ContractStartNextMonthGr.ToFarsi(); - }); - result.MonthlyInstallments = installmentList; - } - else - { - int instalmentCount = Convert.ToInt32(periodModel); - var instalmentAmount = result.MonthlyTotalPaymentDouble / instalmentCount; - var findEndOfMonth = startDate.FindeEndOfMonth(); - for (int i = 1; i <= instalmentCount; i++) - { - if (i > 1) - { - var currentMonthStart = ((findEndOfMonth.ToGeorgianDateTime()).AddDays(1)).ToFarsi(); - startDate = currentMonthStart.FindeEndOfMonth(); - findEndOfMonth = startDate; - } + if (contractStartType == "nextMonth") + startDate = result.ContractStartNextMonthFa; - installmentList.Add(new MonthlyInstallment() - { - InstallmentAmountStr = instalmentAmount.ToMoney(), - InstallmentCounter = i switch - { - 1 => "قسط شماره یک", - 2 => "قسط شماره دو", - 3 => "قسط شماره سه", - 4 => "قسط شماره چهار", - 5 => "قسط شماره پنج", - 6 => "قسط شماره شش", - 7 => "قسط شماره هفت", - 8 => "قسط شماره هشت", - 9 => "قسط شماره نه", - 10 => "قسط شماره ده", - 11 => "قسط شماره یازده", - 12 => "قسط شماره دوازده", - _ => "قسط شماره دوازده", - }, - InstalmentDate = startDate - }); - } - } + var findeEnd = Tools.FindEndOfContract(startDate, periodModel); + var contractEndDate = findeEnd.endDateGr; + result.ContractEndGr = contractEndDate; + result.ContractEndFa = contractEndDate.ToFarsi(); + + if (periodModel == "1") + { + + installmentList.Add(new MonthlyInstallment() + { + InstallmentAmountStr = result.MonthlyTotalPaymentStr, + InstallmentCounter = "سررسید پرداخت اول", + InstalmentDate = (DateTime.Now).ToFarsi() + + }); + result.MonthlyInstallments = installmentList; + } + else + { + int instalmentCount = Convert.ToInt32(periodModel); + var instalmentAmount = result.MonthlyTotalPaymentDouble / instalmentCount; + var findEndOfMonth = startDate.FindeEndOfMonth(); + for (int i = 1; i <= instalmentCount; i++) + { + if (i > 1) + { + var currentMonthStart = ((findEndOfMonth.ToGeorgianDateTime()).AddDays(1)).ToFarsi(); + startDate = currentMonthStart.FindeEndOfMonth(); + findEndOfMonth = startDate; + } + + installmentList.Add(new MonthlyInstallment() + { + InstallmentAmountStr = instalmentAmount.ToMoney(), + InstallmentCounter = i switch + { + 1 => "سررسید پرداخت اول", + 2 => "سررسید پرداخت دوم", + 3 => "سررسید پرداخت سوم", + 4 => "سررسید پرداخت چهارم", + 5 => "سررسید پرداخت پنجم", + 6 => "سررسید پرداخت ششم", + 7 => "سررسید پرداخت هفتم", + 8 => "سررسید پرداخت هشتم", + 9 => "سررسید پرداخت نهم", + 10 => "سررسید پرداخت دهم", + 11 => "سررسید پرداخت یازدهم", + 12 => "سررسید پرداخت دوازدهم", + _ => "سررسید پرداخت دوازدهم", + }, + InstalmentDate = startDate + + }); + } + + } #endregion - + result.MonthlyInstallments = installmentList; result.ContractingPartTempId = contractingPartyTempId; - return result; + return result; - } + } - /// - /// ایجاد یا ویرایش قرارداد موقت - /// - /// - /// - public async Task CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax) - { - - var op = new OperationResult(); - var institutionContractTemp = await - _institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId); - - if (institutionContractTemp == null) - { - var periodModelInt = Convert.ToInt32(periodModel); - var contractstart = DateTime.Now; - var contractEnd = DateTime.Now.AddMonths(periodModelInt); - var create = new InstitutionContractTemp(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractstart, contractEnd, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null); - _institutionContractTempRepository.Create(create); - _institutionContractTempRepository.SaveChanges(); - return op.Succcedded(); - } - else - { - if (institutionContractTemp.VerifyCodeEndTime != null) - { - var spaning = (DateTime.Now - institutionContractTemp.VerifyCodeEndTime.Value ); - if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent" && spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0)) - return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید"); - } - - if (institutionContractTemp.RegistrationStatus == "Completed") - return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید"); - - - var periodModelInt = Convert.ToInt32(periodModel); - var contractstart = DateTime.Now; - var contractEnd = DateTime.Now.AddMonths(periodModelInt); - var update = _institutionContractTempRepository.Get(institutionContractTemp.Id); - update.Edit(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractstart, contractEnd, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null); - _institutionContractTempRepository.SaveChanges(); - return op.Succcedded(); - } - - - } - - - /// - /// دریافت کد برای کلاینت - /// از طرف سرور - /// - /// - /// - public async Task ReceivedCodeFromServer(long contractingPartyTempId) - { + /// + /// ایجاد یا ویرایش قرارداد موقت + /// + /// + /// + public async Task CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax, DateTime contractStart) + { var op = new OperationResult(); - var institutionContractTemp = await + var institutionContractTemp = await + _institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId); + var contractStartDate = contractStart; + string contractStartFa = contractStart.ToFarsi(); + var findeEnd = Tools.FindEndOfContract(contractStartFa, periodModel); + var contractEndDate = findeEnd.endDateGr; + if (institutionContractTemp == null) + { + var periodModelInt = Convert.ToInt32(periodModel); + + var create = new InstitutionContractTemp(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractStartDate, contractEndDate, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null); + _institutionContractTempRepository.Create(create); + _institutionContractTempRepository.SaveChanges(); + return op.Succcedded(); + } + else + { + if (institutionContractTemp.VerifyCodeEndTime != null) + { + var spaning = (DateTime.Now - institutionContractTemp.VerifyCodeEndTime.Value); + if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent" && spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0)) + return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید"); + } + + if (institutionContractTemp.RegistrationStatus == "Completed") + return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید"); + + + var periodModelInt = Convert.ToInt32(periodModel); + var contractstart = DateTime.Now; + var contractEnd = DateTime.Now.AddMonths(periodModelInt); + var update = _institutionContractTempRepository.Get(institutionContractTemp.Id); + update.Edit(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractStartDate, contractEndDate, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null); + _institutionContractTempRepository.SaveChanges(); + return op.Succcedded(); + } + + + } + + + /// + /// دریافت کد برای کلاینت + /// از طرف سرور + /// + /// + /// + public async Task ReceivedCodeFromServer(long contractingPartyTempId) + { + + var op = new OperationResult(); + var institutionContractTemp = await _institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId); if (institutionContractTemp == null) return op.Failed("خطا"); - var update = _institutionContractTempRepository.Get(institutionContractTemp.Id); + var update = _institutionContractTempRepository.Get(institutionContractTemp.Id); - if (institutionContractTemp.RegistrationStatus == "BeforeSendVerifyCode") - { - //ساخت کد شش رقمی - Random generator = new Random(); - String code = generator.Next(1, 1000000).ToString("D6"); - //ارسال اس ام اس - var getContractingPaty = _contractingPartyTempRepository.GetByContractingPartyTempId(contractingPartyTempId); - var sendResult = await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code); + if (institutionContractTemp.RegistrationStatus == "BeforeSendVerifyCode") + { + //ساخت کد شش رقمی + Random generator = new Random(); + String code = generator.Next(1, 1000000).ToString("D6"); + //ارسال اس ام اس + var getContractingPaty = _contractingPartyTempRepository.GetByContractingPartyTempId(contractingPartyTempId); + var sendResult = await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code); - if (!sendResult.IsSuccedded) - return op.Failed($"{sendResult.Message}"); + if (!sendResult.IsSuccedded) + return op.Failed($"{sendResult.Message}"); - //ذخیره کد در دیتا بیس - //ذخیره تاریخ ارسال و مهلت پایان - //ذخیره آیدی پیامک - //تغییر وضعیت به ارسال شده - if (update != null) - { - update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2)); - _institutionContractTempRepository.SaveChanges(); - return op.Succcedded(1, "کد برای شما پیامک شد"); - } + //ذخیره کد در دیتا بیس + //ذخیره تاریخ ارسال و مهلت پایان + //ذخیره آیدی پیامک + //تغییر وضعیت به ارسال شده + if (update != null) + { + update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2)); + _institutionContractTempRepository.SaveChanges(); + return op.Succcedded(1, "کد برای شما پیامک شد"); + } - } + } - if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent") + if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent") - { + { - if(DateTime.Now < institutionContractTemp.VerifyCodeEndTime.Value) - return op.Failed("کد دریافت شده را وارد کنید"); - var spaning = (DateTime.Now - institutionContractTemp.VerifyCodeEndTime.Value); - if ((spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0))) - return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید"); + if (DateTime.Now < institutionContractTemp.VerifyCodeEndTime.Value) + return op.Failed("کد دریافت شده را وارد کنید"); + var spaning = (DateTime.Now - institutionContractTemp.VerifyCodeEndTime.Value); + if ((spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0))) + return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید"); - if ((spaning > new TimeSpan(0, 1, 0))) - { - //ساخت کد شش رقمی - Random generator = new Random(); - String code = generator.Next(1, 1000000).ToString("D6"); - //ارسال اس ام اس - var getContractingPaty = _contractingPartyTempRepository.GetByContractingPartyTempId(contractingPartyTempId); - var sendResult = await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code); + if ((spaning > new TimeSpan(0, 1, 0))) + { + //ساخت کد شش رقمی + Random generator = new Random(); + String code = generator.Next(1, 1000000).ToString("D6"); + //ارسال اس ام اس + var getContractingPaty = _contractingPartyTempRepository.GetByContractingPartyTempId(contractingPartyTempId); + var sendResult = await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code); - if (!sendResult.IsSuccedded) - return op.Failed($"{sendResult.Message}"); + if (!sendResult.IsSuccedded) + return op.Failed($"{sendResult.Message}"); - //ذخیره کد در دیتا بیس - //ذخیره تاریخ ارسال و مهلت پایان - //ذخیره آیدی پیامک - //تغییر وضعیت به ارسال شده + //ذخیره کد در دیتا بیس + //ذخیره تاریخ ارسال و مهلت پایان + //ذخیره آیدی پیامک + //تغییر وضعیت به ارسال شده - if (update != null) - { - update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2)); - _institutionContractTempRepository.SaveChanges(); - return op.Succcedded(1, "کد برای شما پیامک شد"); - } + if (update != null) + { + update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2)); + _institutionContractTempRepository.SaveChanges(); + return op.Succcedded(1, "کد برای شما پیامک شد"); + } - } + } - } + } - //if (institutionContractTemp.RegistrationStatus == "ReceivedCodeFromClient") - // return op.Succcedded(2, "انتقال به بخش پرداخت"); + //if (institutionContractTemp.RegistrationStatus == "ReceivedCodeFromClient") + // return op.Succcedded(2, "انتقال به بخش پرداخت"); - if (institutionContractTemp.RegistrationStatus == "Completed") - return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید"); - return op.Failed("خظا"); - } + if (institutionContractTemp.RegistrationStatus == "Completed") + return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید"); + return op.Failed("خظا"); + } - /// - /// ورود کد از طرف کلاینت - /// برا چک کردن - /// - /// - /// - /// - public async Task CheckVerifyCodeIsTrue(long contractingPartyTempId, string verifyCode) - { - var op = new OperationResult(); - var institutionContractTemp = await - _institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId); - if (institutionContractTemp == null) - return op.Failed("خظا"); - if (institutionContractTemp.RegistrationStatus != "VerifyCodeSent") - return op.Failed("خطا"); + /// + /// ورود کد از طرف کلاینت + /// برا چک کردن + /// + /// + /// + /// + public async Task CheckVerifyCodeIsTrue(long contractingPartyTempId, string verifyCode) + { + var op = new OperationResult(); + var institutionContractTemp = await + _institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId); + if (institutionContractTemp == null) + return op.Failed("خظا"); + if (institutionContractTemp.RegistrationStatus != "VerifyCodeSent") + return op.Failed("خطا"); - if (institutionContractTemp.VerifyCodeEndTime < DateTime.Now) - return op.Failed("کد شما منقضی شده است"); + if (institutionContractTemp.VerifyCodeEndTime < DateTime.Now) + return op.Failed("کد شما منقضی شده است"); - if (institutionContractTemp.SendVerifyCodeTime < DateTime.Now && institutionContractTemp.VerifyCodeEndTime >= DateTime.Now) - { - if (institutionContractTemp.VerifyCode == verifyCode) - { + if (institutionContractTemp.SendVerifyCodeTime < DateTime.Now && institutionContractTemp.VerifyCodeEndTime >= DateTime.Now) + { + if (institutionContractTemp.VerifyCode == verifyCode) + { - return op.Succcedded(); - } - else - { - return op.Failed("کد وارد شده صحیح نیست"); - } + return op.Succcedded(); + } + else + { + return op.Failed("کد وارد شده صحیح نیست"); + } - } + } - return op.Failed("کد وارد شده صحیح نیست"); - } + return op.Failed("کد وارد شده صحیح نیست"); + } - /// - /// تکمیل پرداخت - /// - /// - /// - /// - public async Task PayOffCompleted(long contractingPartyTempId) - { - var op = new OperationResult(); - return op.Succcedded(); - } + /// + /// تکمیل پرداخت + /// + /// + /// + /// + public async Task PayOffCompleted(long contractingPartyTempId) + { + var op = new OperationResult(); + return op.Succcedded(); + } } \ No newline at end of file diff --git a/ServiceHost/Pages/Register/Index.cshtml.cs b/ServiceHost/Pages/Register/Index.cshtml.cs index 4e2e0d74..41dfc6c9 100644 --- a/ServiceHost/Pages/Register/Index.cshtml.cs +++ b/ServiceHost/Pages/Register/Index.cshtml.cs @@ -66,9 +66,9 @@ namespace ServiceHost.Pages.register } - public async Task OnGetTotalPaymentAndWorkshopList(long contractingPartyTempId, string periodModel = "12", string paymentModel = "OneTime") + public async Task OnGetTotalPaymentAndWorkshopList(long contractingPartyTempId, string periodModel = "12", string paymentModel = "OneTime", string contractStartType = "currentMonth") { - var result = await _temporaryClientRegistrationApplication.GetTotalPaymentAndWorkshopList(contractingPartyTempId, periodModel, paymentModel); + var result = await _temporaryClientRegistrationApplication.GetTotalPaymentAndWorkshopList(contractingPartyTempId, periodModel, paymentModel, contractStartType); return new JsonResult(new { data = result, @@ -87,9 +87,9 @@ namespace ServiceHost.Pages.register } - public async Task OnPostCreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax) + public async Task OnPostCreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax, DateTime contractStart) { - var result = await _temporaryClientRegistrationApplication.CreateOrUpdateInstitutionContractTemp(contractingPartyTempId, periodModel, paymentModel, totalPayment, valueAddedTax); + var result = await _temporaryClientRegistrationApplication.CreateOrUpdateInstitutionContractTemp(contractingPartyTempId, periodModel, paymentModel, totalPayment, valueAddedTax, contractStart); return new JsonResult(new { success = result.IsSuccedded, diff --git a/ServiceHost/Pages/Register/_Partials/_Step4.cshtml b/ServiceHost/Pages/Register/_Partials/_Step4.cshtml index b205d28a..ee144b89 100644 --- a/ServiceHost/Pages/Register/_Partials/_Step4.cshtml +++ b/ServiceHost/Pages/Register/_Partials/_Step4.cshtml @@ -6,7 +6,7 @@ - + @@ -16,75 +16,93 @@ پرداخت یکجا - پرداخت مرحله ای + پرداخت ماهانه