public void AutoPay()
        {
            var db = new GreenProDbEntities();
            DoReferenceTrasaction paypal = new DoReferenceTrasaction();
            //get customers whose subscription is valid and auto renewal is on
            //get customers whose subscription is valid and auto renewal is off
            var lastTransactionDate = DateTime.Now.AddDays(-7);
            var monthBackDate       = DateTime.Now.AddDays(-30);
            var list = (from a in db.PayPalLogs
                        where !string.IsNullOrEmpty(a.BillingAggrementID) && a.ServerDate <= lastTransactionDate
                        orderby a.ServerDate
                        select a).ToList();

            //pay pal logic
            foreach (var item in list)
            {
                var userPackage = db.UserPackages.FirstOrDefault(a => a.Id == item.SubscriptionID);
                var car         = db.CarUsers.FirstOrDefault(a => a.CarId == userPackage.CarId);
                var package     = db.Packages.FirstOrDefault(a => a.PackageId == userPackage.PackageId);


                if (userPackage != null && (car != null && (car.AutoRenewal || (userPackage.SubscribedDate.AddDays(30) >= DateTime.Now))))
                {
                    string message  = string.Empty;
                    var    response = paypal.DoTransaction(item.BillingAggrementID, package.Package_Description, package.Package_Name, (double)userPackage.TotalPrice, "Weekly Renewal", out message);
                }
            }
        }
        public string TestAutoPayment()
        {
            string OriResponsePaypal     = string.Empty;
            DoReferenceTrasaction paypal = new DoReferenceTrasaction();
            var    response       = paypal.DoTransaction("B-9MJ87472989329538", "Economy Description ", "Economy", (double)61M, "Economy Subscription Weekly Renewal", out OriResponsePaypal);
            string responseString = string.Empty;

            responseString = JsonConvert.SerializeObject(response);

            responseString = responseString + " : Paypal Response: " + OriResponsePaypal;

            return(responseString);
        }
        public string TakePaymentFromPaypal(int UserPackageId, string BillingAggrementID, DateTime CarServiceDate, int JobId)
        {
            string responseString = string.Empty;
            var    db             = new GreenProDbEntities();

            if (UserPackageId > 0)
            {
                var userPackage = db.UserPackages.FirstOrDefault(a => a.Id == UserPackageId);
                var car         = db.CarUsers.FirstOrDefault(a => a.CarId == userPackage.CarId);
                var package     = db.Packages.FirstOrDefault(a => a.PackageId == userPackage.PackageId);
                var JobDetail   = db.Garage_CarDaySetting.Where(i => i.Id == JobId).SingleOrDefault();
                //decimal finalPrice = userPackage.TotalPrice + userPackage.TaxAmount + userPackage.TipAmount; // Comment By Nitendra 28 SEP 2016

                decimal AddOnsPrice = 0M;
                AddOnsPrice = userPackage.UserPackagesAddons.Sum(s => s.ActualPrice);

                decimal finalPrice = userPackage.ActualPrice + AddOnsPrice + userPackage.TaxAmount;

                if (userPackage != null && (car != null && (car.AutoRenewal)))
                {
                    string message = string.Empty;

                    string OriResponsePaypal     = string.Empty;
                    DoReferenceTrasaction paypal = new DoReferenceTrasaction();
                    var response = paypal.DoTransaction(BillingAggrementID, package.Package_Description, package.Package_Name, (double)finalPrice, "Weekly Renewal", out OriResponsePaypal);

                    responseString = JsonConvert.SerializeObject(response);

                    responseString = responseString + " : Paypal Response: " + OriResponsePaypal;


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

                    paypalAutoPayment.ServiceDate = CarServiceDate;
                    paypalAutoPayment.CreatedOn   = DateTime.Now;

                    db.PaypalAutoPayments.Add(paypalAutoPayment);
                    db.SaveChanges();

                    if (paypalAutoPayment.IsPaid)
                    {
                        JobDetail.IsPaid = true;
                        db.SaveChanges();

                        UserTransaction _transaction = new UserTransaction()
                        {
                            Userid             = userPackage.UserId,
                            PaypalId           = "",
                            TransactionDate    = DateTime.Now,
                            Amount             = finalPrice,
                            PackageId          = userPackage.Id,
                            Details            = "No Details",
                            BillingAggrementID = BillingAggrementID,
                            TrasactionID       = paypalAutoPayment.TrasactionID,
                        };
                        db.UserTransactions.Add(_transaction);
                        db.SaveChanges();
                    }
                }
            }

            return(responseString);
        }
