예제 #1
0
        private void removeSickDayToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ICalendarSelectableElement start = worker_calendar.SelectedElementStart;
            ICalendarSelectableElement end   = worker_calendar.SelectedElementEnd;

            CalendarDayTop start_day = start as CalendarDayTop;
            CalendarDayTop end_day   = end as CalendarDayTop;

            if (start_day == null || end_day == null)
            {
                return;
            }

            if (start_day.Date > end_day.Date)
            {
                //swap em ;)
                CalendarDayTop tmp = start_day;
                start_day = end_day;
                end_day   = tmp;
            }

            IEnumerable <CalendarDay> days = worker_calendar.Days.Where(d => d.Date >= start_day.Date && d.Date <= end_day.Date);

            Worker.SickDays.RemoveDays(days.ElementAt(0).Date, days.Count());

            Cursor             = Cursors.WaitCursor;
            Worker.MarkForSave = true;
            Worker.Save();
            Cursor = Cursors.Default;

            Refresh();
        }
예제 #2
0
        private void otherToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            DayCountFrm frm = new DayCountFrm();

            if (frm.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            ICalendarSelectableElement start = worker_calendar.SelectedElementStart;
            ICalendarSelectableElement end   = worker_calendar.SelectedElementEnd;

            CalendarDayTop start_day = start as CalendarDayTop;
            CalendarDayTop end_day   = end as CalendarDayTop;

            if (start_day == null || end_day == null)
            {
                return;
            }

            if (start_day.Date > end_day.Date)
            {
                //swap em ;)
                CalendarDayTop tmp = start_day;
                start_day = end_day;
                end_day   = tmp;
            }

            AddSickDay(start_day.Date, frm.DayCount, frm.ExcludeWeekends);
        }
예제 #3
0
        protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            base.OnMouseLeftButtonUp(e);

            ICalendarSelectableElement hitted = HitTest(e.GetPosition(this), State == CalendarState.DraggingTimeSelection);
            CalendarItem hittedItem           = hitted as CalendarItem;
            CalendarDay  hittedDay            = hitted as CalendarDay;
            bool         shiftPressed         = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);

            switch (State)
            {
            case CalendarState.Idle:

                break;

            case CalendarState.DraggingTimeSelection:
                if (SelectedElementStart == null || (hitted != null && !SelectedElementEnd.Equals(hitted)))
                {
                    SelectedElementEnd = hitted;
                }
                if (hittedDay != null)
                {
                    if (hittedDay.HeaderBounds.Contains(e.GetPosition(this)))
                    {
                        OnDayHeaderClick(new CalendarDayEventArgs(hittedDay));
                    }
                }
                break;

            case CalendarState.DraggingItem:
                if (itemOnStateChanged)
                {
                    OnItemDatesChanged(new CalendarItemEventArgs(itemOnState));
                }
                break;

            case CalendarState.ResizingItem:
                if (itemOnStateChanged)
                {
                    OnItemDatesChanged(new CalendarItemEventArgs(itemOnState));
                }
                break;

            case CalendarState.EditingItemText:
                break;
            }

            if (itemOnState != null)
            {
                itemOnState.SetIsDragging(false);
                itemOnState.SetIsResizingEndDate(false);
                itemOnState.SetIsResizingStartDate(false);
                Invalidate(itemOnState);
                OnItemClick(new CalendarItemEventArgs(itemOnState));
                itemOnState = null;
            }
            SetState(CalendarState.Idle);
        }
