Esempio n. 1
0
        public bool SaveTimeBooking(TimeBooking timeBooking)
        {
            if (!ValidateBooking(timeBooking))
            {
                return(false);
            }

            TimeBookings.Insert(timeBooking);

            if (timeBooking.TimeBookingType == TimeBookingType.Logout)
            {
                SaveBalance(timeBooking);
            }

            var date        = timeBooking.BookingTime.Date;
            var allBookings = TimeBookings.GetDataSinceDayForRefUserId(timeBooking.BookingTime, timeBooking.RefUserId);

            while (date.Date < DateTime.Now.Date)
            {
                var booking = allBookings.SingleOrDefault(x => x.BookingTime.Date == date.Date && x.TimeBookingType == TimeBookingType.Logout);

                if (booking != null)
                {
                    SaveBalance(booking);
                }
                else
                {
                    SaveBalanceWithoutBookings(date, timeBooking.RefUserId);
                }

                date = date.AddDays(1);
            }

            return(true);
        }
Esempio n. 2
0
        public List <TimeBookingType> GetAllowedActionsList(DateTime dateTime, int refUserId)
        {
            List <TimeBookingType> allowedActions         = new List <TimeBookingType>();
            List <TimeBooking>     bookingsForSelectedDay = TimeBookings.GetDataForDay(dateTime, refUserId);

            if (bookingsForSelectedDay.Count > 0)
            {
                if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.Login)
                {
                    allowedActions.Add(TimeBookingType.StartBreak);
                    allowedActions.Add(TimeBookingType.Logout);
                }
                if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.StartBreak)
                {
                    allowedActions.Add(TimeBookingType.EndBreak);
                }
                if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.EndBreak)
                {
                    allowedActions.Add(TimeBookingType.StartBreak);
                    allowedActions.Add(TimeBookingType.Logout);
                }
                if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.Logout)
                {
                    allowedActions.Add(TimeBookingType.Login);
                }
            }
            else
            {
                allowedActions.Add(TimeBookingType.Login);
            }

            return(allowedActions);
        }
        private void CreateNewBooking(TimeBookingType timeBookingType)
        {
            TimeBooking timeBooking = new TimeBooking();

            timeBooking.BookingTime     = DateTime.Now;
            timeBooking.TimeStamp       = DateTime.Now;
            timeBooking.TimeBookingType = timeBookingType;
            timeBooking.RefUserId       = Globals.ActiveUser.UserId;
            TimeBookings.Insert(timeBooking);
            Validate();
        }
Esempio n. 4
0
        public IEnumerable <TimeBookingDayItem> GetBookingItemsForMonth(DateTime dateTime, int refUserId)
        {
            List <TimeBooking> bookingsForMonth = TimeBookings.GetDataForMonth(dateTime, refUserId);

            var timeBookingDayItems = CreateDayItems(bookingsForMonth).ToList();
            var startDate           = new DateTime(dateTime.Year, dateTime.Month, 1);

            while (startDate.Month == dateTime.Month && startDate.Date <= DateTime.Now.Date)
            {
                if (!timeBookingDayItems.Any(x => x.BookingDate.Date == startDate.Date))
                {
                    TimeBookingDayItem timeBookingDayItem = new TimeBookingDayItem();
                    timeBookingDayItem.BookingDate     = startDate;
                    timeBookingDayItem.WorkingHours    = new TimeSpan(0);
                    timeBookingDayItem.BreaktimeHours  = new TimeSpan(0);
                    timeBookingDayItem.ObligatoryHours = GetObgligaryHoursForDay(startDate, refUserId);

                    var balanceForDay = TimeBalances.GetByDateAndRefUserId(startDate, refUserId);

                    if (balanceForDay != null)
                    {
                        timeBookingDayItem.Balance = balanceForDay.Balance;
                    }
                    else
                    {
                        var lastBalance = TimeBalances.GetLastByDateAndRefUserId(startDate, refUserId);
                        if (lastBalance != null)
                        {
                            timeBookingDayItem.Balance = lastBalance.Balance;
                        }
                        else
                        {
                            timeBookingDayItem.Balance = 0;
                        }
                    }

                    timeBookingDayItems.Add(timeBookingDayItem);
                }

                startDate = startDate.AddDays(1);
            }

            return(timeBookingDayItems.OrderBy(x => x.BookingDate));
        }
Esempio n. 5
0
        public bool ValidateBooking(TimeBooking timeBooking)
        {
            if (timeBooking.RefUserId == 0)
            {
                return(false);
            }

            List <TimeBooking> bookingsForSelectedDay = TimeBookings.GetDataForDay(timeBooking.BookingTime, timeBooking.RefUserId);

            if (bookingsForSelectedDay?.Count > 0)
            {
                if (bookingsForSelectedDay.Last().TimeBookingType == timeBooking.TimeBookingType)
                {
                    return(false);
                }
                if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.Login && (timeBooking.TimeBookingType != TimeBookingType.StartBreak && timeBooking.TimeBookingType != TimeBookingType.Logout))
                {
                    return(false);
                }
                if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.StartBreak && timeBooking.TimeBookingType != TimeBookingType.EndBreak)
                {
                    return(false);
                }
                if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.EndBreak && (timeBooking.TimeBookingType != TimeBookingType.StartBreak && timeBooking.TimeBookingType != TimeBookingType.Logout))
                {
                    return(false);
                }
            }
            else
            {
                if (timeBooking.TimeBookingType != TimeBookingType.Login)
                {
                    return(false);
                }
            }

            return(true);
        }
Esempio n. 6
0
        private void SaveBalance(TimeBooking timeBooking)
        {
            var bookings = TimeBookings.GetDataForDay(timeBooking.BookingTime, timeBooking.RefUserId);
            var hours    = timeBooking.BookingTime - bookings.First().BookingTime;

            var obligatoryHours = TimeObligatoryHours.GetByRefUserId(timeBooking.RefUserId);

            if (obligatoryHours.Count > 0)
            {
                var day = obligatoryHours.SingleOrDefault(x => x.DayOfWeek == timeBooking.BookingTime.DayOfWeek);
                if (day != null)
                {
                    var dayItem      = CreateDayItem(bookings, day);
                    var balanceValue = dayItem.WorkingHours.TotalHours - day.HoursPerDay;

                    var lastItem = TimeBalances.GetLastByDateAndRefUserId(timeBooking.BookingTime, timeBooking.RefUserId);

                    if (lastItem != null)
                    {
                        balanceValue += lastItem.Balance;
                    }

                    var existingItem = TimeBalances.GetByDateAndRefUserId(timeBooking.BookingTime, timeBooking.RefUserId);

                    if (existingItem != null)
                    {
                        existingItem.Balance = balanceValue;
                        TimeBalances.Update(existingItem);
                    }
                    else
                    {
                        TimeBalance timeBalance = new TimeBalance(timeBooking.RefUserId, timeBooking.BookingTime, balanceValue);
                        TimeBalances.Insert(timeBalance);
                    }
                }
            }
        }
Esempio n. 7
0
 private void LoadTimeBookingsForDay()
 {
     BookingsForSelectedDay = TimeBookings.GetDataForDay(bookingTime, RefUserId);
 }