示例#1
0
        public OperationResult <Guid?> DeleteHealthRisk(Guid?id)
        {
            //Validazione argomenti
            if (!id.HasValue)
            {
                throw new ArgumentNullException(nameof(id));
            }

            //Dichiaro la listsa di risultati di ritorno
            IList <ValidationResult> vResults = new List <ValidationResult>();

            //Definisco l'entità
            HealthRisk entity = _healthRiskRepository.Load(id);

            //Eseguo la validazione logica
            vResults = ValidateDelete(entity);

            if (!vResults.Any())
            {
                //Salvataggio su db
                _healthRiskRepository.Delete(entity);
            }

            //Ritorno i risultati
            return(new OperationResult <Guid?>
            {
                ReturnedValue = null,
                ValidationResults = vResults
            });
        }
示例#2
0
        public void SaveCaseReport(Guid caseReportId, DataCollector dataCollector, HealthRisk healthRisk, string message,
                                   string origin, int numberOfMalesUnder5, int numberOfMalesAged5AndOlder,
                                   int numberOfFemalesUnder5, int numberOfFemalesAged5AndOlder, DateTimeOffset timestamp)
        {
            Update(new CaseReportForListing(caseReportId)
            {
                Status                   = CaseReportStatus.Success,
                Message                  = message,
                DataCollectorId          = dataCollector.Id,
                DataCollectorDisplayName = dataCollector.DisplayName,
                DataCollectorDistrict    = dataCollector.District,
                DataCollectorRegion      = dataCollector.Region,
                DataCollectorVillage     = dataCollector.Village,
                Location                 = dataCollector.Location,
                Origin                   = origin,

                HealthRiskId = healthRisk.Id,
                HealthRisk   = healthRisk.Name,

                NumberOfMalesUnder5          = numberOfMalesUnder5,
                NumberOfMalesAged5AndOlder   = numberOfMalesAged5AndOlder,
                NumberOfFemalesUnder5        = numberOfFemalesUnder5,
                NumberOfFemalesAged5AndOlder = numberOfFemalesAged5AndOlder,

                Timestamp = timestamp
            });
        }
示例#3
0
 private void GenerateHealthRisks(Dictionary <Guid, string> healthRisks)
 {
     foreach (var keyValuePair in healthRisks)
     {
         var healthRisk = new HealthRisk(keyValuePair.Key, keyValuePair.Value);
         _healthRisksEventHandler.Handle(healthRisk);
     }
 }
示例#4
0
 public CaseReportFromUnknownDataCollectorExpanded(CaseReportFromUnknownDataCollector caseReport, HealthRisk healthRisk)
 {
     Id = caseReport.Id;
     NumberOfFemalesAged5AndOlder = caseReport.NumberOfFemalesAged5AndOlder;
     NumberOfFemalesUnder5        = caseReport.NumberOfFemalesUnder5;
     NumberOfMalesAged5AndOlder   = caseReport.NumberOfMalesAged5AndOlder;
     NumberOfMalesUnder5          = caseReport.NumberOfMalesUnder5;
     Timestamp  = caseReport.Timestamp;
     HealthRisk = healthRisk;
 }
示例#5
0
 public CaseReportFromUnknownDataCollectorExpanded(CaseReportFromUnknownDataCollector caseReport, HealthRisk healthRisk)
 {
     Id = caseReport.Id;
     NumberOfFemalesAgedOver4 = caseReport.NumberOfFemalesAgedOver4;
     NumberOfFemalesAges0To4  = caseReport.NumberOfFemalesAges0To4;
     NumberOfMalesAgedOver4   = caseReport.NumberOfMalesAgedOver4;
     NumberOfMalesAges0To4    = caseReport.NumberOfMalesAges0To4;
     Timestamp  = caseReport.Timestamp;
     HealthRisk = healthRisk;
 }
 public CaseReportFromUnknownDataCollectorExpanded(CaseReportFromUnknownDataCollector caseReport, HealthRisk healthRisk)
 {
     Id = caseReport.Id;
     NumberOfFemalesOver5  = caseReport.NumberOfFemalesOver5;
     NumberOfFemalesUnder5 = caseReport.NumberOfFemalesUnder5;
     NumberOfMalesOver5    = caseReport.NumberOfMalesOver5;
     NumberOfMalesUnder5   = caseReport.NumberOfMalesUnder5;
     Timestamp             = caseReport.Timestamp;
     Location   = caseReport.Location;
     HealthRisk = healthRisk;
 }
        public IHttpActionResult Get(Guid?id)
        {
            //Recupero l'entity
            HealthRisk entity = _healthRiskService.Get <HealthRisk, Guid?>(id);

            //Compongo il dto
            HealthRiskDetailDto dto = Mapper.Map <HealthRiskDetailDto>(entity);

            //Ritorno i risultati
            return(Ok(dto));
        }