예제 #4
0
        private void removeTrainingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ICalendarSelectableElement start = worker_calendar.SelectedElementStart;
            ICalendarSelectableElement end   = worker_calendar.SelectedElementEnd;

            CalendarDayTop start_day = start as CalendarDayTop;
            CalendarDayTop end_day   = end as CalendarDayTop;

            CalendarTimeScaleUnit start_timeunit = start as CalendarTimeScaleUnit;
            CalendarTimeScaleUnit end_timeunit   = end as CalendarTimeScaleUnit;

            if (start_day == null && end_day == null && start_timeunit == null && end_timeunit == null)
            {
                return;
            }
            else if (start_day != null && end_day != null)
            {
                if (start_day.Date > end_day.Date)
                {
                    //swap em ;)
                    CalendarDayTop tmp = start_day;
                    start_day = end_day;
                    end_day   = tmp;
                }

                IEnumerable <CalendarDay> days = worker_calendar.Days.Where(d => d.Date >= start_day.Date && d.Date <= end_day.Date);

                Worker.Training.RemoveDays(days.ElementAt(0).Date, days.Count());
            }
            else if (start_timeunit != null && end_timeunit != null && !start_timeunit.Day.Disabled)
            {
                //timescaleunit clicked

                start_day = start_timeunit.Day.DayTop;
                end_day   = end_timeunit.Day.DayTop;

                IEnumerable <CalendarDay> daysSelected = worker_calendar.Days.Where(d => d.Date >= start_day.Date && d.Date <= end_day.Date);

                List <CalendarTimeScaleUnit> timeunitSelected = new List <CalendarTimeScaleUnit>();

                foreach (CalendarDay day in daysSelected)
                {
                    timeunitSelected.AddRange(day.TimeUnits.Where(t => t.Day == day && (t.Date >= start_timeunit.Date && t.Date <= end_timeunit.Date)));
                }

                foreach (CalendarTimeScaleUnit unit in timeunitSelected)
                {
                    Worker.Training.RemoveTime(unit.Date, 60);
                }
            }

            Cursor             = Cursors.WaitCursor;
            Worker.MarkForSave = true;
            Worker.Save();
            Cursor = Cursors.Default;

            Refresh();
        }
예제 #5
0
        private void selectionToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            ICalendarSelectableElement start = worker_calendar.SelectedElementStart;
            ICalendarSelectableElement end   = worker_calendar.SelectedElementEnd;

            CalendarDayTop start_day = start as CalendarDayTop;
            CalendarDayTop end_day   = end as CalendarDayTop;

            CalendarTimeScaleUnit start_timeunit = start as CalendarTimeScaleUnit;
            CalendarTimeScaleUnit end_timeunit   = end as CalendarTimeScaleUnit;


            if (start_day == null && end_day == null && start_timeunit == null && end_timeunit == null)
            {
                return;
            }
            else if (start_day != null && end_day != null)
            {
                //whole day selection

                if (start_day.Date > end_day.Date)
                {
                    //swap em ;)
                    CalendarDayTop tmp = start_day;
                    start_day = end_day;
                    end_day   = tmp;
                }

                AddTraining(start_day.Date, (int)(end_day.Date - start_day.Date).TotalDays + 1);
            }
            else if (start_timeunit != null && end_timeunit != null)
            {
                //time unit selection

                if (start_timeunit.Date > end_timeunit.Date)
                {
                    //swap em ;)
                    CalendarTimeScaleUnit tmp = start_timeunit;
                    start_timeunit = end_timeunit;
                    end_timeunit   = tmp;
                }


                AddTraining(start_timeunit.Date, 0, (int)(end_timeunit.Date - start_timeunit.Date).TotalMinutes + 60);
            }
        }
예제 #6
0
        private void weeksToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ICalendarSelectableElement start = worker_calendar.SelectedElementStart;
            ICalendarSelectableElement end   = worker_calendar.SelectedElementEnd;

            CalendarDayTop start_day = start as CalendarDayTop;
            CalendarDayTop end_day   = end as CalendarDayTop;

            if (start_day == null || end_day == null)
            {
                return;
            }

            if (start_day.Date > end_day.Date)
            {
                //swap em ;)
                CalendarDayTop tmp = start_day;
                start_day = end_day;
                end_day   = tmp;
            }
            AddSickDay(start_day.Date, 14);
        }
예제 #7
0
        private void selectionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ICalendarSelectableElement start = worker_calendar.SelectedElementStart;
            ICalendarSelectableElement end   = worker_calendar.SelectedElementEnd;

            CalendarDayTop start_day = start as CalendarDayTop;
            CalendarDayTop end_day   = end as CalendarDayTop;

            if (start_day == null || end_day == null)
            {
                return;
            }

            if (start_day.Date > end_day.Date)
            {
                //swap em ;)
                CalendarDayTop tmp = start_day;
                start_day = end_day;
                end_day   = tmp;
            }

            AddHoliday(start_day.Date, (int)(end_day.Date - start_day.Date).TotalDays + 1);
        }
 /// <summary>
 /// Compares this element with other using date as comparer
 /// </summary>
 /// <param name="element"></param>
 /// <returns></returns>
 public virtual int CompareTo(ICalendarSelectableElement element)
 {
     return(Date.CompareTo(element.Date));
 }
