Exemplo n.º 1
0
        /// <summary>
        /// Updates payment state after making a call to payment services
        /// </summary>
        /// <param name="payment"></param>
        /// <param name="thirdPartyResponseCode"></param>
        /// <returns></returns>
        private PaymentState UpdatePaymentStateFromThirdParty(Data.Entities.Payment payment, int thirdPartyResponseCode)
        {
            string userName = GetLoggedInUser();

            // Map third party response to internal response, per business requirement
            if (thirdPartyResponseCode == _config.ThirdPartyProcessedResponse)
            {
                payment.PaymentState = PaymentStateMapping.CreateEntity(payment, PaymentStatus.Processed, userName, userName);
            }
            else if (thirdPartyResponseCode == _config.ThirdPartyInvalidResponse)
            {
                payment.PaymentState = PaymentStateMapping.CreateEntity(payment, PaymentStatus.Invalid, userName, userName);
            }
            else
            {
                payment.PaymentState = PaymentStateMapping.CreateEntity(payment, PaymentStatus.Error, userName, userName);
            }
            return(payment.PaymentState);
        }
        public async override Task <OperationResult> Execute(PaymentResponseDto response)
        {
            int paymentId = GetPaymentIdFromControl(response.Control);

            Data.Entities.Payment payment = await _dbContext.Payments.FindAsync(paymentId);

            if (payment != null)
            {
                payment.DotpayOperationNumber = response.Number;
                payment.PaidDate = response.OperationDatetime != DateTime.MinValue ?
                                   response.OperationDatetime : _dateTimeProvider.Now;

                _dbContext.Payments.Update(payment);
                await _dbContext.SaveChangesAsync();

                return(new OperationSucceded());
            }

            return(new OperationFailed());
        }
        public async override Task <bool> Execute(User user)
        {
            Data.Entities.Payment payment = await _dbContext.Payments.FindAsync(user.Id);

            return(payment != null && payment.PaidDate.HasValue && (payment.PaidDate.Value > DateTime.MinValue));
        }