/// <summary>
        /// 
        /// </summary>
        /// <param name="redirect"></param>
        /// <param name="browser"></param>
        /// <returns></returns>
        public static bool ValidateRedirect(UserContractRedirect redirect, HttpBrowserCapabilitiesBase browser)
        {
            //var now = DateTime.Now;

            //Als er een periode is opgegeven dan deze als eerste
            var ruleActive = ValidateDatePeriode(redirect.DateTimeValueStart, redirect.DateTimeValueStop);
            if (!ruleActive)
                return false;

            //Als er een dag van de week is opgegeven deze dan als 2e
            ruleActive = ValidateDayOfTheWeek(redirect.DayOfTheWeekValue);
            if (!ruleActive)
                return false;

            //Is er een tijdsbestek opgegeven?
            ruleActive = ValidateTimePeriod(redirect.BeginTime, redirect.EndTime);
            if (!ruleActive)
                return false;

            ruleActive = ValidateRuleParameters(redirect);
            if (!ruleActive)
                return false;

            ruleActive = ValidateRedirectTypes(redirect, browser);
            if (!ruleActive)
                return false;

            //Is er een teller opgegeven?
            ruleActive = ValidateCounter(redirect.Counter, redirect);

            return ruleActive;
        }
 public ActionResult DeleteConfirmed(UserContractRedirect userContractRedirect, FormCollection collection)
 {
     var contractRedirect = db.UserContractRedirects.FirstOrDefault(c => c.Id == userContractRedirect.Id);
     if (contractRedirect != null)
     {
         db.UserContractRedirects.Remove(contractRedirect);
         db.SaveChanges();
     }
     //return RedirectToAction("Edit", "ContractUri", new { id = userContractRedirect.UserContractUri1.Id, contractId = userContractRedirect.UserContractUri1.UserContractId });
     return BreadCrum.RedirectToPreviousAction(Session, ControllerName);
 }
        private static bool ValidateRuleParameters(UserContractRedirect redirect)
        {
            if (redirect.RuleParameterValues.Count == 0) return true;

            //all values need to be active
            if (redirect.RuleParameterValues.Any(ruleParameterValue => !ruleParameterValue.IsActive))
            {
                return false;
            }

            return true;
        }
        private static bool ValidateRedirectTypes(UserContractRedirect redirect, HttpBrowserCapabilitiesBase browser)
        {
            if (redirect.RedirectTypeValues.Count == 0) return true;

            foreach (var redirectTypeValue in redirect.RedirectTypeValues)
            {
                var name = redirectTypeValue.RedirectType.Name;
                var browserProperty = browser.GetType().GetProperty(name);
                if (browserProperty != null)
                {
                    var broserValue = browserProperty.GetValue(browser, null);
                    if (broserValue != null)
                    {
                        var stringValue = broserValue.ToString();
                        var value = redirectTypeValue.Name;
                        if (value != stringValue)
                        {
                            return false;
                        }
                    }
                }

            }
            return true;
        }
        private static bool ValidateCounter(int? counter, UserContractRedirect redirect)
        {
            //This one is complex we need to look into the log and check based on the contractUri Id how many time the rule has been activated within the other parameters of the ruleset.
            int existingCount = 0;
            //If no counter has been defined return directly
            if (!counter.HasValue)
                return true;

            if (redirect.UserContractLogs == null)
                return true;

            if (redirect.UserContractLogs.Count == 0)
                return true;

            //Get all apprioriate logrecords to determin the count and we know that the count is bigger than 0 because of the previous lines
            var counterLog = redirect.UserContractLogs.Where(l => l.Id != Guid.Empty);

            //Regardless of the additional rules, if the UserContractLogs already is null we can continue true

            //Limit if applicable by a DatePeriode
            counterLog = ExtendCounterWithDatePeriode(redirect.DateTimeValueStart, redirect.DateTimeValueStop, counterLog);
            if(!counterLog.Any())
            return true;

            //Limit if applicable by weekdays;
            counterLog = ExtendCounterWithWeekdDays(redirect.DayOfTheWeekValue, counterLog);
            if (!counterLog.Any())
                return (existingCount <= counter.Value);

            //Limit if applicable by TimePeriode;
            counterLog = ExtendCounterWithTimePeriode(redirect.BeginTime, redirect.EndTime, counterLog);
            if (!counterLog.Any())
                return (existingCount <= counter.Value);

            //Now we can read the count and compare it with the maxCounter
            existingCount = counterLog.Count();
            return (existingCount <= counter.Value);
        }
        public ActionResult Edit(Guid id, Guid contractUriId, UserContractRedirectModel returnModel, FormCollection collection)
        {
            //Save Action
            //If id == null then insert
            try
            {
                ViewData["selectedTab"] = int.Parse(collection.GetValue("selectedTab").AttemptedValue);
                collection.Remove("selectedTab");
                bool addNewUserContractRedirect = false;
                if (id == Guid.Empty)
                    addNewUserContractRedirect = true;

                if (!addNewUserContractRedirect)
                {
                    var model = db.UserContractRedirects.FirstOrDefault(u => u.Id == id);
                    //model.Enabled = returnModel.UserContractRedirect.Enabled;
                    //model.Name = returnModel.UserContractRedirect.Name;
                    model.Enabled = returnModel.UserContractRedirect.Actief;
                    model.Name = returnModel.UserContractRedirect.Name;

                    //From Date
                    if (collection.GetValue("UserContractRedirect.StartDatumActive").AttemptedValue.Contains("true"))
                    {
                        //We need to take the value of the date picker and store it in the model

                            model.DateTimeValueStart = returnModel.UserContractRedirect.DateTimeValueStart;
                    }
                    else
                        model.DateTimeValueStart = null;
                    //To Date
                    if (collection.GetValue("UserContractRedirect.StopDatumActive").AttemptedValue.Contains("true"))
                    {
                        model.DateTimeValueStop = returnModel.UserContractRedirect.DateTimeValueStop;
                    }
                    else
                        model.DateTimeValueStop = null;

                    //Weekday
                    if (collection.GetValue("UserContractRedirect.WeekdayActive").AttemptedValue.Contains("true"))
                    {
                        string weekdayValue = collection.GetValue("ddlWeekday").AttemptedValue;
                        if (!String.IsNullOrEmpty(weekdayValue) && !String.IsNullOrWhiteSpace(weekdayValue))
                        {
                            int day = int.Parse(weekdayValue);
                            if (day > 0 && day < 10)
                                model.DayOfTheWeekValue = day;
                            else
                                model.DayOfTheWeekValue = null;
                        }
                    }
                    else
                        model.DayOfTheWeekValue = null;

                    //Between from
                    if (collection.GetValue("UserContractRedirect.BeginTimeActive").AttemptedValue.Contains("true"))
                    {
                        model.BeginTime = returnModel.UserContractRedirect.BeginTime;
                    }
                    else
                        model.BeginTime = null;

                    //Between To
                    if (collection.GetValue("UserContractRedirect.EndTimeActive").AttemptedValue.Contains("true"))
                    {
                        model.EndTime = returnModel.UserContractRedirect.EndTime;
                    }
                    else
                        model.EndTime = null;

                    //Update
                    var ruleValues = model.RuleParameterValues.ToList();
                    foreach (var ruleValue in ruleValues)
                    {
                        model.RuleParameterValues.Remove(ruleValue);
                    }
                    foreach (var parameter in returnModel.ParameterModel)
                    {
                        if (parameter.SelectedValue != null)
                        {
                            var guid = parameter.SelectedValue.Id;

                            var selectedValue = db.RuleParameterValues.SingleOrDefault(row => row.Id == guid);
                            if (selectedValue != null)
                            {
                                model.RuleParameterValues.Add(selectedValue);
                            }
                        }
                    }

                    var redirectValues = model.RedirectTypeValues.ToList();
                    foreach (var redirectValue in redirectValues)
                    {
                        model.RedirectTypeValues.Remove(redirectValue);
                    }
                    foreach (var redirect in returnModel.RedirectTypeModel)
                    {
                        if (redirect.SelectedValue != null)
                        {
                            var guid = redirect.SelectedValue.Id;

                            var selectedValue = db.RedirectTypeValues.SingleOrDefault(row => row.Id == guid);
                            if (selectedValue != null)
                            {
                                model.RedirectTypeValues.Add(selectedValue);
                            }
                        }
                    }

                    db.SaveChanges();
                    //return RedirectToAction("Edit", "ContractUri", new { id = model.UserContractUri, contractId = model.UserContractUri1.UserContractId });
                    return BreadCrum.RedirectToPreviousAction(Session, ControllerName);

                }
                else
                {
                    //contractUriId = returnModel.UserContractRedirect.UserContractUri1.Id;

                    var model = new UserContractRedirect();
                    model.Id = Guid.NewGuid();
                    model.UserContractUri = contractUriId;
                    model.UserContractUri1 = db.UserContractUris.SingleOrDefault(row => row.Id == contractUriId);

                    if (String.IsNullOrWhiteSpace(model.UserAgent))
                    {
                        model.UserAgent = "";
                    }

                    //model.Enabled = returnModel.UserContractRedirect.Enabled;
                    //model.Name = returnModel.UserContractRedirect.Name;
                    model.Enabled = collection.GetValue("UserContractRedirect.Actief").AttemptedValue.Contains("true");
                    model.Name = collection.GetValue("UserContractRedirect.Name").AttemptedValue;

                    //From Date
                    if (collection.GetValue("UserContractRedirect.StartDatumActive").AttemptedValue.Contains("true"))
                    {
                        //We need to take the value of the date picker and store it in the model

                        model.DateTimeValueStart = returnModel.UserContractRedirect.DateTimeValueStart;
                    }
                    else
                        model.DateTimeValueStart = null;
                    //To Date
                    if (collection.GetValue("UserContractRedirect.StopDatumActive").AttemptedValue.Contains("true"))
                    {
                        model.DateTimeValueStop = returnModel.UserContractRedirect.DateTimeValueStop;
                    }
                    else
                        model.DateTimeValueStop = null;

                    //Weekday
                    if (collection.GetValue("UserContractRedirect.WeekdayActive").AttemptedValue.Contains("true"))
                    {
                        string weekdayValue = collection.GetValue("ddlWeekday").AttemptedValue;
                        if (!String.IsNullOrEmpty(weekdayValue) && !String.IsNullOrWhiteSpace(weekdayValue))
                        {
                            int day = int.Parse(weekdayValue);
                            if (day > 0 && day < 10)
                                model.DayOfTheWeekValue = day;
                            else
                                model.DayOfTheWeekValue = null;
                        }
                    }
                    else
                        model.DayOfTheWeekValue = null;

                    //Between from
                    if (collection.GetValue("UserContractRedirect.BeginTimeActive").AttemptedValue.Contains("true"))
                    {
                        model.BeginTime = returnModel.UserContractRedirect.BeginTime;
                    }
                    else
                        model.BeginTime = null;

                    //Between To
                    if (collection.GetValue("UserContractRedirect.EndTimeActive").AttemptedValue.Contains("true"))
                    {
                        model.EndTime = returnModel.UserContractRedirect.EndTime;
                    }
                    else
                        model.EndTime = null;

                    var ruleValues = model.RuleParameterValues.ToList();
                    foreach (var ruleValue in ruleValues)
                    {
                        model.RuleParameterValues.Remove(ruleValue);
                    }
                    foreach (var parameter in returnModel.ParameterModel)
                    {
                        if (parameter.SelectedValue != null)
                        {
                            var guid = parameter.SelectedValue.Id;

                            var selectedValue = db.RuleParameterValues.SingleOrDefault(row => row.Id == guid);
                            if (selectedValue != null)
                            {
                                model.RuleParameterValues.Add(selectedValue);
                            }
                        }
                    }

                    var redirectValues = model.RedirectTypeValues.ToList();
                    foreach (var redirectValue in redirectValues)
                    {
                        model.RedirectTypeValues.Remove(redirectValue);
                    }
                    foreach (var redirect in returnModel.RedirectTypeModel)
                    {
                        if (redirect.SelectedValue != null)
                        {
                            var guid = redirect.SelectedValue.Id;

                            var selectedValue = db.RedirectTypeValues.SingleOrDefault(row => row.Id == guid);
                            if (selectedValue != null)
                            {
                                model.RedirectTypeValues.Add(selectedValue);
                            }
                        }
                    }

                    //Update
                    db.UserContractRedirects.Add(model);
                    db.SaveChanges();
                    //return RedirectToAction("Edit", "ContractUri", new { id = model.UserContractUri, contractId = model.UserContractUri1.UserContractId });
                    return BreadCrum.RedirectToPreviousAction(Session, ControllerName);

                }
            }
            catch (DbEntityValidationException ex)
            {
                //return RedirectToAction("Edit", new { id, contractUriId });
                return BreadCrum.RedirectToPreviousAction(Session, ControllerName);

            }
        }
        public ActionResult EditOld(Guid id, Guid contractUriId, FormCollection collection)
        {
            //Save Action
            //If id == null then insert
            try
            {
                ViewData["selectedTab"] = int.Parse(collection.GetValue("selectedTab").AttemptedValue);
                collection.Remove("selectedTab");
                bool addNewUserContractRedirect = false;
                if (id == Guid.Empty)
                    addNewUserContractRedirect = true;

                if (!addNewUserContractRedirect)
                {
                    var model = db.UserContractRedirects.FirstOrDefault(u => u.Id == id);
                    model.Enabled = collection.GetValue("Actief").AttemptedValue.Contains("true");
                    model.Name = collection.GetValue("Name").AttemptedValue;
                    //From Date
                    if (collection.GetValue("StartDatumActive").AttemptedValue.Contains("true"))
                    {
                        //We need to take the value of the date picker and store it in the model
                        string dpStartValue = collection.GetValue("dpStartDate").AttemptedValue;
                        if (!String.IsNullOrEmpty(dpStartValue) && !String.IsNullOrWhiteSpace(dpStartValue))
                            model.DateTimeValueStart = DataHelper.ParseDate(dpStartValue);
                        else
                            model.DateTimeValueStart = null;
                    }
                    else
                        model.DateTimeValueStart = null;
                    //To Date
                    if (collection.GetValue("StopDatumActive").AttemptedValue.Contains("true"))
                    {
                        string dpStopValue = collection.GetValue("dpEndDate").AttemptedValue;
                        if (!String.IsNullOrEmpty(dpStopValue) && !String.IsNullOrWhiteSpace(dpStopValue))
                            model.DateTimeValueStop = DataHelper.ParseDate(dpStopValue);
                        else
                            model.DateTimeValueStop = null;
                    }
                    else
                        model.DateTimeValueStop = null;

                    //Weekday
                    if (collection.GetValue("WeekdayActive").AttemptedValue.Contains("true"))
                    {
                        string weekdayValue = collection.GetValue("ddlWeekday").AttemptedValue;
                        if (!String.IsNullOrEmpty(weekdayValue) && !String.IsNullOrWhiteSpace(weekdayValue))
                        {
                            int day = int.Parse(weekdayValue);
                            if (day > 0 && day < 10)
                                model.DayOfTheWeekValue = day;
                            else
                                model.DayOfTheWeekValue = null;
                        }
                    }
                    else
                        model.DayOfTheWeekValue = null;

                    //Between from
                    if (collection.GetValue("BeginTimeActive").AttemptedValue.Contains("true"))
                    {
                        string tpBeginTime = collection.GetValue("tpBeginTime").AttemptedValue;
                        int? hour;
                        int? minute;
                        DataHelper.ParseTime(tpBeginTime, out hour, out minute);
                        model.TimeOfDayHourStart = hour;
                        model.TimeOfDayMinuteStart = minute;
                    }
                    else
                        model.BeginTime = null;

                    //Between To
                    if (collection.GetValue("EndTimeActive").AttemptedValue.Contains("true"))
                    {
                        string tpEndTime = collection.GetValue("tpEndTime").AttemptedValue;
                        int? hour;
                        int? minute;
                        DataHelper.ParseTime(tpEndTime, out hour, out minute);
                        model.TimeOfDayHourEnd = hour;
                        model.TimeOfDayMinuteEnd = minute;
                    }
                    else
                        model.EndTime = null;
                    //Counter
                    if (collection.GetValue("CounterActive").AttemptedValue.Contains("true"))
                    {
                        string numCounter = collection.GetValue("numCounter").AttemptedValue;
                        if (!String.IsNullOrEmpty(numCounter) && !String.IsNullOrWhiteSpace(numCounter))
                        {
                            int counterValue = int.Parse(numCounter);
                            if (counterValue > 0)
                                model.Counter = counterValue;
                            else
                                model.Counter = null;
                        }
                        else
                            model.Counter = null;
                    }
                    else
                        model.Counter = null;

                    //Update
                    db.SaveChanges();
                    //return RedirectToAction("Edit", "ContractUri", new { id = model.UserContractUri, contractId = model.UserContractUri1.UserContractId });
                    return BreadCrum.RedirectToPreviousAction(Session, ControllerName);

                }
                else
                {
                    var model = new UserContractRedirect();
                    model.Id = Guid.NewGuid();
                    model.UserContractUri = contractUriId;

                    model.Enabled = collection.GetValue("Actief").AttemptedValue.Contains("true");
                    model.Name = collection.GetValue("Name").AttemptedValue;
                    //From Date
                    if (collection.GetValue("StartDatumActive").AttemptedValue.Contains("true"))
                    {
                        //We need to take the value of the date picker and store it in the model
                        string dpStartValue = collection.GetValue("dpStartDate").AttemptedValue;
                        if (!String.IsNullOrEmpty(dpStartValue) && !String.IsNullOrWhiteSpace(dpStartValue))
                            model.DateTimeValueStart = DataHelper.ParseDate(dpStartValue);
                        else
                            model.DateTimeValueStart = null;
                    }
                    else
                        model.DateTimeValueStart = null;
                    //To Date
                    if (collection.GetValue("StopDatumActive").AttemptedValue.Contains("true"))
                    {
                        string dpStopValue = collection.GetValue("dpEndDate").AttemptedValue;
                        if (!String.IsNullOrEmpty(dpStopValue) && !String.IsNullOrWhiteSpace(dpStopValue))
                            model.DateTimeValueStop = DataHelper.ParseDate(dpStopValue);
                        else
                            model.DateTimeValueStop = null;
                    }
                    else
                        model.DateTimeValueStop = null;

                    //Weekday
                    if (collection.GetValue("WeekdayActive").AttemptedValue.Contains("true"))
                    {
                        string weekdayValue = collection.GetValue("ddlWeekday").AttemptedValue;
                        if (!String.IsNullOrEmpty(weekdayValue) && !String.IsNullOrWhiteSpace(weekdayValue))
                        {
                            int day = int.Parse(weekdayValue);
                            if (day > 0 && day < 10)
                                model.DayOfTheWeekValue = day;
                            else
                                model.DayOfTheWeekValue = null;
                        }
                    }
                    else
                        model.DayOfTheWeekValue = null;

                    //Between from
                    if (collection.GetValue("BeginTimeActive").AttemptedValue.Contains("true"))
                    {
                        string tpBeginTime = collection.GetValue("tpBeginTime").AttemptedValue;
                        int? hour;
                        int? minute;
                        DataHelper.ParseTime(tpBeginTime, out hour, out minute);
                        model.TimeOfDayHourStart = hour;
                        model.TimeOfDayMinuteStart = minute;
                    }
                    else
                        model.BeginTime = null;

                    //Between To
                    if (collection.GetValue("EndTimeActive").AttemptedValue.Contains("true"))
                    {
                        string tpEndTime = collection.GetValue("tpEndTime").AttemptedValue;
                        int? hour;
                        int? minute;
                        DataHelper.ParseTime(tpEndTime, out hour, out minute);
                        model.TimeOfDayHourEnd = hour;
                        model.TimeOfDayMinuteEnd = minute;
                    }
                    else
                        model.EndTime = null;
                    //Counter
                    if (collection.GetValue("CounterActive").AttemptedValue.Contains("true"))
                    {
                        string numCounter = collection.GetValue("numCounter").AttemptedValue;
                        if (!String.IsNullOrEmpty(numCounter) && !String.IsNullOrWhiteSpace(numCounter))
                        {
                            int counterValue = int.Parse(numCounter);
                            if (counterValue > 0)
                                model.Counter = counterValue;
                            else
                                model.Counter = null;
                        }
                        else
                            model.Counter = null;
                    }
                    else
                        model.Counter = null;

                    //Update
                    db.UserContractRedirects.Add(model);
                    db.SaveChanges();
                    //return RedirectToAction("Edit", "ContractUri", new { id = model.UserContractUri, contractId = model.UserContractUri1.UserContractId });
                    return BreadCrum.RedirectToPreviousAction(Session, ControllerName);

                }
            }
            catch (Exception)
            {
                //return RedirectToAction("Edit", new { id = Guid.Empty, contractUriId });
                return BreadCrum.RedirectToPreviousAction(Session, ControllerName);

            }
        }
 private void BuildRecipeByWeekDayPro(UserContract userContract)
 {
     for (var i = 1; i <= 7; i++)
     {
         var userContractUri = new UserContractUri()
         {
             Id = Guid.NewGuid(),
             UserContractId = userContract.Id,
             Uri = userContract.Uri,
             Name = "noname",
             Enabled = false,
             RandomFunction = 0,
         };
         userContract.UserContractUris.Add(userContractUri);
         var userContractRedirect = new UserContractRedirect()
         {
             Id = Guid.NewGuid(),
             UserContractUri = userContractUri.Id,
             Enabled = true
         };
         userContractRedirect.DayOfTheWeekValue = i;
         userContractUri.UserContractRedirects.Add(userContractRedirect);
     }
 }
        private void WriteLog(Dictionary<string, string> userAgent, string resultUri, UserContract userContract, UserContractUri userContractUri = null,
                              UserContractRedirect userContractRedirect = null)
        {
            var host = Request.UserHostAddress;
            var userContractLog = new UserContractLog
                {
                    Id = Guid.NewGuid(),
                    DateTime = DateTime.Now,
                    Host = host,
                    ResultUri = resultUri,
                    UserContractId = userContract.Id,
                    UserAgent = userAgent.Aggregate("", (current, key) => current + string.Format("{0}:{1};", key.Key, key.Value))
                };

            if (userContractUri != null)
            {
                userContractLog.UserContractUri = userContractUri.Id;
            }

            if (userContractRedirect != null)
            {
                userContractLog.UserContractRedirect = userContractRedirect.Id;
            }

            db.UserContractLogs.Add(userContractLog);
            db.SaveChanges();
        }
 private void BuildRecipeByTime(UserContract userContract)
 {
     var userContractUri = new UserContractUri()
     {
         Id = Guid.NewGuid(),
         UserContractId = userContract.Id,
         Uri = userContract.Uri,
         Name = "noname",
         Enabled = false,
         RandomFunction = 0,
     };
     userContract.UserContractUris.Add(userContractUri);
     var userContractRedirect = new UserContractRedirect()
     {
         Id = Guid.NewGuid(),
         UserContractUri = userContractUri.Id,
         Enabled = true
     };
     userContractUri.UserContractRedirects.Add(userContractRedirect);
 }
 private void BuildRecipeByRandom4(UserContract userContract)
 {
     var userContractUri = new UserContractUri()
     {
         Id = Guid.NewGuid(),
         UserContractId = userContract.Id,
         Uri = userContract.Uri,
         Name = "noname",
         Enabled = false,
         RandomFunction = 3,
     };
     userContract.UserContractUris.Add(userContractUri);
     var userContractRedirect = new UserContractRedirect
     {
         Id = Guid.NewGuid(),
         UserContractUri = userContractUri.Id,
         Enabled = true,
         DateTimeValueStart = userContract.StartDate,
         DateTimeValueStop = userContract.EndDate
     };
     userContractUri.UserContractRedirects.Add(userContractRedirect);
     var randomUri = new RandomUri()
     {
         Id = Guid.NewGuid(),
         Uri = userContract.Uri,
         UserContractUriId = userContractUri.Id,
         RandomParameter = 1,
     };
     userContractUri.RandomUris.Add(randomUri);
 }
        public ActionResult AddUri(Guid userContractId, DateTime? StartEndDate, string uri)
        {
            if (userContractId == null)
            {
                return BreadCrum.RedirectToPreviousAction(Session, ControllerName);
            }

            var userContract = db.UserContracts.Find(userContractId);
            var userContractUri = new UserContractUri()
            {
                Id = Guid.NewGuid(),
                UserContractId = userContract.Id,
                Uri = uri,
                Name = "noname",
                Enabled = false,
                RandomFunction = 0,
            };
            userContract.UserContractUris.Add(userContractUri);
            var userContractRedirect = new UserContractRedirect()
            {
                Id = Guid.NewGuid(),
                UserContractUri = userContractUri.Id,
                Enabled = true
            };
            userContractUri.UserContractRedirects.Add(userContractRedirect);
            db.SaveChanges();
            return RedirectToAction("Edit", new {id = userContract.Id});
        }
 private void BuildRecipeByDate(UserContract userContract)
 {
     var userContractUri = new UserContractUri()
     {
         Id = Guid.NewGuid(),
         UserContractId = userContract.Id,
         Uri = userContract.Uri,
         Name = "noname",
         Enabled = false,
         RandomFunction = 0,
     };
     userContract.UserContractUris.Add(userContractUri);
     var userContractRedirect = new UserContractRedirect()
     {
         Id = Guid.NewGuid(),
         UserContractUri = userContractUri.Id,
         Enabled = true
     };
     userContractRedirect.DateTimeValueStart = DateTime.Now;
     userContractUri.UserContractRedirects.Add(userContractRedirect);
     db.SaveChanges();
 }
 public ActionResult AddUserContractUri(Guid userContractId, int weekDay)
 {
     var userContract = db.UserContracts.Find(userContractId);
     var userContractUri = new UserContractUri()
     {
         Id = Guid.NewGuid(),
         UserContractId = userContract.Id,
         Uri = userContract.Uri,
         Name = "noname",
         Enabled = false,
         RandomFunction = 0,
     };
     userContract.UserContractUris.Add(userContractUri);
     var userContractRedirect = new UserContractRedirect()
     {
         Id = Guid.NewGuid(),
         UserContractUri = userContractUri.Id,
         Enabled = true
     };
     userContractRedirect.DayOfTheWeekValue = weekDay;
     userContractUri.UserContractRedirects.Add(userContractRedirect);
     db.SaveChanges();
     return RedirectToAction("Edit", new {id = userContract.Id});
 }