private void toolStripButton_addActivity_Click(object sender, EventArgs e) { var activityType = new ActivityType { IsEdit = false }; var activityNew = new Structures.ActivityType { Id = Guid.NewGuid().ToString() }; activityType.Activity = activityNew; activityType.DefaultCurrency = settings.DefaultCurrency; activityType.ShowDialog(); if (activityType.Saved) { var foundName = (from ListViewItem itmx in listView_activities.Items select(Structures.ActivityType) itmx.Tag).Any(activity => string.Compare(activity.Name, activityType.Activity.Name, StringComparison.OrdinalIgnoreCase) == 0); if (foundName) { MessageBox.Show(this, @"Unable to save the Activity; name already exists!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { settings.ActivitiesTypes.Add(activityType.Activity); AddActivityToList(activityType.Activity); foreach (var profileInfo in settings.Clients) { var clientActivityType = new ClientActivityType { Id = Guid.NewGuid().ToString(), IdActivity = activityType.Activity.Id, Activated = activityType.checkBox_activateForAllClients.Checked, HourlyRateClient = activityType.Activity.HourlyRate, HourlyRateAdjustment = 0 }; profileInfo.ClientActivities.Add(clientActivityType); } treeView_clients_AfterSelect(null, null); } } label_activities_count.Text = @"Activities: " + listView_activities.Items.Count; }
private void toolStripButton_addClient_Click(object sender, EventArgs e) { var clientProfile = new ClientProfile { IsEdit = false }; var cpiNew = new ClientProfileInfo { Id = Guid.NewGuid().ToString() }; clientProfile.ClientProfileInfo = cpiNew; clientProfile.ShowDialog(); if (clientProfile.Saved) { var foundName = (from TreeNode treeNode in treeView_clients.Nodes select(ClientProfileInfo) treeNode.Tag).Any(clientProfileInfo => string.Compare(clientProfileInfo.ClientName, clientProfile.ClientProfileInfo.ClientName, StringComparison.OrdinalIgnoreCase) == 0 && clientProfileInfo.Id != clientProfile.ClientProfileInfo.Id); if (foundName) { MessageBox.Show(this, @"Unable to save the company profile; name already exists!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { foreach (var activityType in settings.ActivitiesTypes) { var clientActivityType = new ClientActivityType { Id = Guid.NewGuid().ToString(), IdActivity = activityType.Id, Activated = true, HourlyRateClient = activityType.HourlyRate, HourlyRateAdjustment = 0 }; clientProfile.ClientProfileInfo.ClientActivities.Add(clientActivityType); } settings.Clients.Add(clientProfile.ClientProfileInfo); AddCompanyToList(clientProfile.ClientProfileInfo); } } label_clientCount.Text = @"Clients: " + treeView_clients.Nodes.Count; }
private void initialize_activity_types_combobox() { comboBox_activity_type.BeginUpdate(); comboBox_activity_type.Items.Clear(); comboBox_activity_type.Items.Add(new ComboboxItem("(none)", null)); foreach (var activityType in Tracked.Preferences.ActivitiesTypes) { ClientActivityType clientActivityType = null; #region | get client activity type | if (Client != null) { foreach (var type in Client.ClientActivities) { if (activityType.Id != type.IdActivity) { continue; } if (type.Activated) { clientActivityType = type; } break; } if (clientActivityType != null) { comboBox_activity_type.Items.Add(new ComboboxItem(activityType.Name, new object[] { activityType, clientActivityType })); } } else { comboBox_activity_type.Items.Add(new ComboboxItem(activityType.Name, new object[] { activityType, null })); } #endregion } comboBox_activity_type.EndUpdate(); }
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(); } }
private void TrackProjectActivity_Load(object sender, EventArgs e) { IsLoading = true; if (IsMerge) { Text += @" (Merge)"; } else { Text += IsEdit ? " (Edit)" : " (New)"; } #region | get company profile | foreach (var clientProfileInfo in Tracked.Preferences.Clients) { if (clientProfileInfo.Id != Project.ClientId) { continue; } Client = clientProfileInfo; break; } #endregion textBox_client.Text = Client != null ? Client.ClientName : "[no client]"; initialize_projects_combobox(); #region | set project | var selectedProjectIndex = 0; for (var i = 0; i < comboBox_projects.Items.Count; i++) { var comboboxItem = (ComboboxItem)comboBox_projects.Items[i]; if (comboboxItem.Value == null) { continue; } var trackerProject = (TrackerProject)comboboxItem.Value; if (trackerProject.Id != Project.Id) { continue; } selectedProjectIndex = i; break; } comboBox_projects.SelectedIndex = selectedProjectIndex; #endregion initialize_activity_types_combobox(); #region | set activity type | var selectedTypeIndex = 0; for (var i = 0; i < comboBox_activity_type.Items.Count; i++) { var comboboxItem = (ComboboxItem)comboBox_activity_type.Items[i]; if (comboboxItem.Value == null) { continue; } var objs = (object[])comboboxItem.Value; Structures.ActivityType activityType = null; if (objs[0] != null) { activityType = (Structures.ActivityType)objs[0]; } ClientActivityType clientActivityType = null; if (objs[1] != null) { clientActivityType = (ClientActivityType)objs[1]; } if (Client != null) { if (clientActivityType == null) { continue; } if (clientActivityType.Id != Activity.ActivityTypeClientId) { continue; } selectedTypeIndex = i; break; } if (activityType != null && activityType.Id != Activity.ActivityTypeId) { continue; } selectedTypeIndex = i; break; } comboBox_activity_type.SelectedIndex = selectedTypeIndex; #endregion textBox_name.Text = Activity.Name; textBox_description.Text = Activity.Description; #region | dates/times | if (!IsEdit) { dateTimePicker_start_date.Value = DateTime.Now; dateTimePicker_start_hours.Value = DateTime.Now; dateTimePicker_end_date.Value = DateTime.Now; dateTimePicker_end_hours.Value = DateTime.Now; } else { dateTimePicker_start_date.Value = Activity.DateStart; dateTimePicker_start_hours.Value = Activity.DateStart; dateTimePicker_end_date.Value = Activity.DateEnd; dateTimePicker_end_hours.Value = Activity.DateEnd; } #endregion comboBox_status.SelectedItem = Activity.Status; checkBox_invoiced.Checked = Activity.Invoiced; dateTimePicker_date_invoiced.Value = Activity.InvoicedDate != Common.DateNull ? Activity.InvoicedDate : DateTime.Now; checkBox_billable.Checked = Activity.Billable; numericUpDown_hourly_rate_client.Value = Activity.HourlyRate; numericUpDown_quantity.Value = Activity.Quantity; label_total.Text = Math.Round(numericUpDown_quantity.Value * numericUpDown_hourly_rate_client.Value, 2).ToString(CultureInfo.InvariantCulture); textBox_name.Select(); checkBox_invoiced_CheckedChanged(null, null); CheckActivatedControls(); IsLoading = false; CheckAdjustment(); }
private void CheckAdjustment() { var comboboxItem = (ComboboxItem)comboBox_activity_type.SelectedItem; if (comboboxItem.Value != null) { var objs = (object[])comboboxItem.Value; Structures.ActivityType activityType = null; if (objs[0] != null) { activityType = (Structures.ActivityType)objs[0]; } ClientActivityType clientActivityType = null; if (objs[1] != null) { clientActivityType = (ClientActivityType)objs[1]; } Activity.HourlyRate = numericUpDown_hourly_rate_client.Value; if (activityType == null) { return; } Activity.Currency = activityType.Currency; if (clientActivityType != null) { Activity.HourlyRateAdjustment = Activity.HourlyRate - clientActivityType.HourlyRateClient; } else { Activity.HourlyRateAdjustment = Activity.HourlyRate - activityType.HourlyRate; } if (Activity.HourlyRateAdjustment > 0) { label_adjustment.Text = "+" + Activity.HourlyRateAdjustment; label_adjustment.ForeColor = Color.DarkBlue; } else if (Activity.HourlyRateAdjustment < 0) { label_adjustment.Text = Activity.HourlyRateAdjustment.ToString(CultureInfo.InvariantCulture); label_adjustment.ForeColor = Color.DarkRed; } else { label_adjustment.Text = string.Empty; } label_total.Text = Math.Round(numericUpDown_hourly_rate_client.Value * numericUpDown_quantity.Value, 2).ToString(CultureInfo.InvariantCulture); label_currency_hourly_rate.Text = activityType.Currency; label_currency_total.Text = activityType.Currency; } else { label_total.Text = @"0"; label_adjustment.Text = string.Empty; label_currency_hourly_rate.Text = string.Empty; label_currency_total.Text = string.Empty; } }
private void CheckActivatedControls() { richTextBox_activity_type_note.Clear(); var comboboxItem = (ComboboxItem)comboBox_projects.SelectedItem; if (comboboxItem.Value != null) { var trackerProject = (TrackerProject)comboboxItem.Value; Activity.TrackerProjectId = trackerProject.Id; Activity.TrackerProjectName = trackerProject.Name; Activity.TrackerProjectStatus = trackerProject.ProjectStatus; } var selectedItem = (ComboboxItem)comboBox_activity_type.SelectedItem; if (selectedItem.Value != null) { SaveButtonActive(); var objs = (object[])selectedItem.Value; Structures.ActivityType activityType = null; if (objs[0] != null) { activityType = (Structures.ActivityType)objs[0]; } ClientActivityType clientActivityType = null; if (objs[1] != null) { clientActivityType = (ClientActivityType)objs[1]; } richTextBox_activity_type_note.SelectionFont = new Font(richTextBox_activity_type_note.Font.FontFamily.Name, richTextBox_activity_type_note.Font.Size, FontStyle.Bold); richTextBox_activity_type_note.ForeColor = Color.DarkGray; richTextBox_activity_type_note.SelectedText += "Note: "; if (activityType != null) { Activity.ActivityTypeId = activityType.Id; Activity.ActivityTypeName = activityType.Name; Activity.Currency = activityType.Currency; if (clientActivityType != null) { Activity.ActivityTypeClientId = clientActivityType.Id; if (!IsLoading) { numericUpDown_hourly_rate_client.Value = clientActivityType.HourlyRateClient; } richTextBox_activity_type_note.SelectionFont = new Font(richTextBox_activity_type_note.Font.FontFamily.Name, richTextBox_activity_type_note.Font.Size, FontStyle.Regular); richTextBox_activity_type_note.ForeColor = Color.DarkGray; richTextBox_activity_type_note.SelectedText += "default hourly rate (client): " + clientActivityType.HourlyRateClient + "; billable: " + activityType.Billable; } else { if (!IsLoading) { numericUpDown_hourly_rate_client.Value = activityType.HourlyRate; } richTextBox_activity_type_note.SelectionFont = new Font(richTextBox_activity_type_note.Font.FontFamily.Name, richTextBox_activity_type_note.Font.Size, FontStyle.Regular); richTextBox_activity_type_note.ForeColor = Color.DarkGray; richTextBox_activity_type_note.SelectedText += "default hourly rate: " + activityType.HourlyRate + "; billable: " + activityType.Billable; } checkBox_billable.Checked = activityType.Billable; } checkBox_billable.Enabled = true; numericUpDown_hourly_rate_client.Enabled = true; numericUpDown_quantity.Enabled = true; } else { SaveButtonActive(); checkBox_billable.Checked = false; numericUpDown_hourly_rate_client.Value = 0; checkBox_billable.Enabled = false; numericUpDown_hourly_rate_client.Enabled = false; numericUpDown_quantity.Enabled = false; } }