Пример #1
0
        private void RegisterForPayment(HandWrittenCaptureModel model, decimal amount)
        {
            using (var dbContext = new DataContext())
            {
                var paymentTransaction = new PaymentTransaction();
                paymentTransaction.TransactionToken = model.ExternalToken;
                paymentTransaction.TransactionReference = model.ExternalReference;
                paymentTransaction.Amount = amount;
                paymentTransaction.CreatedTimestamp = DateTime.Now;
                paymentTransaction.CustomerContactNumber = model.MobileNumber;
                paymentTransaction.CustomerFirstName = model.FirstName;
                paymentTransaction.CustomerIDNumber = model.IdentificationNumber;
                paymentTransaction.CustomerLastName = model.Surname;
                paymentTransaction.PaymentMethod = PaymentMethod.DumaPay;
                paymentTransaction.Status = PaymentTransactionStatus.Added;

                dbContext.PaymentTransactions.Add(paymentTransaction);

                var paymentTransactionItem = new PaymentTransactionItem();
                paymentTransactionItem.PaymentTransaction = paymentTransaction;
                paymentTransactionItem.ReferenceNumber = model.TicketNumber;
                paymentTransactionItem.TransactionToken = model.ExternalToken;
                paymentTransactionItem.EntityReferenceTypeID = long.Parse(model.TicketNumber[1].ToString());
                paymentTransactionItem.Description = "Notice issued.";
                paymentTransactionItem.Amount = amount;
                paymentTransactionItem.Status = PaymentTransactionStatus.Added;

                dbContext.PaymentTransactionItems.Add(paymentTransactionItem);

                dbContext.SaveChanges();
            }
        }
