public async Task <IActionResult> PaymentRequestStatusChanged([FromBody] PaymentRequestStatusChangeModel model) { try { if (model == null) { Log.Information($"IntegrationController/paymentRequestStatusChanged - empty model"); return(BadRequest("Empty model")); } await paymentService.ChangePaymentRequestStatusAsync(model); Log.Information($"IntegrationController/paymentRequestStatusChanged - changed request with Id: {model.Id} / {model.Status} / {model.ChangeTime}"); return(Ok(new { success = true })); } catch (Exception ex) { Log.Error(ex, $"ERROR changing payment request status"); return(BadRequest("Error changing payment request status")); } }
public async Task ChangePaymentRequestStatusAsync(PaymentRequestStatusChangeModel request) { int?paymentRequestId = request?.Id; EservicePaymentRequest entity = await _context.EservicePaymentRequest .Include(x => x.PaymentRequest) .Include(x => x.SeizedPropertyCertificateRequest) .Include(x => x.SeizedPropertyReportRequest).ThenInclude(x => x.RequestorUser) .Include(x => x.SeizedPropertyReportRequest).ThenInclude(x => x.RequestorPerson) .Include(x => x.SeizedPropertyReportRequest).ThenInclude(x => x.RequesterCompany) .Where(x => x.AisPaymentId == paymentRequestId) .FirstOrDefaultAsync(); if (entity == null) { throw new ArgumentNullException(nameof(EservicePaymentRequest), $"EservicePaymentRequest not found for status update! (id:{paymentRequestId})"); } string newStatus = (request?.Status ?? "").Trim().ToUpper(); DateTime serviceTimestamp = request.ChangeTime.HasValue ? DateTime.SpecifyKind(request.ChangeTime.Value, DateTimeKind.Utc) : DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc); DateTime timestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc); entity.UpdatedAt = timestamp; entity.StatusCode = newStatus; _context.EservicePaymentRequest.Update(entity); await _context.SaveChangesAsync(); await AddEServicePaymentRequestStatusHistory(entity.Id, newStatus, timestamp, serviceTimestamp, null); //Изпрашане на email string email = entity.SeizedPropertyCertificateRequestId.HasValue ? entity.SeizedPropertyCertificateRequest.Email : (entity.SeizedPropertyReportRequestId.HasValue ? (string.IsNullOrWhiteSpace(entity.SeizedPropertyReportRequest.RequestorUserId) == false ? entity.SeizedPropertyReportRequest.RequestorUser.Email : (entity.SeizedPropertyReportRequest.RequestorPersonId.HasValue ? entity.SeizedPropertyReportRequest.RequestorPerson.Email : (entity.SeizedPropertyReportRequest.RequesterCompanyId.HasValue ? "" // Как ще се вземе email : "" )) ) : "" ); if (!string.IsNullOrWhiteSpace(email)) { string subject = $"Промяна на статуса на заявка с ИД №: {paymentRequestId} в системата за електронно плащане"; string body = $"Статусът на заявка с ИД №: {paymentRequestId} в системата за електронно плащане е променен на '{newStatus}'.{Environment.NewLine}" + $"За детайли посетете платформата за електронно плащане на адрес: {(_settings.UseTestEnv ? "https://pay-test.egov.bg/" : "https://pay.egov.bg/")} ."; if (newStatus.Equals(Shared.Enums.PaymentRequestStatus.PAID.ToString(), StringComparison.OrdinalIgnoreCase)) { // Платено да се мисли как ще си получи услугата if (!string.IsNullOrWhiteSpace(entity.PaymentRequest?.PaymentReferenceNumber)) { body += $"{Environment.NewLine} Връзка за получване на услугата: {_settings.AdministrativeServiceSupplierUri}#/seizedPropertyAvailability/paidReport?id={entity.PaymentRequest.PaymentReferenceNumber}"; } } _emailService.SendEmail(email, null, null, subject, body); } }