public override void AddHours(HoursData model)
 {
     using (_unitOfWork = DIManager.UnitOfWork)
     {
         var hoursModel = _unitOfWork.PersonalAccountantContext.Set <other_SpendHoursPerProject>().FirstOrDefault(x => x.ProjectId == model.ProjectId);
         if (hoursModel != null)
         {
             hoursModel.SpendHours += model.Hours;
         }
         else
         {
             _unitOfWork.PersonalAccountantContext.Set <other_SpendHoursPerProject>().Add(new other_SpendHoursPerProject()
             {
                 SpendHours = model.Hours,
                 ProjectId  = model.ProjectId
             });
         }
         _unitOfWork.Save();
     }
 }
Exemple #2
0
        public async Task <ActionResult> ScheduleWeekly(int userId)
        {
            var result = new List <ScheduleDayDTO>();

            var sDay = new ScheduleDayDTO(); // { SelectableHours = new List<HoursData>() };

            try
            {
                /*
                 * // Day debe de estar enformato YYYYMMDD
                 * if (day.Length != 8)
                 *  return BadRequest("Formato de Fecha Incorrecto. (YYYYMMDD)");
                 *
                 * var y = Convert.ToInt32(day.Substring(0, 4));
                 * var m = Convert.ToInt32(day.Substring(4, 2));
                 * var d = Convert.ToInt32(day.Substring(6));
                 *
                 * if (y < 2020 || m > 12 || d > 31)
                 *  return BadRequest("Fecha incorrecta.");
                 */
                //var date = new DateTime(y, m, d);

                var memberDb = await this._repo.GetMember(null, null, userId);

                if (memberDb == null)
                {
                    return(BadRequest("Socio no encontrado."));
                }

                if (!memberDb.User.IsActive)
                {
                    return(BadRequest("Socio Bloqueado."));
                }


                //var result = new List<DateTime>();
                var count = 0;
                //var settings = await this._repo.GetGeneralSettings();
                //var scheduleSettings = JsonConvert.DeserializeObject<List<ScheduleDaySettings>>(settings.ScheduledWeek);



                var settings = await this._repo.GetGeneralSettings();

                var scheduleSettings = JsonConvert.DeserializeObject <List <ScheduleDaySettings> >(settings.ScheduledWeek);


                //resutl.Date = date;
                //var ss = scheduleSettings.First(stt => stt.Day.ToLower() == date.ToString("dddd").ToLower());


                do
                {
                    sDay = new ScheduleDayDTO()
                    {
                        Date = DateTime.Today.AddDays(count), SelectableHours = new List <HoursData>()
                    };
                    var ss = scheduleSettings.FirstOrDefault(stt => stt.Day.ToLower() == sDay.Date.ToString("dddd").ToLower());

                    if (ss != null)
                    {
                        var userBookedDay             = this._repo.GetUserBookedDay(memberDb.User.Id, sDay.Date);
                        var scheduledDay              = this._repo.GetBookedDay(sDay.Date);
                        var currentAuthorizedCapacity = await this._repo.GetCurrentAuthorizedCapacity(sDay.Date);


                        foreach (HoursRange hr in ss.RangeDates)
                        {
                            var hd = new HoursData();

                            hd.Range = string.Format("{0} - {1}", hr.StarHour, hr.EndHour);

                            var time       = hr.StarHour.Split(':');
                            var bookedTime = new DateTime(sDay.Date.Year, sDay.Date.Month, sDay.Date.Day, Convert.ToInt32(time[0]), Convert.ToInt32(time[1]), 0);

                            var sdh = scheduledDay.FirstOrDefault(d => d.Schedule == bookedTime);
                            if (sdh != null)
                            {
                                var availability = currentAuthorizedCapacity - sdh.Count;
                                if (availability < settings.NotificationCapacity)
                                {
                                    hd.Capacity = availability.ToString();
                                }

                                if (userBookedDay != null && hr.StarHour == userBookedDay.Schedule.ToString("HH:mm"))
                                {
                                    hd.Booked = true;
                                }
                            }

                            sDay.SelectableHours.Add(hd);
                        }

                        result.Add(sDay);
                    }


                    count++;
                } while (result.Count < 7);



                return(Ok(result));
            }
            catch (Exception ex)
            {
                new FileManagerHelper().RecordLogFile(MethodBase.GetCurrentMethod().ReflectedType.FullName, "UserId: " + userId.ToString(), ex);
                return(BadRequest(this._appSettings.Value.ServerError));
            }
        }
