Ejemplo n.º 1
0
        /// <summary>
        ///  Handle the updating of terminology for an existing condition
        /// </summary>
        /// <param name="conditionForUpdate">The payload containing the list of lab tests</param>
        /// <param name="conditionFromRepo">The condition entity that is being updated</param>
        /// <returns></returns>
        private void AddOrUpdateConditionMeddras(ConditionForUpdateDto conditionForUpdate, Condition conditionFromRepo)
        {
            // Determine what has been removed
            ArrayList deleteCollection = new ArrayList();

            foreach (var conditionMeddra in conditionFromRepo.ConditionMedDras)
            {
                if (!conditionForUpdate.ConditionMedDras.Contains(conditionMeddra.TerminologyMedDra.Id))
                {
                    deleteCollection.Add(conditionMeddra);
                }
            }
            // Process deletes
            foreach (var conditionMeddra in deleteCollection)
            {
                _conditionMeddraRepository.Delete(conditionMeddra);
            }

            // Determine what needs to be added
            foreach (var meddraId in conditionForUpdate.ConditionMedDras)
            {
                if (!conditionFromRepo.ConditionMedDras.Any(c => c.TerminologyMedDra.Id == meddraId))
                {
                    var newConditionMedra = new ConditionMedDra()
                    {
                        Condition = conditionFromRepo, TerminologyMedDra = _terminologyMeddraRepository.Get(f => f.Id == meddraId)
                    };
                    _conditionMeddraRepository.Save(newConditionMedra);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///  Handle the updating of medications for an existing condition
        /// </summary>
        /// <param name="conditionForUpdate">The payload containing the list of lab tests</param>
        /// <param name="conditionFromRepo">The condition entity that is being updated</param>
        /// <returns></returns>
        private void AddOrUpdateConditionMedications(ConditionForUpdateDto conditionForUpdate, Condition conditionFromRepo)
        {
            // Determine what has been removed
            ArrayList deleteCollection = new ArrayList();

            foreach (var conditionMedication in conditionFromRepo.ConditionMedications)
            {
                if (!conditionForUpdate.ConditionMedications.Contains(conditionMedication.Product.Id))
                {
                    deleteCollection.Add(conditionMedication);
                }
            }
            // Process deletes
            foreach (var conditionMedication in deleteCollection)
            {
                _conditionMedicationRepository.Delete(conditionMedication);
            }

            // Determine what needs to be added
            foreach (var productId in conditionForUpdate.ConditionMedications)
            {
                if (!conditionFromRepo.ConditionMedications.Any(c => c.Product.Id == productId))
                {
                    var product = _productRepository.Get(f => f.Id == productId);
                    var newConditionMedication = new ConditionMedication()
                    {
                        Condition = conditionFromRepo, Product = product, Concept = product.Concept
                    };
                    _conditionMedicationRepository.Save(newConditionMedication);
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        ///  Handle the updating of lab tests for an existing condition
        /// </summary>
        /// <param name="conditionForUpdate">The payload containing the list of lab tests</param>
        /// <param name="conditionFromRepo">The condition entity that is being updated</param>
        /// <returns></returns>
        private void AddOrUpdateConditionLabTests(ConditionForUpdateDto conditionForUpdate, Condition conditionFromRepo)
        {
            // Determine what has been removed
            ArrayList deleteCollection = new ArrayList();

            foreach (var conditionLabTest in conditionFromRepo.ConditionLabTests)
            {
                if (!conditionForUpdate.ConditionLabTests.Contains(conditionLabTest.LabTest.Id))
                {
                    deleteCollection.Add(conditionLabTest);
                }
            }

            // Process deletes
            foreach (var conditionLabTest in deleteCollection)
            {
                _conditionLabTestRepository.Delete(conditionLabTest);
            }

            // Determine what needs to be added
            foreach (var labTestId in conditionForUpdate.ConditionLabTests)
            {
                if (!conditionFromRepo.ConditionLabTests.Any(c => c.LabTest.Id == labTestId))
                {
                    var newConditionLabTest = new ConditionLabTest()
                    {
                        Condition = conditionFromRepo, LabTest = _labTestRepository.Get(f => f.Id == labTestId)
                    };
                    _conditionLabTestRepository.Save(newConditionLabTest);
                }
            }
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> UpdateCondition(int id,
                                                          [FromBody] ConditionForUpdateDto conditionForUpdate)
        {
            if (conditionForUpdate == null)
            {
                ModelState.AddModelError("Message", "Unable to locate payload for new request");
            }

            if (Regex.Matches(conditionForUpdate.ConditionName, @"[a-zA-Z0-9 ]").Count < conditionForUpdate.ConditionName.Length)
            {
                ModelState.AddModelError("Message", "Condition contains invalid characters (Enter A-Z, a-z, 0-9, space)");
                return(BadRequest(ModelState));
            }

            if (conditionForUpdate.ConditionMedDras.Count == 0)
            {
                ModelState.AddModelError("Message", "Condition must contain at least one MedDra term");
                return(BadRequest(ModelState));
            }

            if (_unitOfWork.Repository <Condition>().Queryable().
                Where(l => l.Description == conditionForUpdate.ConditionName && l.Id != id)
                .Count() > 0)
            {
                ModelState.AddModelError("Message", "Item with same name already exists");
            }

            var conditionFromRepo = await _conditionRepository.GetAsync(f => f.Id == id);

            if (conditionFromRepo == null)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                conditionFromRepo.Description = conditionForUpdate.ConditionName;
                conditionFromRepo.Chronic     = (conditionForUpdate.Chronic == Models.ValueTypes.YesNoValueType.Yes);
                conditionFromRepo.Active      = (conditionForUpdate.Active == Models.ValueTypes.YesNoValueType.Yes);

                _conditionRepository.Update(conditionFromRepo);

                AddOrUpdateConditionLabTests(conditionForUpdate, conditionFromRepo);
                AddOrUpdateConditionMeddras(conditionForUpdate, conditionFromRepo);
                AddOrUpdateConditionMedications(conditionForUpdate, conditionFromRepo);

                await _unitOfWork.CompleteAsync();

                return(Ok());
            }

            return(BadRequest(ModelState));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> CreateCondition(
            [FromBody] ConditionForUpdateDto conditionForUpdate)
        {
            if (conditionForUpdate == null)
            {
                ModelState.AddModelError("Message", "Unable to locate payload for new request");
            }

            if (Regex.Matches(conditionForUpdate.ConditionName, @"[a-zA-Z0-9 ]").Count < conditionForUpdate.ConditionName.Length)
            {
                ModelState.AddModelError("Message", "Condition contains invalid characters (Enter A-Z, a-z, 0-9, space)");
                return(BadRequest(ModelState));
            }

            if (conditionForUpdate.ConditionMedDras.Count == 0)
            {
                ModelState.AddModelError("Message", "Condition must contain at least one MedDra term");
                return(BadRequest(ModelState));
            }

            if (_unitOfWork.Repository <Condition>().Queryable().
                Where(l => l.Description == conditionForUpdate.ConditionName)
                .Count() > 0)
            {
                ModelState.AddModelError("Message", "Item with same name already exists");
            }

            if (ModelState.IsValid)
            {
                var newCondition = new Condition()
                {
                    Description = conditionForUpdate.ConditionName,
                    Chronic     = (conditionForUpdate.Chronic == Models.ValueTypes.YesNoValueType.Yes),
                    Active      = (conditionForUpdate.Active == Models.ValueTypes.YesNoValueType.Yes)
                };

                // ensure lab tests are linked to condition
                foreach (var labTestId in conditionForUpdate.ConditionLabTests)
                {
                    newCondition.ConditionLabTests.Add(new ConditionLabTest()
                    {
                        LabTest = _labTestRepository.Get(f => f.Id == labTestId)
                    });
                }

                // ensure products are linked to condition
                foreach (var productId in conditionForUpdate.ConditionMedications)
                {
                    var concept = _conceptRepository.Get(c => c.Id == productId, new string[] { "" });
                    newCondition.ConditionMedications.Add(new ConditionMedication()
                    {
                        Product = null, Concept = concept
                    });
                }

                // ensure meddra terms are linked to condition
                foreach (var terminologyMeddraId in conditionForUpdate.ConditionMedDras)
                {
                    newCondition.ConditionMedDras.Add(new ConditionMedDra()
                    {
                        TerminologyMedDra = _terminologyMeddraRepository.Get(f => f.Id == terminologyMeddraId)
                    });
                }

                _conditionRepository.Save(newCondition);
                await _unitOfWork.CompleteAsync();

                var mappedCondition = await GetConditionAsync <ConditionIdentifierDto>(newCondition.Id);

                if (mappedCondition == null)
                {
                    return(StatusCode(500, "Unable to locate newly added item"));
                }

                return(CreatedAtAction("GetConditionByIdentifier",
                                       new
                {
                    id = mappedCondition.Id
                }, CreateLinksForCondition <ConditionIdentifierDto>(mappedCondition)));
            }

            return(BadRequest(ModelState));
        }