示例#8
0
        public void InsertPerHealthRiskAndRegionForDay(CaseReport report, HealthRisk healthRisk, District district)
        {
            var numberOfReports = report.NumberOfFemalesAged5AndOlder
                                  + report.NumberOfFemalesUnder5
                                  + report.NumberOfMalesAged5AndOlder
                                  + report.NumberOfMalesUnder5;
            var region = _regions.GetById(district.RegionId);
            var day    = Day.From(report.Timestamp);

            var reportsPerHealthRisk = _caseReportsPerHealthRiskPerDay.GetById(day);

            if (reportsPerHealthRisk == null)
            {
                reportsPerHealthRisk = new CaseReportsPerHealthRiskPerDay()
                {
                    Id                   = day,
                    Timestamp            = report.Timestamp,
                    ReportsPerHealthRisk = new Dictionary <HealthRiskName, Dictionary <RegionName, int> >()
                    {
                        { healthRisk.Name, new Dictionary <RegionName, int>()
                          {
                              { region.Name, numberOfReports }
                          } }
                    }
                };

                _caseReportsPerHealthRiskPerDay.Insert(reportsPerHealthRisk);
            }
            else
            {
                if (reportsPerHealthRisk.ReportsPerHealthRisk.TryGetValue(healthRisk.Name, out Dictionary <RegionName, int> reportsPerRegion))
                {
                    if (reportsPerRegion.TryGetValue(region.Name, out int totalReports))
                    {
                        reportsPerRegion[region.Name] = totalReports + numberOfReports;
                    }
                    else
                    {
                        reportsPerRegion.Add(region.Name, numberOfReports);
                    }
                    reportsPerHealthRisk.ReportsPerHealthRisk[healthRisk.Name] = reportsPerRegion;
                }
                else
                {
                    reportsPerHealthRisk.ReportsPerHealthRisk.Add(healthRisk.Name, new Dictionary <RegionName, int>()
                    {
                        { region.Name, numberOfReports }
                    });
                }

                _caseReportsPerHealthRiskPerDay.Update(reportsPerHealthRisk);
            }
        }
示例#9
0
 public CaseReportExpanded(CaseReport caseReport, DataCollector dataCollector, HealthRisk healthRisk)
 {
     Id = caseReport.Id;
     NumberOfFemalesOver5  = caseReport.NumberOfFemalesOver5;
     NumberOfFemalesUnder5 = caseReport.NumberOfFemalesUnder5;
     NumberOfMalesOver5    = caseReport.NumberOfMalesOver5;
     NumberOfMalesUnder5   = caseReport.NumberOfMalesUnder5;
     Timestamp             = caseReport.Timestamp;
     Location      = caseReport.Location;
     DataCollector = dataCollector;
     HealthRisk    = healthRisk;
 }
示例#10
0
        private HealthRiskLanguageContent CreateNewLanguageContent(HealthRisk healthRisk, int languageId)
        {
            var newLanguageContent = new HealthRiskLanguageContent
            {
                HealthRisk        = healthRisk,
                ContentLanguageId = languageId
            };

            healthRisk.LanguageContents.Add(newLanguageContent);

            return(newLanguageContent);
        }