Exemple #3
0
        public async Task <ActionResult> ScheduleDay(string day)
        {
            var resutl = new ScheduleDayDTO()
            {
                SelectableHours = new List <HoursData>()
            };

            try
            {
                // Day debe de estar enformato YYYYMMDD
                if (day.Length != 8)
                {
                    return(BadRequest("Formato de Fecha Incorrecto. (YYYYMMDD)"));
                }

                var y = Convert.ToInt32(day.Substring(0, 4));
                var m = Convert.ToInt32(day.Substring(4, 2));
                var d = Convert.ToInt32(day.Substring(6));

                if (y < 2020 || m > 12 || d > 31)
                {
                    return(BadRequest("Fecha incorrecta."));
                }

                var date = new DateTime(y, m, d);

                var settings = await this._repo.GetGeneralSettings();

                var scheduleSettings          = JsonConvert.DeserializeObject <List <ScheduleDaySettings> >(settings.ScheduledWeek);
                var scheduledDay              = this._repo.GetBookedDay(date);
                var currentAuthorizedCapacity = await this._repo.GetCurrentAuthorizedCapacity(date);

                resutl.Date = date;
                var ss = scheduleSettings.First(stt => stt.Day.ToLower() == date.ToString("dddd").ToLower());

                foreach (HoursRange hr in ss.RangeDates)
                {
                    var hd = new HoursData();

                    hd.Range = string.Format("{0} - {1}", hr.StarHour, hr.EndHour);

                    var time       = hr.StarHour.Split(':');
                    var bookedTime = new DateTime(date.Year, date.Month, date.Day, Convert.ToInt32(time[0]), Convert.ToInt32(time[1]), 0);

                    var sdh          = scheduledDay.FirstOrDefault(d => d.Schedule == bookedTime);
                    var availability = currentAuthorizedCapacity - (sdh != null ? sdh.Count : 0);
                    var p            = (availability * 100) / currentAuthorizedCapacity;
                    //hd.Capacity = string.Format("{0}%/{1}", p, availability.ToString());
                    hd.Capacity      = currentAuthorizedCapacity.ToString();
                    hd.capPercentaje = p;
                    hd.capPeople     = availability;


                    resutl.SelectableHours.Add(hd);
                }

                return(Ok(resutl));
            }
            catch (Exception ex)
            {
                new FileManagerHelper().RecordLogFile(MethodBase.GetCurrentMethod().ReflectedType.FullName, day, ex);
                return(BadRequest(this._appSettings.Value.ServerError));
            }
        }
Exemple #4
0
 public JsonResult AddHours(HoursData model)
 {
     _freelanceManager.AddHours(model);
     return(Json(null));
 }
Exemple #5
0
        // this method determines which shift they left after based on when their clockOut2 time was
        // there are multiple conditions to check for because this program is for the managers of the
        // night shift so employees start in the evening and end in the morning
        public HoursData calcHoursLost()
        {
            HoursData hoursLostData = new HoursData();

            // for the employees that have all 4 fields
            if (clockIn2 != -1.0f && clockOut2 != -1.0f)
            {
                hoursLostData.hoursLost = normalShiftLength - shiftLength;
                if (clockOut2 > break2Start + breakLength && clockOut2 < onTimeLimit)
                {
                    hoursLostData.breakLeftNum = 2;
                }
                if (clockOut2 < 24.0f && clockOut2 > clockIn2)
                {
                    hoursLostData.breakLeftNum = 1;
                }
                if (clockOut2 >= 0.0f && clockOut2 < break2Start)
                {
                    hoursLostData.breakLeftNum = 1;
                }
                if (clockIn1 < clockOut2 && clockOut2 > clockIn2)
                {
                    hoursLostData.breakLeftNum = 1;
                }
                if (clockOut2 >= onTimeLimit && clockOut2 < clockIn1)
                {
                    hoursLostData.breakLeftNum = -1;
                }
            }
            // for the employees that have only 2 fields
            else if (clockIn2 == -1.0f && clockOut2 == -1.0f)
            {
                if (clockIn1 > clockOut1)
                {
                    if (clockOut1 <= break2Start)
                    {
                        hoursLostData.breakLeftNum = 1;
                        hoursLostData.hoursLost    = onTimeLimit - clockOut1;
                    }
                    else if (clockOut1 > break2Start + breakLength && clockOut1 < onTimeLimit)
                    {
                        hoursLostData.breakLeftNum = 2;
                        hoursLostData.hoursLost    = onTimeLimit - clockOut1;
                    }
                    else if (clockOut1 >= onTimeLimit)
                    {
                        hoursLostData.breakLeftNum = -1;
                        hoursLostData.hoursLost    = 0.0f;
                    }
                }
                else if (clockIn1 < clockOut1)
                {
                    if (clockOut1 < break2Start)
                    {
                        hoursLostData.breakLeftNum = 1;
                        hoursLostData.hoursLost    = onTimeLimit - clockOut1;
                    }
                    else if (clockOut1 < onTimeLimit && clockOut1 > break2Start + breakLength)
                    {
                        hoursLostData.breakLeftNum = 2;
                        hoursLostData.hoursLost    = onTimeLimit - clockOut1;
                    }
                    else if (clockOut1 >= onTimeLimit && clockIn1 < onTimeLimit)
                    {
                        hoursLostData.breakLeftNum = -1;
                        hoursLostData.hoursLost    = 0.0f;
                    }
                    else if (clockIn1 > onTimeLimit && clockOut1 > onTimeLimit)
                    {
                        // idk if I need to handle this situation
                    }
                }
            }
            return(hoursLostData);
        }
 public abstract void AddHours(HoursData model);