示例#4
0
        public ActionResult Success()
        {
            SetExpressCheckOut express = new SetExpressCheckOut();

            PayPalSystem.Models.PaypalResponse response = new PayPalSystem.Models.PaypalResponse();
            response.ECToken = Request.QueryString["token"];
            var token = response.ECToken;
            var user  = db.PayPalLogs.Where(a => a.ECToken == token).FirstOrDefault();

            response = express.CreateBillingAgreement(response);


            PayPalLog log = new PayPalLog()
            {
                ACK                 = "BillingAgreement",
                ApiSatus            = response.ApiStatus,
                BillingAggrementID  = (response.BillingAgreementID == null) ? string.Empty : response.BillingAgreementID,
                CorrelationID       = response.CorrelationID,
                ECToken             = token,
                ResponseError       = (response.ResponseError == null) ? string.Empty : response.ResponseError.ToString(),
                ResponseRedirectURL = (response.ResponseRedirectURL == null) ? string.Empty : response.ResponseRedirectURL,
                ServerDate          = DateTime.Now,
                TimeStamp           = response.Timestamp,
                UserId              = user.UserId,
                SubscriptionID      = user.SubscriptionID
            };

            db.PayPalLogs.Add(log);
            db.SaveChanges();

            //Save USer Logs
            var             finalPrice   = user.UserPackage.TotalPrice + user.UserPackage.TaxAmount + user.UserPackage.TipAmount;
            UserTransaction _transaction = new UserTransaction()
            {
                Userid             = user.UserId,
                PaypalId           = user.ECToken,
                TransactionDate    = DateTime.Now,
                Amount             = finalPrice,
                PackageId          = user.SubscriptionID,
                Details            = "No Details",
                BillingAggrementID = log.BillingAggrementID
            };

            db.UserTransactions.Add(_transaction);
            db.SaveChanges();
            //Logic to disable autorenew if Billingagreement is null



            //Logic to update Transaction status
            var userPackages = db.UserPackages.Find(user.SubscriptionID);

            if (userPackages != null)
            {
                string message               = string.Empty;
                string responseString        = string.Empty;
                var    package               = db.Packages.FirstOrDefault(a => a.PackageId == userPackages.PackageId);
                string OriResponsePaypal     = string.Empty;
                DoReferenceTrasaction paypal = new DoReferenceTrasaction();
                var doResponse               = paypal.DoTransaction(log.BillingAggrementID, package.Package_Description, package.Package_Name, (double)finalPrice, "Weekly Renewal", out OriResponsePaypal);

                ///Write paypal response in txt file.
                responseString = JsonConvert.SerializeObject(response);
                responseString = responseString + " : Paypal Response: " + OriResponsePaypal;
                string fileName = userPackages.Id + "-" + log.BillingAggrementID + "__" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm", CultureInfo.InvariantCulture) + ".txt";
                System.IO.File.WriteAllText(Server.MapPath("~/App_Data/" + fileName), responseString);


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

                DateTime currentDate = DateTime.Now;
                DateTime serviceDate = currentDate;
                if (userPackages.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 (userPackages.ServiceDay == nextServiceDate.DayOfWeek.ToString())
                            {
                                if (userPackages.SubscriptionTypeId == 1)
                                {
                                    serviceDate = nextServiceDate.AddDays(7);
                                }
                                else if (userPackages.SubscriptionTypeId == 2)
                                {
                                    serviceDate = nextServiceDate.AddDays(14);
                                }
                                else if (userPackages.SubscriptionTypeId == 3)
                                {
                                    serviceDate = nextServiceDate.AddDays(28);
                                }
                                else
                                {
                                    serviceDate = nextServiceDate.AddDays(7);
                                }

                                break;
                            }
                        }
                        else
                        {
                            nextServiceDate = currentDate.AddDays(i);
                            if (userPackages.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)
                {
                    userPackages.PaymentRecieved   = true;
                    userPackages.IsActive          = true;
                    userPackages.NextServiceDate   = serviceDate;
                    userPackages.PaymentMethodName = "paypal";
                    db.Entry(userPackages).State   = EntityState.Modified;
                    db.SaveChanges();

                    ///Added By Sachin 29 SEP 2016
                    var addOnsServices = userPackages.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 = userPackages.AspNetUser;

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

            return(View());
        }