private void editToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (SelectedItem == null || !_allowOpenWorker)
            {
                return;
            }

            try
            {
                Cursor = Cursors.WaitCursor;

                Worker worker = SelectedItem;

                WorkerFrm frm = new WorkerFrm()
                {
                    ID                 = worker.id,
                    Firstname          = worker.firstname,
                    Surname            = worker.surname,
                    ContactNoPrimary   = worker.contactno_primary,
                    ContactNoSecondary = worker.contactno_secondary,
                    Add1               = worker.add1,
                    Add2               = worker.add2,
                    IsDriver           = worker.isDriver,
                    Title              = "Edit Care Worker",
                    ENumber            = worker.ENumber,

                    Notes = worker.notes
                };

                frm.CallHistory = worker.CallHistory;

                frm.SetWorkingHours(worker.WorkingHours);
                frm.SetDaysOff(worker.WorkingHours.daysOff);

                frm.SetLongLat(worker.LongLatCoords);

                frm.ServiceUsers = ServiceUserManager.Instance.ServiceUsers;
                frm.KeyServiceUsers.AddRange(worker.KeyServiceUsers);

                frm.Workers = WorkerManager.Instance.Workers.Where(w => w != worker).ToList();

                Cursor = Cursors.Default;

                if (frm.ShowDialog() == DialogResult.OK)
                {
                    //add this user to the database
                    worker.firstname           = frm.Firstname;
                    worker.surname             = frm.Surname;
                    worker.postcode            = frm.LongLat.pCode;
                    worker.add1                = frm.Add1;
                    worker.add2                = frm.Add2;
                    worker.contactno_primary   = frm.ContactNoPrimary;
                    worker.contactno_secondary = frm.ContactNoSecondary;
                    worker.isDriver            = frm.IsDriver;
                    worker.LongLatCoords       = frm.LongLat;

                    worker.WorkingHours.Clear();
                    worker.WorkingHours.AddRange(frm.Availabilities);

                    worker.WorkingHours.daysOff.Clear();
                    worker.WorkingHours.daysOff.AddRange(frm.Availabilities.daysOff);

                    worker.notes = frm.Notes;

                    ////clear this service user from all its key workers
                    foreach (ServiceUser serviceuser in worker.KeyServiceUsers)
                    {
                        serviceuser.KeyWorkers.Remove(worker);
                    }

                    ////clear the service users key workers
                    worker.KeyServiceUsers.Clear();

                    //// add the new keyworkers
                    worker.KeyServiceUsers.AddRange(frm.KeyServiceUsers);

                    ////add service user to key workers
                    foreach (ServiceUser serviceuser in frm.KeyServiceUsers)
                    {
                        serviceuser.KeyWorkers.Add(worker);

                        serviceuser.OldKeyWorkers.Clear();
                        serviceuser.OldKeyWorkers.AddRange(serviceuser.KeyWorkers);
                    }

                    //attempt to save
                    Cursor = Cursors.WaitCursor;
                    try
                    {
                        worker.MarkForSave = true;
                        worker.Save();
                    }
                    catch (Exception ex)
                    {
                        Cura.Common.Common.LogError("Error Occured While Trying To Save This Worker", ex);
                    }

                    WorkerManager.Instance.RefreshControls(false, false, false);
                }

                frm.Dispose();
            }
            catch (Exception ex)
            {
                Cura.Common.Common.LogError("Error Editing Worker", ex);
            }

            Cursor = Cursors.Default;
        }
        /// <summary>
        /// create a new worker!
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void newworkerbtn_Click_1(object sender, EventArgs e)
        {
            if (Settings.IsTrial && WorkerManager.Instance.Workers.Count >= 5)
            {
                MessageBox.Show("You can only create a maximum of 5 workers while using a trial version of this product.", "Trial", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            try
            {
                WorkerFrm frm = new WorkerFrm()
                {
                    Title = "Create Care Worker"
                };

                frm.Workers      = WorkerManager.Instance.Workers;
                frm.ServiceUsers = ServiceUserManager.Instance.ServiceUsers;

                if (frm.ShowDialog() == DialogResult.OK)
                {
                    //add this user to the database
                    Worker new_worker = new Worker()
                    {
                        firstname           = frm.Firstname,
                        surname             = frm.Surname,
                        add1                = frm.Add1,
                        add2                = frm.Add2,
                        contactno_primary   = frm.ContactNoPrimary,
                        contactno_secondary = frm.ContactNoSecondary,
                        isDriver            = frm.IsDriver,
                        ENumber             = frm.ENumber,
                        notes               = frm.Notes
                    };



                    new_worker.LongLatCoords = frm.LongLat;
                    new_worker.postcode      = frm.LongLat.pCode;

                    new_worker.WorkingHours.Clear();
                    new_worker.WorkingHours.AddRange(frm.Availabilities);

                    new_worker.WorkingHours.daysOff.Clear();
                    new_worker.WorkingHours.daysOff.AddRange(frm.Availabilities.daysOff);

                    ////clear the service users key workers
                    new_worker.KeyServiceUsers.Clear();

                    //// add the new keyworkers
                    new_worker.KeyServiceUsers.AddRange(frm.KeyServiceUsers);

                    ////add service user to key workers
                    foreach (ServiceUser serviceuser in frm.KeyServiceUsers)
                    {
                        serviceuser.KeyWorkers.Add(new_worker);

                        serviceuser.OldKeyWorkers.Clear();
                        serviceuser.OldKeyWorkers.AddRange(serviceuser.KeyWorkers);
                    }


                    //attempt to save
                    Cursor = Cursors.WaitCursor;
                    try
                    {
                        //save the worker
                        new_worker.Save();

                        //add to the worker manager if it saved successfully
                        WorkerManager.Instance.Workers.Add(new_worker);
                    }
                    catch (Exception ex)
                    {
                        Cura.Common.Common.LogError("Error Occured While Trying To Save This New Worker", ex);
                    }
                    Cursor = Cursors.Default;
                }

                frm.Dispose();
            }
            catch (Exception ex)
            {
                Cura.Common.Common.LogError("Error Creating New Worker", ex);
            }

            Cursor = Cursors.Default;
        }