public void TestReadAllIncoming()
        {
            createValidPayment();
            createValidPayment();
            createValidPayment();

            IParty commissioner = new Supplier("Lonely Tree", "", SupplierType.Cruise, dataAccessFacadeStub);

            Payment p1 = createValidPayment();

            p1.Note  = "Moved to Lonely Tree1";
            p1.Payee = validPayer;
            p1.Payer = validPayee;

            Payment p2 = createValidPayment();

            p2.Note  = "Moved to Lonely Tree2";
            p2.Payee = validPayer;
            p2.Payer = validPayee;

            PaymentCollection paymentCollection = new PaymentCollection(dataAccessFacadeStub);

            List <Payment> expectedPayments = new List <Payment>()
            {
                p1, p2
            };
            List <Payment> actualPayments = paymentCollection.ReadAllIncoming();

            for (int i = 0; i < expectedPayments.Count; i++)
            {
                Assert.AreEqual(expectedPayments[i].Note, actualPayments[i].Note);
                Assert.AreEqual(expectedPayments[i].Payee.Name, actualPayments[i].Payee.Name);
                Assert.AreEqual(expectedPayments[i].Payer.Name, actualPayments[i].Payer.Name);
            }
        }
示例#2
0
 private Payment FindPayPalPayment(int paypalGatewayId, PaymentCollection orderPayments, string transactionId)
 {
     //FIND THE MOST RECENT PAYMENT THAT MATCHES ONE OF THE GIVEN TRANSACTIONID
     if (paypalGatewayId > 0)
     {
         int i = (orderPayments.Count - 1);
         while (i >= 0)
         {
             Payment payment = orderPayments[i];
             if ((payment.PaymentMethod != null) && (payment.PaymentMethod.PaymentGatewayId == paypalGatewayId))
             {
                 //THIS IS A PAYPAL PAYMENT, CHECK THE TRANSACTIONS
                 foreach (Transaction transaction in payment.Transactions)
                 {
                     if (transaction.ProviderTransactionId == transactionId)
                     {
                         return(payment);
                     }
                 }
             }
             i--;
         }
     }
     return(null);
 }
        public void TestReadAllArchived()
        {
            createValidPayment();
            createValidPayment();
            createValidPayment();

            Payment p1 = createValidPayment();

            p1.Note     = "Archived1";
            p1.Archived = true;

            Payment p2 = createValidPayment();

            p2.Note     = "Archived2";
            p2.Archived = true;

            PaymentCollection paymentCollection = new PaymentCollection(dataAccessFacadeStub);

            List <Payment> expectedPayments = new List <Payment>()
            {
                p1, p2
            };
            List <Payment> actualPayments = paymentCollection.ReadAllArchived();

            for (int i = 0; i < expectedPayments.Count; i++)
            {
                Assert.AreEqual(expectedPayments[i].Note, actualPayments[i].Note);
            }
        }
        public void TestReadAllOutgoing()
        {
            Payment p1 = createValidPayment();

            p1.Note = "Outgoing1";
            Payment p2 = createValidPayment();

            p1.Note = "Outgoing2";
            Payment p3 = createValidPayment();

            p1.Note = "Outgoing3";

            PaymentCollection paymentCollection = new PaymentCollection(dataAccessFacadeStub);

            List <Payment> expectedPayments = new List <Payment>()
            {
                p1, p2, p3
            };
            List <Payment> actualPayments = paymentCollection.ReadAllOutgoing();

            for (int i = 0; i < expectedPayments.Count; i++)
            {
                Assert.AreEqual(expectedPayments[i].Note, actualPayments[i].Note);
                Assert.AreEqual(expectedPayments[i].Payee.Name, actualPayments[i].Payee.Name);
                Assert.AreEqual(expectedPayments[i].Payer.Name, actualPayments[i].Payer.Name);
            }
        }
示例#5
0
        public PaymentCollection GetAllPaymentCollection()
        {
            IDBManager        dbm  = new DBManager();
            PaymentCollection cols = new PaymentCollection();

            try
            {
                IDataReader reader = dbm.ExecuteReader(CommandType.StoredProcedure, "SelectPaymentsAll");
                while (reader.Read())
                {
                    Payment PAY = new Payment();
                    PAY.PaymentID    = Int32.Parse(reader["PaymentID"].ToString());
                    PAY.InvoiceID    = Int32.Parse(reader["InvoiceID"].ToString());
                    PAY.PaymentType  = reader["PaymentType"].ToString();
                    PAY.PaymentDate  = DateTime.Parse(reader["PaymentDate"].ToString());
                    PAY.Amount       = decimal.Parse(reader["Amount"].ToString());
                    PAY.Comments     = reader["Comments "].ToString();
                    PAY.ModifiedDate = DateTime.Parse(reader["ModifiedDate"].ToString());
                    PAY.CheckNumber  = reader["CheckNumber"].ToString();
                    cols.Add(PAY);
                }
            }

            catch (Exception ex)
            {
                log.Write(ex.Message, "PaymentCollection");
                throw (ex);
            }
            finally
            {
                dbm.Dispose();
            }
            return(cols);
        }
