public void Delete(Guid id) { if (!User.IsInRole("cdb.trainingeditors")) { ThrowAuthError(); } List <string> files = new List <string>(); var item = GetObjectOrNotFound(() => db.TrainingAward.FirstOrDefault(f => f.Id == id)); var memberId = item.Member.Id; db.TrainingAward.Remove(item); db.SaveChanges(); Data.TrainingRecordCalculator calculator = new Data.TrainingRecordCalculator(db); calculator.Calculate(memberId); db.SaveChanges(); }
public TrainingRecord Post([FromBody] TrainingRecord view) { //TODO - Move validation errors to API way of doing things log.DebugFormat("POST {0} {1} {2}", Request.RequestUri, User.Identity.Name, JsonConvert.SerializeObject(view)); if (!User.IsInRole("cdb.trainingeditors")) { ThrowAuthError(); } // if (!Permissions.IsAdmin && !Permissions.IsSelf(view.MemberId) && !Permissions.IsMembershipForPerson(view.MemberId)) return GetAjaxLoginError<MemberContactView>(null); //List<SubmitError> errors = new List<SubmitError>(); //if (view.Member.Id == Guid.Empty) //{ // ThrowSubmitErrors(new [] { new SubmitError { Error = Strings.API_Required, Property = "Member" } }); //} Data.TrainingAward model; model = (from a in db.TrainingAward.Include("Member").Include("Course") where a.Id == view.ReferenceId select a).FirstOrDefault(); if (model == null) { model = new Data.TrainingAward(); model.Member = db.Members.Where(f => f.Id == view.Member.Id).FirstOrDefault(); //if (model.Member == null) //{ // errors.Add(new SubmitError { Property = "Member", Error = Strings.API_NotFound }); // ThrowSubmitErrors(errors); //} db.TrainingAward.Add(model); } //try //{ model.UploadsPending = (view.PendingUploads > 0); DateTime completed; if (string.IsNullOrWhiteSpace(view.Completed)) { // errors.Add(new SubmitError { Property = "Completed", Error = Strings.API_Required }); } else if (!DateTime.TryParse(view.Completed, out completed)) { // errors.Add(new SubmitError { Error = Strings.API_InvalidDate, Property = "Completed" }); } else { model.Completed = completed; } if (model.metadata != view.Comments) { model.metadata = view.Comments; } if (model.Member.Id != view.Member.Id) { throw new InvalidOperationException("Don't know how to change member yet"); } if (view.Course.Id == null) { // errors.Add(new SubmitError { Error = Strings.API_Required, Id = new[] { view.ReferenceId }, Property = "Course" }); } else if (model.Course == null || model.Course.Id != view.Course.Id) { model.Course = (from c in db.TrainingCourses where c.Id == view.Course.Id select c).First(); } switch (view.ExpirySrc) { case "default": model.Expiry = model.Course.ValidMonths.HasValue ? model.Completed.AddMonths(model.Course.ValidMonths.Value) : (DateTime?)null; break; case "custom": if (!string.IsNullOrWhiteSpace(view.Expires)) { model.Expiry = DateTime.Parse(view.Expires); } else { // errors.Add(new SubmitError { Error = Strings.API_TrainingRecord_CustomExpiryRequired, Property = "Expiry", Id = new[] { view.ReferenceId } }); } break; case "never": model.Expiry = null; break; } // Documentation required. if (!model.UploadsPending && string.IsNullOrWhiteSpace(model.metadata)) { // errors.Add(new SubmitError { Error = Strings.API_TrainingRecord_DocumentationRequired, Property = BaseApiController.ModelRootNodeName }); } // Prevent duplicate records if (db.TrainingAward.Where(f => f.Id != model.Id && f.Completed == model.Completed && f.Course.Id == model.Course.Id && f.Member.Id == model.Member.Id).Count() > 0) { // ThrowSubmitErrors(new [] { new SubmitError { Error = Strings.API_TrainingRecord_Duplicate, Id = new[] { model.Id }, Property = BaseApiController.ModelRootNodeName }}); } //if (errors.Count == 0) //{ db.SaveChanges(); Data.TrainingRecordCalculator calculator = new Data.TrainingRecordCalculator(db); calculator.Calculate(model.Member.Id); db.SaveChanges(); //} view.ReferenceId = model.Id; view.Course.Title = model.Course.DisplayName; //} //catch (RuleViolationsException ex) //{ // foreach (RuleViolation v in ex.Errors) // { // errors.Add(new SubmitError { Error = v.ErrorMessage, Property = v.PropertyName, Id = new[] { v.EntityKey } }); // } // // throw new InvalidOperationException("TODO: report errors"); //} //if (errors.Count > 0) //{ // ThrowSubmitErrors(errors); //} return(view); }