示例#11
0
        public OperationResult <Guid?> UpdateHealthRisk(HealthRiskEditDto dto)
        {
            //Validazione argomenti
            if (dto == null)
            {
                throw new ArgumentNullException(nameof(dto));
            }
            if (!dto.Id.HasValue)
            {
                throw new ArgumentNullException(nameof(dto.Id));
            }

            //Dichiaro la lista di risultati di ritorno
            IList <ValidationResult> vResults = new List <ValidationResult>();
            //Definisco l'entità
            HealthRisk entity = _healthRiskRepository.Load(dto.Id);

            entity.Registry  = dto.Registry != null && dto.Registry.Id.HasValue ? _registryRepository.Load(dto.Registry.Id) : null;
            entity.Level     = dto.Level?.Id;
            entity.Rating    = dto.Rating;
            entity.Type      = dto.Type?.Id;
            entity.StartDate = dto.StartDate;
            entity.EndDate   = dto.EndDate;

            //Eseguo la validazione logica
            vResults = ValidateEntity(entity);

            if (!vResults.Any())
            {
                //Salvataggio su db
                _healthRiskRepository.Save(entity);
            }

            //Ritorno i risultati
            return(new OperationResult <Guid?>
            {
                ReturnedValue = entity.Id,
                ValidationResults = vResults
            });
        }
示例#12
0
        public void SaveCaseReportFromUnknownDataCollector(Guid caseReportId, HealthRisk healthRisk, string message, string origin,
                                                           int numberOfMalesUnder5, int numberOfMalesAged5AndOlder, int numberOfFemalesUnder5,
                                                           int numberOfFemalesAged5AndOlder, DateTimeOffset timestamp)
        {
            Update(new CaseReportForListing(caseReportId)
            {
                Status = CaseReportStatus.UnknownDataCollector,
                DataCollectorDisplayName = "Unknown",
                DataCollectorId          = null,

                HealthRisk   = healthRisk.Name,
                HealthRiskId = healthRisk.Id,

                Location  = Location.NotSet,
                Message   = message,
                Origin    = origin,
                Timestamp = timestamp,

                DataCollectorDistrict = null,
                DataCollectorRegion   = null,
                DataCollectorVillage  = null
            });
        }
示例#13
0
        public async Task <Result> Create(HealthRiskRequestDto healthRiskRequestDto)
        {
            if (await _nyssContext.HealthRisks.AnyAsync(hr => hr.HealthRiskCode == healthRiskRequestDto.HealthRiskCode))
            {
                return(Error(ResultKey.HealthRisk.HealthRiskNumberAlreadyExists));
            }

            var languageContentIds = healthRiskRequestDto.LanguageContent.Select(lc => lc.LanguageId).ToArray();
            var contentLanguages   = await _nyssContext.ContentLanguages.Where(cl => languageContentIds.Contains(cl.Id)).ToDictionaryAsync(cl => cl.Id, cl => cl);

            var healthRisk = new HealthRisk
            {
                HealthRiskType   = healthRiskRequestDto.HealthRiskType,
                HealthRiskCode   = healthRiskRequestDto.HealthRiskCode,
                LanguageContents = healthRiskRequestDto.LanguageContent.Select(lc => new HealthRiskLanguageContent
                {
                    Name            = lc.Name,
                    FeedbackMessage = lc.FeedbackMessage,
                    CaseDefinition  = lc.CaseDefinition,
                    ContentLanguage = contentLanguages[lc.LanguageId]
                }).ToList(),
                AlertRule = healthRiskRequestDto.AlertRuleCountThreshold.HasValue
                    ? new AlertRule
                {
                    CountThreshold      = healthRiskRequestDto.AlertRuleCountThreshold.Value,
                    DaysThreshold       = healthRiskRequestDto.AlertRuleDaysThreshold,
                    KilometersThreshold = healthRiskRequestDto.AlertRuleKilometersThreshold
                }
                    : null
            };

            await _nyssContext.AddAsync(healthRisk);

            await _nyssContext.SaveChangesAsync();

            return(SuccessMessage(ResultKey.HealthRisk.Create.CreationSuccess));
        }
示例#14
0
        public void Process(HealthRiskCreated @event)
        {
            var healthRisk = new HealthRisk(@event.Id, @event.Name);

            _healthRisksEventHandler.Handle(healthRisk);
        }
