public IHttpActionResult AssignPrimaryContactToGln(int glnId, [FromBody] PrimaryContact selectedContact) { var glnToUpdate = _unitOfWork.Glns.FindSingle(b => b.Id == glnId); var glnBeforeUpdate = DtoHelper.CreateGlnDto(glnToUpdate); try { var currentDbVersion = _unitOfWork.Glns.FindSingle(g => g.Id == glnId).Version; if (ConcurrencyChecker.canSaveChanges(glnToUpdate.Version, currentDbVersion) && _unitOfWork.Glns.PrimaryContactExists(selectedContact.Id)) { glnToUpdate.ContactId = selectedContact.Id; glnToUpdate.Version = glnToUpdate.Version + 1; _unitOfWork.Complete(); var assignedDetails = $"Contact {selectedContact.Name}, Id: {selectedContact.Id} " + $"was assigned to GLN: {glnToUpdate.OwnGln}"; _logger.SuccessfulUpdateServerLog(HttpContext.Current.User, glnBeforeUpdate, assignedDetails); return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate))); } else { return(Conflict()); } } catch (Exception ex) { var failedMsg = $"Failed to assign contact {selectedContact.Name}, Id: {selectedContact.Id} to GLN: {glnToUpdate.OwnGln}. Exception generated: {ex}"; _logger.FailedUpdateServerLog <Exception, string, object>(HttpContext.Current.User, ex.Message, ex.InnerException, failedMsg); return(InternalServerError()); } }
public IHttpActionResult ChangeParentOnChildren(string origninalParentGln, string newParentGln) { if (string.IsNullOrWhiteSpace(origninalParentGln) || string.IsNullOrWhiteSpace(newParentGln)) { return(BadRequest()); } var childrenToUpdateParent = _unitOfWork.Glns.Find(gln => gln.ParentGln == origninalParentGln).ToList(); var originalParent = _unitOfWork.Glns.FindSingle(gln => gln.OwnGln == origninalParentGln); var newParent = _unitOfWork.Glns.FindSingle(gln => gln.OwnGln == newParentGln); if (Equals(childrenToUpdateParent, null) || Equals(originalParent, null) || Equals(newParent, null)) { return(BadRequest()); } try { foreach (var child in childrenToUpdateParent) { //Check to ensure not assigning itself as its own parent and //Check that new parents parent is not the same as childs own number to avoid creating a loop if (child.OwnGln != newParentGln && newParent.ParentGln != child.OwnGln) { // Don't update if alternative system is responsible for holding truth state if (!child.AlternativeSystemIsTruth) { child.ParentGln = newParentGln; child.Version = child.Version + 1; } } } //Required so that the calculations for children below will be correct _unitOfWork.Complete(); originalParent.NumberOfChildren = _unitOfWork.Glns.Find(gln => gln.ParentGln == origninalParentGln).Count(); originalParent.Version = originalParent.Version + 1; newParent.NumberOfChildren = _unitOfWork.Glns.Find(gln => gln.ParentGln == newParentGln).Count(); newParent.Version = newParent.Version + 1; _unitOfWork.Complete(); var successMsg = $"The children of parent GLN: {origninalParentGln} were all assigned to new parent GLN: {newParentGln}"; foreach (var child in childrenToUpdateParent) { var i = 1; successMsg = successMsg + $" Child No. {i} {child.OwnGln}, "; i = i + 1; } _logger.SuccessfulUpdateServerLog(HttpContext.Current.User, DtoHelper.CreateGlnDto(originalParent), successMsg); GlnDto returnParentGln = DtoHelper.CreateGlnIncludeChildrenDto(_unitOfWork.Glns.FindSingle(gln => gln.OwnGln == origninalParentGln)); return(Ok(returnParentGln)); } catch (Exception ex) { var failedMsg = $"Failed to update children of parent {origninalParentGln} to new parent {newParentGln}. Exception generated: {ex}"; _logger.FailedUpdateServerLog <Exception, string, object>(HttpContext.Current.User, ex.Message, ex.InnerException, failedMsg); return(InternalServerError()); } }
public IHttpActionResult UpdateGln(Gln gln) { if (Equals(gln, null)) { return(BadRequest()); } var glnToUpdate = _unitOfWork.Glns.FindSingle(g => g.Id == gln.Id); var glnBeforeUpdate = DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate); if (Equals(glnToUpdate, null)) { return(BadRequest()); } var currentDbVersion = glnToUpdate.Version; if (!ConcurrencyChecker.canSaveChanges(gln.Version, currentDbVersion)) { _logger.ConcurrenyServerLog(HttpContext.Current.User, gln.Version, currentDbVersion); return(Conflict()); } var updatedGln = _unitOfWork.Glns.UpdateGln(gln); try { _unitOfWork.Complete(); var completed = _unitOfWork.Glns.FindSingle(g => g.Id == gln.Id); _logger.SuccessfulUpdateServerLog(HttpContext.Current.User, glnBeforeUpdate, DtoHelper.CreateGlnDto(completed)); if (glnBeforeUpdate.ParentGln != glnToUpdate.ParentGln) { if (!string.IsNullOrEmpty(glnBeforeUpdate.ParentGln)) { // Update number of children on previous parent var oldParent = _unitOfWork.Glns.FindSingle(g => g.OwnGln == glnBeforeUpdate.ParentGln); oldParent.NumberOfChildren = _unitOfWork.Glns.Find(g => g.ParentGln == oldParent.OwnGln).Count(); _unitOfWork.Complete(); } if (!string.IsNullOrEmpty(glnToUpdate.ParentGln)) { // Update number of children on new parent that has aquired an additional child var newParent = _unitOfWork.Glns.FindSingle(g => g.OwnGln == glnToUpdate.ParentGln); newParent.NumberOfChildren = _unitOfWork.Glns.Find(g => g.ParentGln == newParent.OwnGln).Count(); _unitOfWork.Complete(); } } return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(completed))); } catch (Exception ex) { _logger.FailedUpdateServerLog(HttpContext.Current.User, ex.Message, ex.InnerException, DtoHelper.CreateGlnDto(glnToUpdate), DtoHelper.CreateGlnIncludeChildrenDto(updatedGln)); return(InternalServerError()); } }