Esempio n. 1
0
        public ActionResult ProcessPayment(UserPackageAddOnPaymentInformation model)
        {
            if (model.UserPackageID > 0)
            {
                return(RedirectToAction("ProcessPaypalPayment", "Paypal", new { userpackageid = model.UserPackageID }));
            }

            var userid = User.Identity.GetUserId();

            if (ModelState.IsValid)
            {
                var userPackage = db.UserPackages.Where(a => a.Id == model.UserPackageID).FirstOrDefault();
                var finalPrice  = userPackage.TotalPrice + userPackage.TaxAmount + userPackage.TipAmount;

                IPaymentMethod        _paymentMethod        = new PayPalDirectPaymentProcessor();
                ProcessPaymentRequest processPaymentRequest = new ProcessPaymentRequest();
                processPaymentRequest.OrderTotal = finalPrice;

                processPaymentRequest.CreditCardName        = model.NameOnCard;
                processPaymentRequest.CreditCardNumber      = model.CardNumber;
                processPaymentRequest.CreditCardCvv2        = model.CardSecurityCode;
                processPaymentRequest.CreditCardExpireMonth = model.CardExpiryMonth;
                processPaymentRequest.CreditCardExpireYear  = model.CardExpiryYear;

                processPaymentRequest.CustomerId = User.Identity.GetUserId();;
                if (processPaymentRequest.OrderGuid == Guid.Empty)
                {
                    processPaymentRequest.OrderGuid = Guid.NewGuid();
                }
                try
                {
                    ProcessPaymentResult processPaymentResult = null;
                    processPaymentResult = _paymentMethod.ProcessPayment(processPaymentRequest);


                    if (processPaymentResult.Success)
                    {
                        PayPalLog log = new PayPalLog()
                        {
                            ACK                 = "SUCCESS",
                            ApiSatus            = string.Empty,
                            BillingAggrementID  = processPaymentResult.CaptureTransactionId,
                            CorrelationID       = string.Empty,
                            ECToken             = string.Empty,
                            ResponseError       = string.Empty,
                            ResponseRedirectURL = string.Empty,
                            ServerDate          = DateTime.Now,
                            TimeStamp           = DateTime.Now.ToString(),
                            UserId              = userid,
                            SubscriptionID      = model.UserPackageID
                        };
                        db.PayPalLogs.Add(log);
                        db.SaveChanges();

                        //Save USer Logs

                        UserTransaction _transaction = new UserTransaction()
                        {
                            Userid             = userPackage.UserId,
                            PaypalId           = processPaymentResult.CaptureTransactionId,
                            TransactionDate    = DateTime.Now,
                            Amount             = finalPrice,
                            PackageId          = userPackage.Id,
                            Details            = "No Details",
                            BillingAggrementID = processPaymentResult.CaptureTransactionId
                        };
                        db.UserTransactions.Add(_transaction);
                        db.SaveChanges();
                        //Logic to disable autorenew if Billingagreement is null



                        //Logic to update Transaction status

                        if (userPackage != null)
                        {
                            string message        = string.Empty;
                            string responseString = string.Empty;
                            var    package        = db.Packages.FirstOrDefault(a => a.PackageId == userPackage.PackageId);



                            PaypalAutoPayment paypalAutoPayment = new PaypalAutoPayment();
                            paypalAutoPayment.UserPackageID      = userPackage.Id;
                            paypalAutoPayment.UserID             = userPackage.UserId;
                            paypalAutoPayment.IsPaid             = true;
                            paypalAutoPayment.GrossAmount        = String.Format("{0:0.00}", finalPrice); //Convert.ToString(finalPrice);
                            paypalAutoPayment.PaymentStatus      = "COMPLETED";
                            paypalAutoPayment.PaymentDate        = DateTime.Now.ToString();
                            paypalAutoPayment.TrasactionID       = processPaymentResult.CaptureTransactionId;
                            paypalAutoPayment.BillingAggrementID = processPaymentResult.CaptureTransactionId;
                            paypalAutoPayment.TransactionDate    = DateTime.Now;

                            DateTime currentDate = DateTime.Now;
                            DateTime serviceDate = currentDate;
                            if (userPackage.ServiceDay == currentDate.DayOfWeek.ToString())
                            {
                                serviceDate = currentDate.AddDays(7);
                            }
                            else
                            {
                                DateTime nextServiceDate;
                                for (int i = 1; i <= 6; i++)
                                {
                                    if (i == 1)
                                    {
                                        nextServiceDate = currentDate.AddDays(i);
                                        if (userPackage.ServiceDay == nextServiceDate.DayOfWeek.ToString())
                                        {
                                            if (userPackage.SubscriptionTypeId == 1)
                                            {
                                                serviceDate = nextServiceDate.AddDays(7);
                                            }
                                            else if (userPackage.SubscriptionTypeId == 2)
                                            {
                                                serviceDate = nextServiceDate.AddDays(14);
                                            }
                                            else if (userPackage.SubscriptionTypeId == 3)
                                            {
                                                serviceDate = nextServiceDate.AddDays(28);
                                            }
                                            else
                                            {
                                                serviceDate = nextServiceDate.AddDays(7);
                                            }

                                            break;
                                        }
                                    }
                                    else
                                    {
                                        nextServiceDate = currentDate.AddDays(i);
                                        if (userPackage.ServiceDay == nextServiceDate.DayOfWeek.ToString())
                                        {
                                            serviceDate = currentDate.AddDays(i);
                                            break;
                                        }
                                    }
                                }
                            }

                            paypalAutoPayment.ServiceDate = serviceDate;
                            paypalAutoPayment.CreatedOn   = DateTime.Now;
                            db.PaypalAutoPayments.Add(paypalAutoPayment);
                            db.SaveChanges();

                            if (paypalAutoPayment.IsPaid)
                            {
                                userPackage.PaymentRecieved   = true;
                                userPackage.IsActive          = true;
                                userPackage.NextServiceDate   = serviceDate;
                                userPackage.PaymentMethodName = "credit card";
                                db.Entry(userPackage).State   = EntityState.Modified;
                                db.SaveChanges();

                                var addOnsServices = userPackage.UserPackagesAddons.ToList();
                                foreach (var addOns in addOnsServices)
                                {
                                    if (!addOns.NextServiceDate.HasValue)
                                    {
                                        addOns.NextServiceDate = serviceDate;
                                        db.SaveChanges();
                                    }
                                }
                            }
                        }


                        Session["NewServiceCarTypeId"] = null;
                        Session["SelectedCar"]         = null;
                        Session["NewServiceGarageId"]  = null;

                        var userInfo = userPackage.AspNetUser;

                        // Send Notification Mail Admin for buy new subscrition.
                        _workflowMessageService.SendNewSubscriptionNotificationToAdmin(userInfo.FirstName + " " + userInfo.LastName, userInfo.UserName, userPackage.Package.Package_Name, userPackage.SubscribedDate.ToString(), userPackage.CarUser.Garage.Garage_Name);

                        return(RedirectToRoute("Completed", new { id = model.UserPackageID }));
                    }

                    foreach (var error in processPaymentResult.Errors)
                    {
                        model.Warnings.Add(error);
                    }
                }
                catch (Exception exc)
                {
                    model.Warnings.Add(exc.Message);
                }
            }

            model.UserPackge = db.UserPackages.Where(a => a.Id == model.UserPackageID).FirstOrDefault();
            model.Addons     = db.UserPackagesAddons.Where(a => a.UserPackageID == model.UserPackageID);

            //adding tax
            if (db.Taxes != null && db.Taxes.Count() > 0)
            {
                var taxPercentage = db.Taxes.Select(a => a.TaxPercentage).Sum();
                model.UserPackge.TaxAmount = model.TaxAmount = model.UserPackge.TotalPrice * (taxPercentage / 100);
                model.TaxPercentage        = taxPercentage;
                db.SaveChanges();
            }

            //CC types
            model.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Visa",
                Value = "Visa",
            });
            model.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Master card",
                Value = "MasterCard",
            });
            model.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Discover",
                Value = "Discover",
            });
            model.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Amex",
                Value = "Amex",
            });

            //years
            model.ExpireYears.Add(new SelectListItem
            {
                Text  = "Year",
                Value = "",
            });
            for (int i = 0; i < 25; i++)
            {
                string year = Convert.ToString(DateTime.Now.Year + i);
                model.ExpireYears.Add(new SelectListItem
                {
                    Text  = year,
                    Value = year,
                });
            }

            //months
            //months
            model.ExpireMonths.Add(new SelectListItem
            {
                Text  = "Month",
                Value = "",
            });
            for (int i = 1; i <= 12; i++)
            {
                string text = (i < 10) ? "0" + i : i.ToString();
                model.ExpireMonths.Add(new SelectListItem
                {
                    Text  = text,
                    Value = i.ToString(),
                });
            }

            return(View(model));
        }
