feat: enhance institution contract creation with representative retrieval and code formatting improvements

This commit is contained in:
2025-12-30 14:25:11 +03:30
parent 12318a6a51
commit d11fdcf106
4 changed files with 254 additions and 206 deletions

View File

@@ -132,4 +132,5 @@ public interface IPersonalContractingPartyApp
#endregion #endregion
Task<long> GetRepresentativeIdByNationalCode(string nationalCode);
} }

View File

@@ -722,5 +722,11 @@ public class PersonalContractingPartyApplication : IPersonalContractingPartyApp
return await _personalContractingPartyRepository.GetLegalDetails(id); return await _personalContractingPartyRepository.GetLegalDetails(id);
} }
public async Task<long> GetRepresentativeIdByNationalCode(string nationalCode)
{
var entity = await _personalContractingPartyRepository.GetByNationalCode(nationalCode);
return entity?.RepresentativeId??0;
}
#endregion #endregion
} }

View File

@@ -5269,58 +5269,57 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
throw new BadRequestException("دیتای درخواست شده نامعتبر است"); throw new BadRequestException("دیتای درخواست شده نامعتبر است");
} }
if (contractingParty == null) List<WorkshopTempViewModel> workshopDetails=[];
if (contractingParty != null)
{ {
throw new BadRequestException("طرف قرارداد یافت نشد"); var employerWorkshopIds = _context.Employers
.Where(x => x.ContractingPartyId == contractingParty.id)
.Include(x => x.WorkshopEmployers)
.SelectMany(x => x.WorkshopEmployers).Select(x => x.WorkshopId).Distinct().ToList();
var workshopsNotInInstitution = employerWorkshopIds.ToList();
var workshops = await _context.Workshops
.Where(x => employerWorkshopIds.Contains(x.id))
.ToListAsync();
var notIncludeWorskhopsLeftWork = await _context.LeftWorkList
.Where(x => workshopsNotInInstitution.Contains(x.WorkshopId) && x.StartWorkDate <= DateTime.Now &&
x.LeftWorkDate >= DateTime.Now)
.GroupBy(x => x.WorkshopId).ToListAsync();
workshopDetails = workshopsNotInInstitution.Select(x =>
{
var workshop = workshops.FirstOrDefault(w => w.id == x);
var leftWorks = notIncludeWorskhopsLeftWork.FirstOrDefault(l => l.Key == x);
return new WorkshopTempViewModel()
{
WorkshopName = workshop?.WorkshopName ?? "فاقد کارگاه",
WorkshopServicesAmount = 0,
WorkshopServicesAmountStr = "0",
WorkshopId = x,
Id = 0,
ContractAndCheckout = false,
ContractAndCheckoutInPerson = false,
CustomizeCheckout = false,
CountPerson = leftWorks?.Count() ?? 0,
Insurance = false,
InsuranceInPerson = false,
RollCall = false,
RollCallInPerson = false,
};
}).ToList();
} }
var employerWorkshopIds = _context.Employers
.Where(x => x.ContractingPartyId == contractingParty.id)
.Include(x => x.WorkshopEmployers)
.SelectMany(x => x.WorkshopEmployers).Select(x => x.WorkshopId).Distinct().ToList();
creationTemp.SetContractingPartyContactInfo(request.Address, request.City, request.Province, creationTemp.SetContractingPartyContactInfo(request.Address, request.City, request.Province,
request.ContactInfos,request.RepresentativeId); request.ContactInfos,request.RepresentativeId);
await _institutionContractCreationTemp.ReplaceOneAsync( await _institutionContractCreationTemp.ReplaceOneAsync(
x => x.Id == creationTemp.Id, x => x.Id == creationTemp.Id,
creationTemp creationTemp
); );
var workshopsNotInInstitution = employerWorkshopIds.ToList();
var workshops = await _context.Workshops
.Where(x => employerWorkshopIds.Contains(x.id))
.ToListAsync();
var notIncludeWorskhopsLeftWork = await _context.LeftWorkList
.Where(x => workshopsNotInInstitution.Contains(x.WorkshopId) && x.StartWorkDate <= DateTime.Now &&
x.LeftWorkDate >= DateTime.Now)
.GroupBy(x => x.WorkshopId).ToListAsync();
var workshopDetails = workshopsNotInInstitution.Select(x =>
{
var workshop = workshops.FirstOrDefault(w => w.id == x);
var leftWorks = notIncludeWorskhopsLeftWork.FirstOrDefault(l => l.Key == x);
return new WorkshopTempViewModel()
{
WorkshopName = workshop?.WorkshopName ?? "فاقد کارگاه",
WorkshopServicesAmount = 0,
WorkshopServicesAmountStr = "0",
WorkshopId = x,
Id = 0,
ContractAndCheckout = false,
ContractAndCheckoutInPerson = false,
CustomizeCheckout = false,
CountPerson = leftWorks?.Count() ?? 0,
Insurance = false,
InsuranceInPerson = false,
RollCall = false,
RollCallInPerson = false,
};
}).ToList();
var res = new InstitutionContractCreationWorkshopsResponse() var res = new InstitutionContractCreationWorkshopsResponse()
{ {
TotalAmount = workshopDetails.Sum(x => x.WorkshopServicesAmount).ToMoney(), TotalAmount = workshopDetails.Sum(x => x.WorkshopServicesAmount).ToMoney(),

View File

@@ -40,16 +40,15 @@ public class institutionContractController : AdminBaseController
private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication; private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication;
private readonly IPaymentGateway _paymentGateway; private readonly IPaymentGateway _paymentGateway;
private static readonly ConcurrentDictionary<Guid, SemaphoreSlim> _locks private static readonly ConcurrentDictionary<Guid, SemaphoreSlim> _locks
= new ConcurrentDictionary<Guid, SemaphoreSlim>(); = new ConcurrentDictionary<Guid, SemaphoreSlim>();
public institutionContractController(IInstitutionContractApplication institutionContractApplication, public institutionContractController(IInstitutionContractApplication institutionContractApplication,
IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication, IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication,
IAccountApplication accountApplication, IEmployerApplication employerApplication, IAccountApplication accountApplication, IEmployerApplication employerApplication,
IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration, IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration,
ITemporaryClientRegistrationApplication clientRegistrationApplication,IHttpClientFactory httpClientFactory) ITemporaryClientRegistrationApplication clientRegistrationApplication, IHttpClientFactory httpClientFactory)
{ {
_institutionContractApplication = institutionContractApplication; _institutionContractApplication = institutionContractApplication;
_contractingPartyApplication = contractingPartyApplication; _contractingPartyApplication = contractingPartyApplication;
@@ -72,12 +71,13 @@ public class institutionContractController : AdminBaseController
{ {
return await _institutionContractApplication.GetList(searchModel); return await _institutionContractApplication.GetList(searchModel);
} }
[HttpGet("select-list")] [HttpGet("select-list")]
public async Task<ActionResult<List<InstitutionContractSelectListViewModel>>> GetContractingPartySelectList(string search,string selected) public async Task<ActionResult<List<InstitutionContractSelectListViewModel>>> GetContractingPartySelectList(
string search, string selected)
{ {
var result = await _institutionContractApplication var result = await _institutionContractApplication
.GetInstitutionContractSelectList(search,selected); .GetInstitutionContractSelectList(search, selected);
return result; return result;
} }
@@ -225,9 +225,8 @@ public class institutionContractController : AdminBaseController
{ {
_institutionContractApplication.RemoveContract(id); _institutionContractApplication.RemoveContract(id);
return new OperationResult().Succcedded(); return new OperationResult().Succcedded();
} }
[HttpPost("deActive/{id}")] [HttpPost("deActive/{id}")]
public ActionResult<OperationResult> DeActive(long id, string balance) public ActionResult<OperationResult> DeActive(long id, string balance)
{ {
@@ -358,7 +357,8 @@ public class institutionContractController : AdminBaseController
} }
[HttpPost("workshop-service-calculator")] [HttpPost("workshop-service-calculator")]
public ActionResult<WorkshopServiceCalculatorResponse> WorkshopServiceCalculator([FromBody]CreateWorkshopTemp command) public ActionResult<WorkshopServiceCalculatorResponse> WorkshopServiceCalculator(
[FromBody] CreateWorkshopTemp command)
{ {
var workshopTemp = new WorkshopTempViewModel var workshopTemp = new WorkshopTempViewModel
{ {
@@ -373,7 +373,7 @@ public class institutionContractController : AdminBaseController
}; };
var response = _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp); var response = _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp);
var result = new WorkshopServiceCalculatorResponse var result = new WorkshopServiceCalculatorResponse
{ {
TotalAmount = response.OnlineAndInPersonSumAmountStr TotalAmount = response.OnlineAndInPersonSumAmountStr
@@ -385,7 +385,8 @@ public class institutionContractController : AdminBaseController
public async Task<ActionResult<InstitutionPlanCalculatorResponse>> InstitutionPlanCalculator( public async Task<ActionResult<InstitutionPlanCalculatorResponse>> InstitutionPlanCalculator(
[FromBody] InstitutionPlanCalculatorRequest request) [FromBody] InstitutionPlanCalculatorRequest request)
{ {
var res = await _temporaryClientRegistration.GetTotalPaymentAndWorkshopList(request.TotalAmountMonth,duration: request.Duration,request.HasInPersonContract); var res = await _temporaryClientRegistration.GetTotalPaymentAndWorkshopList(request.TotalAmountMonth,
duration: request.Duration, request.HasInPersonContract);
var result = new InstitutionPlanCalculatorResponse() var result = new InstitutionPlanCalculatorResponse()
{ {
TotalAmountWithTax = res.OneTimeTotalPaymentStr, TotalAmountWithTax = res.OneTimeTotalPaymentStr,
@@ -403,7 +404,6 @@ public class institutionContractController : AdminBaseController
Obligation = res.OneTimeTotalPaymentStr, Obligation = res.OneTimeTotalPaymentStr,
PaymentForOneMonth = res.SumOfWorkshopsPayment, PaymentForOneMonth = res.SumOfWorkshopsPayment,
DiscountedAmountForOneMonth = res.DiscountedAmountForOneMonth DiscountedAmountForOneMonth = res.DiscountedAmountForOneMonth
}; };
return result; return result;
} }
@@ -414,13 +414,13 @@ public class institutionContractController : AdminBaseController
/// <param name="command"></param> /// <param name="command"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<ActionResult<OperationResult>> Create([FromBody]CreateInstitutionContractRequest command) public async Task<ActionResult<OperationResult>> Create([FromBody] CreateInstitutionContractRequest command)
{ {
var res =await _institutionContractApplication.CreateAsync(command); var res = await _institutionContractApplication.CreateAsync(command);
if(!res.IsSuccedded) if (!res.IsSuccedded)
throw new BadRequestException(res.Message); throw new BadRequestException(res.Message);
return res; return res;
} }
@@ -448,22 +448,26 @@ public class institutionContractController : AdminBaseController
if (operationResult.IsSuccedded) if (operationResult.IsSuccedded)
transaction.Complete(); transaction.Complete();
return operationResult; return operationResult;
} }
[HttpPost("create/set-discount")] [HttpPost("create/set-discount")]
public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request) public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract(
[FromBody] InstitutionContractSetDiscountRequest request)
{ {
var res = _institutionContractApplication.CalculateDiscount(request); var res = _institutionContractApplication.CalculateDiscount(request);
return res; return res;
} }
[HttpPost("create/reset-discount")] [HttpPost("create/reset-discount")]
public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate([FromBody]InstitutionContractResetDiscountForCreateRequest request) public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate(
[FromBody] InstitutionContractResetDiscountForCreateRequest request)
{ {
var res = _institutionContractApplication.ResetDiscountCreate(request); var res = _institutionContractApplication.ResetDiscountCreate(request);
return res; return res;
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@@ -484,15 +488,15 @@ public class institutionContractController : AdminBaseController
var paymentRedirectUrl = Url.Action("ProcessPayment", "institutionContract", null, Request.Scheme); var paymentRedirectUrl = Url.Action("ProcessPayment", "institutionContract", null, Request.Scheme);
var callback = Url.Action("Verify", "General", null, Request.Scheme); var callback = Url.Action("Verify", "General", null, Request.Scheme);
var res = await _institutionContractApplication.VerifyOtpAndMakeGateway(command.Id, command.Code, callback); var res = await _institutionContractApplication.VerifyOtpAndMakeGateway(command.Id, command.Code, callback);
if (!res.IsSuccedded) if (!res.IsSuccedded)
return new OperationResult<string>().Failed(res.Message); return new OperationResult<string>().Failed(res.Message);
var payUrl = _paymentGateway.GetStartPayUrl(res.Data); var payUrl = _paymentGateway.GetStartPayUrl(res.Data);
// URL کامل برای redirect شامل paymentUrl به عنوان query parameter // URL کامل برای redirect شامل paymentUrl به عنوان query parameter
var redirectUrl = $"{paymentRedirectUrl}?paymentUrl={Uri.EscapeDataString(payUrl)}"; var redirectUrl = $"{paymentRedirectUrl}?paymentUrl={Uri.EscapeDataString(payUrl)}";
return new OperationResult<string>().Succcedded(redirectUrl); return new OperationResult<string>().Succcedded(redirectUrl);
} }
@@ -504,13 +508,12 @@ public class institutionContractController : AdminBaseController
{ {
return BadRequest("Payment URL is required"); return BadRequest("Payment URL is required");
} }
// redirect به درگاه پرداخت // redirect به درگاه پرداخت
return Redirect(paymentUrl); return Redirect(paymentUrl);
} }
[HttpPost("/api/institutionContract/Verification/{id:guid}/send-otp")] [HttpPost("/api/institutionContract/Verification/{id:guid}/send-otp")]
[AllowAnonymous] [AllowAnonymous]
public async Task<ActionResult<OperationResult<OtpResultViewModel>>> SendVerifyOtp(Guid id) public async Task<ActionResult<OperationResult<OtpResultViewModel>>> SendVerifyOtp(Guid id)
@@ -529,52 +532,71 @@ public class institutionContractController : AdminBaseController
} }
#region Create #region Create
[HttpPost("creation/inquiry/")] [HttpPost("creation/inquiry/")]
public async Task<ActionResult<InstitutionContractCreationInquiryResult>> CreationInquiry(InstitutionContractCreationInquiryRequest request) public async Task<ActionResult<InstitutionContractCreationInquiryResult>> CreationInquiry(
InstitutionContractCreationInquiryRequest request)
{ {
var res= await _institutionContractApplication.CreationInquiry(request); var res = await _institutionContractApplication.CreationInquiry(request);
return res; return res;
} }
[HttpPost("creation/workshops")] [HttpGet("creation/get-representative")]
public async Task<ActionResult<InstitutionContractCreationWorkshopsResponse>> CreationWorkshops([FromBody] InstitutionContractCreationWorkshopsRequest request) public async Task<ActionResult<InstitutionContractCreationGetRepresentativeIdResponse>> GetRepresentatives(
string nationalCode)
{ {
var res =await _institutionContractApplication.GetCreationWorkshops(request); var res = await _contractingPartyApplication.GetRepresentativeIdByNationalCode(nationalCode);
return new InstitutionContractCreationGetRepresentativeIdResponse()
{
RepresentativeId = res
};
}
[HttpPost("creation/workshops")]
public async Task<ActionResult<InstitutionContractCreationWorkshopsResponse>> CreationWorkshops(
[FromBody] InstitutionContractCreationWorkshopsRequest request)
{
var res = await _institutionContractApplication.GetCreationWorkshops(request);
return res; return res;
} }
[HttpPost("creation/institution-plan")] [HttpPost("creation/institution-plan")]
public async Task<ActionResult<InstitutionContractCreationPlanResponse>> CreationInstitutionPlan([FromBody]InstitutionContractCreationPlanRequest request) public async Task<ActionResult<InstitutionContractCreationPlanResponse>> CreationInstitutionPlan(
[FromBody] InstitutionContractCreationPlanRequest request)
{ {
var res =await _institutionContractApplication.GetCreationInstitutionPlan(request); var res = await _institutionContractApplication.GetCreationInstitutionPlan(request);
return res; return res;
} }
[HttpPost("creation/payment-method")] [HttpPost("creation/payment-method")]
public async Task<ActionResult<InstitutionContractCreationPaymentResponse>> GetCreationPaymentMethod([FromBody]InstitutionContractCreationPaymentRequest request) public async Task<ActionResult<InstitutionContractCreationPaymentResponse>> GetCreationPaymentMethod(
[FromBody] InstitutionContractCreationPaymentRequest request)
{ {
var res =await _institutionContractApplication.GetCreationPaymentMethod(request); var res = await _institutionContractApplication.GetCreationPaymentMethod(request);
return res; return res;
} }
[HttpPost("creation/set-discount")] [HttpPost("creation/set-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForCreation([FromBody]InstitutionContractSetDiscountForCreationRequest request) public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForCreation(
[FromBody] InstitutionContractSetDiscountForCreationRequest request)
{ {
var res =await _institutionContractApplication.SetDiscountForCreation(request); var res = await _institutionContractApplication.SetDiscountForCreation(request);
return res; return res;
} }
[HttpPost("creation/reset-discount")] [HttpPost("creation/reset-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForCreation([FromBody]InstitutionContractResetDiscountForExtensionRequest request) public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForCreation(
[FromBody] InstitutionContractResetDiscountForExtensionRequest request)
{ {
var res =await _institutionContractApplication.ResetDiscountForCreation(request); var res = await _institutionContractApplication.ResetDiscountForCreation(request);
return res; return res;
} }
[HttpPost("creation/complete")] [HttpPost("creation/complete")]
public async Task<ActionResult<OperationResult>> CreationComplete([FromBody]InstitutionContractExtensionCompleteRequest request) public async Task<ActionResult<OperationResult>> CreationComplete(
[FromBody] InstitutionContractExtensionCompleteRequest request)
{ {
var res =await _institutionContractApplication.CreationComplete(request); var res = await _institutionContractApplication.CreationComplete(request);
return res; return res;
} }
@@ -583,93 +605,104 @@ public class institutionContractController : AdminBaseController
[HttpGet("extenstion/inquiry/{previousContractId}")] [HttpGet("extenstion/inquiry/{previousContractId}")]
public async Task<ActionResult<InstitutionContractExtensionInquiryResult>> ExtensionInquiry(long previousContractId) public async Task<ActionResult<InstitutionContractExtensionInquiryResult>> ExtensionInquiry(long previousContractId)
{ {
var res= await _institutionContractApplication.GetExtensionInquiry(previousContractId); var res = await _institutionContractApplication.GetExtensionInquiry(previousContractId);
return res; return res;
} }
[HttpPost("extenstion/workshops")] [HttpPost("extenstion/workshops")]
public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> ExtensionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request) public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> ExtensionWorkshops(
[FromBody] InstitutionContractExtensionWorkshopsRequest request)
{ {
var res =await _institutionContractApplication.GetExtensionWorkshops(request); var res = await _institutionContractApplication.GetExtensionWorkshops(request);
return res; return res;
} }
[HttpPost("extenstion/institution-plan")] [HttpPost("extenstion/institution-plan")]
public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> ExtensionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request) public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> ExtensionInstitutionPlan(
[FromBody] InstitutionContractExtensionPlanRequest request)
{ {
var res =await _institutionContractApplication.GetExtensionInstitutionPlan(request); var res = await _institutionContractApplication.GetExtensionInstitutionPlan(request);
return res; return res;
} }
[HttpPost("extenstion/payment-method")] [HttpPost("extenstion/payment-method")]
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> GetExtensionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request) public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> GetExtensionPaymentMethod(
[FromBody] InstitutionContractExtensionPaymentRequest request)
{ {
var res =await _institutionContractApplication.GetExtensionPaymentMethod(request); var res = await _institutionContractApplication.GetExtensionPaymentMethod(request);
return res; return res;
} }
[HttpPost("extension/set-discount")] [HttpPost("extension/set-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForExtension([FromBody]InstitutionContractSetDiscountForExtensionRequest request) public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForExtension(
[FromBody] InstitutionContractSetDiscountForExtensionRequest request)
{ {
var res =await _institutionContractApplication.SetDiscountForExtension(request); var res = await _institutionContractApplication.SetDiscountForExtension(request);
return res; return res;
} }
[HttpPost("extension/reset-discount")] [HttpPost("extension/reset-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request) public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForExtension(
[FromBody] InstitutionContractResetDiscountForExtensionRequest request)
{ {
var res =await _institutionContractApplication.ResetDiscountForExtension(request); var res = await _institutionContractApplication.ResetDiscountForExtension(request);
return res; return res;
} }
[HttpPost("extenstion/complete")] [HttpPost("extenstion/complete")]
public async Task<ActionResult<OperationResult>> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request) public async Task<ActionResult<OperationResult>> ExtensionComplete(
[FromBody] InstitutionContractExtensionCompleteRequest request)
{ {
var res =await _institutionContractApplication.ExtensionComplete(request); var res = await _institutionContractApplication.ExtensionComplete(request);
return res; return res;
} }
[HttpGet("amendment/workshops/{institutionContractId}")] [HttpGet("amendment/workshops/{institutionContractId}")]
public async Task<ActionResult<InstitutionContractAmendmentWorkshopsResponse>> GetAmendmentWorkshops(long institutionContractId) public async Task<ActionResult<InstitutionContractAmendmentWorkshopsResponse>> GetAmendmentWorkshops(
long institutionContractId)
{ {
var res =await _institutionContractApplication.GetAmendmentWorkshops(institutionContractId); var res = await _institutionContractApplication.GetAmendmentWorkshops(institutionContractId);
return res; return res;
} }
[HttpPost("resend-verify-link/{institutionContractId}")] [HttpPost("resend-verify-link/{institutionContractId}")]
public async Task<OperationResult> ResendVerifyLink(long institutionContractId) public async Task<OperationResult> ResendVerifyLink(long institutionContractId)
{ {
var res = await _institutionContractApplication.ResendVerifyLink(institutionContractId); var res = await _institutionContractApplication.ResendVerifyLink(institutionContractId);
return res; return res;
} }
[HttpPost("amendment/insert-temp-workshops")] [HttpPost("amendment/insert-temp-workshops")]
public async Task<ActionResult<InsertAmendmentTempWorkshopResponse>> InsertAmendmentTempWorkshops([FromBody]InstitutionContractAmendmentTempWorkshopViewModel request) public async Task<ActionResult<InsertAmendmentTempWorkshopResponse>> InsertAmendmentTempWorkshops(
[FromBody] InstitutionContractAmendmentTempWorkshopViewModel request)
{ {
var res =await _institutionContractApplication.InsertAmendmentTempWorkshops(request); var res = await _institutionContractApplication.InsertAmendmentTempWorkshops(request);
return res; return res;
} }
[HttpDelete("amendment/remove-temp-workshops/{workshopTempId:guid}")] [HttpDelete("amendment/remove-temp-workshops/{workshopTempId:guid}")]
public async Task<ActionResult> RemoveAmendmentWorkshops(Guid workshopTempId) public async Task<ActionResult> RemoveAmendmentWorkshops(Guid workshopTempId)
{ {
await _institutionContractApplication.RemoveAmendmentWorkshops(workshopTempId); await _institutionContractApplication.RemoveAmendmentWorkshops(workshopTempId);
return Ok(); return Ok();
} }
[HttpPost("amendment/payment-details")] [HttpPost("amendment/payment-details")]
public async Task<ActionResult<InsitutionContractAmendmentPaymentResponse>> GetAmendmentPaymentDetails([FromBody]InsitutionContractAmendmentPaymentRequest request) public async Task<ActionResult<InsitutionContractAmendmentPaymentResponse>> GetAmendmentPaymentDetails(
[FromBody] InsitutionContractAmendmentPaymentRequest request)
{ {
var res =await _institutionContractApplication.GetAmendmentPaymentDetails(request); var res = await _institutionContractApplication.GetAmendmentPaymentDetails(request);
return res; return res;
} }
[HttpGet("edit-old/{id}")] [HttpGet("edit-old/{id}")]
public ActionResult<EditInstitutionContract> GetEditOldDetails(long id) public ActionResult<EditInstitutionContract> GetEditOldDetails(long id)
{ {
var representativList = new List<RepresentativeViewModel>(); var representativList = new List<RepresentativeViewModel>();
var contractingPartyList = new List<PersonalContractingPartyViewModel>(); var contractingPartyList = new List<PersonalContractingPartyViewModel>();
var res = _institutionContractApplication.GetDetails(id); var res = _institutionContractApplication.GetDetails(id);
var representative = new RepresentativeViewModel var representative = new RepresentativeViewModel
{ {
Id = res.RepresentativeId, Id = res.RepresentativeId,
@@ -734,13 +767,14 @@ public class institutionContractController : AdminBaseController
res.ContractAmountOAlone = res.ContractAmountString; res.ContractAmountOAlone = res.ContractAmountString;
res.ValueAddedTaxStr = "0"; res.ValueAddedTaxStr = "0";
} }
return res; return res;
} }
[HttpPost("edit-old")] [HttpPost("edit-old")]
public ActionResult<OperationResult> EditOld([FromBody] EditInstitutionContract command) public ActionResult<OperationResult> EditOld([FromBody] EditInstitutionContract command)
{ {
var op = new OperationResult(); var op = new OperationResult();
var phoneNumber = command.ContactInformationList.FirstOrDefault(x => var phoneNumber = command.ContactInformationList.FirstOrDefault(x =>
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه"); x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId); var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId);
@@ -754,57 +788,58 @@ public class institutionContractController : AdminBaseController
//if (string.IsNullOrWhiteSpace(command.HasValueAddedTax)) //if (string.IsNullOrWhiteSpace(command.HasValueAddedTax))
// command.HasValueAddedTax = "false"; // command.HasValueAddedTax = "false";
var result = _institutionContractApplication.Edit(command); var result = _institutionContractApplication.Edit(command);
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId); var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
var counter = command.ContactInformationList.Count; var counter = command.ContactInformationList.Count;
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel() var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }).Where(x=>x.IsActiveString == "false" || x.IsActiveString == "blue").ToList(); { ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" })
if (result.IsSuccedded && counter > 0) .Where(x => x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
{ if (result.IsSuccedded && counter > 0)
{
if (getOldContarct.Count > 0) if (getOldContarct.Count > 0)
{ {
foreach (var item in getOldContarct) foreach (var item in getOldContarct)
{ {
_contactInfoApplication.RemoveContactInfo(item.Id); _contactInfoApplication.RemoveContactInfo(item.Id);
foreach (var phone in command.ContactInformationList) foreach (var phone in command.ContactInformationList)
{ {
if (phone.PhoneNumber != null) if (phone.PhoneNumber != null)
{ {
var contactinfo = new CreateContactInfo var contactinfo = new CreateContactInfo
{ {
InstitutionContractId = item.Id, InstitutionContractId = item.Id,
PhoneType = phone.PhoneType, PhoneType = phone.PhoneType,
Position = phone.Position, Position = phone.Position,
PhoneNumber = phone.PhoneNumber, PhoneNumber = phone.PhoneNumber,
FnameLname = phone.FnameLname, FnameLname = phone.FnameLname,
SendSms = phone.SendSmsString == "true" ? true : false SendSms = phone.SendSmsString == "true" ? true : false
}; };
_contactInfoApplication.Create(contactinfo); _contactInfoApplication.Create(contactinfo);
} }
Thread.Sleep(500); Thread.Sleep(500);
} }
} }
} }
_contactInfoApplication.RemoveContactInfo(command.Id);
foreach (var item in command.ContactInformationList)
{
if (item.PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = result.SendId,
PhoneType = item.PhoneType,
Position = item.Position,
PhoneNumber = item.PhoneNumber,
FnameLname = item.FnameLname,
SendSms = item.SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500); _contactInfoApplication.RemoveContactInfo(command.Id);
} foreach (var item in command.ContactInformationList)
{
if (item.PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = result.SendId,
PhoneType = item.PhoneType,
Position = item.Position,
PhoneNumber = item.PhoneNumber,
FnameLname = item.FnameLname,
SendSms = item.SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500);
}
//ساخت اکانت کلاینت //ساخت اکانت کلاینت
@@ -814,7 +849,6 @@ public class institutionContractController : AdminBaseController
var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass); var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass);
if (!checkExistAccount) if (!checkExistAccount)
{ {
var createAcc = new RegisterAccount var createAcc = new RegisterAccount
{ {
Fullname = conractingParty.LName, Fullname = conractingParty.LName,
@@ -825,69 +859,72 @@ public class institutionContractController : AdminBaseController
}; };
var res = _accountApplication.RegisterClient(createAcc); var res = _accountApplication.RegisterClient(createAcc);
if (res.IsSuccedded) if (res.IsSuccedded)
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId, res.SendId); _institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId,
res.SendId);
} }
} }
//Thread.Sleep(500); //Thread.Sleep(500);
//for (int i = 0; i <= counter - 1; i++) //for (int i = 0; i <= counter - 1; i++)
//{ //{
// if (command.ContactInformationList[i].PhoneNumber != null) // if (command.ContactInformationList[i].PhoneNumber != null)
// { // {
// var contactinfo = new CreateContactInfo() // var contactinfo = new CreateContactInfo()
// { // {
// InstitutionContractId = result.SendId, // InstitutionContractId = result.SendId,
// PhoneType = command.ContactInformationList[i].PhoneType, // PhoneType = command.ContactInformationList[i].PhoneType,
// Position = command.ContactInformationList[i].Position, // Position = command.ContactInformationList[i].Position,
// PhoneNumber = command.ContactInformationList[i].PhoneNumber, // PhoneNumber = command.ContactInformationList[i].PhoneNumber,
// FnameLname = command.ContactInformationList[i].FnameLname, // FnameLname = command.ContactInformationList[i].FnameLname,
// SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false // SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false
// }; // };
// _contactInfoApplication.Create(contactinfo); // _contactInfoApplication.Create(contactinfo);
// } // }
// Thread.Sleep(500); // Thread.Sleep(500);
//} //}
return result; return result;
} }
[HttpGet("print/{id}")] [HttpGet("print/{id}")]
public async Task<ActionResult<InstitutionContractPrintViewModel>> PrintOne(long id) public async Task<ActionResult<InstitutionContractPrintViewModel>> PrintOne(long id)
{ {
var res =await _institutionContractApplication.PrintOneAsync(id); var res = await _institutionContractApplication.PrintOneAsync(id);
return res; return res;
} }
[HttpPost("mannual-verify/{id}")] [HttpPost("mannual-verify/{id}")]
public async Task<ActionResult<OperationResult>> VerifyInstitutionContractManually(long id) public async Task<ActionResult<OperationResult>> VerifyInstitutionContractManually(long id)
{ {
var res= await _institutionContractApplication.VerifyInstitutionContractManually(id); var res = await _institutionContractApplication.VerifyInstitutionContractManually(id);
return res; return res;
} }
[HttpGet("excel-download")] [HttpGet("excel-download")]
public async Task<IActionResult> ExcelDownload() public async Task<IActionResult> ExcelDownload()
{ {
var searchModel = new InstitutionContractListSearchModel(); var searchModel = new InstitutionContractListSearchModel();
var dataVm=new List<InstitutionContractExcelViewModel>(); var dataVm = new List<InstitutionContractExcelViewModel>();
foreach (var name in typeof(InstitutionContractListStatus).GetEnumNames()) foreach (var name in typeof(InstitutionContractListStatus).GetEnumNames())
{ {
var @enum = Enum.Parse<InstitutionContractListStatus>(name); var @enum = Enum.Parse<InstitutionContractListStatus>(name);
searchModel.Status = @enum; searchModel.Status = @enum;
searchModel.PageSize = 99999; searchModel.PageSize = 99999;
var data =( await(_institutionContractApplication.GetList(searchModel))).List; var data = (await (_institutionContractApplication.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = @enum, GetInstitutionContractListItemsViewModels = data}); dataVm.Add(new InstitutionContractExcelViewModel()
{ Tab = @enum, GetInstitutionContractListItemsViewModels = data });
} }
searchModel.Status = null; searchModel.Status = null;
var nullData = ( await(_institutionContractApplication.GetList(searchModel))).List; var nullData = (await (_institutionContractApplication.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = null, GetInstitutionContractListItemsViewModels = nullData}); dataVm.Add(new InstitutionContractExcelViewModel()
{ Tab = null, GetInstitutionContractListItemsViewModels = nullData });
var bytes = InstitutionContractExcelGenerator.GenerateExcel(dataVm); var bytes = InstitutionContractExcelGenerator.GenerateExcel(dataVm);
return File(bytes, return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
@@ -895,6 +932,10 @@ public class institutionContractController : AdminBaseController
} }
} }
public class InstitutionContractCreationGetRepresentativeIdResponse
{
public long RepresentativeId { get; set; }
}
public class VerifyOtpRequest public class VerifyOtpRequest
{ {
@@ -933,10 +974,11 @@ public class WorkshopServiceCalculatorResponse
public string TotalAmount { get; set; } public string TotalAmount { get; set; }
} }
public record InstitutionPlanCalculatorRequest(double TotalAmountMonth,bool HasInPersonContract, public record InstitutionPlanCalculatorRequest(
double TotalAmountMonth,
bool HasInPersonContract,
InstitutionContractDuration Duration = InstitutionContractDuration.TwelveMonths); InstitutionContractDuration Duration = InstitutionContractDuration.TwelveMonths);
public class VerifyCodeRequest public class VerifyCodeRequest
{ {
public long ContractingPartyId { get; set; } public long ContractingPartyId { get; set; }