public void UpdateZone(Zone zone)
        {
            var zoneToUpdate = db.Zones.Find(zone.ZoneId);

            if (zoneToUpdate != null)
            {
                zoneToUpdate.Code               = zone.Code;
                zoneToUpdate.PrecinctCode       = zone.PrecinctCode;
                zoneToUpdate.Status             = zone.Status;
                zoneToUpdate.AllowOrder         = zone.AllowOrder;
                zoneToUpdate.AllowSpecial       = zone.AllowSpecial;
                zoneToUpdate.AllowLeads         = zone.AllowLeads;
                zoneToUpdate.FirstDateOfFibre   = zone.FirstDateOfFibre;
                zoneToUpdate.LastDateOfFibre    = zone.LastDateOfFibre;
                zoneToUpdate.TimeToInstallation = zone.TimeToInstallation;
                zoneToUpdate.NoHousesInZone     = zone.NoHousesInZone;
                zoneToUpdate.NodeId             = zone.NodeId;
                zoneToUpdate.NodeName           = zone.NodeName;
                zoneToUpdate.NodeLatitude       = zone.NodeLatitude;
                zoneToUpdate.NodeLongitude      = zone.NodeLongitude;

                db.SaveChanges();
                ZoneSync.ProcessUsers(zone.PrecinctCode);
            }
        }
 public void CreateZone(Zone zone)
 {
     zone.Status = TrenchingStatus.Undefined;
     db.Zones.Add(zone);
     db.SaveChanges();
     ZoneSync.ProcessUsers(zone.PrecinctCode);
 }
Пример #3
0
        public void UpdateProfile(User user)
        {
            #region Client ISP Contacts
            //remove ISP Contacts that weren't selected
            user.ClientISPContacts = user.ClientISPContacts.Where(c => c.IsISPSelected).ToList();

            //find and remove all the clientIspContacts and replace them with the new ones
            var clientISPContacts = db.ClientISPContacts.Where(c => c.UserId == user.Id);
            if (clientISPContacts.Any())
            {
                db.ClientISPContacts.RemoveRange(clientISPContacts);
            }
            #endregion

            #region Client Contact Methods
            //remove ContactMethods that aren't selected
            user.ClientContactMethods = user.ClientContactMethods.Where(x => x.IsSelected).ToList();

            //find and remove all the clientIspContacts and replace them with the new ones
            var contactMethods = db.ClientContactMethods.Where(x => x.UserId == user.Id);
            if (contactMethods.Any())
            {
                db.ClientContactMethods.RemoveRange(contactMethods);
            }
            #endregion

            var profile = db.Users.First(u => u.Id == user.Id);
            ZoneSync.CheckAndUpdateUserForZone(user, db);

            profile.FirstName            = user.FirstName;
            profile.LastName             = user.LastName;
            profile.PhoneNumber          = user.PhoneNumber;
            profile.Landline             = user.Landline;
            profile.Address              = user.Address;
            profile.Latitude             = user.Latitude;
            profile.Longitude            = user.Longitude;
            profile.HasAltContact        = user.HasAltContact;
            profile.LocationId           = user.LocationId;
            profile.EstateId             = user.EstateId;
            profile.ISPCommsOptOutStatus = user.ISPCommsOptOutStatus;
            profile.FFCommsOptOutStatus  = user.FFCommsOptOutStatus;
            profile.ClientISPContacts    = user.ClientISPContacts;
            profile.ClientContactMethods = user.ClientContactMethods;

            if (user.HasAltContact)
            {
                profile.AltFirstName = user.AltFirstName;
                profile.AltLastName  = user.AltLastName;
                profile.AltEmail     = user.AltEmail;
                profile.AltCellNo    = user.AltCellNo;
                profile.AltLandline  = user.AltLandline;
            }

            db.SaveChanges();
        }
        public void DeleteZone(int zoneId)
        {
            var zoneToDelete = db.Zones.Find(zoneId);

            if (zoneToDelete != null)
            {
                zoneToDelete.IsDeleted = true;
                db.SaveChanges();
                ZoneSync.ProcessUsers(zoneToDelete.PrecinctCode);
            }
        }
        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 void Configuration(IAppBuilder app)
        {
            GlobalConfiguration.Configuration.UseSqlServerStorage("FrogFootDb");
            app.UseHangfireDashboard();
            app.UseHangfireServer();
            ConfigureAuth(app);

            string emailRemonderCronTime = ConfigurationManager.AppSettings["EmailReminderCronTime"];

            RecurringJob.AddOrUpdate(() => EmailSender.SendReminderToISPs(), emailRemonderCronTime);

            string zonesChangedCheckTime = ConfigurationManager.AppSettings["ZonesChangedCheckTime"];

            RecurringJob.AddOrUpdate(() => ZoneSync.CheckLastModDate(), zonesChangedCheckTime);
        }