示例#15
0
 private static bool CodeOrNameWasChanged(HealthRiskRequestDto healthRiskRequestDto, HealthRisk healthRisk) =>
 healthRiskRequestDto.HealthRiskCode != healthRisk.HealthRiskCode ||
 healthRiskRequestDto.LanguageContent.Any(lcDto =>
                                          healthRisk.LanguageContents.Any(lc =>
                                                                          lc.ContentLanguage.Id == lcDto.LanguageId && !string.IsNullOrEmpty(lc.Name)) &&
                                          lcDto.Name != healthRisk.LanguageContents.Single(lc => lc.ContentLanguage.Id == lcDto.LanguageId).Name);
 public void Handle(HealthRisk healthRisk)
 {
     _dbHandler.Insert(healthRisk);
 }
        public void InsertPerHealthRiskAndRegionForComing4Weeks(CaseReport caseReport, HealthRisk healthRisk, District district)
        {
            // Insert by health risk and region
            var today    = Day.From(caseReport.Timestamp);
            var region   = _regions.GetById(district.RegionId);
            var numCases = caseReport.NumberOfMalesUnder5
                           + caseReport.NumberOfMalesAged5AndOlder
                           + caseReport.NumberOfFemalesUnder5
                           + caseReport.NumberOfFemalesAged5AndOlder;

            for (var day = 0; day < 28; day++)
            {
                var dayReport = _caseReportsPerRegionLast4Weeks.GetById(day + today);
                if (dayReport != null)
                {
                    var healthRiskForDay = dayReport.HealthRisks.FirstOrDefault(d => d.Id == caseReport.HealthRiskId);
                    if (healthRiskForDay != null)
                    {
                        var regionForHealthRisk = healthRiskForDay.Regions.FirstOrDefault(r => r.Name == region.Name);
                        if (regionForHealthRisk != null)
                        {
                            InsertNumCases(regionForHealthRisk, day, numCases);
                        }
                        else
                        {
                            healthRiskForDay.Regions.Add(AddRegionWithCases(region.Name, day, numCases));
                        }
                    }
                    else
                    {
                        dayReport.HealthRisks.Add(new HealthRisksInRegionsLast4Weeks()
                        {
                            Id             = caseReport.HealthRiskId,
                            HealthRiskName = healthRisk.Name,
                            Regions        = new[] { AddRegionWithCases(region.Name, day, numCases) }
                        });
                    }
                    _caseReportsPerRegionLast4Weeks.Update(dayReport);
                }
                else
                {
                    dayReport = new CaseReportsPerRegionLast4Weeks()
                    {
                        Id          = day + today,
                        HealthRisks = new[]
                        {
                            new HealthRisksInRegionsLast4Weeks()
                            {
                                Id             = caseReport.HealthRiskId,
                                HealthRiskName = healthRisk.Name,
                                Regions        = new [] { AddRegionWithCases(region.Name, day, numCases) }
                            }
                        }
                    };
                    _caseReportsPerRegionLast4Weeks.Insert(dayReport);
                }
            }
            ;
        }
示例#18
0
        private IList <ValidationResult> ValidateDelete(HealthRisk entity)
        {
            var vResults = ValidateEntity(entity);

            return(vResults);
        }
示例#19
0
        public void InsertPerHealthRiskAndRegionForComing4Weeks(CaseReport caseReport, HealthRisk healthRisk, District district)
        {
            // Insert by health risk and region
            var today    = Day.From(caseReport.Timestamp);
            var region   = _regions.GetById(district.RegionId);
            var numCases = caseReport.NumberOfMalesUnder5
                           + caseReport.NumberOfMalesAged5AndOlder
                           + caseReport.NumberOfFemalesUnder5
                           + caseReport.NumberOfFemalesAged5AndOlder;

            for (var day = 0; day < 28; day++)
            {
                var dayReport = _caseReportsPerRegionLast4Weeks.GetById(day + today);
                if (dayReport != null)
                {
                    if (dayReport.HealthRisks.TryGetValue(healthRisk.Name, out HealthRisksInRegionsLast4Weeks healthRiskForDay))
                    {
                        if (healthRiskForDay.Regions.TryGetValue(region.Name, out RegionWithHealthRisk regionWithHealthRisk))
                        {
                            regionWithHealthRisk = InsertNumCases(regionWithHealthRisk, day, numCases);
                            healthRiskForDay.Regions[region.Name] = regionWithHealthRisk;
                        }
                        else
                        {
                            healthRiskForDay.Regions.Add(region.Name, AddRegionWithCases(region.Name, day, numCases));
                        }

                        dayReport.HealthRisks[healthRisk.Name] = healthRiskForDay;
                    }
                    else
                    {
                        var healthRisksInRegion = new HealthRisksInRegionsLast4Weeks();
                        healthRisksInRegion.Regions = new Dictionary <RegionName, RegionWithHealthRisk>
                        {
                            { region.Name, AddRegionWithCases(region.Name, day, numCases) }
                        };

                        dayReport.HealthRisks.Add(healthRisk.Name, healthRisksInRegion);
                    }

                    _caseReportsPerRegionLast4Weeks.Update(dayReport);
                }
                else
                {
                    var healthRisksInRegion = new HealthRisksInRegionsLast4Weeks();
                    healthRisksInRegion.Regions = new Dictionary <RegionName, RegionWithHealthRisk>()
                    {
                        { region.Name, AddRegionWithCases(region.Name, day, numCases) }
                    };

                    dayReport = new CaseReportsPerRegionLast4Weeks()
                    {
                        Id          = day + today,
                        HealthRisks = new Dictionary <HealthRiskName, HealthRisksInRegionsLast4Weeks>()
                        {
                            { healthRisk.Name, healthRisksInRegion }
                        }
                    };

                    _caseReportsPerRegionLast4Weeks.Insert(dayReport);
                }
            }
        }