示例#6
0
 public PaymentCollection FetchAll()
 {
     PaymentCollection coll = new PaymentCollection();
     Query qry = new Query(Payment.Schema);
     coll.LoadAndCloseReader(qry.ExecuteReader());
     return coll;
 }
        private void LoadStdPayments()
        {
            if (stop == true)
            {
                gridTuitionPay.Rows.Count = 1;
                return;
            }
            if (gridTuition.Rows.Count == 1)
            {
                partId = 0;
            }
            else
            {
                partId = Int32.Parse(gridTuition[gridTuition.RowSel, 8].ToString());
            }
            loadPayments = new PaymentCollection();
            loadPayments.LoadPaymentsWithPartialIdFromDb(partId);

            gridTuitionPay.Rows.Count = 1;

            foreach (var popPartPay in loadPayments.pubPayCollect)
            {
                gridTuitionPay.Rows.Count++;
                gridTuitionPay[gridTuitionPay.Rows.Count - 1, 1] = popPartPay.Payment_Number;
                gridTuitionPay[gridTuitionPay.Rows.Count - 1, 2] = popPartPay.Payment_Paid;
                gridTuitionPay[gridTuitionPay.Rows.Count - 1, 3] = popPartPay.Payment_DatePaid;
            }
        }
        public ActionResult AddPayment(PaymentCollection model)
        {
            var payment = new Payment {
                PatientAddress   = model.Payment.PatientAddress,
                PaymentDate      = DateTime.Now,
                InvoiceRefNo     = model.Payment.InvoiceRefNo,
                PsychologistId   = model.Payment.PsychologistId,
                PatientId        = model.Payment.PatientId,
                ServiceRecived   = model.Payment.ServiceRecived,
                HoursOfService   = model.Payment.HoursOfService,
                ServiceAmount    = model.Payment.ServiceAmount,
                PaidbyMedicalAid = model.Payment.PaidbyMedicalAid,
                PayByCash        = model.Payment.PayByCash,
                TotalDue         = model.Payment.TotalDue,

                PatientName            = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).FullName,
                PatientEmail           = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).EmailAddress,
                PatientGender          = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).Gender,
                PatientNumber          = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).Contact,
                DateOfBirth            = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).DateOfBirth,
                PsychologistContact    = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PsychologistId).ContactNo,
                PsychologistName       = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PsychologistId).FullName,
                PsychologistSpecialist = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PsychologistId).Specialization,
                //CentreContact = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PsychologistId).Centre.Contact,
                //CentrLocation = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PsychologistId).Centre.Location,
                //CenterName = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PatientId).Centre.Name,
            };

            db.Payments.Add(payment);
            db.SaveChanges();
            return(RedirectToAction("ListOfPayment"));
        }
        public ActionResult AddPayment()
        {
            var collection = new PaymentCollection
            {
                Payment  = new Payment(),
                Patients = db.Patients.Where(c => c.CompletedStatus == true).Where(c => c.IsPaid == false).ToList(),
            };

            return(View(collection));
        }
        public ActionResult AddPayment()
        {
            var collection = new PaymentCollection
            {
                Payment       = new Payment(),
                Patients      = db.Patients.ToList(),
                Psychologists = db.Psychologists.ToList(),
            };

            return(View(collection));
        }
 public void Initialize()
 {
     dataAccessFacadeStub = new DataAccessFacadeStub();
     paymentCollection    = new PaymentCollection(dataAccessFacadeStub);
     validDueDate         = new DateTime(2010, 10, 10);
     validDueAmount       = 1m;
     validPayer           = new Customer(CustomerType.Bureau, "", "Lonely Tree", dataAccessFacadeStub);
     validPayee           = new Supplier("Galasam", "", SupplierType.Cruise, dataAccessFacadeStub);
     validType            = PaymentType.Balance;
     validSale            = "VF Jan";
     validBooking         = 2;
 }
 public void Initialize()
 {
     dataAccessFacadeStub = new DataAccessFacadeStub();
     paymentCollection = new PaymentCollection(dataAccessFacadeStub);
     validDueDate = new DateTime(2010, 10, 10);
     validDueAmount = 1m;
     validPayer = new Customer(CustomerType.Bureau, "", "Lonely Tree", dataAccessFacadeStub);
     validPayee = new Supplier("Galasam", "", SupplierType.Cruise, dataAccessFacadeStub);
     validType = PaymentType.Balance;
     validSale = "VF Jan";
     validBooking = 2;
 }
        /// <summary>
        /// Processes an order placed event
        /// </summary>
        /// <param name="order">The order that has been placed</param>
        /// <param name="payments">The payments that have been made against the order</param>
        public static void OrderPlaced(Order order, PaymentCollection payments)
        {
            order.Notes.Add(new OrderNote(order.OrderId, order.UserId, order.OrderDate, Properties.Resources.OrderPlaced, NoteType.SystemPrivate));
            order.Notes.Save();
            UpdateOrderStatus(StoreEvent.OrderPlaced, order);
            Hashtable parameters = new Hashtable();

            parameters["order"]    = order;
            parameters["customer"] = order.User;
            parameters["payments"] = payments;
            ProcessEmails(StoreEvent.OrderPlaced, parameters);
        }
示例#14
0
        private void LoadSelectedOldPartPay()
        {
            loadPayments = new PaymentCollection();
            loadPayments.LoadPaymentsWithBillIdFromDb(selectedOldId);

            foreach (var popPartPay in loadPayments.pubPayCollect)
            {
                gridOldPay.Rows.Count++;
                gridOldPay[gridOldPay.Rows.Count - 1, 1] = popPartPay.Payment_Number;
                gridOldPay[gridOldPay.Rows.Count - 1, 2] = popPartPay.Payment_Paid;
                gridOldPay[gridOldPay.Rows.Count - 1, 3] = popPartPay.Payment_DatePaid;
            }
        }
示例#15
0
        private Payment FindPaypalPayment(int paypalMethodId, PaymentCollection orderPayments, PaymentStatus[] validStatuses)
        {
            //FIND THE MOST RECENT PAYMENT THAT MATCHES ONE OF THE GIVEN STATUS
            int i = (orderPayments.Count - 1);

            while (i >= 0)
            {
                Payment payment = orderPayments[i];
                if ((payment.PaymentMethodId == paypalMethodId) && (Array.IndexOf(validStatuses, payment.PaymentStatus) > -1))
                {
                    return(payment);
                }
                i--;
            }
            return(null);
        }
示例#16
0
        protected override bool afterRemove(ResponseParser parser, bool soft = false)
        {
            bool result = base.afterRemove(parser, soft);

            if (result)
            {
                EquipmentBidCollection.ToList().ForEach(x => { x.remove(true); });
                BidFilesCollection.ToList().ForEach(x => { x.remove(true); });

                PaymentCollection.ToList().ForEach(x => { x.remove(true); });

                equipmentBidCollection = null;
                bidFilesCollection     = null;
            }
            return(result);
        }
示例#17
0
    protected void HandlerProcessPayment(object sender, EventArgs e)
    {
        var payments = new PaymentCollection();
        var idGen    = new IdGenerator();
        var fine     = new Fine();

        fine.Find(_fineId);
        var payment = payments.Payment;

        payment.Amount     = fine.FineAmount;
        payment.BorrowerId = fine.BorrowerId;
        payment.FineId     = fine.FineId;
        payment.PaymentId  = idGen.PaymentId();

        payments.AddPayment();
        Response.Redirect("BorrowerArea.aspx");
    }
示例#18
0
        public bool DeletePayment(PaymentCollection col)
        {
            try
            {
                foreach (Payment PAY in col)
                {
                    DeletePayment(PAY.PaymentID);
                }
            }
            catch (Exception ex)
            {
                log.Write(ex.Message, "DeletePayment");
                throw (ex);
            }

            return(true);
        }
        private void LoadStdOldPartPay()
        {
            if (gridOld.Rows.Count == 1)
            {
                oldId = 0;
            }
            else
            {
                oldId = Int32.Parse(gridOld[gridOld.RowSel, 7].ToString());
            }
            loadPayments = new PaymentCollection();
            loadPayments.LoadPaymentsWithBillIdFromDb(oldId);

            foreach (var popPartPay in loadPayments.pubPayCollect)
            {
                gridOldPay.Rows.Count++;
                gridOldPay[gridOldPay.Rows.Count - 1, 1] = popPartPay.Payment_Number;
                gridOldPay[gridOldPay.Rows.Count - 1, 2] = popPartPay.Payment_Paid;
                gridOldPay[gridOldPay.Rows.Count - 1, 3] = popPartPay.Payment_DatePaid;
            }
        }
