public ActionResult Index()
        {
            var model = new OrderViewModel
            {
                Orders = svc.GetOrders(User.Identity.GetUserId())
            };

            //make sure the back button on the edit page reloads the index page.
            Response.Cache.SetNoStore();

            return(View(model));
        }
        public ActionResult Create(OrderViewModel model)
        {
            //if user's zone is not able to order, return with error
            if (!ZoneSync.CheckUserZoneForISPOrdering(model.Order.Client))
            {
                TempData["IsAbleToOrderForUser"] = false;
                return(RedirectToAction("Create"));
            }

            var orderUrl   = new UrlHelper(HttpContext.Request.RequestContext).Action("Edit", "Order", new { area = "ISPAdmin" }, Request.Url.Scheme);
            var savedOrder = svc.SaveOrder(model, "ISPUser", orderUrl, User.Identity.GetUserId());

            return(RedirectToAction("Details", new { id = savedOrder.OrderId }));
        }
 public ActionResult EditClient(OrderViewModel model)
 {
     svc.EditClient(model.Order.Client);
     TempData["ClientUpdated"] = true;
     return(RedirectToAction("Edit", new { id = model.Order.OrderId }));
 }
        public Order CreateOrder(OrderViewModel model, string role, string orderUrl, string userId)
        {
            var userPassword = "";

            //get existing user if exists
            var user = db.Users.Include(u => u.Location).Include(u => u.Estate).Include(u => u.Zone).FirstOrDefault(u => u.Email == model.Order.Client.Email);

            if (string.IsNullOrEmpty(model.Order.Client.Id) && user == null)
            {
                var newUser  = model.Order.Client;
                var userRepo = new UserRepository();
                var result   = userRepo.CreateUser(new User
                {
                    UserName             = newUser.Email,
                    FirstName            = newUser.FirstName,
                    LastName             = newUser.LastName,
                    Email                = newUser.Email,
                    EmailConfirmed       = true,
                    UserCreatedWithOrder = true,
                    PhoneNumber          = newUser.PhoneNumber,
                    Landline             = newUser.Landline,
                    CreatedDate          = DateTime.Now,
                    Address              = newUser.Address,
                    LocationId           = model.Order.LocationId,
                    EstateId             = model.Order.Client.EstateId,
                    Latitude             = model.Order.Client.Latitude,
                    Longitude            = model.Order.Client.Longitude,

                    IsOwner          = model.Order.Client.IsOwner,
                    OwnerName        = model.Order.Client.OwnerName,
                    OwnerPhoneNumber = model.Order.Client.OwnerPhoneNumber,
                    OwnerEmail       = model.Order.Client.OwnerEmail,

                    HasAltContact = newUser.HasAltContact,
                    AltFirstName  = newUser.AltFirstName,
                    AltLastName   = newUser.AltLastName,
                    AltEmail      = newUser.AltEmail,
                    AltCellNo     = newUser.AltEmail,
                    AltLandline   = newUser.AltLandline
                }, UserType.Client);
                user         = db.Users.Include(u => u.Location).Include(u => u.Estate).Include(u => u.Zone).First(u => u.Id == result.User.Id);
                userPassword = result.UserPassword;
            }

            var product      = db.ISPProducts.Include(i => i.ISP).First(i => i.ISPProductId == model.Order.ISPProductId);
            var precinctCode = "";
            var special      = GetSpecial(user.Zone, product.IsSpecial);

            if (user.Estate != null && !string.IsNullOrEmpty(user.Estate.EstateCode))
            {
                precinctCode = user.Estate.EstateCode;
            }
            else if (!string.IsNullOrEmpty(user.Location.PrecinctCode))
            {
                precinctCode = user.Location.PrecinctCode;
            }

            var currentDateTime = DateTime.Now;

            var order = new Order
            {
                ISPId              = product.ISPId,
                ClientId           = user.Id,
                Status             = OrderStatus.Ordered,
                ISPOrderNo         = model.Order.ISPOrderNo ?? "Please provide",
                FFOrderNo          = "placeholder",
                CreatedDate        = currentDateTime,
                CreatedByRole      = role,
                ISPProduct         = product,
                ISPProductId       = product.ISPProductId,
                IsSpecial          = special != null,
                Special            = special,
                ClientContractTerm = model.Order.ClientContractTerm,
                OrderFFProducts    = new List <OrderFFProduct>
                {
                    new OrderFFProduct
                    {
                        Quantity    = 1,
                        FFProductId = db.FFProducts.FirstOrDefault(p => p.LineSpeed == product.LineSpeed).FFProductId
                    }
                },
                StatusList = new List <Status>
                {
                    new Status {
                        OrderStatus = OrderStatus.New, TimeStamp = currentDateTime
                    },
                    new Status {
                        OrderStatus = OrderStatus.Pending, TimeStamp = currentDateTime
                    },
                    new Status {
                        OrderStatus = OrderStatus.Ordered, TimeStamp = currentDateTime
                    }
                }
            };

            //quantity items
            for (int i = 0; i < model.QuantityId.Count; i++)
            {
                if (model.QuantityQty[i] > 0)
                {
                    order.OrderFFProducts.Add(new OrderFFProduct()
                    {
                        FFProductId = model.QuantityId[i], Quantity = model.QuantityQty[i]
                    });
                }
            }
            //checkbox items: if checked, save with qty=1
            int j = 0;

            for (int i = 0; i < model.OptionId.Count; i++)
            {
                if (model.Option[j])
                {
                    order.OrderFFProducts.Add(new OrderFFProduct()
                    {
                        FFProductId = model.OptionId[i], Quantity = 1
                    });
                    j++;
                }
                j++;
            }

            db.Orders.Add(order);
            order.Logs.Add(new Log {
                UserId = userId, Type = UserAction.Create, OrderStatus = order.Status, TimeStamp = DateTime.Now
            });
            SaveChanges(db);

            //once you have the orderId then use that as the unique order number
            order.FFOrderNo = string.Format("FTTH-{0}-{1}-{2:D6}", product.ISP.ISPCode, precinctCode, order.OrderId);
            SaveChanges(db);

            EmailSender.SendISPNewOrderNotification(order, product.ISP, user, orderUrl);
            EmailSender.SendRTNewOrderNotification(order.OrderId);

            //var cap = product.IsCapped ? product.Cap.ToString() : "";
            //var isCapped = product.IsCapped ? "Capped" : "Uncapped";

            //var email = new EmailDto
            //{
            //    Subject = "Order Confirmation",
            //    Body = "Dear " + user.FirstName + "," +
            //           "<br/><br/>This is a courtesy email to inform you that " + product.ISP.Name +
            //           " has placed an order for a Frogfoot Fibre link to your premises in order to supply you with a fibre broadband service." +
            //           "<br/><br/>If you did not request this service then please contact the ISP using the details below." +

            //           "<br/><br/>A user account has been created for you on the Frogfoot Fibre portal. " +
            //           "<br/>Should you wish to confirm your details and check for updates, please make use of the following login credentials." +

            //           "<br/><br/>URL: http://www.frogfootfibre.com" +
            //           "<br/><br/>Username: "******"<br/><br/>Password: "******"<br/><br/><br/><br/>If you have any queries about the broadband fibre offering, you are welcome to contact <strong>" + product.ISP.Name +
            //           "</strong> via email at " + product.ISP.EmailAddress + " or by phone on " + product.ISP.LandlineNo + "." +
            //           "<br/><br/>Warm regards" +
            //           "<br/><br/>The Frogfoot team." +
            //           "<br/><br/>[email protected]"
            //};

            //EmailSender.SendEmail(email, user);

            return(order);
        }