Beispiel #1
0
        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());
            }
        }
Beispiel #2
0
        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());
            }
        }
Beispiel #3
0
        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());
            }
        }