Пример #7
0
        public void EditUser(User user)
        {
            try
            {
                var userToUpdate = db.Users.Find(user.Id);
                ZoneSync.CheckAndUpdateUserForZone(user, db);

                userToUpdate.FirstName               = user.FirstName;
                userToUpdate.LastName                = user.LastName;
                userToUpdate.PhoneNumber             = user.PhoneNumber;
                userToUpdate.IsUserTypeAdmin         = user.IsUserTypeAdmin;
                userToUpdate.ISPId                   = user.ISPId;
                userToUpdate.Latitude                = user.Latitude;
                userToUpdate.Longitude               = user.Longitude;
                userToUpdate.Address                 = user.Address;
                userToUpdate.LocationId              = user.LocationId;
                userToUpdate.EstateId                = user.EstateId;
                userToUpdate.EmailConfirmed          = user.EmailConfirmed;
                userToUpdate.UsePrecinctCodeForChamp = user.UsePrecinctCodeForChamp;
                userToUpdate.ISPCommsOptOutStatus    = user.ISPCommsOptOutStatus;
                userToUpdate.FFCommsOptOutStatus     = user.FFCommsOptOutStatus;

                var manager = new UserManager <User>(new UserStore <User>(db));
                if (!userToUpdate.IsChamp && user.IsChamp) //if the existing user isn't in champ role but the edited user is - add to role
                {
                    manager.AddToRole(user.Id, "Champ");
                }
                else if (userToUpdate.IsChamp && !user.IsChamp) //if the existing user is champ role but the edited user isn't - remove from role
                {
                    manager.RemoveFromRole(user.Id, "Champ");
                }

                userToUpdate.IsChamp = user.IsChamp;

                db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
            }
        }
Пример #8
0
        public UserViewModel CreateUser(User user, UserType type)
        {
            try
            {
                var manager = new UserManager <User>(new UserStore <User>(db));
                manager.UserValidator = new UserValidator <User>(manager)
                {
                    AllowOnlyAlphanumericUserNames = false
                };

                var password = PasswordGenerator.Generate(6);
                var result   = manager.Create(user, password);
                if (result.Succeeded)
                {
                    IdentityResult response = manager.AddToRole(user.Id, type.ToString());

                    if (user.IsChamp)
                    {
                        manager.AddToRole(user.Id, "Champ");
                    }

                    ZoneSync.ProcessUser(user.Id);

                    return(new UserViewModel
                    {
                        User = db.Users.Find(user.Id),
                        UserPassword = password
                    });
                }
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
            }
            return(null);
        }
