Example #1
0
        public ActionResult Create(GroupCreateModel _GroupCreateModel)
        {
            List <CycleDays> _CycleDays     = new List <CycleDays>();
            List <Route>     _Routes        = new List <Route>();
            Location         _Location      = repository.GetLocations().Where(l => l.id == _GroupCreateModel.LocationsId).FirstOrDefault();
            CultureHelper    _CultureHelper = new CultureHelper(repository);
            TimeZoneInfo     TZone          = _CultureHelper.GetTimeZoneInfo(_GroupCreateModel.LocationsId);
            DateTime         LocalNow       = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TZone);
            var  currentUser       = idb.Users.Find(User.Identity.GetUserId());
            bool DayOfWeekSelected = false;

            if (_GroupCreateModel.BunchTime == null)
            {
                ModelState.AddModelError(string.Empty, "Please select a time");
                _GroupCreateModel.Locations   = repository.GetLocations().ToList();
                _GroupCreateModel.LocationsId = _Location.id;
                this.ShowMessage(MessageType.Error, "Please select a time", true, MessagePosition.TopCentre, false);
                return(View(_GroupCreateModel));
            }

            //Is a one off ride
            if (_GroupCreateModel.OneOff)
            {
                long     msSinceEpoch       = Convert.ToInt64(_GroupCreateModel.OneOffDateTime); // Value from Date.getTime() in JavaScript
                DateTime OneOffRideDateTime = new DateTime(1970, 1, 1).AddTicks(msSinceEpoch * 10000);

                //DateTime da = DateTime.ParseExact(OneOffRideDateTime, "dd/MM/yyyy", null);
                //DateTime _RideDate = da.Date.Add(new TimeSpan(_AdHocCreateModel.Hour, _AdHocCreateModel.Minute, 0));

                //CycleDays NewDay = new CycleDays { DayOfWeek = OneOffRideDateTime.ToString("dddd") };
                //_CycleDays.Add(NewDay);

                Group NewGroup = new Group
                {
                    name     = _GroupCreateModel.Name,
                    RideTime = OneOffRideDateTime.Hour.ToString() + ":" + OneOffRideDateTime.Minute.ToString(),
                    //RideDays = _CycleDays,
                    Location          = _Location,
                    Rides             = new List <Ride>(),
                    Routes            = new List <Route>(),
                    AverageSpeed      = _GroupCreateModel.AverageSpeed,
                    StartLocation     = _GroupCreateModel.StartLocation,
                    Description       = _GroupCreateModel.Description,
                    RideHour          = OneOffRideDateTime.Hour,
                    RideMinute        = OneOffRideDateTime.Minute,
                    CreatedBy         = currentUser.Id,
                    ModifiedTimeStamp = LocalNow,
                    CreatedTimeStamp  = LocalNow,
                    MapUrl            = _GroupCreateModel.MapUrl,
                    IsPrivate         = _GroupCreateModel.IsPrivate,
                    CreatedByName     = _GroupCreateModel.CreatorName,
                    Lat      = _GroupCreateModel.lat,
                    Lng      = _GroupCreateModel.lng,
                    RideDate = OneOffRideDateTime,
                    Country  = _GroupCreateModel.country,
                    OneOff   = true
                };

                Ride OneOffRide = new Ride {
                    Group = NewGroup, RideDate = OneOffRideDateTime, RideTime = NewGroup.RideTime
                };
                NewGroup.Rides.Add(OneOffRide);

                //Routes:Need to update this so that it can be a dynamic number of routes
                if (_GroupCreateModel.Route1Desc != string.Empty)
                {
                    Route _Route1 = new Route {
                        Desc = _GroupCreateModel.Route1Desc, Group = NewGroup, MapURL = _GroupCreateModel.Route1URL
                    };
                    _Routes.Add(_Route1);
                }

                if (_GroupCreateModel.Route2Desc != string.Empty)
                {
                    Route _Route2 = new Route {
                        Desc = _GroupCreateModel.Route2Desc, Group = NewGroup, MapURL = _GroupCreateModel.Route2URL
                    };
                    _Routes.Add(_Route2);
                }

                if (_GroupCreateModel.Route3Desc != string.Empty)
                {
                    Route _Route3 = new Route {
                        Desc = _GroupCreateModel.Route3Desc, Group = NewGroup, MapURL = _GroupCreateModel.Route3URL
                    };
                    _Routes.Add(_Route3);
                }

                NewGroup.Routes = _Routes;

                repository.AddGroup(NewGroup);
                repository.Save();

                if (_GroupCreateModel.IsPrivate)
                {
                    return(RedirectToAction("InviteOthersToPrivateBunch", "Group", new { GroupId = NewGroup.id }));
                }
            }
            //Is a recuring bunch
            else
            {
                foreach (DayOfWeekViewModel item in _GroupCreateModel.DaysOfWeek)
                {
                    if (item.Checked)
                    {
                        CycleDays NewDay = new CycleDays {
                            DayOfWeek = item.Name
                        };
                        _CycleDays.Add(NewDay);
                        DayOfWeekSelected = true;
                    }
                }

                if (!DayOfWeekSelected)
                {
                    ModelState.AddModelError(string.Empty, "Please select one or more days");
                    _GroupCreateModel.Locations   = repository.GetLocations().ToList();
                    _GroupCreateModel.LocationsId = _Location.id;
                    this.ShowMessage(MessageType.Error, "Please select one or more days", true, MessagePosition.TopCentre, false);
                    return(View(_GroupCreateModel));
                }

                string[] time = _GroupCreateModel.BunchTime.Split(':');

                Group NewGroup = new Group
                {
                    name              = _GroupCreateModel.Name,
                    RideTime          = _GroupCreateModel.Hour.ToString() + ":" + _GroupCreateModel.Minute.ToString() + " " + _GroupCreateModel.AM_PM,
                    RideDays          = _CycleDays,
                    Location          = _Location,
                    Rides             = new List <Ride>(),
                    Routes            = new List <Route>(),
                    AverageSpeed      = _GroupCreateModel.AverageSpeed,
                    StartLocation     = _GroupCreateModel.StartLocation,
                    Description       = _GroupCreateModel.Description,
                    RideHour          = Convert.ToInt32(time[0]),
                    RideMinute        = Convert.ToInt32(time[1]),
                    CreatedBy         = currentUser.Id,
                    ModifiedTimeStamp = LocalNow,
                    CreatedTimeStamp  = LocalNow,
                    MapUrl            = _GroupCreateModel.MapUrl,
                    IsPrivate         = _GroupCreateModel.IsPrivate,
                    CreatedByName     = _GroupCreateModel.CreatorName,
                    Lat      = _GroupCreateModel.lat,
                    Lng      = _GroupCreateModel.lng,
                    Country  = _GroupCreateModel.country,
                    RideDate = DateTime.Now,
                    OneOff   = false
                };

                //Routes:Need to update this so that it can be a dynamic number of routes
                if (_GroupCreateModel.Route1Desc != string.Empty)
                {
                    Route _Route1 = new Route {
                        Desc = _GroupCreateModel.Route1Desc, Group = NewGroup, MapURL = _GroupCreateModel.Route1URL
                    };
                    _Routes.Add(_Route1);
                }

                if (_GroupCreateModel.Route2Desc != string.Empty)
                {
                    Route _Route2 = new Route {
                        Desc = _GroupCreateModel.Route2Desc, Group = NewGroup, MapURL = _GroupCreateModel.Route2URL
                    };
                    _Routes.Add(_Route2);
                }

                if (_GroupCreateModel.Route3Desc != string.Empty)
                {
                    Route _Route3 = new Route {
                        Desc = _GroupCreateModel.Route3Desc, Group = NewGroup, MapURL = _GroupCreateModel.Route3URL
                    };
                    _Routes.Add(_Route3);
                }

                NewGroup.Routes = _Routes;

                repository.AddGroup(NewGroup);
                repository.Save();

                NewGroup = repository.PopulateRideDates(NewGroup, TZone);
                repository.Save();

                if (_GroupCreateModel.IsPrivate)
                {
                    return(RedirectToAction("InviteOthersToPrivateBunch", "Group", new { GroupId = NewGroup.id }));
                }
            }

            Task T = new Task(() =>
            {
                UserHelper _UserHelp = new UserHelper();
                _UserHelp.SendNewGroupCreated(_GroupCreateModel.Name);
            });

            T.Start();

            return(RedirectToAction("Index", "Group"));
        }