示例#20
0
        public PaymentCollection GetAllPaymentDynamicCollection(string whereExpression, string orderBy)
        {
            IDBManager        dbm  = new DBManager();
            PaymentCollection cols = new PaymentCollection();

            try
            {
                dbm.CreateParameters(2);
                dbm.AddParameters(0, "@WhereCondition", whereExpression);
                dbm.AddParameters(1, "@OrderByExpression", orderBy);
                IDataReader reader = dbm.ExecuteReader(CommandType.StoredProcedure, "SelectPaymentsDynamic");
                while (reader.Read())
                {
                    Payment PAY = new Payment();

                    PAY.PaymentID    = Int32.Parse(reader["PaymentID"].ToString());
                    PAY.InvoiceID    = Int32.Parse(reader["InvoiceID"].ToString());
                    PAY.PaymentType  = reader["PaymentType"].ToString();
                    PAY.PaymentDate  = DateTime.Parse(reader["PaymentDate"].ToString());
                    PAY.Amount       = decimal.Parse(reader["Amount"].ToString());
                    PAY.Comments     = reader["Comments "].ToString();
                    PAY.CheckNumber  = reader["CheckNumber"].ToString();
                    PAY.ModifiedDate = DateTime.Parse(reader["ModifiedDate"].ToString());
                    cols.Add(PAY);
                }
            }

            catch (Exception ex)
            {
                log.Write(ex.Message, "GetAllPaymentDynamicCollection");
                throw (ex);
            }
            finally
            {
                dbm.Dispose();
            }
            return(cols);
        }
示例#21
0
        private void LoadSelectedPartPay()
        {
            loadPayments = new PaymentCollection();
            loadPayments.LoadPaymentsWithPartialIdFromDb(selectedPartId);

            gridTuitionPay.Rows.Count = 1;

            foreach (var popPartPay in loadPayments.pubPayCollect)
            {
                gridTuitionPay.Rows.Count++;
                gridTuitionPay[gridTuitionPay.Rows.Count - 1, 1] = popPartPay.Payment_Number;
                gridTuitionPay[gridTuitionPay.Rows.Count - 1, 2] = popPartPay.Payment_Paid;
                gridTuitionPay[gridTuitionPay.Rows.Count - 1, 3] = popPartPay.Payment_DatePaid;
            }
            if (gridTuitionPay[gridTuitionPay.Rows.Count - 1, 1].ToString() != "Payment no.")
            {
                payNumber = Int32.Parse(gridTuitionPay[gridTuitionPay.Rows.Count - 1, 1].ToString());
            }
            else
            {
                payNumber = 0;
            }
        }
        public ActionResult AddPayment(PaymentCollection model)
        {
            var payment = new Payment {
                PaymentDate      = DateTime.Now,
                InvoiceRefNo     = model.Payment.InvoiceRefNo,
                PatientId        = model.Payment.PatientId,
                ServiceRecived   = model.Payment.ServiceRecived,
                HoursOfService   = model.Payment.HoursOfService,
                ServiceAmount    = model.Payment.ServiceAmount,
                PaidbyMedicalAid = model.Payment.PaidbyMedicalAid,
                PayByCash        = model.Payment.PayByCash,
                TotalDue         = model.Payment.TotalDue,
                PatientAddress   = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).Address,
                PatientName      = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).FullName,
                PatientEmail     = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).EmailAddress,
                PatientGender    = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).Gender,
                PatientNumber    = db.Patients.FirstOrDefault(d => d.Id == model.Payment.PatientId).Contact,

                PsychologistContact    = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PatientId).ContactNo,
                PsychologistName       = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PatientId).FullName,
                PsychologistSpecialist = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PatientId).Specialization,
                //CentreContact = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PsychologistId).Centre.Contact,
                //CentrLocation = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PsychologistId).Centre.Location,
                //CenterName = db.Psychologists.FirstOrDefault(d => d.Id == model.Payment.PatientId).Centre.Name,
            };
            var patient = db.Patients.Single(c => c.Id == model.Payment.PatientId);

            patient.IsPaid = true;
            db.Payments.Add(payment);
            db.SaveChanges();

            string audiuserName = User.Identity.GetUserName();

            AuditExtension.AddAudit(audiuserName, "Added Payment", "Payments");

            return(RedirectToAction("ListOfPayment"));
        }
        public void TestReadAllArchived()
        {
            createValidPayment();
            createValidPayment();
            createValidPayment();

            Payment p1 = createValidPayment();
            p1.Note = "Archived1";
            p1.Archived = true;

            Payment p2 = createValidPayment();
            p2.Note = "Archived2";
            p2.Archived = true;

            PaymentCollection paymentCollection = new PaymentCollection(dataAccessFacadeStub);

            List<Payment> expectedPayments = new List<Payment>() { p1, p2 };
            List<Payment> actualPayments = paymentCollection.ReadAllArchived();

            for (int i = 0; i < expectedPayments.Count; i++)
            {
                Assert.AreEqual(expectedPayments[i].Note, actualPayments[i].Note);
            }
        }
示例#24
0
 public string CreatePayment(PaymentCollection collection)
 {
     Payment  = collection.Ebanx;
     _request = new RestRequest("ws/request", Method.POST);
     return(JsonConvert.SerializeObject(Payment));
 }
示例#25
0
 /// <summary>
 /// For testing against a specified DataAccessFacade
 /// </summary>
 /// <param name="dataAccessFacade"></param>
 public PaymentController(IDataAccessFacade dataAccessFacade)
 {
     this.dataAccessFacade = dataAccessFacade;
     paymentCollection = new PaymentCollection(dataAccessFacade);
 }
示例#26
0
        public PaymentController()
        {
            dataAccessFacade = DataAccessFacade.GetInstance();

            paymentCollection = new PaymentCollection(dataAccessFacade);
        }
示例#27
0
 public string CreatePayment(PaymentCollection collection)
 {
     throw new NotImplementedException();
 }
示例#28
0
 public PaymentCollection FetchByQuery(Query qry)
 {
     PaymentCollection coll = new PaymentCollection();
     coll.LoadAndCloseReader(qry.ExecuteReader());
     return coll;
 }
示例#29
0
 public PaymentCollection FetchByID(object PaymentsKey)
 {
     PaymentCollection coll = new PaymentCollection().Where("payments_key", PaymentsKey).Load();
     return coll;
 }
示例#30
0
 public OnlineOrder CreateOrderObject(string orderNumber, MyHLShoppingCart shoppingCart, PaymentCollection payments)
 {
     return(China.OrderProvider.CreateOrderObject(orderNumber, shoppingCart, payments));
 }
示例#31
0
 public MyHerbalife3.Ordering.ServiceProvider.OrderSvc.OnlineOrder CreateOrder(string orderNumber, MyHLShoppingCart shoppingCart, PaymentCollection payments)
 {
     return(OrderProvider.CreateOrder(orderNumber, shoppingCart, payments));
 }
示例#32
0
        public PaymentController()
        {
            dataAccessFacade = DataAccessFacade.GetInstance();

            paymentCollection = new PaymentCollection(dataAccessFacade);
        }
