Example #1
0
        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;
        }
Example #2
0
        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;
        }
Example #3
0
        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();
            }
        }
Example #5
0
        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();
        }
Example #6
0
        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;
            }
        }
Example #7
0
        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;
            }
        }