Example #2
0
        public ActionResult EditGroup(EditGroupModel _EditGroupModel)
        {
            var currentUser             = idb.Users.Find(User.Identity.GetUserId());
            List <CycleDays> _CycleDays = new List <CycleDays>();
            Location         _Location  = repository.GetLocations()
                                          .Where(l => l.id == _EditGroupModel.LocationsId).FirstOrDefault();
            CultureHelper _CultureHelper = new CultureHelper(repository);
            TimeZoneInfo  TZone          = _CultureHelper.GetTimeZoneInfo(currentUser.LocationID);
            DateTime      LocalNow       = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TZone);
            Group         CurrentGroup   = repository.GetGroupByID(_EditGroupModel.GroupId);

            if (!CurrentGroup.OneOff)
            {
                foreach (DayOfWeekViewModel item in _EditGroupModel.DaysOfWeek)
                {
                    if (item.Checked)
                    {
                        CycleDays NewDay = new CycleDays {
                            DayOfWeek = item.Name
                        };
                        _CycleDays.Add(NewDay);
                    }
                }

                Group UpdatedGroup = new Group
                {
                    name              = _EditGroupModel.Name,
                    RideTime          = _EditGroupModel.Hour.ToString() + ":" + _EditGroupModel.Minute.ToString(),
                    RideDays          = _CycleDays,
                    Location          = _Location,
                    Rides             = new List <Ride>(),
                    AverageSpeed      = _EditGroupModel.AverageSpeed,
                    StartLocation     = _EditGroupModel.StartLocation,
                    RideHour          = _EditGroupModel.Hour,
                    RideMinute        = _EditGroupModel.Minute,
                    CreatedBy         = CurrentGroup.CreatedBy,
                    CreatedTimeStamp  = CurrentGroup.CreatedTimeStamp,
                    ModifiedTimeStamp = LocalNow,
                    MapUrl            = _EditGroupModel.MapUrl,
                    Description       = _EditGroupModel.Description,
                    id            = _EditGroupModel.GroupId,
                    IsPrivate     = _EditGroupModel.IsPrivate,
                    CreatedByName = _EditGroupModel.CreatorName,
                    OneOff        = _EditGroupModel.IsOneOff,
                    Routes        = _EditGroupModel.Routes
                };

                repository.UpdateGroup(UpdatedGroup);
                repository.Save();
                repository.UpdateRideTimes(UpdatedGroup, TZone);
                repository.Save();
            }
            else
            {
                Group UpdatedGroup = new Group
                {
                    name              = _EditGroupModel.Name,
                    RideTime          = _EditGroupModel.Hour.ToString() + ":" + _EditGroupModel.Minute.ToString(),
                    Location          = _Location,
                    AverageSpeed      = _EditGroupModel.AverageSpeed,
                    StartLocation     = _EditGroupModel.StartLocation,
                    RideHour          = _EditGroupModel.Hour,
                    RideMinute        = _EditGroupModel.Minute,
                    CreatedBy         = CurrentGroup.CreatedBy,
                    CreatedTimeStamp  = CurrentGroup.CreatedTimeStamp,
                    ModifiedTimeStamp = LocalNow,
                    MapUrl            = _EditGroupModel.MapUrl,
                    Description       = _EditGroupModel.Description,
                    id            = _EditGroupModel.GroupId,
                    IsPrivate     = _EditGroupModel.IsPrivate,
                    CreatedByName = _EditGroupModel.CreatorName,
                    OneOff        = _EditGroupModel.IsOneOff,
                    Routes        = _EditGroupModel.Routes
                };

                string   datestring = _EditGroupModel.Day.ToString("00") + "/" + _EditGroupModel.Month.ToString() + "/" + _EditGroupModel.Year.ToString() + " " + _EditGroupModel.Hour.ToString("00") + ":" + _EditGroupModel.Minute.ToString("00");
                DateTime da         = DateTime.ParseExact(datestring, "dd/MM/yyyy HH:mm", null);
                UpdatedGroup.RideDate = da;
                Ride RideToUpdate = repository.GetOneOffRideByGroupID(_EditGroupModel.GroupId);
                RideToUpdate.RideDate = da;

                repository.UpdateGroup(UpdatedGroup);
                repository.Save();
                repository.UpdateRideTimes(UpdatedGroup, TZone);
                repository.Save();
            }

            //Not needed if not able to change days would need to do some work here if allowed.
            //NewGroup = repository.PopulateRideDates(NewGroup);
            //repository.Save();

            return(RedirectToAction("Index", "Group"));
        }