示例#33
0
        public void ProcessRequest(HttpContext context)
        {
            //GET REFERENCE TO REQUEST
            HttpRequest  request  = context.Request;
            HttpResponse response = context.Response;
            TraceContext trace    = context.Trace;

            //RECORD FORM VALUES TO TRACE OUTPUT
            foreach (string key in request.Form)
            {
                context.Trace.Write(key + ":" + request.Form[key]);
            }
            //SETUP DEFAULT REDIRECT URL
            string redirectUrl = "~/Default.aspx";
            //INITIALIZE THE PAYPAL PROVIDER
            PaymentGateway paypalGateway = PayPalProvider.GetPayPalPaymentGateway(true);

            if (paypalGateway == null)
            {
                response.Redirect(redirectUrl);
            }
            //LOOK FOR ORDER ID
            int    orderId;
            string customValue = request.Form["custom"];

            if (!String.IsNullOrEmpty(customValue))
            {
                int index = customValue.IndexOf(":");
                if (index > 0)
                {
                    orderId = AlwaysConvert.ToInt(customValue.Substring(0, index));
                }
                else
                {
                    orderId = AlwaysConvert.ToInt(customValue);
                }
            }
            else
            {
                // TRY TO LOCATE ORDER ID AS QUERY STRING PARAMETER
                orderId = AlwaysConvert.ToInt(request.QueryString["OrderId"]);
            }

            //IF ORDER ID WAS NOT IN CUSTOM, SEE IF WE CAN FIND THE ORDER VIA TRANSACTION ID
            if (orderId == 0)
            {
                trace.Write("OrderId not found in custom field; lookup via transaction ID");
                string parentTransactionId = IpnProcessor.GetFormValue(request.Form, "parent_txn_id");
                if (!string.IsNullOrEmpty(parentTransactionId) && (paypalGateway != null))
                {
                    trace.Write("Query for parent transaction " + parentTransactionId);
                    orderId = FindPayPalOrderId(paypalGateway.PaymentGatewayId, parentTransactionId);
                    if (orderId != 0)
                    {
                        trace.Write("Order ID Found: " + orderId.ToString());
                    }
                }
            }
            //TRY TO LOAD ORDER
            Order order = OrderDataSource.Load(orderId);

            //IF ORDER LOAD FAILS, STOP PROCESSING AND REDIRECT
            if (order == null)
            {
                response.Redirect(redirectUrl);
            }
            //ORDER LOAD SUCCESSFUL, UPDATE DEFAULT REDIRECT URL
            redirectUrl = "~/Members/MyOrder.aspx?OrderId=" + orderId.ToString();
            //IF GATEWAY NOT FOUND, STOP PROCESSING AND REDIRECT
            PayPalProvider provider = (PayPalProvider)paypalGateway.GetInstance();
            //GET TRANSACTION AMOUNT
            LSDecimal curSignedPayment = AlwaysConvert.ToDecimal(request.Form["mc_gross"]);
            LSDecimal curPayment       = Math.Abs((Decimal)curSignedPayment);

            context.Trace.Write("Transaction Amount is " + curPayment.ToString());
            if (curPayment != 0)
            {
                //VERIFY PAYMENT NOTIFICATION WITH PAYPAL
                bool valid = provider.ValidateNotification(request.Form.ToString());
                if (!valid)
                {
                    response.Redirect(redirectUrl);
                }
                //VERIFY THE RECEIVER EMAIL
                string lowerReceiverEmail   = AlwaysConvert.ToString(request.Form["receiver_email"]).ToLowerInvariant();
                string lowerProviderAccount = provider.PayPalAccount.ToLowerInvariant();
                if (lowerReceiverEmail != lowerProviderAccount)
                {
                    context.Trace.Write("Receiver Email (" + lowerReceiverEmail + ") does not match Primary Account (" + lowerProviderAccount + ")");
                    response.Redirect(redirectUrl);
                }
                //CHECK WHETHER TRANSACTION IS ALREADY PRESENT IN DATABASE
                string paypalTransactionId = IpnProcessor.GetFormValue(request.Form, "txn_id");
                string authTransactionId   = IpnProcessor.GetFormValue(request.Form, "auth_id");
                string paymentStatus       = IpnProcessor.GetFormValue(request.Form, "payment_status").ToUpperInvariant();
                string authStatus          = IpnProcessor.GetFormValue(request.Form, "auth_status").ToUpperInvariant();
                context.Trace.Write("Transaction ID Is " + paypalTransactionId);
                context.Trace.Write("Payment Status Is " + paymentStatus);
                context.Trace.Write("Auth Status Is " + authStatus);

                //CHECK FOR THIS PAYPAL TRANSACTION (MATCHING PROVIDER, PAYPAL TRANSACTION ID, AND PAYMENT STATUS)
                Payment     payment            = null;
                Transaction pendingTransaction = null;
                if (!string.IsNullOrEmpty(paypalTransactionId))
                {
                    TransactionCollection matchingTransactions = TransactionDataSource.LoadForProviderTransaction(paypalGateway.PaymentGatewayId, paypalTransactionId);
                    foreach (Transaction tx in matchingTransactions)
                    {
                        //WHEN PAYMENT IS BY ECHECK, IPN ISSUES A PENDING TRANSACTION
                        //SECOND IPN COMES FOR COMPLETED STATUS USING SAME TRANSACTION ID
                        if ((tx.ResponseCode == "PENDING") && (paymentStatus != "PENDING"))
                        {
                            //WE HAVE TO GET THE TRANSACTION VIA THE PAYMENT OBJECT
                            //OTHERWISE WE WILL HAVE PROBLEMS WITH DATA CONSISTENCY LATER
                            payment = tx.Payment;
                            foreach (Transaction ptx in payment.Transactions)
                            {
                                if (ptx.TransactionId == tx.TransactionId)
                                {
                                    pendingTransaction = ptx;
                                }
                            }
                        }
                        else if ((tx.TransactionType != TransactionType.Void) && (paymentStatus == "VOIDED"))
                        {
                            //IF WE VOID AN AUTHORIZATION, THE VOID HAS THE SAME TXID
                            //THE AUTHORIZATION WILL HAVE A BLANK RESPONSE CODE
                            //THE VOID SHOULD HAVE A 'VOIDED' RESPONSE CODE
                            //(THIS TRANSACTION IS NOT A MATCH AND SHOULD BE IGNORED)
                        }
                        else
                        {
                            //NO FURTHER PROCESSING, REDIR TO ORDER SCREEN
                            context.Trace.Write("Transaction ID " + paypalTransactionId + " Already Exists in Database");
                            response.Redirect(redirectUrl);
                        }
                    }
                }

                Transaction       transaction       = null;
                PaymentMethod     paypalMethod      = PayPalProvider.GetPayPalPaymentMethod(true);
                PaymentCollection orderPayments     = order.Payments;
                Transaction       authTransaction   = null;
                PaymentStatus[]   validAuthStatuses = { PaymentStatus.Unprocessed, PaymentStatus.AuthorizationPending };
                context.Trace.Write("Processing Payment Status: " + paymentStatus);
                switch (paymentStatus)
                {
                case "PENDING":
                    //THIS IS A PENDING TRANSACTION, GET PENDING REASON AND FIND OUT IF IT IS AN ECHECK WAITING TO CLEAR
                    string pendingReason          = IpnProcessor.GetFormValue(request.Form, "pending_reason").ToLowerInvariant();
                    bool   isPendingeCheck        = (pendingReason == "echeck");
                    bool   isPendingAuthorization = (pendingReason == "authorization");
                    context.Trace.Write("Pending Reason: " + pendingReason);
                    context.Trace.Write("Is Pending eCheck: " + isPendingeCheck.ToString());
                    context.Trace.Write("Is Pending Authorization: " + isPendingAuthorization.ToString());
                    //FIND THE PAYPAL PAYMENT THAT IS UNPROCESSED OR PENDING AUTHORIZATION
                    payment = FindPaypalPayment(paypalMethod.PaymentMethodId, orderPayments, validAuthStatuses);
                    if (payment != null)
                    {
                        //SEE IF WE CAN FIND A PENDING PAYPAL TRANSACTION WITHOUT A TXID
                        foreach (Transaction tx in payment.Transactions)
                        {
                            if ((tx.ResponseCode == "PENDING") && string.IsNullOrEmpty(tx.ProviderTransactionId))
                            {
                                transaction = tx;
                            }
                        }
                    }
                    //IF WE DID NOT FIND AN EXISTING TRANSACTION, CREATE A NEW ONE
                    if (transaction == null)
                    {
                        transaction = new Transaction();
                    }
                    //UPDATE THE TRANSACTION VALUES
                    transaction.TransactionType       = (isPendingeCheck ? TransactionType.Capture : TransactionType.Authorize);
                    transaction.PaymentGatewayId      = paypalGateway.PaymentGatewayId;
                    transaction.ProviderTransactionId = IpnProcessor.GetFormValue(request.Form, "txn_id");
                    transaction.TransactionDate       = AlwaysConvert.ToDateTime(request.Form["payment_date"], DateTime.UtcNow).ToUniversalTime();
                    transaction.Amount            = AlwaysConvert.ToDecimal(IpnProcessor.GetFormValue(request.Form, "mc_gross"));
                    transaction.TransactionStatus = TransactionStatus.Successful;
                    if (isPendingAuthorization)
                    {
                        //THIS IS AN EXPECTED RESPONSE, NO NEED TO SAVE THE REASON CODES
                        transaction.ResponseMessage = string.Empty;
                        transaction.ResponseCode    = string.Empty;
                    }
                    else
                    {
                        transaction.ResponseMessage = pendingReason;
                        transaction.ResponseCode    = "PENDING";
                    }
                    transaction.AuthorizationCode = IpnProcessor.GetFormValue(request.Form, "auth_id");
                    transaction.RemoteIP          = IpnProcessor.GetFormValue(request.ServerVariables, "REMOTE_ADDR");
                    transaction.Referrer          = IpnProcessor.GetFormValue(request.ServerVariables, "HTTP_REFERER");
                    //CREATE A PAYMENT IF AN EXISTING ONE WAS NOT FOUND
                    if (payment == null)
                    {
                        payment                   = new Payment();
                        payment.OrderId           = orderId;
                        payment.PaymentMethodId   = paypalMethod.PaymentMethodId;
                        payment.PaymentMethodName = paypalMethod.Name;
                        order.Payments.Add(payment);
                    }
                    //UPDATE PAYMENT DETAILS
                    payment.ReferenceNumber = IpnProcessor.GetFormValue(request.Form, "payer_email");
                    payment.Amount          = transaction.Amount;
                    payment.PaymentDate     = transaction.TransactionDate;
                    if (isPendingAuthorization)
                    {
                        payment.PaymentStatus       = PaymentStatus.Authorized;
                        payment.PaymentStatusReason = string.Empty;
                    }
                    else
                    {
                        payment.PaymentStatus       = (isPendingeCheck ? PaymentStatus.CapturePending : PaymentStatus.AuthorizationPending);
                        payment.PaymentStatusReason = transaction.ResponseMessage;
                    }
                    //ADD IN TRANSACTION
                    payment.Transactions.Add(transaction);
                    break;

                case "COMPLETED":
                    //IF THIS IS A CAPTURE FROM AN AUTHORIZATION, FIND THE AUTHORIZATION TRANSACTION
                    //AND UPDATE THE STATUS ACCORDINGLY, DEPENDING ON WHETHER ADDITIONAL SETTLEMENT TRANSACTIONS REMAIN (INTREMSETTLE > 0)
                    authTransaction   = null;
                    authTransactionId = IpnProcessor.GetFormValue(request.Form, "auth_id");
                    if (!string.IsNullOrEmpty(authTransactionId))
                    {
                        TransactionCollection matchingTransactions = TransactionDataSource.LoadForProviderTransaction(paypalGateway.PaymentGatewayId, authTransactionId);
                        //SHOULD ONLY BE ONE
                        if (matchingTransactions.Count > 0)
                        {
                            authTransaction = matchingTransactions[0];
                        }
                    }
                    //IF PAYPAL IS RUNNING IN CAPTURE MODE, WE MAY HAVE A COMPLETED PAYMENT
                    //WITH A PENDING OR UNPROCESSED PAYMENT ALREADY ASSOCIATED TO ORDER
                    if (pendingTransaction == null)
                    {
                        //FIND THE PAYPAL PAYMENT THAT IS UNPROCESSED OR PENDING
                        payment = FindPaypalPayment(paypalMethod.PaymentMethodId, orderPayments, validAuthStatuses);
                        if (payment != null)
                        {
                            //SEE IF WE CAN FIND A PENDING PAYPAL TRANSACTION WITHOUT A TXID
                            foreach (Transaction tx in payment.Transactions)
                            {
                                if ((tx.ResponseCode == "PENDING") && string.IsNullOrEmpty(tx.ProviderTransactionId))
                                {
                                    pendingTransaction = tx;
                                }
                            }
                        }
                    }
                    //SEE IF THIS TRANSACTION WAS PENDING (SUCH AS A CHECK WAITING TO CLEAR)
                    if (pendingTransaction != null)
                    {
                        //GET THE PENDING TRANSACTION AND PAYMENT
                        payment     = order.Payments[order.Payments.IndexOf(pendingTransaction.PaymentId)];
                        transaction = payment.Transactions[payment.Transactions.IndexOf(pendingTransaction.TransactionId)];
                    }
                    else
                    {
                        //THIS IS NOT A PENDING TRANSACTION
                        //LOCATE THE APPROPRIATE PAYMENT
                        if (authTransaction != null)
                        {
                            payment = order.Payments[order.Payments.IndexOf(authTransaction.PaymentId)];
                        }
                        else
                        {
                            //FIND THE PAYPAL PAYMENT THAT CAN BE CAPTURED
                            PaymentStatus[] validCaptureStatuses = { PaymentStatus.Unprocessed, PaymentStatus.AuthorizationPending, PaymentStatus.Authorized, PaymentStatus.CaptureFailed, PaymentStatus.CapturePending };
                            payment = FindPaypalPayment(paypalMethod.PaymentMethodId, orderPayments, validCaptureStatuses);
                            //CREATE A PAYMENT IF AN EXISTING ONE WAS NOT FOUND
                            if (payment == null)
                            {
                                payment                   = new Payment();
                                payment.OrderId           = orderId;
                                payment.PaymentMethodId   = paypalMethod.PaymentMethodId;
                                payment.PaymentMethodName = paypalMethod.Name;
                                order.Payments.Add(payment);
                            }
                        }
                        //CREATE A NEW TRANSACTION RECORD
                        transaction           = new Transaction();
                        transaction.PaymentId = payment.PaymentId;
                    }
                    //UPDATE THE TRANSACTION DETAILS
                    transaction.TransactionType       = TransactionType.Capture;
                    transaction.PaymentGatewayId      = paypalGateway.PaymentGatewayId;
                    transaction.TransactionDate       = AlwaysConvert.ToDateTime(request.Form["payment_date"], DateTime.UtcNow).ToUniversalTime();
                    transaction.RemoteIP              = IpnProcessor.GetFormValue(request.ServerVariables, "REMOTE_ADDR");
                    transaction.Referrer              = IpnProcessor.GetFormValue(request.ServerVariables, "HTTP_REFERER");
                    transaction.TransactionStatus     = TransactionStatus.Successful;
                    transaction.ProviderTransactionId = IpnProcessor.GetFormValue(request.Form, "txn_id");
                    transaction.AuthorizationCode     = IpnProcessor.GetFormValue(request.Form, "auth_id");
                    transaction.Amount          = AlwaysConvert.ToDecimal(IpnProcessor.GetFormValue(request.Form, "mc_gross"));
                    transaction.ResponseCode    = paymentStatus;
                    transaction.ResponseMessage = string.Empty;

                    //HANDLE PARTIAL / FINAL CAPTURES
                    int remainingSettle = AlwaysConvert.ToInt(IpnProcessor.GetFormValue(request.Form, "remaining_settle"));
                    if (remainingSettle == 0)
                    {
                        //THIS IS A FINAL CAPTURE
                        transaction.TransactionType = TransactionType.Capture;
                        //SET PAYMENT AMOUNT TO SUM OF ALL CAPTURES
                        LSDecimal totalCaptures = 0;
                        foreach (Transaction tx in payment.Transactions)
                        {
                            if ((transaction.TransactionId != tx.TransactionId) &&
                                (tx.TransactionType == TransactionType.PartialCapture || tx.TransactionType == TransactionType.Capture))
                            {
                                totalCaptures += tx.Amount;
                            }
                        }
                        totalCaptures += transaction.Amount;
                        payment.Amount = totalCaptures;
                    }
                    else
                    {
                        //THIS IS A PARTIAL CAPTURE
                        transaction.TransactionType = TransactionType.PartialCapture;
                        //LEAVE PAYMENT AMOUNT ALONE (AMOUNT OF AUTHORIZATION)
                    }

                    //UPDATE PAYMENT DETAILS
                    payment.PaymentDate         = transaction.TransactionDate;
                    payment.PaymentStatus       = (remainingSettle == 0) ? PaymentStatus.Captured : PaymentStatus.Authorized;
                    payment.PaymentStatusReason = string.Empty;

                    //ADD IN TRANSACTION IF NEEDED
                    if (transaction.TransactionId == 0)
                    {
                        payment.Transactions.Add(transaction);
                    }
                    break;

                case "REFUNDED":
                case "REVERSED":
                    //GET THE REFUND AMOUNT
                    LSDecimal refundAmount = Math.Abs(AlwaysConvert.ToDecimal(IpnProcessor.GetFormValue(request.Form, "mc_gross")));
                    //TRY TO LOCATE THE CORRECT PAYMENT BASED ON CAPTURE TRANSACITON ID
                    payment = FindPayPalPayment(paypalGateway.PaymentGatewayId, orderPayments, IpnProcessor.GetFormValue(request.Form, "parent_txn_id"));
                    if (payment == null)
                    {
                        //SEE IF WE CAN FIND THE PAYMENT VIA AUTH TRANSACTION ID
                        payment = FindPayPalPayment(paypalGateway.PaymentGatewayId, orderPayments, IpnProcessor.GetFormValue(request.Form, "auth_id"));
                    }
                    //CREATE A REFUND TRANSACTION
                    transaction = new Transaction();
                    //CREATE A PAYMENT IF AN EXISTING ONE WAS NOT FOUND
                    if (payment == null)
                    {
                        payment                     = new Payment();
                        payment.OrderId             = orderId;
                        payment.PaymentMethodId     = paypalMethod.PaymentMethodId;
                        payment.PaymentMethodName   = paypalMethod.Name;
                        payment.Amount              = -1 * refundAmount;
                        transaction.TransactionType = TransactionType.Refund;
                        order.Payments.Add(payment);
                    }
                    else
                    {
                        if (payment.Amount == refundAmount)
                        {
                            //FULL REFUND
                            transaction.TransactionType = TransactionType.Refund;
                            payment.PaymentStatus       = PaymentStatus.Refunded;
                        }
                        else
                        {
                            //PARTIAL REFUND
                            transaction.TransactionType = TransactionType.PartialRefund;
                            payment.Amount       -= refundAmount;
                            payment.PaymentStatus = PaymentStatus.Captured;
                        }
                    }
                    transaction.PaymentGatewayId      = paypalGateway.PaymentGatewayId;
                    transaction.ProviderTransactionId = IpnProcessor.GetFormValue(request.Form, "txn_id");
                    transaction.TransactionDate       = AlwaysConvert.ToDateTime(request.Form["payment_date"], DateTime.UtcNow).ToUniversalTime();
                    transaction.TransactionStatus     = TransactionStatus.Successful;
                    transaction.AuthorizationCode     = IpnProcessor.GetFormValue(request.Form, "auth_id");
                    transaction.RemoteIP = IpnProcessor.GetFormValue(request.ServerVariables, "REMOTE_ADDR");
                    transaction.Referrer = IpnProcessor.GetFormValue(request.ServerVariables, "HTTP_REFERER");
                    transaction.Amount   = refundAmount;
                    string responseMessage = IpnProcessor.GetFormValue(request.Form, "reason_code");
                    if (responseMessage != "refund")
                    {
                        transaction.ResponseCode    = paymentStatus;
                        transaction.ResponseMessage = responseMessage;
                    }
                    //UPDATE PAYMENT DETAILS
                    payment.PaymentDate         = transaction.TransactionDate;
                    payment.PaymentStatusReason = string.Empty;
                    //ADD IN TRANSACTION
                    payment.Transactions.Add(transaction);
                    break;

                case "VOIDED":
                    //SEE IF WE CAN FIND THE PAYMENT VIA AUTH TRANSACTION ID
                    payment = FindPayPalPayment(paypalGateway.PaymentGatewayId, orderPayments, IpnProcessor.GetFormValue(request.Form, "auth_id"));
                    //WE ONLY NEED TO CONTINUE IF A PAYMENT TO VOID WAS FOUND
                    if (payment != null)
                    {
                        //PAYPAL DOES NOT SEND THE AMOUNT OF THE VOID
                        //SO IF THIS PAYMENT WAS PARTIALLY CAPTURED, WE NEED TO KNOW HOW MUCH TO VOID
                        LSDecimal remainingAuthorization = payment.Transactions.GetRemainingAuthorized();
                        if (remainingAuthorization > 0)
                        {
                            //CREATE A VOID TRANSACTION
                            transaction = new Transaction();
                            transaction.TransactionType       = TransactionType.Void;
                            transaction.Amount                = remainingAuthorization;
                            transaction.PaymentGatewayId      = paypalGateway.PaymentGatewayId;
                            transaction.ProviderTransactionId = IpnProcessor.GetFormValue(request.Form, "txn_id");
                            transaction.TransactionDate       = AlwaysConvert.ToDateTime(request.Form["payment_date"], DateTime.UtcNow).ToUniversalTime();
                            transaction.TransactionStatus     = TransactionStatus.Successful;
                            transaction.AuthorizationCode     = IpnProcessor.GetFormValue(request.Form, "auth_id");
                            transaction.RemoteIP              = IpnProcessor.GetFormValue(request.ServerVariables, "REMOTE_ADDR");
                            transaction.Referrer              = IpnProcessor.GetFormValue(request.ServerVariables, "HTTP_REFERER");
                            //UPDATE PAYMENT DETAILS
                            payment.PaymentDate         = transaction.TransactionDate;
                            payment.PaymentStatusReason = string.Empty;
                            if (payment.Amount == remainingAuthorization)
                            {
                                //FULL VOID, CHANGE PAYMENT STATUS TO VOID
                                payment.PaymentStatus = PaymentStatus.Void;
                            }
                            else
                            {
                                //PARTIAL VOID, REDUCE PAYMENT AMOUNT BY VOID
                                payment.Amount -= remainingAuthorization;
                                //PAYMENT HAS NO REMAINING AUTHORIZATION AND SO IT IS CAPTURED
                                payment.PaymentStatus = PaymentStatus.Captured;
                            }
                            //ADD IN TRANSACTION
                            payment.Transactions.Add(transaction);
                        }
                    }
                    break;

                case "FAILED":
                    //THIS IS A FAILED E-CHECK
                    //PENDINGTRANSACTION SHOULD HAVE BEEN OBTAINED ABOVE
                    if (payment != null && pendingTransaction != null)
                    {
                        pendingTransaction.TransactionStatus = TransactionStatus.Failed;
                        //MAKE SURE TO CLEAR OUT PENDING RESPONSECODE
                        pendingTransaction.ResponseCode = string.Empty;
                        //GET THE CURRENT TRANSACTION DATE
                        pendingTransaction.TransactionDate = AlwaysConvert.ToDateTime(request.Form["payment_date"], DateTime.UtcNow).ToUniversalTime();
                        //UPDATE PAYMENT DETAILS
                        payment.PaymentDate         = pendingTransaction.TransactionDate;
                        payment.PaymentStatus       = (IsVoidableFailure(payment) ? PaymentStatus.Void : PaymentStatus.CaptureFailed);
                        payment.PaymentStatusReason = string.Empty;
                        //SAVE PAYMENT (AND CHILD TRANSACTIONS)
                        payment.Save();
                    }
                    break;

                default:
                    Logger.Warn("PayPal IPN transaction " + paypalTransactionId + " with a \"" + paymentStatus + "\" status was unhandled.");
                    break;
                }

                //IF PAYMENT IS SET, SAVE UPDATES
                if (payment != null)
                {
                    payment.Save();
                }
            }
            response.Redirect(redirectUrl);
        }
        public void TestReadAllIncoming()
        {
            createValidPayment();
            createValidPayment();
            createValidPayment();

            IParty commissioner = new Supplier("Lonely Tree", "", SupplierType.Cruise, dataAccessFacadeStub);

            Payment p1 = createValidPayment();
            p1.Note = "Moved to Lonely Tree1";
            p1.Payee = validPayer;
            p1.Payer = validPayee;

            Payment p2 = createValidPayment();
            p2.Note = "Moved to Lonely Tree2";
            p2.Payee = validPayer;
            p2.Payer = validPayee;

            PaymentCollection paymentCollection = new PaymentCollection(dataAccessFacadeStub);

            List<Payment> expectedPayments = new List<Payment>() { p1, p2 };
            List<Payment> actualPayments = paymentCollection.ReadAllIncoming();

            for (int i = 0; i < expectedPayments.Count; i++)
            {
                Assert.AreEqual(expectedPayments[i].Note, actualPayments[i].Note);
                Assert.AreEqual(expectedPayments[i].Payee.Name, actualPayments[i].Payee.Name);
                Assert.AreEqual(expectedPayments[i].Payer.Name, actualPayments[i].Payer.Name);
            }
        }
        public static ThreeDSecuredCreditCard Check3DSecuredEnrollment(PaymentCollection payments, string countryCode, string orderNumber, string distributorId, string locale, string rootUrl)
        {
            var threeDSecuredCard = new ThreeDSecuredCreditCard();

            if (payments.Count == 0)
            {
                return(threeDSecuredCard);
            }

            // 3D Secured only allows 1 credit card
            var payment           = payments[0];
            var creditCardPayment = payment as CreditPayment_V01;

            if (creditCardPayment != null)
            {
                string cardNumber          = creditCardPayment.Card.AccountNumber.Trim();
                string cardType            = CreditCard.CardTypeToHPSCardType(creditCardPayment.Card.IssuerAssociation);
                string cardExpirationMonth = creditCardPayment.Card.Expiration.Month.ToString(CultureInfo.InvariantCulture);
                string cardExpirationYear  = creditCardPayment.Card.Expiration.Year.ToString(CultureInfo.InvariantCulture);
                string currencyCode        = creditCardPayment.Currency;
                string amount = creditCardPayment.Amount.ToString(CultureInfo.InvariantCulture);
                string cvv    = creditCardPayment.Card.CVV;

                // name on card
                string cardHolderName = creditCardPayment.Card.NameOnCard;
                string firstName      = string.Empty;
                string lastName       = string.Empty;
                if (!string.IsNullOrEmpty(cardHolderName) && cardHolderName.IndexOf(" ") > 0)
                {
                    firstName = cardHolderName.Substring(0, cardHolderName.IndexOf(" "));
                    lastName  = cardHolderName.Substring(cardHolderName.LastIndexOf(" ") + 1, cardHolderName.Length - cardHolderName.LastIndexOf(" ") - 1);
                }
                else
                {
                    firstName = cardHolderName;
                    lastName  = cardHolderName;
                }

                //var request = new GetCyberSource3DEnrollmentRequest_V01
                var request = new Check3DEnrollmentRequest_V01
                {
                    Amount          = amount,
                    CardNumber      = cardNumber,
                    CardType        = cardType,
                    ExpirationMonth = cardExpirationMonth,
                    ExiprationYear  = cardExpirationYear,
                    CurrencyCode    = currencyCode,
                    CountryCode     = countryCode,
                    OrderNumber     = orderNumber,
                    CVV2            = cvv,
                    FirstName       = firstName,
                    LastName        = lastName,
                    ClientRootUrl   = rootUrl
                };

                var proxy = ServiceClientProvider.GetOrderServiceProxy();
                try
                {
                    var response = proxy.Check3DEnrollment(new Check3DEnrollmentRequest1(request)).Check3DEnrollmentResult as Check3DEnrollmentResponse_V01;
                    if (response != null)
                    {
                        threeDSecuredCard = response.threeDSecuredCreditCard;
                        if (null != threeDSecuredCard)
                        {
                            Save3DPaymentAfterEnrollment(orderNumber, distributorId, locale, threeDSecuredCard);
                        }
                        else
                        {
                            LoggerHelper.Error(string.Format("3D Payment error when calling 3D Enrollment service. Order #:{0}. Error: 3D Enrollment service rturned NULL.", orderNumber));
                        }
                    }
                }
                catch (Exception ex)
                {
                    ex = new ApplicationException(string.Format("ThreeDPaymentProvider.Check3DSecuredEnrollment(...) method failed ", ex));
                    WebUtilities.LogServiceExceptionWithContext(ex, proxy);
                }
                finally
                {
                    proxy.Close();
                }
            }

            return(threeDSecuredCard);
        }
        public void TestReadAllOutgoing()
        {
            Payment p1 = createValidPayment();
            p1.Note = "Outgoing1";
            Payment p2 = createValidPayment();
            p1.Note = "Outgoing2";
            Payment p3 = createValidPayment();
            p1.Note = "Outgoing3";

            PaymentCollection paymentCollection = new PaymentCollection(dataAccessFacadeStub);

            List<Payment> expectedPayments = new List<Payment>() { p1, p2, p3 };
            List<Payment> actualPayments = paymentCollection.ReadAllOutgoing();

            for (int i = 0; i < expectedPayments.Count; i++)
            {
                Assert.AreEqual(expectedPayments[i].Note, actualPayments[i].Note);
                Assert.AreEqual(expectedPayments[i].Payee.Name, actualPayments[i].Payee.Name);
                Assert.AreEqual(expectedPayments[i].Payer.Name, actualPayments[i].Payer.Name);
            }
        }