예제 #9
0
 /// <summary>
 /// Establishes the selection range with only one graphical update.
 /// </summary>
 /// <param name="selectionStart">Fisrt selected element</param>
 /// <param name="selectionEnd">Last selection element</param>
 public void SetSelectionRange(ICalendarSelectableElement selectionStart, ICalendarSelectableElement selectionEnd)
 {
     _selectedElementStart = selectionStart;
     SelectedElementEnd    = selectionEnd;
 }
예제 #10
0
 /// <summary>
 /// Establishes the selection range with only one graphical update.
 /// </summary>
 /// <param name="selectionStart">Fisrt selected element</param>
 /// <param name="selectionEnd">Last selection element</param>
 public void SetSelectionRange(ICalendarSelectableElement selectionStart, ICalendarSelectableElement selectionEnd)
 {
     _selectedElementStart = selectionStart;
     SelectedElementEnd = selectionEnd;
 }
예제 #11
0
 /// <summary>
 /// Compares this element with other using date as comparer
 /// </summary>
 /// <param name="element"></param>
 /// <returns></returns>
 public virtual int CompareTo(ICalendarSelectableElement element)
 {
     return this.Date.CompareTo(element.Date);
 }
예제 #12
0
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);

            ICalendarSelectableElement hitted = HitTest(e.GetPosition(this), State != CalendarState.Idle);
            CalendarItem   hittedItem         = hitted as CalendarItem;
            CalendarDayTop hittedTop          = hitted as CalendarDayTop;
            bool           shiftPressed       = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);

            if (hitted != null)
            {
                switch (State)
                {
                case CalendarState.Idle:
                    Cursor should = Cursors.Arrow;

                    if (hittedItem != null)
                    {
                        if ((hittedItem.ResizeEndDateZone(e.GetPosition(this)) || hittedItem.ResizeStartDateZone(e.GetPosition(this))) && AllowItemResize)
                        {
                            should = hittedItem.IsOnDayTop || DaysMode == CalendarDaysMode.Short ? Cursors.SizeWE : Cursors.SizeNS;
                        }

                        OnItemMouseHover(new CalendarItemEventArgs(hittedItem));
                    }
                    if (!Cursor.Equals(should))
                    {
                        Cursor = should;
                    }
                    break;

                case CalendarState.DraggingTimeSelection:
                    if (SelectedElementStart != null && !SelectedElementEnd.Equals(hitted))
                    {
                        SelectedElementEnd = hitted;
                    }
                    break;

                case CalendarState.DraggingItem:
                    TimeSpan duration = itemOnState.Duration;
                    itemOnState.SetIsDragging(true);
                    itemOnState.StartDate = hitted.Date;
                    itemOnState.EndDate   = itemOnState.StartDate.Add(duration);
                    Renderer.PerformItemsLayout();
                    Invalidate();
                    itemOnStateChanged = true;
                    break;

                case CalendarState.ResizingItem:
                    if (itemOnState.IsResizingEndDate && hitted.Date.CompareTo(itemOnState.StartDate) >= 0)
                    {
                        itemOnState.EndDate = hitted.Date.Add(hittedTop != null || DaysMode == CalendarDaysMode.Short ? new TimeSpan(23, 59, 59) : Days[0].TimeUnits[0].Duration);
                    }
                    else if (itemOnState.IsResizingStartDate && hitted.Date.CompareTo(itemOnState.EndDate) <= 0)
                    {
                        itemOnState.StartDate = hitted.Date;
                    }
                    Renderer.PerformItemsLayout();
                    Invalidate();
                    itemOnStateChanged = true;
                    break;

                case CalendarState.EditingItemText:
                    break;
                }
            }
        }
