Example #1
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());
            }
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        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());
            }
        }
Example #5
0
        public IHttpActionResult GetPrimary()
        {
            var primary = _unitOfWork.Glns.FindSingle(gln => gln.Primary);

            if (Equals(primary, null))
            {
                return(NotFound());
            }

            return(Ok(DtoHelper.CreateGlnIncludeChildrenDto(primary)));
        }
Example #6
0
        public GlnDto GetNextUnassignedGln()
        {
            var gln = _db.Glns.FirstOrDefault(b => !b.Assigned && !b.AlternativeSystemIsTruth);

            if (Equals(gln, null))
            {
                return(new GlnDto());
            }

            return(DtoHelper.CreateGlnIncludeChildrenDto(gln));
        }
Example #7
0
        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));
            }
        }
Example #8
0
        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));
            }
        }
Example #9
0
        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)));
        }
Example #10
0
        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());
            }
        }
Example #11
0
        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)));
            }
        }
Example #12
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());
            }
        }
Example #13
0
        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());
            }
        }
Example #14
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());
            }
        }
Example #15
0
        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);
            }
        }
Example #16
0
        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);
            }
        }