示例#37
0
 public PaymentCollection FetchByID(object Id)
 {
     PaymentCollection coll = new PaymentCollection().Where("ID", Id).Load();
     return coll;
 }
示例#38
0
 public Cart(DataSet tessResults)
 {
     DataTableCollection tables = tessResults.Tables;
     if (tables["Contribution"].Rows.Count > 0)
     {
         Contributions = new ContributionCollection(tables["Contribution"]);
     }
     if (tables["LineItem"].Rows.Count > 0)
     {
         LineItems = new LineItemCollection(tables["LineItem"], tables["SubLineItem"]);
     }
     if (tables["SubLineItemFee"].Rows.Count > 0)
     {
         AppliedFees = new AppliedFeeCollection(tables["SubLineItemFee"]);
     }
     if (tables["Fee"].Rows.Count > 0)
     {
         FeeCategories = new FeeCategoryCollection(tables["Fee"]);
     }
     if (tables["PriceType"].Rows.Count > 0)
     {
         PriceTypes = new CartPriceTypeCollection(tables["PriceType"]);
     }
     if (tables["Payment"].Rows.Count > 0)
     {
         Payments = new PaymentCollection(tables["Payment"]);
     }
     if (tables["PackageLineItem"].Rows.Count > 0)
     {
         PackageLineItems =
             new PackageLineItemCollection(tables["PackageLineItem"], tables["PackageSubLineItem"]);
     }
     var result = (from o in tessResults.Tables["Order"].AsEnumerable()
                   select new
                   {
                         SessionKey = o.Field<string>("sessionkey"),
                         OrderId = o.Field<int?>("order_no"),
                         AppealId = o.Field<int?>("appeal_no"),
                         SourceId = o.Field<int?>("source_no"),
                         ConstituentId = o.Field<int?>("customer_no"),
                         Solicitor = o.Field<string>("solicitor"),
                         ModeOfSaleId = o.Field<short?>("MOS"),
                         Date = o.Field<DateTime?>("order_dt"),
                         BatchId = o.Field<int?>("batch_no"),
                         Class = o.Field<short?>("class"),
                         AddressId = o.Field<int?>("address_no"),
                         HoldUntilDate = o.Field<DateTime?>("hold_until_dt"),
                         TransactionId = o.Field<int?>("transaction_no"),
                         HoldAtBoxOffice = o.Field<string>("habo_ind"),
                         Notes = o.Field<string>("notes"),
                         BusinessUnit = o.Field<short?>("bu"),
                         ShippingMethodId = o.Field<int?>("shipping_method"),
                         ShippingMethodName = o.Field<string>("shipping_method_desc"),
                         OrderTotal = o.Field<decimal?>("order_total"),
                         OrderValue = o.Field<decimal?>("order_value"),
                         Notes1 = o.Field<string>("notes1"),
                         DbStatus = o.Field<short?>("db_status"),
                         AmountToCharge = o.Field<decimal?>("amt_to_charge"),
                         FirstSeatAddedTime = o.Field<DateTime?>("first_seat_added_dt"),
                         AmountPaidToDate = o.Field<decimal?>("amt_paid_to_dt"),
                         AmountPaidNow = o.Field<decimal?>("amt_paid_now"),
                         BalanceToCharge = o.Field<decimal?>("balance_to_charge"),
                         Subtotal = o.Field<decimal?>("SubTotal"),
                         HandlingCharges = o.Field<decimal?>("HandlingCharges"),
                         Custom1 = o.Field<string>("custom_1"),
                         Custom2 = o.Field<string>("custom_2"),
                         Custom3 = o.Field<string>("custom_3"),
                         Custom4 = o.Field<string>("custom_4"),
                         Custom5 = o.Field<string>("custom_5"),
                         Custom6 = o.Field<string>("custom_6"),
                         Custom7 = o.Field<string>("custom_7"),
                         Custom8 = o.Field<string>("custom_8"),
                         Custom9 = o.Field<string>("custom_9"),
                         Custom0 = o.Field<string>("custom_0")
                   }).Single();
     SessionKey = result.SessionKey;
     OrderId = result.OrderId;
     AppealId = result.AppealId;
     SourceId = result.SourceId;
     ConstituentId = result.ConstituentId;
     Solicitor = result.Solicitor;
     ModeOfSaleId = result.ModeOfSaleId;
     Date = result.Date;
     BatchId = result.BatchId;
     Class = result.Class;
     AddressId = result.AddressId;
     HoldUntilDate = result.HoldUntilDate;
     TransactionId = result.TransactionId;
     HoldAtBoxOffice = ToBool(result.HoldAtBoxOffice);
     Notes = result.Notes;
     BusinessUnit = result.BusinessUnit;
     ShippingMethodId = result.ShippingMethodId;
     ShippingMethodName = result.ShippingMethodName;
     OrderTotal = result.OrderTotal;
     OrderValue = result.OrderValue;
     Notes1 = result.Notes1;
     DbStatus = result.DbStatus;
     AmountToCharge = result.AmountToCharge;
     FirstSeatAddedTime = result.FirstSeatAddedTime;
     AmountPaidToDate = result.AmountPaidToDate;
     AmountPaidNow = result.AmountPaidNow;
     BalanceToCharge = result.BalanceToCharge;
     Subtotal = result.Subtotal;
     HandlingCharges = result.HandlingCharges;
     Custom0 = result.Custom0;
     Custom1 = result.Custom1;
     Custom2 = result.Custom2;
     Custom3 = result.Custom3;
     Custom4 = result.Custom4;
     Custom5 = result.Custom5;
     Custom6 = result.Custom6;
     Custom7 = result.Custom7;
     Custom8 = result.Custom8;
     Custom9 = result.Custom9;
 }
示例#39
0
 /// <summary>
 /// For testing against a specified DataAccessFacade
 /// </summary>
 /// <param name="dataAccessFacade"></param>
 public PaymentController(IDataAccessFacade dataAccessFacade)
 {
     this.dataAccessFacade = dataAccessFacade;
     paymentCollection     = new PaymentCollection(dataAccessFacade);
 }