public void FromUiDto_AddOrUpdateProfessionalWorkingHours(string userIdString, List <ProfessionalWorkingHourUiDto> professionalWorkingHoursUiDto) { List <ProfessionalWorkingHour> professionalWorkingHours = new List <ProfessionalWorkingHour>(); // Validation - only allow update of one professional at a time. List <Guid> proIds = professionalWorkingHoursUiDto.Select(i => i.ProfessionalId).ToList(); // Need a list of companyLocationGroups for the udpate. AuthorizationState authState; List <CompanyLocationGroup> companyLocationGroups = _companyLocationGroupQueries.GetCompanyLocationGroups(userIdString, out authState); // Convert to db model. foreach (var row in professionalWorkingHoursUiDto) { ProfessionalWorkingHour pwh = _mapper.Map <ProfessionalWorkingHourUiDto, ProfessionalWorkingHour>(row); var matchingLocationGroup = companyLocationGroups.FirstOrDefault(i => i.CompanyLocationGroupId == row.CompanyLocationGroupId); if (matchingLocationGroup == null) { throw new InvalidOperationException("Invalid company location group found"); } pwh.CompanyLocationGroup = matchingLocationGroup; professionalWorkingHours.Add(pwh); } // Add / Update AddOrUpdateProfessionalWorkingHours(userIdString, professionalWorkingHours, proIds); }
public async Task <ActionResult> Edit([Bind(Include = "ProfessionalWorkingHourId,ProfessionalWorkingHourIndex,DayOfWeek,StartTime,EndTime,IncludeBankHolidays,CreatedByProfessionalId,CreatedDate,UpdatedByProfessionalId,UpdatedDate,IsDeleted,DeletedByProfessionalId,DeletedDate")] ProfessionalWorkingHour professionalWorkingHour) { if (ModelState.IsValid) { //db.Entry(professionalWorkingHour).State = EntityState.Modified; //await db.SaveChangesAsync(); return(RedirectToAction("Index")); } return(View(professionalWorkingHour)); }
public async Task <ActionResult> Create([Bind(Include = "ProfessionalWorkingHourId,ProfessionalWorkingHourIndex,DayOfWeek,StartTime,EndTime,IncludeBankHolidays,CreatedByProfessionalId,CreatedDate,UpdatedByProfessionalId,UpdatedDate,IsDeleted,DeletedByProfessionalId,DeletedDate")] ProfessionalWorkingHour professionalWorkingHour) { if (ModelState.IsValid) { professionalWorkingHour.ProfessionalWorkingHourId = Guid.NewGuid(); //db.ProfessionalWorkingHours.Add(professionalWorkingHour); //await db.SaveChangesAsync(); return(RedirectToAction("Index")); } return(View(professionalWorkingHour)); }
// REMEMBER TO VALIDATE START < END Date! // LOOK INTO OVERPOSTING PROTECTION. // Cancel to post back to same page? // See CompanyLocationGroupsController example for shared razor and saves. // GET: ProfessionalWorkingHours/Details/5 public async Task <ActionResult> Details(Guid?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } ProfessionalWorkingHour professionalWorkingHour = null; if (professionalWorkingHour == null) { return(HttpNotFound()); } return(View(professionalWorkingHour)); }
/// <summary> /// This should handle any authorised person updating the working hours for the professional. /// </summary> /// <param name="userIdString"></param> /// <param name="professionalWorkingHoursToUpdate"></param> /// <param name="workingHoursProfessionalId">workingHoursProfessionalId must match the correspoinding index of professionalWorkingHoursToUpdate</param> public void AddOrUpdateProfessionalWorkingHours(string userIdString, List <ProfessionalWorkingHour> professionalWorkingHoursToUpdate, List <Guid> workingHoursProfessionalIds) { //TODO: ****Null checks at top across the board!*** AuthorizationState authState = AuthorizationState.NotAllowed; DateTime now = DateTime.Now; if (String.IsNullOrWhiteSpace(userIdString) || professionalWorkingHoursToUpdate == null || !professionalWorkingHoursToUpdate.Any()) { return; } Guid userId = GuidHelper.GetGuid(userIdString); // Get all professionals that we could theoretically update. List <Professional> professionalsToUpdate = _accessQueries.GetAuthorization_ProfessionalWorkingHours_ReturnProsToUpdate(userId, workingHoursProfessionalIds, out authState); if (authState != AuthorizationState.CreateReadUpdate) { return; } // Note the submitting professional Professional submittingPro = professionalsToUpdate.FirstOrDefault(i => i.ProfessionalUserId == userId); if (submittingPro == null) { return; } // we are not allowing deletions, so don't need to consider that case. int index = 0; foreach (var professionalWorkingHourToUpdate in professionalWorkingHoursToUpdate) { var idx = index; var matchingProfessional = professionalsToUpdate.FirstOrDefault(i => i.ProfessionalId == workingHoursProfessionalIds[idx]); if (matchingProfessional == null) { index = index + 1; continue; } ProfessionalWorkingHour matchingDbRow = null; if (matchingProfessional != null && matchingProfessional.ProfessionalWorkingHours != null) { matchingDbRow = matchingProfessional.ProfessionalWorkingHours .FirstOrDefault(i => i.ProfessionalWorkingHourId != new Guid() && i.ProfessionalWorkingHourId == professionalWorkingHourToUpdate.ProfessionalWorkingHourId); } bool isInsert = false; if (matchingDbRow == null) { // insert isInsert = true; matchingDbRow = new ProfessionalWorkingHour(); matchingDbRow.ProfessionalWorkingHourId = Guid.NewGuid(); matchingDbRow.CreatedDate = now; if (userId == matchingProfessional.ProfessionalUserId) { matchingDbRow.CreatedByProfessionalId = matchingProfessional.ProfessionalId; } else { matchingDbRow.CreatedByProfessionalId = _unitOfWork.ProfessionalsRepository.Get(i => i.ProfessionalUserId == userId).First().ProfessionalId; } } matchingDbRow.DayOfWeek = professionalWorkingHourToUpdate.DayOfWeek; matchingDbRow.StartTime = professionalWorkingHourToUpdate.StartTime; matchingDbRow.EndTime = professionalWorkingHourToUpdate.EndTime; matchingDbRow.IncludeBankHolidays = professionalWorkingHourToUpdate.IncludeBankHolidays; //delete + logging logic. if (!matchingDbRow.IsDeleted && professionalWorkingHourToUpdate.IsDeleted) { matchingDbRow.IsDeleted = professionalWorkingHourToUpdate.IsDeleted; matchingDbRow.DeletedByProfessionalId = submittingPro.ProfessionalId; matchingDbRow.DeletedDate = now; } else if (matchingDbRow.IsDeleted && !professionalWorkingHourToUpdate.IsDeleted) { matchingDbRow.IsDeleted = professionalWorkingHourToUpdate.IsDeleted; matchingDbRow.DeletedByProfessionalId = null; matchingDbRow.DeletedDate = null; } matchingDbRow.UpdatedByProfessionalId = submittingPro.ProfessionalId; matchingDbRow.UpdatedDate = now; matchingDbRow.CompanyLocationGroup = professionalWorkingHourToUpdate.CompanyLocationGroup; if (isInsert) { _unitOfWork.ProfessionalWorkingHoursRepository.Insert(matchingDbRow); } else { _unitOfWork.ProfessionalWorkingHoursRepository.Update(matchingDbRow); } index = index + 1; }//end foreach _unitOfWork.Save(); }