private static void EditorController_Closing(object sender, CancelDocumentEventArgs e) { try { //stop timer for duration of processing //Timer4ProjectArea.Stop(); if ((Tracked.TrackingState != Tracked.TimerState.Started && Tracked.TrackingState != Tracked.TimerState.Unpaused && Tracked.TrackingState != Tracked.TimerState.Paused) || e.Document.ActiveFile.Id.ToString() != Tracked.TrackerDocumentId) { return; } try { Tracked.TrackingTimer.Stop(); var trackerProject = Helper.GetTrackerProjectFromDocument(e.Document); var clientProfileInfo = Common.GetClientFromId(trackerProject.ClientId); #region | add existing activity | var trackerProjectActivity = new TrackerProjectActivity { Id = Guid.NewGuid().ToString(), Name = e.Document.ActiveFile.Name }; #region | get activity type | var activitiesType = Tracked.Preferences.ActivitiesTypes[0]; ClientActivityType type = null; foreach (var activityType in Tracked.Preferences.ActivitiesTypes) { if (string.Compare(activityType.Name, e.Document.Mode.ToString(), StringComparison.OrdinalIgnoreCase) != 0) { continue; } activitiesType = activityType; if (clientProfileInfo != null) { foreach (var clientActivityType in clientProfileInfo.ClientActivities) { if (activitiesType.Id != clientActivityType.IdActivity) { continue; } if (clientActivityType.Activated) { type = clientActivityType; } break; } } break; } #endregion trackerProjectActivity.ActivityTypeId = activitiesType.Id; trackerProjectActivity.ActivityTypeName = activitiesType.Name; if (type != null) { trackerProjectActivity.ActivityTypeClientId = type.Id; } trackerProjectActivity.Billable = activitiesType.Billable; if (clientProfileInfo != null) { trackerProjectActivity.ClientId = clientProfileInfo.Id; trackerProjectActivity.ClientName = clientProfileInfo.ClientName; } trackerProjectActivity.Currency = activitiesType.Currency; trackerProjectActivity.DateStart = Tracked.TrackingStart; Tracked.TrackingEnd = DateTime.Now; trackerProjectActivity.DateEnd = Tracked.TrackingEnd; trackerProjectActivity.Description = activitiesType.Description; trackerProjectActivity.HourlyRate = activitiesType.HourlyRate; trackerProjectActivity.HourlyRateAdjustment = 0; trackerProjectActivity.Invoiced = false; trackerProjectActivity.InvoicedDate = Common.DateNull; trackerProjectActivity.Quantity = Convert.ToDecimal(trackerProjectActivity.DateEnd.Subtract(trackerProjectActivity.DateStart).TotalHours); var quantityElapsed = Convert.ToDecimal(Math.Round(Tracked.TrackingTimer.Elapsed.TotalHours, 3));//todo if (quantityElapsed < trackerProjectActivity.Quantity) { trackerProjectActivity.Quantity = quantityElapsed; } trackerProjectActivity.Status = @"New"; trackerProjectActivity.Total = Math.Round(trackerProjectActivity.Quantity * trackerProjectActivity.HourlyRate, 2); trackerProjectActivity.TrackerProjectId = trackerProject.Id; trackerProjectActivity.TrackerProjectName = trackerProject.Name; trackerProjectActivity.TrackerProjectStatus = trackerProject.ProjectStatus; if (Tracked.Preferences.TrackerConfirmActivities) { var trackProjectActivity = new Dialogs.TrackProjectActivity(); var trackerProjects = new List <TrackerProject> { trackerProject }; trackerProjectActivity.TrackerProjectId = trackerProject.Id; trackerProjectActivity.TrackerProjectName = trackerProject.Name; trackerProjectActivity.TrackerProjectStatus = trackerProject.ProjectStatus; trackProjectActivity.Project = trackerProject; trackProjectActivity.Projects = trackerProjects; trackProjectActivity.Activity = trackerProjectActivity; trackProjectActivity.IsEdit = true; trackProjectActivity.ShowDialog(); if (!trackProjectActivity.Saved) { return; } trackerProjectActivity.ActivityTypeClientId = trackProjectActivity.Activity.ActivityTypeClientId; trackerProjectActivity.ActivityTypeId = trackProjectActivity.Activity.ActivityTypeId; trackerProjectActivity.ActivityTypeName = trackProjectActivity.Activity.ActivityTypeName; trackerProjectActivity.Billable = trackProjectActivity.Activity.Billable; trackerProjectActivity.ClientId = trackProjectActivity.Activity.ClientId; trackerProjectActivity.ClientName = trackProjectActivity.Activity.ClientName; trackerProjectActivity.Currency = trackProjectActivity.Activity.Currency; trackerProjectActivity.DateEnd = trackProjectActivity.Activity.DateEnd; trackerProjectActivity.DateStart = trackProjectActivity.Activity.DateStart; trackerProjectActivity.Description = trackProjectActivity.Activity.Description; trackerProjectActivity.HourlyRate = trackProjectActivity.Activity.HourlyRate; trackerProjectActivity.HourlyRateAdjustment = trackProjectActivity.Activity.HourlyRateAdjustment; trackerProjectActivity.Invoiced = trackProjectActivity.Activity.Invoiced; trackerProjectActivity.InvoicedDate = trackProjectActivity.Activity.InvoicedDate; trackerProjectActivity.Name = trackProjectActivity.Activity.Name; trackerProjectActivity.Quantity = trackProjectActivity.Activity.Quantity; trackerProjectActivity.TrackerProjectId = trackProjectActivity.Activity.TrackerProjectId; trackerProjectActivity.TrackerProjectName = trackProjectActivity.Activity.TrackerProjectName; trackerProjectActivity.TrackerProjectStatus = trackProjectActivity.Activity.TrackerProjectStatus; trackerProjectActivity.Total = trackProjectActivity.Activity.Total; trackerProject.ProjectActivities.Add(trackerProjectActivity); SettingsSerializer.SaveSettings(Tracked.Preferences); Tracked.TarckerCheckNewActivityAdded = true; Tracked.TarckerCheckNewActivityId = trackerProjectActivity.Id; } else { trackerProject.ProjectActivities.Add(trackerProjectActivity); SettingsSerializer.SaveSettings(Tracked.Preferences); Tracked.TarckerCheckNewActivityAdded = true; Tracked.TarckerCheckNewActivityId = trackerProjectActivity.Id; } #endregion } finally { #region | null tracker cache | Tracked.Reset(); Tracked.TrackingState = Tracked.TimerState.Started; //ProjectActivityStartTrackerEnabled = false; //ProjectActivityStopTrackerEnabled = true; Tracked.TrackingIsDirtyC0 = true; Tracked.TrackingIsDirtyC1 = true; Tracked.TrackingIsDirtyC2 = true; #endregion } } catch (Exception) { // ignored } finally { //restart timer //Timer4ProjectArea.Start(); } }
public static void stop_tracking(EditorController editorController, Timer timer) { try { timer.Stop(); Tracked.TrackingState = Tracked.TimerState.Stopped; Tracked.TrackingTimer.Stop(); Tracked.TrackingEnd = DateTime.Now; Tracked.TrackingPaused.Stop(); try { if (Tracked.TrackerActivityName.Trim() == string.Empty) { return; } var trackerProject = Structures.Common.GetProjectFromId(Tracked.TrackerProjectId); var clientProfileInfo = Structures.Common.GetClientFromId(trackerProject.ClientId); #region | add existing activity | var trackerProjectActivity = new Structures.TrackerProjectActivity { Id = Guid.NewGuid().ToString(), Name = Tracked.TrackerActivityName }; #region | get activity type | var activitiesType = Tracked.Preferences.ActivitiesTypes[0]; Structures.ClientActivityType clientActivityType = null; foreach (var activityType in Tracked.Preferences.ActivitiesTypes) { if (string.Compare(activityType.Name, Tracked.TrackerActivityType, StringComparison.OrdinalIgnoreCase) != 0) { continue; } activitiesType = activityType; if (clientProfileInfo != null) { foreach (var type in clientProfileInfo.ClientActivities) { if (activitiesType.Id != type.IdActivity) { continue; } if (type.Activated) { clientActivityType = type; } break; } } break; } #endregion trackerProjectActivity.ActivityTypeId = activitiesType.Id; trackerProjectActivity.ActivityTypeName = activitiesType.Name; if (clientActivityType != null) { trackerProjectActivity.ActivityTypeClientId = clientActivityType.Id; } trackerProjectActivity.Billable = activitiesType.Billable; if (clientProfileInfo != null) { trackerProjectActivity.ClientId = clientProfileInfo.Id; trackerProjectActivity.ClientName = clientProfileInfo.ClientName; } trackerProjectActivity.Currency = activitiesType.Currency; trackerProjectActivity.DateStart = Tracked.TrackingStart; Tracked.TrackingEnd = DateTime.Now; trackerProjectActivity.DateEnd = Tracked.TrackingEnd; trackerProjectActivity.Description = activitiesType.Description; trackerProjectActivity.HourlyRate = activitiesType.HourlyRate; trackerProjectActivity.HourlyRateAdjustment = 0; trackerProjectActivity.Invoiced = false; trackerProjectActivity.InvoicedDate = Structures.Common.DateNull; trackerProjectActivity.Quantity = Convert.ToDecimal(trackerProjectActivity.DateEnd.Subtract(trackerProjectActivity.DateStart).TotalHours); var quantityElapsed = Convert.ToDecimal(Math.Round(Tracked.TrackingTimer.Elapsed.TotalHours, 3)); if (quantityElapsed < trackerProjectActivity.Quantity) { trackerProjectActivity.Quantity = quantityElapsed; } trackerProjectActivity.Status = @"New"; trackerProjectActivity.Total = Math.Round(trackerProjectActivity.Quantity * trackerProjectActivity.HourlyRate, 2); trackerProjectActivity.TrackerProjectId = trackerProject.Id; trackerProjectActivity.TrackerProjectName = trackerProject.Name; trackerProjectActivity.TrackerProjectStatus = trackerProject.ProjectStatus; if (Tracked.Preferences.TrackerConfirmActivities) { var trackProjectActivity = new Dialogs.TrackProjectActivity(); var trackerProjects = new List <Structures.TrackerProject> { trackerProject }; trackerProjectActivity.TrackerProjectId = trackerProject.Id; trackerProjectActivity.TrackerProjectName = trackerProject.Name; trackerProjectActivity.TrackerProjectStatus = trackerProject.ProjectStatus; trackProjectActivity.Project = trackerProject; trackProjectActivity.Projects = trackerProjects; trackProjectActivity.Activity = trackerProjectActivity; trackProjectActivity.IsEdit = true; trackProjectActivity.ShowDialog(); if (!trackProjectActivity.Saved) { return; } trackerProjectActivity.ActivityTypeClientId = trackProjectActivity.Activity.ActivityTypeClientId; trackerProjectActivity.ActivityTypeId = trackProjectActivity.Activity.ActivityTypeId; trackerProjectActivity.ActivityTypeName = trackProjectActivity.Activity.ActivityTypeName; trackerProjectActivity.Billable = trackProjectActivity.Activity.Billable; trackerProjectActivity.ClientId = trackProjectActivity.Activity.ClientId; trackerProjectActivity.ClientName = trackProjectActivity.Activity.ClientName; trackerProjectActivity.Currency = trackProjectActivity.Activity.Currency; trackerProjectActivity.DateEnd = trackProjectActivity.Activity.DateEnd; trackerProjectActivity.DateStart = trackProjectActivity.Activity.DateStart; trackerProjectActivity.Description = trackProjectActivity.Activity.Description; trackerProjectActivity.HourlyRate = trackProjectActivity.Activity.HourlyRate; trackerProjectActivity.HourlyRateAdjustment = trackProjectActivity.Activity.HourlyRateAdjustment; trackerProjectActivity.Invoiced = trackProjectActivity.Activity.Invoiced; trackerProjectActivity.InvoicedDate = trackProjectActivity.Activity.InvoicedDate; trackerProjectActivity.Name = trackProjectActivity.Activity.Name; trackerProjectActivity.Quantity = trackProjectActivity.Activity.Quantity; trackerProjectActivity.TrackerProjectId = trackProjectActivity.Activity.TrackerProjectId; trackerProjectActivity.TrackerProjectName = trackProjectActivity.Activity.TrackerProjectName; trackerProjectActivity.TrackerProjectStatus = trackProjectActivity.Activity.TrackerProjectStatus; trackerProjectActivity.Total = trackProjectActivity.Activity.Total; trackerProject.ProjectActivities.Add(trackerProjectActivity); Structures.SettingsSerializer.SaveSettings(Tracked.Preferences); Tracked.TarckerCheckNewActivityAdded = true; Tracked.TarckerCheckNewActivityId = trackerProjectActivity.Id; } else { trackerProject.ProjectActivities.Add(trackerProjectActivity); Structures.SettingsSerializer.SaveSettings(Tracked.Preferences); Tracked.TarckerCheckNewActivityAdded = true; Tracked.TarckerCheckNewActivityId = trackerProjectActivity.Id; } #endregion } finally { Tracked.Reset(); } } finally { Tracked.TrackingIsDirtyC0 = true; Tracked.TrackingIsDirtyC1 = true; Tracked.TrackingIsDirtyC2 = true; timer.Start(); } }