public static ErrorStack ToProjectLocalTime(this ErrorStack errorStack, Project project) { if (errorStack == null) return null; if (errorStack.DateFixed.HasValue) errorStack.DateFixed = TimeZoneInfo.ConvertTime(errorStack.DateFixed.Value, project.DefaultTimeZone()); errorStack.FirstOccurrence = TimeZoneInfo.ConvertTime(errorStack.FirstOccurrence, project.DefaultTimeZone()); errorStack.LastOccurrence = TimeZoneInfo.ConvertTime(errorStack.LastOccurrence, project.DefaultTimeZone()); return errorStack; }
public ActionResult Add(ProjectModel model) { ViewBag.Organizations = Organizations; ViewBag.HasOrganizations = Organizations.Any(); ViewBag.TimeZones = TimeZoneInfo.GetSystemTimeZones(); #region Validation Organization organization = null; if (!String.IsNullOrEmpty(model.OrganizationName)) { Organization existing = Organizations.FirstOrDefault(o => o.Name == model.OrganizationName); organization = existing ?? new Organization { Name = model.OrganizationName.Trim() }; } else if (!String.IsNullOrEmpty(model.OrganizationId)) { organization = Organizations.FirstOrDefault(o => o.Id == model.OrganizationId); ModelState state = ModelState["OrganizationName"]; if (state != null) state.Errors.Clear(); } if (!ModelState.IsValid) return View(model); if (organization == null) { ModelState.AddModelError("OrganizationName", "Organization Name is required."); return View(model); } if (!String.IsNullOrEmpty(organization.Id) && Projects.Count(p => p.OrganizationId == organization.Id && String.Equals(p.Name, model.Name, StringComparison.OrdinalIgnoreCase)) > 0) { ModelState.AddModelError("Name", "A project with this name already exists."); return View(model); } #endregion if (String.IsNullOrEmpty(organization.Id)) { if (!_billingManager.CanAddOrganization(User.UserEntity)) { ModelState.AddModelError(String.Empty, "Please upgrade your plan to add an additional organization."); return View(model); } _billingManager.ApplyBillingPlan(organization, Settings.Current.EnableBilling ? BillingManager.FreePlan : BillingManager.UnlimitedPlan, User.UserEntity); organization = _organizationRepository.Add(organization, true); User user = _userRepository.GetById(User.UserEntity.Id); user.OrganizationIds.Add(organization.Id); _userRepository.Update(user); _notificationSender.OrganizationUpdated(organization.Id); } var project = new Project { Name = model.Name, TimeZone = model.TimeZone, OrganizationId = organization.Id }; project.NextSummaryEndOfDayTicks = TimeZoneInfo.ConvertTime(DateTime.Today.AddDays(1), project.DefaultTimeZone()).ToUniversalTime().Ticks; project.ApiKeys.Add(Guid.NewGuid().ToString("N").ToLower()); project.AddDefaultOwnerNotificationSettings(User.UserEntity.Id); if (!_billingManager.CanAddProject(project)) { ModelState.AddModelError(String.Empty, "Please upgrade your plan to add an additional project."); return View(model); } project = _projectRepository.Add(project); _organizationRepository.IncrementStats(project.OrganizationId, projectCount: 1); _notificationSender.ProjectUpdated(organization.Id, project.Id); return RedirectToAction("Configure", "Project", new { id = project.Id }); }
public void CreateSampleOrganizationAndProject(string userId) { if (_projectRepository.GetByApiKey(SAMPLE_API_KEY) != null) return; User user = _userRepository.GetByIdCached(userId); var organization = new Organization { Name = "Acme" }; _billingManager.ApplyBillingPlan(organization, BillingManager.UnlimitedPlan, user); organization = _organizationRepository.Add(organization); var project = new Project { Name = "Disintegrating Pistol", TimeZone = TimeZone.CurrentTimeZone.StandardName, OrganizationId = organization.Id }; project.NextSummaryEndOfDayTicks = TimeZoneInfo.ConvertTime(DateTime.Today.AddDays(1), project.DefaultTimeZone()).ToUniversalTime().Ticks; project.ApiKeys.Add(SAMPLE_API_KEY); project.Configuration.Settings.Add("IncludeConditionalData", "true"); project.AddDefaultOwnerNotificationSettings(userId); project = _projectRepository.Add(project); _organizationRepository.IncrementStats(project.OrganizationId, projectCount: 1); user.OrganizationIds.Add(organization.Id); _userRepository.Update(user); }
public void CreateSampleOrganizationAndProject(string userId) { if (_tokenRepository.GetById(SAMPLE_API_KEY) != null) return; User user = _userRepository.GetById(userId, true); var organization = new Organization { Id = "537650f3b77efe23a47914f3", Name = "Acme" }; _billingManager.ApplyBillingPlan(organization, BillingManager.UnlimitedPlan, user); organization = _organizationRepository.Add(organization); var project = new Project { Id = "537650f3b77efe23a47914f4", Name = "Disintegrating Pistol", TimeZone = TimeZone.CurrentTimeZone.StandardName, OrganizationId = organization.Id }; project.NextSummaryEndOfDayTicks = TimeZoneInfo.ConvertTime(DateTime.Today.AddDays(1), project.DefaultTimeZone()).ToUniversalTime().Ticks; project.Configuration.Settings.Add("IncludeConditionalData", "true"); project.AddDefaultOwnerNotificationSettings(userId); project = _projectRepository.Add(project); _tokenRepository.Add(new Token { Id = SAMPLE_API_KEY, OrganizationId = organization.Id, ProjectId = project.Id, ExpiresUtc = DateTime.UtcNow.AddYears(100), CreatedUtc = DateTime.UtcNow, ModifiedUtc = DateTime.UtcNow, Type = TokenType.Access }); _tokenRepository.Add(new Token { Id = SAMPLE_USER_API_KEY, OrganizationId = organization.Id, UserId = user.Id, ExpiresUtc = DateTime.UtcNow.AddYears(100), CreatedUtc = DateTime.UtcNow, ModifiedUtc = DateTime.UtcNow, Type = TokenType.Access }); _organizationRepository.IncrementStats(project.OrganizationId, projectCount: 1); user.OrganizationIds.Add(organization.Id); _userRepository.Save(user); }