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); }
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); }
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); } } } }
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); }
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); } } } }
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")); }