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(); } }
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)); } }
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)); } }
public JsonResult AddHours(HoursData model) { _freelanceManager.AddHours(model); return(Json(null)); }
// 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);