Ejemplo n.º 1
0
        private async Task AddEServicePaymentRequestStatusHistory(int requestId, string status, DateTime date, DateTime?serviceTime, string errors)
        {
            EservicePaymentRequestStatusHistory entity = new EservicePaymentRequestStatusHistory();

            entity.RequestId    = requestId;
            entity.StatusCode   = status;
            entity.UpdatedAt    = DateTime.SpecifyKind(date, DateTimeKind.Utc);
            entity.EserviceTime = serviceTime;
            entity.Errors       = errors;
            await _context.EservicePaymentRequestStatusHistory.AddAsync(entity);

            await _context.SaveChangesAsync();
        }
        public static EServicePaymentStatusHistoryModel ToModel(this EservicePaymentRequestStatusHistory entity)
        {
            if (entity == null)
            {
                return(null);
            }

            var model = new EServicePaymentStatusHistoryModel
            {
                Id               = entity.Id,
                RequestId        = entity.RequestId,
                StatusCode       = entity.StatusCode,
                StatusCodeName   = entity.StatusCodeNavigation?.Name,
                StatusCodeNameEn = entity.StatusCodeNavigation?.NameEn,
                UpdatedAt        = entity.UpdatedAt,
                EServiceTime     = entity.EserviceTime.HasValue ? entity.EserviceTime.Value : default(DateTime),
                Errors           = entity.Errors,
            };

            return(model);
        }
        public async Task <(bool hasToPay, PaymentRequestSendResultModel paymentRequestModel, RequestForCertificateOfDistraintOfProperty request)> CreateAsync(RequestModel model, string currentUserId)
        {
            using (var tran = _context.Database.BeginTransaction())
            {
                try
                {
                    RequestForCertificateOfDistraintOfProperty entry = await SaveRequestForCertificateOfDistraintOfProperty(model);

                    bool hasToPay = HasToPay(model, currentUserId);
                    if (!HasToPay(model, currentUserId))
                    {
                        // Не се изисква плащане. Връщаме резултат
                        return(hasToPay, paymentRequestModel : null, entry);
                    }

                    PaymentRequestSendResultModel paymentRequestModel = await CreateTaxMeRequest(entry.Id);

                    if (paymentRequestModel == null)
                    {
                        // Неуспешено изпращане на заявка за ел.плащане в системата за ел.плащане.
                        await tran.RollbackAsync();

                        return(hasToPay, paymentRequestModel, entry);
                    }

                    var eservicePaymentRequest = await _context.EservicePaymentRequest.Where(x => x.SeizedPropertyCertificateRequestId == entry.Id).FirstOrDefaultAsync();

                    if (eservicePaymentRequest != null)
                    {
                        // Запис на резултат от изпращането на заявка за ел.плащане.
                        DateTime utcNow = DateTime.UtcNow;
                        EservicePaymentRequestStatusHistory historyRecord = new EservicePaymentRequestStatusHistory
                        {
                            RequestId = eservicePaymentRequest.Id,
                            UpdatedAt = utcNow
                        };
                        eservicePaymentRequest.UpdatedAt = utcNow;

                        if (!paymentRequestModel.IsSuccessStatusCode)
                        {
                            eservicePaymentRequest.StatusCode = Shared.Enums.PaymentRequestStatus.ERROR.ToString();
                            historyRecord.StatusCode          = Shared.Enums.PaymentRequestStatus.ERROR.ToString();
                            historyRecord.Errors = paymentRequestModel.ErrorMessage;
                        }
                        else
                        {
                            if (paymentRequestModel.UnacceptedReceipt != null)
                            {
                                eservicePaymentRequest.StatusCode = Shared.Enums.PaymentRequestStatus.REJECTED.ToString();
                                historyRecord.StatusCode          = Shared.Enums.PaymentRequestStatus.REJECTED.ToString();
                                historyRecord.EserviceTime        = paymentRequestModel.UnacceptedReceipt.ValidationTime;
                            }
                            else
                            {
                                eservicePaymentRequest.StatusCode   = Shared.Enums.PaymentRequestStatus.PENDING.ToString();
                                eservicePaymentRequest.AisPaymentId = paymentRequestModel.AcceptedReceipt.Id;
                                historyRecord.StatusCode            = Shared.Enums.PaymentRequestStatus.PENDING.ToString();
                                historyRecord.EserviceTime          = paymentRequestModel.AcceptedReceipt.RegistrationTime;
                            }
                        }

                        _context.EservicePaymentRequestStatusHistory.Add(historyRecord);
                        await _context.SaveChangesAsync();
                    }

                    await tran.CommitAsync();

                    return(hasToPay, paymentRequestModel, entry);
                }
                catch (Exception e)
                {
                    await tran.RollbackAsync();

                    throw e;
                }
            }
        }