Esempio n. 2
0
        public ActionResult ProcessPayment(int id)
        {
            if (id > 0)
            {
                return(RedirectToAction("ProcessPaypalPayment", "Paypal", new { userpackageid = id }));
            }

            UserPackageAddOnPaymentInformation userAndAddon = new UserPackageAddOnPaymentInformation();

            userAndAddon.UserPackge    = db.UserPackages.Where(a => a.Id == id).FirstOrDefault();
            userAndAddon.Addons        = db.UserPackagesAddons.Where(a => a.UserPackageID == id);
            userAndAddon.UserPackageID = id;

            //adding tax
            if (db.Taxes != null && db.Taxes.Count() > 0)
            {
                var taxPercentage = db.Taxes.Select(a => a.TaxPercentage).Sum();
                userAndAddon.UserPackge.TaxAmount = userAndAddon.TaxAmount = userAndAddon.UserPackge.TotalPrice * (taxPercentage / 100);
                userAndAddon.TaxPercentage        = taxPercentage;
                db.SaveChanges();
            }

            //CC types
            userAndAddon.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Visa",
                Value = "Visa",
            });
            userAndAddon.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Master card",
                Value = "MasterCard",
            });
            userAndAddon.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Discover",
                Value = "Discover",
            });
            userAndAddon.CreditCardTypes.Add(new SelectListItem
            {
                Text  = "Amex",
                Value = "Amex",
            });

            //years
            userAndAddon.ExpireYears.Add(new SelectListItem
            {
                Text  = "Year",
                Value = "",
            });
            for (int i = 0; i < 25; i++)
            {
                string year = Convert.ToString(DateTime.Now.Year + i);
                userAndAddon.ExpireYears.Add(new SelectListItem
                {
                    Text  = year,
                    Value = year,
                });
            }

            //months
            //months
            userAndAddon.ExpireMonths.Add(new SelectListItem
            {
                Text  = "Month",
                Value = "",
            });
            for (int i = 1; i <= 12; i++)
            {
                string text = (i < 10) ? "0" + i : i.ToString();
                userAndAddon.ExpireMonths.Add(new SelectListItem
                {
                    Text  = text,
                    Value = i.ToString(),
                });
            }

            return(View(userAndAddon));
        }