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()); } }
public GlnDto GetGlnByGln(string gln) { var findGlns = _db.Glns.SingleOrDefault(b => b.OwnGln == gln); if (!Equals(findGlns, null)) { //Everytime gln is fetched calculate its children to ensure it is up to date var currentDbVersion = _db.Glns.SingleOrDefault(bc => bc.OwnGln == gln).Version; if (ConcurrencyChecker.canSaveChanges(findGlns.Version, currentDbVersion)) { findGlns.NumberOfChildren = CalculateChildrenNumbers(findGlns.OwnGln); } // If primary then GLN will not have a parent if (!findGlns.Primary) { findGlns.ParentDescriptionPurpose = _db.Glns.SingleOrDefault(bc => bc.OwnGln == findGlns.ParentGln).FriendlyDescriptionPurpose; } _db.SaveChanges(); } return(DtoHelper.CreateGlnIncludeChildrenDto(findGlns)); }
public GlnDto GetGlnById(int id) { var gln = _db.Glns.SingleOrDefault(b => b.Id == id); if (!Equals(gln, null)) { //Everytime gln is fetched calculate its children to ensure it is up to date var currentDbVersion = _db.Glns.SingleOrDefault(bc => bc.Id == id).Version; if (ConcurrencyChecker.canSaveChanges(gln.Version, currentDbVersion)) { gln.NumberOfChildren = CalculateChildrenNumbers(gln.OwnGln); } // If primary then GLN will not have a parent try { if (!gln.Primary) { gln.ParentDescriptionPurpose = _db.Glns.SingleOrDefault(bc => bc.OwnGln == gln.ParentGln).FriendlyDescriptionPurpose; } _db.SaveChanges(); } catch (Exception ex) { var failedMsg = $"Failed to update Parent Description Purpose on {gln.OwnGln} " + $". Exception generated: {ex}"; _mongoMongoLogger.FailedUpdateServerLog <Exception, string, object>(HttpContext.Current.User, ex.Message, ex.InnerException, failedMsg); } } return(DtoHelper.CreateGlnIncludeChildrenDto(gln)); }
public IHttpActionResult LogPharmacyVisit(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()); } try { _logger.SiteVisitedLog(HttpContext.Current.User, glnBeforeUpdate); return(Ok()); } catch (Exception ex) { _logger.FailedUpdateServerLog(HttpContext.Current.User, ex.Message, ex.InnerException, DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate), DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate)); return(InternalServerError()); } }
public IHttpActionResult GetPrimary() { var primary = _unitOfWork.Glns.FindSingle(gln => gln.Primary); if (Equals(primary, null)) { return(NotFound()); } return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(primary))); }
public GlnDto GetNextUnassignedGln() { var gln = _db.Glns.FirstOrDefault(b => !b.Assigned && !b.AlternativeSystemIsTruth); if (Equals(gln, null)) { return(new GlnDto()); } return(DtoHelper.CreateGlnIncludeChildrenDto(gln)); }
public IHttpActionResult GetGlnByGln(string gln) { var foundGln = _unitOfWork.Glns.GetGlnsByGln(gln); if (Equals(foundGln, null)) { return(NotFound()); } else { GlnDto mappedGln = DtoHelper.CreateGlnIncludeChildrenDto(foundGln); return(Ok(mappedGln)); } }
public IHttpActionResult GetGlnById(int id) { var gln = _unitOfWork.Glns.Get(id); if (Equals(gln, null)) { return(BadRequest()); } else { GlnDto mappedGln = DtoHelper.CreateGlnIncludeChildrenDto(gln); return(Ok(mappedGln)); } }
public IHttpActionResult NewAssignedGln([FromBody] Gln assignedGln) { if (Equals(assignedGln, null) || Equals(assignedGln.Address, null)) { return(BadRequest()); } GlnDto updateGln = DtoHelper.CreateGlnIncludeChildrenDto(_unitOfWork.Glns.FindSingle(gln => gln.Id == assignedGln.Id)); if (Equals(updateGln, null)) { return(BadRequest()); } _unitOfWork.Glns.UpdateGln(assignedGln); return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(assignedGln))); }
public IHttpActionResult MobileUpdateGln(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; glnToUpdate.FriendlyDescriptionPurpose = gln.FriendlyDescriptionPurpose; if (!ConcurrencyChecker.canSaveChanges(gln.Version, currentDbVersion)) { _logger.ConcurrenyServerLog(HttpContext.Current.User, gln.Version, currentDbVersion); return(Conflict()); } glnToUpdate.Version = currentDbVersion + 1; try { _unitOfWork.Complete(); var completed = _unitOfWork.Glns.FindSingle(g => g.Id == gln.Id); _logger.SuccessfulUpdateServerLog(HttpContext.Current.User, glnBeforeUpdate, DtoHelper.CreateGlnIncludeChildrenDto(completed)); return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(completed))); } catch (Exception ex) { _logger.FailedUpdateServerLog(HttpContext.Current.User, ex.Message, ex.InnerException, DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate), DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate)); return(InternalServerError()); } }
public IHttpActionResult AssignAddressGetNextUnassignedGln(int addressId = 0) { Address addressToAssign = _unitOfWork.Addresses.FindSingle(a => a.Id == addressId); if (addressToAssign == null) { var nextUnassignedGln = _unitOfWork.Glns.Find(gln => !gln.Assigned && !gln.AlternativeSystemIsTruth).First(); if (nextUnassignedGln.Id <= 0) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No unassigned GLN can be located."))); } _unitOfWork.Glns.RemoveAllGlnAssociation(nextUnassignedGln.Id); _unitOfWork.Complete(); return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(nextUnassignedGln))); } else { // If address is found assign the address to next GLN to be assigned var nextUnassignedGln = _unitOfWork.Glns.Find(gln => !gln.Assigned && !gln.AlternativeSystemIsTruth).First(); if (nextUnassignedGln.Id <= 0) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No unassigned GLN can be located."))); } nextUnassignedGln.AddressId = addressId; _unitOfWork.Glns.RemoveAllGlnAssociation(nextUnassignedGln.Id); _unitOfWork.Complete(); return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(nextUnassignedGln))); } }
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 ChangeParent(int glnId, string originalParentGln, string newParentGln) { if (glnId <= 0 || string.IsNullOrWhiteSpace(originalParentGln) || string.IsNullOrWhiteSpace(newParentGln)) { return(BadRequest()); } var updateParentGln = _unitOfWork.Glns.FindSingle(gln => gln.Id == glnId); var newParent = _unitOfWork.Glns.FindSingle(gln => gln.OwnGln == newParentGln); var oldParent = _unitOfWork.Glns.FindSingle(gln => gln.OwnGln == originalParentGln); if (Equals(updateParentGln, null) || Equals(newParent, null) || Equals(oldParent, null)) { return(BadRequest()); } // Don't update if alternative system is responsible for holding truth state if (updateParentGln.AlternativeSystemIsTruth) { return(BadRequest()); } try { //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 (updateParentGln.OwnGln != newParent.OwnGln && newParent.ParentGln != updateParentGln.OwnGln) { var updateGln = _unitOfWork.Glns.FindSingle(gln => gln.Id == glnId); updateGln.ParentDescriptionPurpose = newParent.FriendlyDescriptionPurpose; updateGln.ParentGln = newParent.OwnGln; updateGln.ParentId = newParent.Id; if (newParent.TierLevel >= 5) { updateGln.TierLevel = newParent.TierLevel; } else { updateGln.TierLevel = newParent.TierLevel + 1; } updateGln.Version = updateGln.Version + 1; if (updateGln.PhysicalType) { var primaryContact = _unitOfWork.PrimaryContacts .FindSingle(pc => pc.ForPhysicals == true); if (primaryContact != null) { updateGln.ContactId = primaryContact.Id; } } else { var primaryContact = _unitOfWork.PrimaryContacts .FindSingle(pc => pc.ForFunctionals == true); if (primaryContact != null) { updateGln.ContactId = primaryContact.Id; } } _unitOfWork.Complete(); UpdateTierLevel(updateGln); var successMsg = $"The parent of GLN: {updateGln.OwnGln} was updated from {originalParentGln} to new parent GLN: {newParentGln}"; _logger.SuccessfulUpdateServerLog <string, object>(HttpContext.Current.User, successMsg); GlnDto returnUpdatedGln = DtoHelper.CreateGlnIncludeChildrenDto(_unitOfWork.Glns.FindSingle(gln => gln.Id == glnId)); return(Ok(returnUpdatedGln)); } return(Ok(updateParentGln)); } catch (Exception ex) { var failedMsg = $"Failed to update parent on {updateParentGln.OwnGln} " + $"from to old parent {originalParentGln} to new parent {newParentGln}. 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 HttpStatusCode ChangeParentOnChildren(string origninalParentGln, string newParentGln) { var childrenToUpdateParent = _db.Glns.Where(bc => bc.ParentGln == origninalParentGln).ToList(); var originalParent = _db.Glns.SingleOrDefault(bc => bc.OwnGln == origninalParentGln); var newParent = _db.Glns.SingleOrDefault(bc => bc.OwnGln == newParentGln); if (Equals(childrenToUpdateParent, null) || Equals(originalParent, null) || Equals(newParent, null)) { return(HttpStatusCode.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 _db.SaveChanges(); originalParent.NumberOfChildren = CalculateChildrenNumbers(origninalParentGln); originalParent.Version = originalParent.Version + 1; newParent.NumberOfChildren = CalculateChildrenNumbers(newParentGln); newParent.Version = newParent.Version + 1; _db.SaveChanges(); 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; } _mongoMongoLogger.SuccessfulUpdateServerLog(HttpContext.Current.User, DtoHelper.CreateGlnIncludeChildrenDto(originalParent), successMsg); return(HttpStatusCode.OK); } catch (Exception ex) { var failedMsg = $"Failed to update children of parent {origninalParentGln} to new parent {newParentGln}. Exception generated: {ex}"; _mongoMongoLogger.FailedUpdateServerLog <Exception, string, object>(HttpContext.Current.User, ex.Message, ex.InnerException, failedMsg); return(HttpStatusCode.InternalServerError); } }
public HttpStatusCode AssignNewGln(int contactId, int addressId, Gln gln) { if (contactId <= 0) { return(HttpStatusCode.BadRequest); } if (addressId <= 0) { return(HttpStatusCode.BadRequest); } var glnToUpdate = _db.Glns.SingleOrDefault(b => b.Id == gln.Id); var glnBeforeUpdate = DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate); var currentDbVersion = glnToUpdate.Version; try { if (ConcurrencyChecker.canSaveChanges(gln.Version, currentDbVersion)) { glnToUpdate.Assigned = true; glnToUpdate.Active = gln.Active; glnToUpdate.FriendlyDescriptionPurpose = gln.FriendlyDescriptionPurpose; glnToUpdate.FunctionalType = gln.FunctionalType; glnToUpdate.LegalType = gln.LegalType; glnToUpdate.PhysicalType = gln.PhysicalType; glnToUpdate.DigitalType = gln.DigitalType; glnToUpdate.Public = gln.Public; glnToUpdate.ParentGln = gln.ParentGln; glnToUpdate.AddressId = gln.AddressId; glnToUpdate.ContactId = gln.ContactId; glnToUpdate.UseParentAddress = gln.UseParentAddress; glnToUpdate.Version = gln.Version + 1; glnToUpdate.TrustActive = gln.TrustActive; glnToUpdate.SuspensionReason = gln.SuspensionReason; glnToUpdate.Function = gln.Function; glnToUpdate.Department = gln.Department; glnToUpdate.TierLevel = gln.TierLevel; //Calculate how many children this gln has glnToUpdate.NumberOfChildren = CalculateChildrenNumbers(glnToUpdate.OwnGln); glnToUpdate.ParentGln = _db.Glns.SingleOrDefault(bc => bc.Primary).OwnGln; _db.SaveChanges(); _mongoMongoLogger.SuccessfulUpdateServerLog(HttpContext.Current.User, glnBeforeUpdate, DtoHelper.CreateGlnIncludeChildrenDto(glnToUpdate)); return(HttpStatusCode.OK); } else { _mongoMongoLogger.ConcurrenyServerLog <object, object>(HttpContext.Current.User, glnBeforeUpdate); return(HttpStatusCode.Conflict); } } catch (Exception ex) { var failedMsg = $"Failed to assign new GLN {glnToUpdate.OwnGln}, {glnToUpdate.FriendlyDescriptionPurpose}."; _mongoMongoLogger.FailedUpdateServerLog <Exception, string, object>(HttpContext.Current.User, ex.Message, ex.InnerException, failedMsg); return(HttpStatusCode.InternalServerError); } }