示例#20
0
        public IActionResult Post([FromBody] HealthRisk healthRisk)
        {
            _healthRisks.ReplaceAsync(healthRisk);

            return(Ok());
        }
示例#21
0
        public IActionResult AddHealthRisk([FromBody] HealthRisk healthRisk)
        {
            _healthRisks.SaveAsync(healthRisk);

            return(Ok());
        }
示例#22
0
        public OperationResult <Guid?> UpdateRegistry(RegistryEditDto dto)
        {
            //Validazione argomenti
            if (dto == null)
            {
                throw new ArgumentNullException(nameof(dto));
            }
            if (!dto.Id.HasValue)
            {
                throw new ArgumentNullException(nameof(dto.Id));
            }

            //Dichiaro la lista di risultati di ritorno
            IList <ValidationResult> vResults = new List <ValidationResult>();

            //Definisco l'entità
            Registry entity = _registryRepository.Load(dto.Id);

            entity.Firstname                = dto.Firstname;
            entity.Surname                  = dto.Surname;
            entity.RegistryType             = dto.RegistryType;
            entity.Sex                      = dto.Sex;
            entity.BirthDate                = dto.BirthDate;
            entity.BirthPlace               = dto.BirthPlace;
            entity.DomicilePlace            = dto.DomicilePlace;
            entity.DomicilePlaceAddress     = dto.DomicilePlaceAddress;
            entity.DomicilePlaceCap         = dto.DomicilePlaceCap;
            entity.MunicipalityPlace        = dto.MunicipalityPlace;
            entity.MunicipalityPlaceAddress = dto.MunicipalityPlaceAddress;
            entity.MunicipalityPlaceCap     = dto.MunicipalityPlaceCap;
            entity.Email                    = dto.Email;
            entity.MobilePhone              = dto.MobilePhone;
            entity.Phone                    = dto.Phone;
            entity.RegionalMedicalCode      = dto.RegionalMedicalCode;
            entity.Latitude                 = dto.Latitude;
            entity.Longitude                = dto.Longitude;
            entity.Allergy                  = dto.Allergy;
            entity.Intollerance             = dto.Intollerance;
            entity.BloodGroup               = dto.BloodGroup;
            entity.Diagnosis                = dto.Diagnosis;
            entity.PreviousIllnesses        = dto.PreviousIllnesses;
            entity.NextMedicalHistory       = dto.NextMedicalHistory;
            entity.RemoteAnamnesis          = dto.RemoteAnamnesis;
            entity.Diet                     = dto.Diet;
            entity.PathologiesInProgress    = dto.PathologiesInProgress;
            entity.Note                     = dto.Note;
            entity.Weight                   = dto.Weight;
            entity.Height                   = dto.Height;
            entity.LifeStyle                = dto.LifeStyle;

            if (string.IsNullOrWhiteSpace(entity.MunicipalityPlaceAddress))
            {
                entity.Latitude  = null;
                entity.Longitude = null;
            }


            //Eseguo la validazione logica
            vResults = ValidateEntity(entity);

            if (!vResults.Any())
            {
                //Salvataggio su db
                _registryRepository.Save(entity);

                if (dto.HealthRisks != null)
                {
                    if (entity.HealthRisks == null)
                    {
                        entity.HealthRisks = new List <HealthRisk>();
                    }

                    entity.HealthRisks.Clear();
                    foreach (var item in dto.HealthRisks)
                    {
                        item.Registry = new RegistryDetailDto {
                            Id = entity.Id
                        };

                        var healthRiskValidation = item.Id.HasValue ?
                                                   _healthRiskService.UpdateHealthRisk(item) :
                                                   _healthRiskService.CreateHealthRisk(item);

                        if (healthRiskValidation.HasErrors())
                        {
                            return(healthRiskValidation);
                        }

                        HealthRisk healthRisk = _healthRiskRepository.Load(healthRiskValidation.ReturnedValue);
                        entity.HealthRisks.Add(healthRisk);
                    }
                }
            }

            //Ritorno i risultati
            return(new OperationResult <Guid?>
            {
                ReturnedValue = entity.Id,
                ValidationResults = vResults
            });
        }
