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)); }
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)); }