Пример #2
0
        public IHttpActionResult RegisterTransaction(PaymentTransactionModel model)
        {
            if (model.Amount != model.PaymentTransactionItems.Sum(f => f.Amount))
            {
                return(this.BadRequestEx(Error.PaymentTransactionInvalidAmount));
            }

            using (var dbContext = new DataContext())
            {
                var paymentTerminal = dbContext.PaymentTerminals.FirstOrDefault(f => f.TerminalType == (Data.Enums.TerminalType)model.TerminalType && f.UUID == model.TerminalUUID);
                if (paymentTerminal == null)
                {
                    return(this.BadRequestEx(Error.PaymentTerminalDoesNotExist));
                }

                if (paymentTerminal.Status != Data.Enums.Status.Active)
                {
                    return(this.BadRequestEx(Error.PaymentTerminalIsNotActive));
                }

                if (dbContext.PaymentTransactions.Any(f => f.Receipt == model.Receipt))
                {
                    return(this.BadRequestEx(Error.PaymentTransactionAlreadyExist));
                }

                foreach (var modelItem in model.PaymentTransactionItems)
                {
                    var register = dbContext.Registers.AsNoTracking().FirstOrDefault(f => f.ReferenceNumber == modelItem.ReferenceNumber);
                    if (register == null)
                    {
                        return(this.BadRequestEx(Error.RegisterItemDoesNotExist));
                    }

                    if (register.RegisterStatus >= 3000)
                    {
                        return(this.BadRequestEx(Error.RegisterItemNotPayable));
                    }

                    if (string.IsNullOrWhiteSpace(modelItem.TransactionToken))
                    {
                        var generatedReferenceNumber = dbContext.GeneratedReferenceNumbers.FirstOrDefault(f => f.ReferenceNumber == modelItem.ReferenceNumber);
                        if (generatedReferenceNumber != null)
                        {
                            modelItem.TransactionToken = generatedReferenceNumber.ExternalToken;
                        }
                    }
                }

                PaymentTransaction paymentTransaction = null;

                if (model.PaymentTransactionItems.Count == 1)
                {
                    var transactionToken = model.PaymentTransactionItems.First().TransactionToken;

                    paymentTransaction                       = dbContext.PaymentTransactions.FirstOrDefault(f => f.TransactionToken == transactionToken && f.Status == Data.Enums.PaymentTransactionStatus.Added);
                    paymentTransaction.Receipt               = model.Receipt;
                    paymentTransaction.ReceiptTimestamp      = model.ReceiptTimestamp;
                    paymentTransaction.CourtID               = model.CourtID;
                    paymentTransaction.TerminalID            = paymentTerminal.ID;
                    paymentTransaction.CustomerContactNumber = model.CustomerContactNumber;
                    paymentTransaction.CustomerFirstName     = model.CustomerFirstName;
                    paymentTransaction.CustomerIDNumber      = model.CustomerIDNumber;
                    paymentTransaction.CustomerLastName      = model.CustomerLastName;
                    paymentTransaction.PaymentMethod         = (Data.Enums.PaymentMethod)model.PaymentSource;
                }
                else
                {
                    paymentTransaction                       = new PaymentTransaction();
                    paymentTransaction.Receipt               = model.Receipt;
                    paymentTransaction.ReceiptTimestamp      = model.ReceiptTimestamp;
                    paymentTransaction.CourtID               = model.CourtID;
                    paymentTransaction.TerminalID            = paymentTerminal.ID;
                    paymentTransaction.Amount                = model.Amount;
                    paymentTransaction.CreatedTimestamp      = DateTime.Now;
                    paymentTransaction.CustomerContactNumber = model.CustomerContactNumber;
                    paymentTransaction.CustomerFirstName     = model.CustomerFirstName;
                    paymentTransaction.CustomerIDNumber      = model.CustomerIDNumber;
                    paymentTransaction.CustomerLastName      = model.CustomerLastName;
                    paymentTransaction.PaymentMethod         = (Data.Enums.PaymentMethod)model.PaymentSource;
                    paymentTransaction.Status                = Data.Enums.PaymentTransactionStatus.Added;

                    foreach (var modelItem in model.PaymentTransactionItems)
                    {
                        var paymentTransactionItem = new PaymentTransactionItem();
                        paymentTransactionItem.PaymentTransaction    = paymentTransaction;
                        paymentTransactionItem.ReferenceNumber       = modelItem.ReferenceNumber;
                        paymentTransactionItem.TransactionToken      = modelItem.TransactionToken;
                        paymentTransactionItem.EntityReferenceTypeID = long.Parse(modelItem.ReferenceNumber[1].ToString());
                        paymentTransactionItem.Description           = modelItem.Description;
                        paymentTransactionItem.Amount = modelItem.Amount;
                        paymentTransactionItem.Status = Data.Enums.PaymentTransactionStatus.Added;

                        dbContext.PaymentTransactionItems.Add(paymentTransactionItem);
                    }

                    if (model.PaymentSource == PaymentMethod.DumaPay)
                    {
                        var paymentProvider    = resolvePaymentProvider();
                        var transactionIDModel =
                            paymentProvider.RegisterTransaction(
                                new ThirdParty.Payment.Models.TransactionModel
                        {
                            CustomerFirstName  = paymentTransaction.CustomerFirstName,
                            CustomerLastName   = paymentTransaction.CustomerLastName,
                            CompanyRef         = string.Empty,
                            CompanyAccRef      = paymentTransaction.Receipt,
                            Amount             = paymentTransaction.Amount,
                            UserID             = SessionModel.UserName,
                            ServiceDescription = "Payment Basket Registered",
                            ServiceType        = 6067
                        });

                        paymentTransaction.TransactionToken     = transactionIDModel.TransactionToken;
                        paymentTransaction.TransactionReference = transactionIDModel.TransactionReference;
                    }
                    else // Cash
                    {
                        paymentTransaction.TransactionToken     = Guid.NewGuid().ToString();
                        paymentTransaction.TransactionReference = string.Empty;
                    }

                    dbContext.PaymentTransactions.Add(paymentTransaction);
                }

                dbContext.SaveChanges();

                PaymentTransactionHub.SendStatusChanged(
                    paymentTransaction.TransactionToken,
                    (PaymentTransactionStatus)paymentTransaction.Status,
                    paymentTransaction.Amount);

                return(Ok(paymentTransaction.TransactionToken));
            }
        }