示例#23
0
        public HealthRiskServiceTests()
        {
            // Arrange
            var authorizationService = Substitute.For <IAuthorizationService>();

            _nyssContextMock   = Substitute.For <INyssContext>();
            _healthRiskService = new HealthRiskService(_nyssContextMock, authorizationService);

            var users = new List <User>
            {
                new GlobalCoordinatorUser
                {
                    EmailAddress        = UserName,
                    ApplicationLanguage = new ApplicationLanguage
                    {
                        Id           = LanguageId,
                        DisplayName  = "English",
                        LanguageCode = "en"
                    }
                }
            };

            var contentLanguages = new List <ContentLanguage>
            {
                new ContentLanguage
                {
                    Id           = LanguageId,
                    DisplayName  = "English",
                    LanguageCode = "en"
                },
                new ContentLanguage
                {
                    Id           = NewLanguageId,
                    DisplayName  = "New language",
                    LanguageCode = "NEW"
                }
            };

            var languageContents = new List <HealthRiskLanguageContent>
            {
                new HealthRiskLanguageContent
                {
                    Id              = LanguageId,
                    CaseDefinition  = CaseDefinition,
                    FeedbackMessage = FeedbackMessage,
                    Name            = HealthRiskName,
                    ContentLanguage = contentLanguages[0]
                }
            };

            var alertRules = new List <AlertRule>
            {
                new AlertRule
                {
                    Id                  = AlertRuleId,
                    CountThreshold      = AlertRuleCountThreshold,
                    DaysThreshold       = AlertRuleDaysThreshold,
                    KilometersThreshold = AlertRuleKilometersThreshold
                }
            };

            _healthRisk = new HealthRisk
            {
                Id               = HealthRiskId,
                HealthRiskType   = HealthRiskType,
                HealthRiskCode   = HealthRiskCode,
                LanguageContents = languageContents,
                AlertRule        = alertRules[0]
            };

            var healthRisks = new List <HealthRisk> {
                _healthRisk
            };

            var contentLanguageMockDbSet  = contentLanguages.AsQueryable().BuildMockDbSet();
            var languageContentsMockDbSet = languageContents.AsQueryable().BuildMockDbSet();
            var healthRisksMockDbSet      = healthRisks.AsQueryable().BuildMockDbSet();
            var alertRuleMockDbSet        = alertRules.AsQueryable().BuildMockDbSet();
            var usersMockDbSet            = users.AsQueryable().BuildMockDbSet();
            var contentLanguagesMockDbSet = contentLanguages.AsQueryable().BuildMockDbSet();

            _nyssContextMock.ContentLanguages.Returns(contentLanguageMockDbSet);
            _nyssContextMock.HealthRiskLanguageContents.Returns(languageContentsMockDbSet);
            _nyssContextMock.HealthRisks.Returns(healthRisksMockDbSet);
            _nyssContextMock.AlertRules.Returns(alertRuleMockDbSet);
            _nyssContextMock.ContentLanguages.Returns(contentLanguagesMockDbSet);
            _nyssContextMock.Users.Returns(usersMockDbSet);
        }