예제 #13
0
        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            base.OnMouseLeftButtonDown(e);

            ICalendarSelectableElement hitted = HitTest(e.GetPosition(this));
            CalendarItem hittedItem           = hitted as CalendarItem;
            bool         shiftPressed         = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);

            if (!Focused)
            {
                Focus();
            }

            switch (State)
            {
            case CalendarState.Idle:
                if (hittedItem != null)
                {
                    if (!shiftPressed)
                    {
                        ClearSelectedItems();
                    }

                    hittedItem.SetSelected(true);
                    Invalidate(hittedItem);
                    OnItemSelected(new CalendarItemEventArgs(hittedItem));

                    itemOnState        = hittedItem;
                    itemOnStateChanged = false;

                    if (AllowItemEdit)
                    {
                        if (itemOnState.ResizeStartDateZone(e.GetPosition(this)) && AllowItemResize)
                        {
                            SetState(CalendarState.ResizingItem);
                            itemOnState.SetIsResizingStartDate(true);
                        }
                        else if (itemOnState.ResizeEndDateZone(e.GetPosition(this)) && AllowItemResize)
                        {
                            SetState(CalendarState.ResizingItem);
                            itemOnState.SetIsResizingEndDate(true);
                        }
                        else
                        {
                            SetState(CalendarState.DraggingItem);
                        }
                    }

                    SetSelectionRange(null, null);
                }
                else
                {
                    ClearSelectedItems();

                    if (shiftPressed)
                    {
                        if (hitted != null && SelectedElementEnd == null && !SelectedElementEnd.Equals(hitted))
                        {
                            SelectedElementEnd = hitted;
                        }
                    }
                    else
                    {
                        if (SelectedElementStart == null || (hitted != null && !SelectedElementStart.Equals(hitted)))
                        {
                            SetSelectionRange(hitted, hitted);
                        }
                    }

                    SetState(CalendarState.DraggingTimeSelection);
                }
                break;

            case CalendarState.DraggingTimeSelection:
                break;

            case CalendarState.DraggingItem:
                break;

            case CalendarState.ResizingItem:
                break;

            case CalendarState.EditingItemText:
                break;
            }
        }
예제 #14
0
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);

            if (AllowNew)
            {
                CreateItemOnSelection(e.Key.ToString(), true);
            }

            bool shiftPressed = (e.Key.GetTypeCode()) == ModifierKeys.Shift.GetTypeCode();
            int  jump         = (int)TimeScale;
            ICalendarSelectableElement sStart = null;
            ICalendarSelectableElement sEnd   = null;

            if (e.Key == Key.F2)
            {
                ActivateEditMode();
            }
            else if (e.Key == Key.Delete)
            {
                DeleteSelectedItems();
            }
            else if (e.Key == Key.Insert)
            {
                if (AllowNew)
                {
                    CreateItemOnSelection(string.Empty, true);
                }
            }
            else if (e.Key == Key.Down)
            {
                if (e.Key.GetTypeCode() == ModifierKeys.Shift.GetTypeCode())
                {
                    sStart = SelectedElementStart;
                }

                sEnd = GetTimeUnit(SelectedElementEnd.Date.Add(new TimeSpan(0, (int)TimeScale, 0)));
            }
            else if (e.Key == Key.Up)
            {
                if (e.Key.GetTypeCode() == ModifierKeys.Shift.GetTypeCode())
                {
                    sStart = SelectedElementStart;
                }

                sEnd = GetTimeUnit(SelectedElementEnd.Date.Add(new TimeSpan(0, -(int)TimeScale, 0)));
            }
            else if (e.Key == Key.Right)
            {
                sEnd = GetTimeUnit(SelectedElementEnd.Date.Add(new TimeSpan(24, 0, 0)));
            }
            else if (e.Key == Key.Left)
            {
                sEnd = GetTimeUnit(SelectedElementEnd.Date.Add(new TimeSpan(-24, 0, 0)));
            }
            else if (e.Key == Key.PageDown)
            {
            }
            else if (e.Key == Key.PageUp)
            {
            }


            if (sStart != null)
            {
                SetSelectionRange(sStart, sEnd);
            }
            else if (sEnd != null)
            {
                SetSelectionRange(sEnd, sEnd);

                if (sEnd is CalendarTimeScaleUnit)
                {
                    EnsureVisible(sEnd as CalendarTimeScaleUnit);
                }
            }
        }
