public String Save()
        {
            try
            {
                RaffleRule.ValidateRequest(HttpContext.Current.Request.Form);
                User user = new UserRepository().GetUserByDNI(Convert.ToInt32(HttpContext.Current.Request.Form["user[DNI]"]));

                if (null == user)
                {
                    user = new UserRepository().CreateUser(
                        Convert.ToInt32(HttpContext.Current.Request.Form["user[DNI]"]),
                        Convert.ToString(HttpContext.Current.Request.Form["user[name]"]),
                        Convert.ToString(HttpContext.Current.Request.Form["user[lastname]"]),
                        Convert.ToString(HttpContext.Current.Request.Form["user[email]"]),
                        Convert.ToString(HttpContext.Current.Request.Form["user[address]"]),
                        Convert.ToString(HttpContext.Current.Request.Form["user[city]"]),
                        Convert.ToInt32(HttpContext.Current.Request.Form["user[postalCode]"])
                        );
                }

                String voucher = Convert.ToString(HttpContext.Current.Request.Form["voucher"]);
                int    product = Convert.ToInt32(HttpContext.Current.Request.Form["product"]);
                new VoucherRepository().SaveRaffle(voucher, product, user.Id);

                DeliveryEmail.SendEmail(user.Email,
                                        Convert.ToString(user.Name),
                                        Convert.ToString(new ProductRepository().GetProductById(product).URLImage));

                return(Transform.ToJson(new Response(true)));
            }
            catch (Exception ex)
            {
                return(Transform.ToJson(new Response(false, ex.Message)));
            }
        }
        /// <summary>
        /// Sends out notifications to contact people whos machines are going to be offrented in two days
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SendNotifications(object sender, ElapsedEventArgs e)
        {
            lock (_sendNotifications_Lock)
            {
                DAL _database = new DAL();

                DBEntities db = new DBEntities();

                //Get a list of ContactPersonIds from users who have notifications turned on
                string[] ContactPersonIds = db.Users.Where(i => i.SendDeliveryNotifications && i.ContactPersonId != null).Select(i => i.ContactPersonId).ToArray();

                // Return all customers that have any users that need a notification sent to them
                List <Customer> customers = db.Customers.Where(custEntity => custEntity.UserCompanies.Any(userCompEntity => ContactPersonIds.Contains(userCompEntity.User.ContactPersonId))).ToList();

                List <OrderState> tempOrderStates = new List <OrderState>();

                //Get every customer from the portal
                foreach (Customer customer in customers)
                {
                    //Get each customers current orders
                    List <AxOrderState> axOrderStates = _database.GetOrderStates(customer, DateTime.Now).ToList();

                    //check for deliveries and send notifications
                    foreach (AxOrderState delivery in axOrderStates.Where(i => i.SalesStatus == 2 || i.SalesStatus == 3))
                    {
                        //search for the order in the portal
                        OrderState portalOrderState = db.OrderStates.FirstOrDefault(i => i.InventTransId == delivery.InventTransId);

                        if (portalOrderState != null && portalOrderState.SalesStatus != 2 && portalOrderState.SalesStatus != 3)
                        {
                            MailClient.SetCulture(customer.CompanyId);

                            DeliveryEmail deliveryEmail = new DeliveryEmail()
                            {
                                Customer     = customer,
                                OrderDetails = _database.GetRentalOrderDetails(customer, delivery.InventTransId),
                                BannerUrl    = MailClient.GetBannerUrl(customer.CompanyId)
                            };

                            //Check to see if the order contact person has notifcation enabled
                            if (ContactPersonIds.Contains(deliveryEmail.OrderDetails.ContactPersonId))
                            {
                                string   template           = File.ReadAllText(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\MachineDeliveryEmail.html");
                                var      html               = Engine.Razor.RunCompile(template, "DeliveryEmail", null, deliveryEmail);
                                string   amEmail            = _database.GetAccountManagerDetails(customer).Email;
                                string[] notificationEmails = null;
                                if (!String.IsNullOrEmpty(customer.NotificationEmailAddress))
                                {
                                    notificationEmails = customer.NotificationEmailAddress.Split(';');
                                }
                                MailClient.SendEmail(customer, Resources.MachineDelivered, html, amEmail, "", notificationEmails, null, "Delivery Notification", deliveryEmail.OrderDetails.ContactEmail);
                            }
                        }
                    }

                    //Prepare updated order states data
                    foreach (AxOrderState axOrder in axOrderStates)
                    {
                        var orderState = db.OrderStates.FirstOrDefault(i => i.InventTransId == axOrder.InventTransId);

                        if (orderState == null)
                        {
                            OrderState newOrderState = new OrderState()
                            {
                                DatabaseName  = customer.DatabaseName,
                                CompanyId     = customer.CompanyId,
                                CustomerId    = customer.CustomerId,
                                InventTransId = axOrder.InventTransId,
                                DatetimeId    = DateTime.Now,
                                SalesStatus   = axOrder.SalesStatus,
                                ModifiedDate  = axOrder.ModifiedDate,
                                ModifiedTime  = axOrder.ModifiedTime
                            };

                            db.OrderStates.Add(newOrderState);
                        }
                        else
                        {
                            //update portal order
                            orderState.SalesStatus = axOrder.SalesStatus;
                            orderState.DatetimeId  = DateTime.Now;
                        }
                    }
                }

                //Save changes
                db.SaveChanges();
            }

            ScheduleNextExecution();
        }