public bool Delete(int timeEntryId, string userName) { var timeEntryById = GetRelatedTimeEntryById(timeEntryId); var timeEntryView = new TimeEntryView { ProjectId = timeEntryById.ProjectId, MemberId = timeEntryById.MemberId, TaskTypesId = timeEntryById.TaskTypesId, Date = timeEntryById.Date }; // Check if exists related entities. CheckRelatedEntities(timeEntryView, timeEntryById, userName, out var relatedMemberByName, out var relatedProjectById); // Check Lock TimeEntries: User cannot Create TimeEntry, if enable Lock TimeEntry in Project settings. CheckLockTimeEntryByProjectSettings(timeEntryView.Date, relatedProjectById); #region Delete TimeEntry from DB. try { Uow.TimeEntryRepository.Delete(timeEntryById.Id); Uow.Save(); return(true); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while deleting the TimeEntry", e); } #endregion }
public TimeEntryView Update(TimeEntryView timeEntryView, string userName) { var timeEntryById = GetRelatedTimeEntryById(timeEntryView.Id); // Check if exists related entities. CheckRelatedEntities(timeEntryView, timeEntryById, userName, out var relatedMemberByName, out var relatedProjectById); // Check Lock TimeEntries: User cannot Create TimeEntry, if enable Lock TimeEntry in Project settings. CheckLockTimeEntryByProjectSettings(timeEntryView.Date, relatedProjectById); // Check correct timing values from TimeEntryView. CheckCorrectTimingValues(timeEntryView.TimeFrom, timeEntryView.TimeTo, timeEntryView.Time); // Check that total time per day is not grater than 24 hours. CheckTotalTimeAtDay(relatedMemberByName, timeEntryView, timeEntryById); // Update values for TimeEntry. UpdateValuesForTimeEntry(timeEntryById, timeEntryView); #region Update TimeEntry in DB. try { Uow.TimeEntryRepository.Update(timeEntryById); Uow.Save(); return(timeEntryById.GetViewTimeEntry(userName, Mapper)); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while updating TimeEntry", e); } #endregion }
public void Delete(int timeEntryId) { var timeEntryById = GetRelatedTimeEntryById(timeEntryId); var timeEntryView = new TimeEntryView { ProjectId = timeEntryById.ProjectId, MemberId = timeEntryById.MemberId, TaskTypesId = timeEntryById.TaskTypesId, Date = timeEntryById.Date }; // Check if exists related entities. CheckRelatedEntities(timeEntryView, timeEntryById, out var relatedMemberByName, out var relatedProjectById); // Check Lock TimeEntries: User cannot Create TimeEntry, if enable Lock TimeEntry in Project settings. var isOnlyMemberAtProject = !IsAdminOrManagerOfProject(ApplicationUserCurrent.IsAdmin, relatedMemberByName.Id, relatedProjectById.Id); CheckLockTimeEntryByProjectSettings(timeEntryView.Date, relatedProjectById, isOnlyMemberAtProject); #region Delete TimeEntry from DB. try { Uow.TimeEntryRepository.Delete(timeEntryById.Id); Uow.Save(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while deleting the TimeEntry", e); } #endregion }
public void AddUpdateEntry(TimeEntryView entryToSave, string userId) { try { var eventType = EventTypes.Default; var peakerEvent = new PeakerEvent() { TimeStamp = DateTime.Now, UserId = userId }; if (entryToSave.id <= 0) { eventType = EventTypes.Created; var entryId = RetrieveSingleConvertible <int>(Constants.InsertTimeEntryProcedure, entryToSave.GetInsertParameters()); if (entryId != int.MinValue) { entryToSave.id = entryId; } } else { eventType = EventTypes.Updated; ExecuteNonQuery(Constants.UpdateTimeEntryProcedure, entryToSave.GetUpdateParameters()); } peakerEvent.EventType = eventType; peakerEvent.ObjectId = entryToSave.id; peakerEvent.Data = entryToSave; ProcessHours(entryToSave, GetIsShiftWorker(entryToSave.userDetailId)); new EventsAccess().SaveEvent(peakerEvent); } catch (Exception ex) { new EventsAccess().LogException(ex); throw; } }
private void CheckTotalTimeAtDay(Member memberByName, TimeEntryView timeEntryView, TimeEntry timeEntryById = null) { var totalTimeForDay = Uow.TimeEntryRepository.GetQueryWithIncludes() .Where(tEntry => tEntry.MemberId == memberByName.Id && tEntry.Date.Date == timeEntryView.Date.Date) .Sum(tEntry => tEntry.TimeActual); var newTime = timeEntryView.TimeValues.TimeActual; var newDate = timeEntryView.Date; if (timeEntryById != null) { var oldTime = timeEntryById.TimeActual; var oldDate = timeEntryById.Date; if (oldDate != newDate) { totalTimeForDay = totalTimeForDay + newTime; } else if (oldTime != newTime) { totalTimeForDay = totalTimeForDay - oldTime + newTime; } } else { totalTimeForDay = totalTimeForDay + newTime; } if (totalTimeForDay > Constants.SecondsInThisDay) { throw new CoralTimeDangerException($"Total work time on the date {timeEntryView.Date} is greater than 24 hours"); } }
private static void UpdateValuesForTimeEntry(TimeEntry timeEntry, TimeEntryView timeEntryView) { #region #1. Update related entites. timeEntry.ProjectId = timeEntryView.ProjectId; timeEntry.MemberId = timeEntryView.MemberId; timeEntry.TaskTypesId = timeEntryView.TaskTypesId; #endregion #region #2. Update other values. timeEntry.Date = timeEntryView.Date.Date; timeEntry.TimeActual = timeEntryView.TimeValues.TimeActual; timeEntry.TimeEstimated = timeEntryView.TimeValues.TimeEstimated ?? 0; timeEntry.TimeFrom = timeEntryView.TimeValues.TimeFrom ?? 0; timeEntry.TimeTo = timeEntryView.TimeValues.TimeTo ?? 0; timeEntry.TimeTimerStart = timeEntryView.TimeOptions.TimeTimerStart; timeEntry.Description = timeEntryView.Description; timeEntry.IsFromToShow = timeEntryView.TimeOptions.IsFromToShow; #endregion }
private void CheckTotalTimeAtDay(Member memberByName, TimeEntryView timeEntryView, TimeEntry timeEntryById = null) { var totalTimeForDay = Uow.TimeEntryRepository.GetQueryWithIncludes() .Where(tEntry => tEntry.MemberId == memberByName.Id && tEntry.Date.Date == timeEntryView.Date.Date) .Sum(tEntry => tEntry.Time); var newTime = timeEntryView.Time; var newDate = timeEntryView.Date; if (timeEntryById != null) { var oldTime = timeEntryById.Time; var oldDate = timeEntryById.Date; if (oldDate != newDate) { totalTimeForDay = totalTimeForDay + newTime; } else if (oldTime != newTime) { totalTimeForDay = totalTimeForDay - oldTime + newTime; } } else { totalTimeForDay = totalTimeForDay + newTime; } //TODO return !(timeEntry.Time/3600 >= 24) && !(Math.Abs(timeEntry.TimeTo - timeEntry.TimeFrom) >= TimeSpan.FromDays(1).TotalSeconds); if (totalTimeForDay > Constants.SecondsInThisDay) { throw new CoralTimeDangerException($"Total work time on the date {timeEntryView.Date} is greater than 24 hours"); } }
private void CheckRelatedEntities(TimeEntryView timeEntryView, TimeEntry timeEntry, out Member relatedMemberByName, out Project relatedProjectById) { relatedMemberByName = MemberImpersonated; var isOnlyMemberAtProject = !IsAdminOrManagerOfProject(ApplicationUserCurrent.IsAdmin, MemberImpersonated.Id, timeEntry.ProjectId); relatedProjectById = GetRelatedProjectById(timeEntryView.ProjectId, isOnlyMemberAtProject); var relatedMemberById = GetRelatedMemberById(timeEntryView.MemberId, isOnlyMemberAtProject); var relatedTaskTypeById = GetRetaledTaskTypeById(timeEntryView.TaskTypesId, isOnlyMemberAtProject); }
private void CheckRelatedEntities(TimeEntryView timeEntryView, TimeEntry timeEntry, string userName, out Member relatedMemberByName, out Project relatedProjectById) { var relatedUserByName = GetRelatedUserByName(userName); relatedMemberByName = GetRelatedMemberByUserName(userName); IsOnlyMemberAtProject = !IsAdminOrManagerOfProject(relatedUserByName.IsAdmin, relatedMemberByName.Id, timeEntry.ProjectId); relatedProjectById = GetRelatedProjectById(timeEntryView.ProjectId, IsOnlyMemberAtProject); var relatedMemberById = GetRelatedMemberById(timeEntryView.MemberId, IsOnlyMemberAtProject); var relatedTaskTypeById = GetRetaledTaskTypeById(timeEntryView.TaskTypesId, IsOnlyMemberAtProject); }
public IHttpActionResult Post([FromBody] TimeEntryView entryToSave) { if (User.Identity != null) { new TimeEntryAccess().AddUpdateEntry(entryToSave, User.Identity.GetUserId()); return(Ok()); } else { return(Unauthorized()); } }
public IActionResult Create([FromBody] TimeEntryView timeEntryView) { try { return(new JsonResult(_service.Create(timeEntryView, this.GetUserNameWithImpersonation()))); } catch (Exception e) { _logger.LogWarning($"Create method with parameters ({timeEntryView});\n {e}"); var errors = ExceptionsChecker.CheckTimeEntriesException(e); return(BadRequest(errors)); } }
private void ProcessHours(TimeEntryView entryToSave, bool isShiftWorker) { //get all hour entries //iterate through each entry //for each entry // if entry total drives total over 8 hours // split entry into two parts //regular hours and bool mondayThruFriday = (entryToSave.entryDate.DayOfWeek != DayOfWeek.Saturday && entryToSave.entryDate.DayOfWeek != DayOfWeek.Sunday); decimal threshold = isShiftWorker && mondayThruFriday ? 10 : 8; var finalHours = new List <TimeEntryHours>(); var hoursParams = GetSingleParameter("p_entryDate", entryToSave.entryDate.ToString("yyyy-MM-dd")); hoursParams.Add("p_userDetailId", entryToSave.userDetailId); hoursParams.Add("p_timeEntryIdToSkip", entryToSave.id); var hourEntries = Retrieve(TimeEntryHours.TimeEntryHoursFactory, Constants.GetHoursByDateProcedure, hoursParams).ToList(); hourEntries = MergeRecords(hourEntries); hourEntries.Add(new TimeEntryHours() { Id = int.MinValue, TimeEntryId = entryToSave.id, Duration = entryToSave.userHours, HoursType = HourTypes.Regular }); var entryDay = entryToSave.entryDate.DayOfWeek; if (entryDay == DayOfWeek.Sunday) { foreach (var hourEntry in hourEntries) { hourEntry.HoursType = HourTypes.DoubleTime; finalHours.Add(hourEntry); } } else if (entryDay == DayOfWeek.Saturday) { finalHours = ProcessHoursForDay(hourEntries, threshold, HourTypes.Overtime, HourTypes.DoubleTime); } else { finalHours = ProcessHoursForDay(hourEntries, threshold, HourTypes.Regular, HourTypes.Overtime); } UpdateTimeEntryHours(finalHours); }
public IActionResult Update(int id, [FromBody] TimeEntryView timeEntryView) { timeEntryView.Id = id; try { return(new JsonResult(_service.Update(timeEntryView))); } catch (Exception e) { _logger.LogWarning($"Update method with parameters ({id}, {timeEntryView});\n {e}"); var errors = ExceptionsChecker.CheckTimeEntriesException(e); return(BadRequest(errors)); } }
private List <TimeEntryView> FillTimeEntryView(List <TimeEntry> entries) { var workCodeAccess = new WorkCodeAccess(); var finalEntries = new List <TimeEntryView>(); foreach (var entry in entries) { var accountingName = RetrieveSingleConvertible <string>($@"SELECT AccountingName FROM peakertimemanagement.userdetail WHERE Id = {entry.UserDetailId};", null, false); entry.Hours = Retrieve(TimeEntryHours.TimeEntryHoursFactory, Constants.GetHoursForTimeEntryProcedure, entry.GetIdParameters()).ToList(); var newEntry = new TimeEntryView(entry, accountingName); newEntry.hours = entry.Hours; var code = workCodeAccess.GetWorkCode(entry.WorkCodeId); code.isSelected = true; newEntry.workCode = code; finalEntries.Add(newEntry); } return(finalEntries); }
public TimeEntryView Patch(TimeEntryTime timeEntryTime, string userName) { var timeEntryById = GetRelatedTimeEntryById(timeEntryTime.Id); var timeEntryView = new TimeEntryView { ProjectId = timeEntryById.ProjectId, MemberId = timeEntryById.MemberId, TaskTypesId = timeEntryById.TaskTypesId, Date = timeEntryById.Date }; // Check if exists related entities. CheckRelatedEntities(timeEntryView, timeEntryById, userName, out var relatedMemberByName, out var relatedProjectById); // Check Lock TimeEntries: User cannot Create TimeEntry, if enable Lock TimeEntry in Project settings. CheckLockTimeEntryByProjectSettings(timeEntryView.Date, relatedProjectById); // Check correct timing values from TimeEntryView. CheckCorrectTimingValues(timeEntryTime.TimeFrom, timeEntryTime.TimeTo, timeEntryTime.Time); // Update values for TimeEntryTime. UpdateValuesForTimeEntryTime(timeEntryById, timeEntryTime); #region Update and Save entity to DB. try { Uow.TimeEntryRepository.Update(timeEntryById); Uow.Save(); return(timeEntryById.GetViewTimeEntry(userName, Mapper)); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while updating TimeEntry", e); } #endregion }
public TimeEntryView Create(TimeEntryView timeEntryView) { var timeEntry = new TimeEntry(); // Check if exists related entities. CheckRelatedEntities(timeEntryView, timeEntry, out var relatedMemberByName, out var relatedProjectById); // Check Lock TimeEntries: User cannot Create TimeEntry, if enable Lock TimeEntry in Project settings. var isOnlyMemberAtProject = !IsAdminOrManagerOfProject(ApplicationUserCurrent.IsAdmin, relatedMemberByName.Id, timeEntry.ProjectId); CheckLockTimeEntryByProjectSettings(timeEntryView.Date, relatedProjectById, isOnlyMemberAtProject); // Check correct timing values from TimeEntryView. CheckCorrectTimingValues(timeEntryView.TimeValues.TimeFrom, timeEntryView.TimeValues.TimeTo, timeEntryView.TimeValues.TimeActual); // Check that total time per day is not grater than 24 hours. CheckTotalTimeAtDay(relatedMemberByName, timeEntryView, timeEntry); // Update values for TimeEntry. UpdateValuesForTimeEntry(timeEntry, timeEntryView); #region Insert TimeEntry to DB. try { Uow.TimeEntryRepository.Insert(timeEntry); Uow.Save(); var timeEntryWithUpdateRelatedEntities = Uow.TimeEntryRepository.LinkedCacheGetById(timeEntry.Id); return(timeEntryWithUpdateRelatedEntities.GetView(ImpersonatedUserName, Mapper)); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while creating new TimeEntry", e); } #endregion }
public TimeEntryViewModel(TimeEntryView timeEntry) { _timeEntry = timeEntry; }
public IActionResult Create([FromBody] TimeEntryView timeEntryView) => new JsonResult(_service.Create(timeEntryView));
public IActionResult Update(int id, [FromBody] TimeEntryView timeEntryView) { timeEntryView.Id = id; return(new JsonResult(_service.Update(timeEntryView))); }
public List <TimeEntryView> ImportCsv() { List <TimeEntryView> returnEntries = new List <TimeEntryView>(); List <string> rowErrors = new List <string>(); string userName = string.Empty; string baseCode = string.Empty; int index = 1; using (TextFieldParser parser = new TextFieldParser(ImportPath + ImportFileName)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); while (!parser.EndOfData) { TimeEntryView view = new TimeEntryView(); //Processing row string[] fields = parser.ReadFields(); if (fields[0].ToLower() == "username") { index++; continue; //Header } userName = fields[0]; try { view.entryDate = DateTime.Parse(fields[1]); } catch { rowErrors.Add($"Unable to parse date for row {index}, row skipped."); index++; continue; } baseCode = fields[2].Split('-')[0].Trim(); view.jobnumber = fields[3]; if (view.jobnumber != string.Empty) { if (view.jobnumber.Length != 5) { rowErrors.Add($"Jobnumber not 5 characters for row {index}, row skipped."); index++; continue; } } try { view.userHours = decimal.Parse(fields[4]); } catch { rowErrors.Add($"Unable to parse hours for row {index}, row skipped."); index++; continue; } view.comments = fields[5]; try { view.userDetailId = RetrieveSingleConvertible <int>("getuserdetailidfromusername", GetSingleParameter("p_usernamne", userName)); } catch (ArgumentOutOfRangeException ex) { rowErrors.Add($"Unable to determine userdetail id for username {userName} at row {index}, row skipped."); index++; continue; } try { view.workCodeId = RetrieveSingleConvertible <int>("getworkcodeidfrombasecode", GetSingleParameter("p_basecode", baseCode)); } catch (ArgumentOutOfRangeException ex) { rowErrors.Add($"Unable to determine workcode id for basecode {baseCode} at row {index}, row skipped."); index++; continue; } returnEntries.Add(view); index++; } } foreach (string error in rowErrors) { Console.WriteLine(error); } return(returnEntries); }
public void SetEntryExportedToNavision(TimeEntryView entry) { ExecuteNonQuery(Constants.SetExportedToNavisionProcedure, GetSingleParameter("p_timeEntryId", entry.id)); }
private void ProcessShiftHours(TimeEntryView entryToSave) { throw new NotImplementedException(); }