예제 #15
0
        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            //clear everything first
            setAsHolidayToolStripMenuItem.Visible  = false;
            removeHolidayToolStripMenuItem.Visible = false;

            setAsSickDayToolStripMenuItem.Visible  = false;
            removeSickDayToolStripMenuItem.Visible = false;

            setAsTrainingToolStripMenuItem.Visible  = false;
            removeTrainingToolStripMenuItem.Visible = false;

            oneWeekToolStripMenuItem.Visible  = false;
            twoWeeksToolStripMenuItem.Visible = false;
            otherToolStripMenuItem2.Visible   = false;

            unassignToolStripMenuItem.Visible = false;

            if (SelectedItems.Count > 0)
            {
                unassignToolStripMenuItem.Visible = true;
                return;
            }


            ICalendarSelectableElement start = worker_calendar.SelectedElementStart;
            ICalendarSelectableElement end   = worker_calendar.SelectedElementEnd;

            CalendarDayTop start_day = start as CalendarDayTop;
            CalendarDayTop end_day   = end as CalendarDayTop;

            CalendarTimeScaleUnit start_timeunit = start as CalendarTimeScaleUnit;
            CalendarTimeScaleUnit end_timeunit   = end as CalendarTimeScaleUnit;


            oneWeekToolStripMenuItem.Visible  = true;
            twoWeeksToolStripMenuItem.Visible = true;
            otherToolStripMenuItem2.Visible   = true;

            if (start_day != null && end_day != null)
            {
                //day top clicked

                if (start_day.Date > end_day.Date)
                {
                    //swap em ;)
                    CalendarDayTop tmp = start_day;
                    start_day = end_day;
                    end_day   = tmp;
                }

                if (start_day == null || end_day == null)
                {
                    //only allow training to be set if we arent selecting the whole day
                    removeTrainingToolStripMenuItem.Visible = true;
                    setAsTrainingToolStripMenuItem.Visible  = true;
                }
                else
                {
                    IEnumerable <CalendarDay> daysSelected = worker_calendar.Days.Where(d => d.Date >= start_day.Date && d.Date <= end_day.Date);

                    int holidayCount  = daysSelected.Where(d => d.Disabled && d.Image != null && d.Image.Tag.ToString() == "holiday").Count();
                    int sickCount     = daysSelected.Where(d => d.Disabled && d.Image != null && d.Image.Tag.ToString() == "sick").Count();
                    int trainingCount = daysSelected.Where(d => d.Disabled && d.Image != null && d.Image.Tag.ToString() == "training").Count();

                    if (holidayCount < daysSelected.Count())
                    {
                        setAsHolidayToolStripMenuItem.Visible = true;      //not all are holiday
                    }
                    if (sickCount < daysSelected.Count())
                    {
                        setAsSickDayToolStripMenuItem.Visible = true;       //not all are sick
                    }
                    if (trainingCount < daysSelected.Count())
                    {
                        setAsTrainingToolStripMenuItem.Visible = true;       //not all are training
                    }
                    if (holidayCount > 0)
                    {
                        removeHolidayToolStripMenuItem.Visible = true;
                    }

                    if (sickCount > 0)
                    {
                        removeSickDayToolStripMenuItem.Visible = true;
                    }

                    if (trainingCount > 0)
                    {
                        removeTrainingToolStripMenuItem.Visible = true;
                    }
                }
            }
            else if (start_timeunit != null && end_timeunit != null && !start_timeunit.Day.Disabled)
            {
                //timescaleunit clicked

                //dont need these for individual hour training
                oneWeekToolStripMenuItem.Visible  = false;
                twoWeeksToolStripMenuItem.Visible = false;
                otherToolStripMenuItem2.Visible   = false;



                start_day = start_timeunit.Day.DayTop;
                end_day   = end_timeunit.Day.DayTop;

                IEnumerable <CalendarDay> daysSelected = worker_calendar.Days.Where(d => d.Date >= start_day.Date && d.Date <= end_day.Date);

                List <CalendarTimeScaleUnit> timeunitSelected = new List <CalendarTimeScaleUnit>();

                foreach (CalendarDay day in daysSelected)
                {
                    timeunitSelected.AddRange(day.TimeUnits.Where(t => t.Day == day && (t.Date >= start_timeunit.Date && t.Date <= end_timeunit.Date)));
                }

                int trainingCount = timeunitSelected.Where(t => t.Disabled && t.Image != null && t.Image.Tag.ToString() == "training").Count();

                if (trainingCount < timeunitSelected.Count())
                {
                    setAsTrainingToolStripMenuItem.Visible = true;       //not all are training
                }
                if (trainingCount > 0)
                {
                    removeTrainingToolStripMenuItem.Visible = true;
                }
            }
            else
            {
                e.Cancel = true;
                return;
            }
        }