Пример #9
0
        public void EditUserFromOrder(User user)
        {
            try
            {
                var userToUpdate = db.Users.Find(user.Id);
                ZoneSync.CheckAndUpdateUserForZone(user, db);

                userToUpdate.FirstName   = user.FirstName;
                userToUpdate.LastName    = user.LastName;
                userToUpdate.PhoneNumber = user.PhoneNumber;
                userToUpdate.Landline    = user.Landline;
                userToUpdate.Latitude    = user.Latitude;
                userToUpdate.Longitude   = user.Longitude;
                userToUpdate.Address     = user.Address;

                userToUpdate.IsOwner          = user.IsOwner;
                userToUpdate.OwnerName        = user.OwnerName;
                userToUpdate.OwnerPhoneNumber = user.OwnerPhoneNumber;
                userToUpdate.OwnerEmail       = user.OwnerEmail;

                if (user.HasAltContact)
                {
                    userToUpdate.AltFirstName = user.AltFirstName;
                    userToUpdate.AltLastName  = user.AltLastName;
                    userToUpdate.AltCellNo    = user.AltCellNo;
                    userToUpdate.AltLandline  = user.AltLandline;
                    userToUpdate.AltEmail     = user.AltEmail;
                }

                db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
            }
        }
Пример #10
0
        public ClientOrderStatusDto GetUserOrderStatus(string email, decimal?latitude, decimal?longitude)
        {
            db.Configuration.ProxyCreationEnabled = false;

            var response = new ClientOrderStatusDto();
            var user     = db.Users.Include(u => u.Location).Include(u => u.Zone).FirstOrDefault(u => u.Email == email);

            if (user != null)
            {
                ZoneSync.ProcessUser(user.Id);
                response.UserAllowedToOrder = user.Zone.AllowOrder;
                var latestOrder = db.Orders.Where(o => o.ClientId == user.Id && o.Status != OrderStatus.Canceled).OrderByDescending(o => o.CreatedDate).FirstOrDefault();
                response.UserHasOrder = latestOrder != null;
                if ((user.Location != null && !user.Location.AllowOrder) && (user.Zone != null && !user.Zone.AllowOrder))
                {
                    response.UserAllowedToOrder = false;
                }
                response.Client        = user;
                response.Client.Orders = null; //for circular json serialization
                var zone = user.Zone;
                if (zone != null && zone.AllowSpecial)
                {
                    //check if zone special applies
                    switch (zone.Status)
                    {
                    case TrenchingStatus.Undefined:
                        response.Special = db.Specials.First(s => s.SpecialType == SpecialType.EarlyBird);
                        break;

                    case TrenchingStatus.HasDates:
                        response.Special = db.Specials.First(s => s.SpecialType == SpecialType.JustInTime);
                        break;
                    }
                }
            }
            else if (latitude != null && longitude != null)
            {
                var zones = db.Zones.Where(z => !z.IsDeleted);

                string lat = latitude.ToString().Replace(",", ".").Replace("-", "");
                string lng = longitude.ToString().Replace(",", ".").Replace("-", "");

                const string url = "http://maps.frogfoot.net/ftth/check";
                using (var client = new WebClient())
                {
                    string result = client.DownloadString(url + string.Format("?ll=-{0},{1}", lat, lng));

                    //if there is a zone that matches the zone code of the returned result the assign that zone to the user then save.
                    dynamic data         = JObject.Parse(result);
                    string  precinctCode = data["precinct-zone"];

                    if (data["possible"] == true && !string.IsNullOrEmpty(precinctCode))
                    {
                        var zone = zones.FirstOrDefault(z => z.Code == precinctCode);
                        if (zone != null)
                        {
                            response.UserAllowedToOrder = zone.AllowOrder;

                            //check if zone special applies
                            if (zone.AllowSpecial)
                            {
                                switch (zone.Status)
                                {
                                case TrenchingStatus.Undefined:
                                    response.Special = db.Specials.First(s => s.SpecialType == SpecialType.EarlyBird);
                                    break;

                                case TrenchingStatus.HasDates:
                                    response.Special = db.Specials.First(s => s.SpecialType == SpecialType.JustInTime);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            return(response);
        }
 public ActionResult SyncPrecinct(string precinctCode)
 {
     ZoneSync.ProcessUsers(precinctCode);
     return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
 }
        public async Task <ActionResult> Register(RegisterViewModel model, bool?quickOrder)
        {
            //check recaptcha here
            //if (!ModelState.IsValid) return RedirectToAction("Register", new {model, quickOrder});

            if (ModelState.IsValid)
            {
                var user = new User
                {
                    UserName       = model.Email,
                    Email          = model.Email,
                    FirstName      = model.FirstName,
                    LastName       = model.LastName,
                    PhoneNumber    = model.PhoneNumber,
                    Landline       = model.Landline,
                    LocationId     = model.LocationId != -1 ? model.LocationId : null,
                    EstateId       = model.EstateId,
                    Address        = model.Address,
                    Latitude       = model.Latitude,
                    Longitude      = model.Longitude,
                    CreatedDate    = DateTime.Now,
                    EmailConfirmed = true,
                    HasAltContact  = false
                };

                if (model.HasAltContact)
                {
                    user.HasAltContact = model.HasAltContact;
                    user.AltFirstName  = model.AltFirstName;
                    user.AltLastName   = model.AltLastName;
                    user.AltEmail      = model.AltEmail;
                    user.AltCellNo     = model.AltCellNo;
                    user.AltLandline   = model.AltLandline;
                }

                User existingUser = UserManager.FindByEmail(model.Email);

                if (existingUser == null)
                {
                    //process the user's ISP contact options
                    user.ClientISPContacts    = CreateISPContactList(model.SelectedISPIds, user.Id, quickOrder);
                    user.ClientContactMethods = CreateClientContactMethods(user.Id);

                    IdentityResult result = await UserManager.CreateAsync(user, model.Password);

                    IdentityResult response = await UserManager.AddToRoleAsync(user.Id, UserType.Client.ToString());

                    if (response.Succeeded)
                    {
                        //taken out because email validation has been scrapped
                        //string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                        //var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);

                        //resolve users Zone
                        ZoneSync.ProcessUser(user.Id);

                        //if its a user doing quick order the log them in and redirect to Packages page
                        if (quickOrder == true)
                        {
                            await SignInManager.SignInAsync(user, true, true);

                            //check if the user has any zones. If precinct has no zones then redirect user to home page
                            var userLocation     = svc.GetLocations().FirstOrDefault(l => l.LocationId == user.LocationId);
                            var precinctHasZones = userLocation != null && svc.CheckPrecinctHasZones(userLocation.PrecinctCode);
                            if (!precinctHasZones && !svc.CheckUserCanOrder(user.Id))
                            {
                                TempData["BlockUserOrder"] = true;
                                return(RedirectToAction("Index", "Portal", new { area = "Client", }));
                            }

                            return(RedirectToAction("Packages", "Portal", new { area = "Client", isQuickOrder = quickOrder }));
                        }

                        var email = CreateUserRegisterEmail(user, model.LocationId, model.SuburbName, model.EstateName);
                        EmailSender.SendEmail(email, user);
                    }

                    TempData["RegUserFirstName"] = user.FirstName;
                    return(RedirectToAction("Register", "Account"));
                }
                else
                {
                    if (existingUser.IsDeleted)
                    {
                        //enable user again
                        svc.EnableUser(user);

                        ZoneSync.ProcessUser(user.Id);

                        //send the user new log in credentials
                        string code = await UserManager.GeneratePasswordResetTokenAsync(existingUser.Id);

                        var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                        await UserManager.SendEmailAsync(user.Id, "Frogfoot Fibre account activation",
                                                         "Dear " + user.FirstName + ", " +
                                                         "<br/><br/>We have reactivated your account. Please choose your password by clicking <a href=\"" + callbackUrl + "\">here</a>" +
                                                         "<br/><br/> Warm regards," +
                                                         "<br/><br/> The Frogfoot Fibre team");

                        TempData["UserExistsMessage"] =
                            "An account with your email exists but has been deleted. " +
                            "<br/><br/>We have enabled your account and sent you a confirmation email for you to log on";
                    }
                    else
                    {
                        TempData["UserExistsMessage"] = "An account with your email address has already been registered.";
                    }
                    return(RedirectToAction("Register", "Account"));
                }
            }
            return(RedirectToAction("Index", "Home"));
        }