├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── PULL_REQUEST_TEMPLATE ├── .gitignore ├── .travis.yml ├── Build ├── MSBuild │ ├── default.props │ └── specs.props ├── appveyor.yml ├── build.cake ├── build.ps1 ├── build.sh ├── clean.sh ├── docker_cloud │ ├── new_build_num │ └── pre_push ├── kill_all_dot_net.sh ├── tools │ └── packages.config └── travis_cake_image │ └── Dockerfile ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── Codeathons └── 20170929 Oslo │ └── TechnicalIntro.pptx ├── Deploy ├── Compose │ ├── config │ │ ├── admin-event-horizons.json │ │ ├── admin-resources.json │ │ ├── alerts-event-horizons.json │ │ ├── alerts-resources.json │ │ ├── analytics-event-horizons.json │ │ ├── analytics-resources.json │ │ ├── apikeyToTenant.json │ │ ├── nginx-default.conf │ │ ├── notificationgateway-event-horizons.json │ │ ├── notificationgateway-resources.json │ │ ├── reporting-event-horizons.json │ │ ├── reporting-resources.json │ │ ├── tenant-map.json │ │ └── tenants.json │ └── docker-compose.yml ├── K8S │ ├── BoundedContexts │ │ ├── ingress.yaml │ │ ├── pods-admin.yaml │ │ ├── pods-notification.yaml │ │ ├── pods-reporting.yaml │ │ ├── pods-usermanagement.yaml │ │ ├── services.yaml │ │ └── tenants.yaml │ ├── Infrastructure │ │ ├── database.yaml │ │ ├── ingress.yaml │ │ └── swagger.yaml │ └── namespaces.yaml └── Local │ └── ReverseProxy │ ├── main.js │ └── package.json ├── Documentation ├── .gitignore ├── Architecture │ ├── Diagrams.pptx │ ├── apis.md │ ├── at_a_glance.md │ ├── bounded_contexts.md │ ├── commands.md │ ├── containers.md │ ├── ddd.md │ ├── dry.md │ ├── event_store.md │ ├── events.md │ ├── frontend.md │ ├── fundamentals.md │ ├── glossary.md │ ├── high_cohesion.md │ ├── identity_and_access.md │ ├── images │ │ ├── at_a_glance.png │ │ ├── cqrs.png │ │ ├── offline_syncing.png │ │ └── top_level.png │ ├── index.md │ ├── inversion_of_control.md │ ├── logging.md │ ├── offline_sync.md │ ├── persistence.md │ ├── principles.md │ └── sms_gateway.md ├── Continuous Integration │ └── overview.md ├── Contribution │ ├── copyright_header.md │ ├── documentation.md │ ├── editor.md │ ├── images │ │ ├── issues_add_note.png │ │ ├── issues_backlog_new.png │ │ ├── issues_convert_note_to_issue.png │ │ ├── issues_converted_issue.png │ │ ├── issues_issue_details.png │ │ └── issues_note_to_issue_details.png │ ├── issues.md │ ├── product_owners.md │ ├── runtime_exceptions.md │ └── toc.yml ├── Deployment │ ├── build.md │ ├── container_registry.md │ ├── helm.md │ ├── release_management.md │ └── versioning.md ├── Projects │ ├── Admin │ │ ├── Commands │ │ │ ├── ChangeAreasAndDataVerifiers.md │ │ │ ├── ChangeProjectDataOwner.md │ │ │ ├── CreateHealthRisk.md │ │ │ ├── CreateProject.md │ │ │ ├── DefineHealthRisksForProject.md │ │ │ └── SetSmsReportingStructure.md │ │ ├── Events │ │ │ ├── HealthRiskCreated.md │ │ │ ├── HealthRiskUpdated.md │ │ │ ├── ProjectAreasChanged.md │ │ │ ├── ProjectCreated.md │ │ │ ├── ProjectDataOwnerChanged.md │ │ │ ├── ProjectHealthRisksChanged.md │ │ │ └── ProjectSmsReportingStructureChanged.md │ │ ├── Processes │ │ │ ├── DefiningHealthRisks.md │ │ │ └── DefiningProject.md │ │ ├── ReadModels │ │ │ ├── HealthRisk.md │ │ │ └── Project.md │ │ ├── assets │ │ │ ├── physical-view.png │ │ │ ├── reporting-feedback.png │ │ │ ├── scenarios.png │ │ │ └── system-context.png │ │ └── index.md │ ├── Alerts │ │ └── index.md │ ├── Analytics │ │ ├── Web Mockup │ │ │ ├── .editorconfig │ │ │ ├── .gitattributes │ │ │ ├── .gitignore │ │ │ ├── 404.html │ │ │ ├── ageandsexdistributionoverdifferenttimeframes.html │ │ │ ├── barchartsbydistrict.html │ │ │ ├── browserconfig.xml │ │ │ ├── css │ │ │ │ ├── Ageandsexdistributionoverdifferenttimeframes.css │ │ │ │ ├── Barchartsbydistrict.css │ │ │ │ ├── DistrictPersonreportingfunnelplotA.css │ │ │ │ ├── DistrictPersonreportingfunnelplotB.css │ │ │ │ ├── Epicurvebyday.css │ │ │ │ ├── Epicurvebydaydodgedbyage.css │ │ │ │ ├── Epicurvebyweek.css │ │ │ │ ├── Epicurvebyweekdodgedbyage.css │ │ │ │ ├── Mapbygeographicalarea.css │ │ │ │ ├── Weeklyepicurvesbyagesex.css │ │ │ │ ├── Weeklyepicurvesbygeographicalarea.css │ │ │ │ ├── font-face.css │ │ │ │ ├── main.css │ │ │ │ ├── normalize.css │ │ │ │ └── theme.css │ │ │ ├── districtpersonreportingfunnelplota.html │ │ │ ├── districtpersonreportingfunnelplotb.html │ │ │ ├── epicurvebyday.html │ │ │ ├── epicurvebydaydodgedbyage.html │ │ │ ├── epicurvebyweek.html │ │ │ ├── epicurvebyweekdodgedbyage.html │ │ │ ├── favicon.ico │ │ │ ├── humans.txt │ │ │ ├── icon.png │ │ │ ├── images │ │ │ │ └── icon │ │ │ │ │ ├── rodekors.jpg │ │ │ │ │ └── rodekors.png │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── Ageandsexdistributionoverdifferenttimeframes.js │ │ │ │ ├── Barchartsbydistrict.js │ │ │ │ ├── DistrictPersonreportingfunnelplotA.js │ │ │ │ ├── DistrictPersonreportingfunnelplotB.js │ │ │ │ ├── Epicurvebyday.js │ │ │ │ ├── Epicurvebydaydodgedbyage.js │ │ │ │ ├── Epicurvebyweek.js │ │ │ │ ├── Epicurvebyweekdodgedbyage.js │ │ │ │ ├── Mapbygeographicalarea.js │ │ │ │ ├── Weeklyepicurvesbyagesex.js │ │ │ │ ├── Weeklyepicurvesbygeographicalarea.js │ │ │ │ ├── commonData.js │ │ │ │ ├── custom.js │ │ │ │ ├── fakedata │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── data │ │ │ │ │ │ ├── casereports-2018-September-28 (1).xlsx │ │ │ │ │ │ ├── datacollectors-2018-September-28 (1).xlsx │ │ │ │ │ │ ├── gadm36_NOR_1_sp.rds │ │ │ │ │ │ ├── gadm36_NOR_2_sf.rds │ │ │ │ │ │ ├── gadm36_NOR_2_sp.rds │ │ │ │ │ │ └── old_gadm36_NOR_1_sp.rds │ │ │ │ │ ├── json │ │ │ │ │ │ ├── epicurve-by-day.json │ │ │ │ │ │ └── epicurve-by-week.json │ │ │ │ │ ├── project.Rproj │ │ │ │ │ ├── report.Rmd │ │ │ │ │ ├── report.md │ │ │ │ │ └── report_files │ │ │ │ │ │ └── figure-markdown_strict │ │ │ │ │ │ ├── unnamed-chunk-1-1.png │ │ │ │ │ │ ├── unnamed-chunk-10-1.png │ │ │ │ │ │ ├── unnamed-chunk-11-1.png │ │ │ │ │ │ ├── unnamed-chunk-2-1.png │ │ │ │ │ │ ├── unnamed-chunk-3-1.png │ │ │ │ │ │ ├── unnamed-chunk-4-1.png │ │ │ │ │ │ ├── unnamed-chunk-5-1.png │ │ │ │ │ │ ├── unnamed-chunk-6-1.png │ │ │ │ │ │ ├── unnamed-chunk-7-1.png │ │ │ │ │ │ ├── unnamed-chunk-8-1.png │ │ │ │ │ │ └── unnamed-chunk-9-1.png │ │ │ │ ├── fakejson │ │ │ │ │ ├── epicurve-by-day.json │ │ │ │ │ └── epicurve-by-week.json │ │ │ │ ├── fakejsonGlobal │ │ │ │ │ ├── epicurve-by-day.json │ │ │ │ │ └── epicurve-by-week.json │ │ │ │ ├── graph1 │ │ │ │ │ ├── Epicurvebyday.js │ │ │ │ │ └── Epicurvebyweek.js │ │ │ │ ├── graph2 │ │ │ │ │ └── Epicurvebyday.js │ │ │ │ ├── graph3 │ │ │ │ │ └── Epicurvebyday.js │ │ │ │ ├── graph4 │ │ │ │ │ └── Epicurvebyday.js │ │ │ │ ├── graph5 │ │ │ │ │ └── Epicurvebyday.js │ │ │ │ ├── main.js │ │ │ │ └── plugins.js │ │ │ ├── mapbygeographicalarea.html │ │ │ ├── mapdata.csv │ │ │ ├── mapdata.json │ │ │ ├── page1.html │ │ │ ├── page1 │ │ │ │ ├── Epicurvebyweek_1.js │ │ │ │ ├── Epicurvebyweek_2.js │ │ │ │ ├── Epicurvebyweek_3.js │ │ │ │ ├── Epicurvebyweek_4.js │ │ │ │ ├── age.js │ │ │ │ └── reports.js │ │ │ ├── page2.html │ │ │ ├── page4.html │ │ │ ├── robots.txt │ │ │ ├── site.webmanifest │ │ │ ├── test.html │ │ │ ├── tile-wide.png │ │ │ ├── tile.png │ │ │ ├── vendor │ │ │ │ ├── animsition │ │ │ │ │ ├── animsition.min.css │ │ │ │ │ └── animsition.min.js │ │ │ │ ├── bootstrap-4.1 │ │ │ │ │ ├── bootstrap.min.css │ │ │ │ │ ├── bootstrap.min.js │ │ │ │ │ └── popper.min.js │ │ │ │ ├── bootstrap-progressbar │ │ │ │ │ ├── bootstrap-progressbar-3.3.4.min.css │ │ │ │ │ └── bootstrap-progressbar.min.js │ │ │ │ ├── chartjs │ │ │ │ │ └── Chart.bundle.min.js │ │ │ │ ├── circle-progress │ │ │ │ │ ├── circle-progress.js │ │ │ │ │ └── circle-progress.min.js │ │ │ │ ├── countdown │ │ │ │ │ ├── countdowntime.js │ │ │ │ │ ├── jquery.countdown.min.js │ │ │ │ │ ├── moment-timezone-with-data.min.js │ │ │ │ │ ├── moment-timezone.min.js │ │ │ │ │ └── moment.min.js │ │ │ │ ├── counter-up │ │ │ │ │ ├── jquery.counterup.min.js │ │ │ │ │ ├── jquery.waypoints.min.js │ │ │ │ │ └── waypoints.min.js │ │ │ │ ├── css-hamburgers │ │ │ │ │ ├── hamburgers.css │ │ │ │ │ └── hamburgers.min.css │ │ │ │ ├── font-awesome-4.7 │ │ │ │ │ ├── HELP-US-OUT.txt │ │ │ │ │ ├── css │ │ │ │ │ │ ├── font-awesome.css │ │ │ │ │ │ └── font-awesome.min.css │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ ├── font-awesome-5 │ │ │ │ │ ├── css │ │ │ │ │ │ └── fontawesome-all.min.css │ │ │ │ │ └── webfonts │ │ │ │ │ │ ├── fa-brands-400.eot │ │ │ │ │ │ ├── fa-brands-400.svg │ │ │ │ │ │ ├── fa-brands-400.ttf │ │ │ │ │ │ ├── fa-brands-400.woff │ │ │ │ │ │ ├── fa-brands-400.woff2 │ │ │ │ │ │ ├── fa-regular-400.eot │ │ │ │ │ │ ├── fa-regular-400.svg │ │ │ │ │ │ ├── fa-regular-400.ttf │ │ │ │ │ │ ├── fa-regular-400.woff │ │ │ │ │ │ ├── fa-regular-400.woff2 │ │ │ │ │ │ ├── fa-solid-900.eot │ │ │ │ │ │ ├── fa-solid-900.svg │ │ │ │ │ │ ├── fa-solid-900.ttf │ │ │ │ │ │ ├── fa-solid-900.woff │ │ │ │ │ │ └── fa-solid-900.woff2 │ │ │ │ ├── jquery-3.2.1.min.js │ │ │ │ ├── jquery-ui.min.js │ │ │ │ ├── lightbox2 │ │ │ │ │ ├── dist │ │ │ │ │ │ ├── css │ │ │ │ │ │ │ └── lightbox.css │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ │ ├── next.png │ │ │ │ │ │ │ └── prev.png │ │ │ │ │ │ └── js │ │ │ │ │ │ │ ├── lightbox-plus-jquery.js │ │ │ │ │ │ │ ├── lightbox-plus-jquery.min.js │ │ │ │ │ │ │ ├── lightbox-plus-jquery.min.map │ │ │ │ │ │ │ ├── lightbox.js │ │ │ │ │ │ │ ├── lightbox.min.js │ │ │ │ │ │ │ └── lightbox.min.map │ │ │ │ │ └── src │ │ │ │ │ │ ├── css │ │ │ │ │ │ └── lightbox.css │ │ │ │ │ │ ├── images │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ ├── next.png │ │ │ │ │ │ └── prev.png │ │ │ │ │ │ └── js │ │ │ │ │ │ └── lightbox.js │ │ │ │ ├── mdi-font │ │ │ │ │ ├── css │ │ │ │ │ │ ├── material-design-iconic-font.css │ │ │ │ │ │ └── material-design-iconic-font.min.css │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── Material-Design-Iconic-Font.eot │ │ │ │ │ │ ├── Material-Design-Iconic-Font.svg │ │ │ │ │ │ ├── Material-Design-Iconic-Font.ttf │ │ │ │ │ │ ├── Material-Design-Iconic-Font.woff │ │ │ │ │ │ └── Material-Design-Iconic-Font.woff2 │ │ │ │ ├── perfect-scrollbar │ │ │ │ │ ├── perfect-scrollbar.css │ │ │ │ │ ├── perfect-scrollbar.js │ │ │ │ │ └── perfect-scrollbar.min.js │ │ │ │ ├── progressbar │ │ │ │ │ ├── progressbar.js │ │ │ │ │ └── progressbar.min.js │ │ │ │ ├── select2 │ │ │ │ │ ├── select2.min.css │ │ │ │ │ └── select2.min.js │ │ │ │ ├── slick │ │ │ │ │ ├── ajax-loader.gif │ │ │ │ │ ├── config.rb │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── slick.eot │ │ │ │ │ │ ├── slick.svg │ │ │ │ │ │ ├── slick.ttf │ │ │ │ │ │ └── slick.woff │ │ │ │ │ ├── slick-theme.css │ │ │ │ │ ├── slick-theme.less │ │ │ │ │ ├── slick-theme.scss │ │ │ │ │ ├── slick.css │ │ │ │ │ ├── slick.js │ │ │ │ │ ├── slick.less │ │ │ │ │ ├── slick.min.js │ │ │ │ │ └── slick.scss │ │ │ │ ├── smk-accordion │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── accordion.js │ │ │ │ │ └── accordion.min.js │ │ │ │ ├── sweetalert │ │ │ │ │ └── sweetalert.min.js │ │ │ │ ├── vector-map │ │ │ │ │ ├── jquery.vmap.brazil.js │ │ │ │ │ ├── jquery.vmap.europe.js │ │ │ │ │ ├── jquery.vmap.france.js │ │ │ │ │ ├── jquery.vmap.germany.js │ │ │ │ │ ├── jquery.vmap.js │ │ │ │ │ ├── jquery.vmap.min.js │ │ │ │ │ ├── jquery.vmap.russia.js │ │ │ │ │ ├── jquery.vmap.sampledata.js │ │ │ │ │ ├── jquery.vmap.usa.js │ │ │ │ │ ├── jquery.vmap.world.js │ │ │ │ │ └── jqvmap.min.css │ │ │ │ └── wow │ │ │ │ │ ├── animate.css │ │ │ │ │ └── wow.min.js │ │ │ ├── weeklyepicurvesbyagesex.html │ │ │ └── weeklyepicurvesbygeographicalarea.html │ │ ├── archive.md │ │ ├── archive │ │ │ ├── fakedata │ │ │ │ ├── .gitignore │ │ │ │ ├── data │ │ │ │ │ ├── NOR_adm1.rds │ │ │ │ │ ├── casereports-2018-September-28 (1).xlsx │ │ │ │ │ ├── datacollectors-2018-September-28 (1).xlsx │ │ │ │ │ ├── gadm36_NOR_1_sp.rds │ │ │ │ │ ├── gadm36_NOR_2_sf.rds │ │ │ │ │ ├── gadm36_NOR_2_sp.rds │ │ │ │ │ └── old_gadm36_NOR_1_sp.rds │ │ │ │ ├── json │ │ │ │ │ ├── epicurve-by-day.json │ │ │ │ │ └── epicurve-by-week.json │ │ │ │ ├── report.md │ │ │ │ └── report_files │ │ │ │ │ └── figure-markdown_strict │ │ │ │ │ ├── unnamed-chunk-1-1.png │ │ │ │ │ ├── unnamed-chunk-10-1.png │ │ │ │ │ ├── unnamed-chunk-11-1.png │ │ │ │ │ ├── unnamed-chunk-2-1.png │ │ │ │ │ ├── unnamed-chunk-3-1.png │ │ │ │ │ ├── unnamed-chunk-4-1.png │ │ │ │ │ ├── unnamed-chunk-5-1.png │ │ │ │ │ ├── unnamed-chunk-6-1.png │ │ │ │ │ ├── unnamed-chunk-7-1.png │ │ │ │ │ ├── unnamed-chunk-8-1.png │ │ │ │ │ └── unnamed-chunk-9-1.png │ │ │ └── fakejson │ │ │ │ ├── epicurve-by-day.json │ │ │ │ └── epicurve-by-week.json │ │ ├── graphs.md │ │ ├── images │ │ │ ├── archive │ │ │ │ └── volunteer_individ.jpg │ │ │ ├── graphs │ │ │ │ ├── unnamed-chunk-10-1.png │ │ │ │ ├── unnamed-chunk-11-1.png │ │ │ │ ├── unnamed-chunk-11-2.png │ │ │ │ ├── unnamed-chunk-12-1.png │ │ │ │ ├── unnamed-chunk-13-1.png │ │ │ │ ├── unnamed-chunk-14-1.png │ │ │ │ ├── unnamed-chunk-15-1.png │ │ │ │ ├── unnamed-chunk-2-1.png │ │ │ │ ├── unnamed-chunk-3-1.png │ │ │ │ ├── unnamed-chunk-4-1.png │ │ │ │ ├── unnamed-chunk-5-1.png │ │ │ │ ├── unnamed-chunk-6-1.png │ │ │ │ ├── unnamed-chunk-7-1.png │ │ │ │ ├── unnamed-chunk-8-1.png │ │ │ │ └── unnamed-chunk-9-1.png │ │ │ └── index │ │ │ │ ├── Scanned-Document-1.png │ │ │ │ ├── Scanned-Document-2.png │ │ │ │ ├── Scanned-Document-3.png │ │ │ │ ├── Scanned-Document-4.png │ │ │ │ ├── Scanned-Document-5.png │ │ │ │ ├── unnamed-chunk-2-1.png │ │ │ │ ├── unnamed-chunk-3-1.png │ │ │ │ └── unnamed-chunk-4-1.png │ │ └── index.md │ ├── Core │ │ ├── events.md │ │ └── index.md │ ├── Portal │ │ └── index.md │ ├── Reporting │ │ ├── 2017-09-29 14-31 page 1.jpg │ │ ├── Detailed_Alert_Map.jpg │ │ ├── Detailed_Alert_Timeline.jpg │ │ └── index.md │ ├── Sms │ │ ├── Architecture_Duplex.png │ │ ├── Architecture_Incoming.png │ │ ├── Flow_Duplex.png │ │ ├── Flow_Incoming.png │ │ ├── Postman_Eagle_Sample.png │ │ ├── Postman_Sample.png │ │ └── index.md │ ├── User Management │ │ └── index.md │ ├── Volunteer Reporting │ │ ├── Processes │ │ │ └── ReceivingTextMessage.md │ │ ├── data collector workflow 2017.09.30.jpg │ │ ├── data_flow.png │ │ ├── index.md │ │ └── userstories │ │ │ ├── Known Data collector sends in valid aggregate case report.md │ │ │ └── Known Data collector sends in valid single case report.md │ ├── actors.md │ └── index.md ├── Requirements │ ├── CBS Functional requirements specification.pdf │ └── March 2017 - CBS v2 Diagrams.pdf ├── docfx.json ├── index.md ├── readme.md └── toc.yml ├── LICENSE ├── Logs └── FieldTest_April2018 │ └── VolunteerReporting │ └── logs.txt ├── Meetings ├── 20170911 - Core Team - Planning │ ├── IMG_2161.JPG │ ├── IMG_2162.JPG │ ├── IMG_2163.JPG │ ├── IMG_2164.JPG │ ├── IMG_2165.JPG │ ├── IMG_2166.JPG │ ├── IMG_2167.JPG │ ├── IMG_2168.JPG │ ├── IMG_2169.JPG │ ├── IMG_2170.JPG │ ├── IMG_2171.JPG │ ├── IMG_2172.JPG │ ├── IMG_2173.JPG │ └── IMG_2174.JPG ├── 20170918 - Core Team sync.md ├── 20171010 - Core Team sync.md ├── 20171025 - Community standup.md ├── 20171118 - Community standup.md ├── 20180815 - Core Team sync.md ├── 20180912 - Core Team Sync ├── 20180919 - Core Team sync.md ├── 20181003 - Core Team sync.md ├── 20181017 - Core Team sync.md ├── 20181031 - Core Team sync.md ├── 20181129 - Core Team sync.md └── 20190115 - Core Team sync.md ├── NuGet.Config ├── README.md ├── Source ├── .dockerignore ├── Admin │ ├── Admin.sln │ ├── Concepts │ │ ├── Concepts.csproj │ │ ├── HealthRisks │ │ │ ├── CaseDefinition.cs │ │ │ ├── HealthRiskId.cs │ │ │ ├── HealthRiskName.cs │ │ │ ├── HealthRiskNumber.cs │ │ │ ├── KeyMessage.cs │ │ │ ├── KeyMessageId.cs │ │ │ └── Language.cs │ │ ├── NationalSocieties │ │ │ ├── NationalSocietyId.cs │ │ │ └── NationalSocietyName.cs │ │ ├── Projects │ │ │ ├── ProjectId.cs │ │ │ ├── ProjectName.cs │ │ │ └── ProjectSurveillanceContext.cs │ │ └── Users │ │ │ └── UserId.cs │ ├── Core │ │ ├── .dolittle │ │ │ ├── artifacts.json │ │ │ ├── event-horizons.json │ │ │ ├── resources.json │ │ │ ├── server.json │ │ │ ├── tenant-map.json │ │ │ ├── tenants.json │ │ │ └── topology.json │ │ ├── Core.csproj │ │ ├── Dockerfile │ │ ├── LoggingExtensions.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── SecurityExtensions.cs │ │ ├── Startup.cs │ │ └── hooks │ │ │ └── pre_push │ ├── Dockerfile │ ├── Domain │ │ ├── Admin │ │ │ ├── AddDataVerifier.cs │ │ │ ├── AddDataVerifierInputValidator.cs │ │ │ └── Rules.cs │ │ ├── AutomaticReplyMessages │ │ │ ├── Rules.cs │ │ │ ├── UpdateReplyMessagesConfig.cs │ │ │ └── UpdateReplyMessagesConfigInputValidator.cs │ │ ├── Domain.csproj │ │ ├── HealthRisks │ │ │ ├── AddKeyMessageToHealthRisk.cs │ │ │ ├── AddKeyMessageToHealthRiskInputInputValidator.cs │ │ │ ├── AddProjectHealthRisk.cs │ │ │ ├── AddProjectHealthRiskInputValidator.cs │ │ │ ├── AddThresholdToHealthRisk.cs │ │ │ ├── AddThresholdToHealthRiskInputValidator.cs │ │ │ ├── AssociateHealthRiskWithProject.cs │ │ │ ├── CreateHealthRisk.cs │ │ │ ├── CreateHealthRiskInputValidator.cs │ │ │ ├── DeleteHealthRisk.cs │ │ │ ├── DeleteHealthRiskInputValidator.cs │ │ │ ├── HealthRisk.cs │ │ │ ├── HealthRiskCommandHandler.cs │ │ │ ├── KeyMessagesCommandHandler.cs │ │ │ ├── ModifyHealthRisInputValidator.cs │ │ │ ├── ModifyHealthRisk.cs │ │ │ ├── OverrideCaseDefinition.cs │ │ │ ├── OverrideHealthRiskName.cs │ │ │ ├── Rules.cs │ │ │ ├── SetCaseDefinition.cs │ │ │ └── SetHealthRiskName.cs │ │ ├── NationalSocieties │ │ │ ├── CreateNationalSociety.cs │ │ │ ├── CreateNationalSocietyBusinessValidator.cs │ │ │ ├── CreateNationalSocietyInputValidator.cs │ │ │ ├── NationalSociety.cs │ │ │ └── NationalSocietyCommandHandler.cs │ │ ├── Projects │ │ │ ├── CreateProject.cs │ │ │ ├── CreateProjectInputValidator.cs │ │ │ ├── Project.cs │ │ │ ├── ProjectCommandHandler.cs │ │ │ ├── Rules.cs │ │ │ ├── UpdateProject.cs │ │ │ ├── UpdateProjectHealthRiskThreshold.cs │ │ │ ├── UpdateProjectHealthRiskThresholdValidator.cs │ │ │ └── UpdateProjectValidator.cs │ │ ├── Tests │ │ │ ├── CreateHealthRiskTestData.cs │ │ │ ├── CreateHealthRiskTestDataBusinessValidator.cs │ │ │ ├── CreateHealthRiskTestDataInputValidator.cs │ │ │ ├── CreateNationalSocietyTestData.cs │ │ │ ├── CreateNationalSocietyTestDataBusinessValidator.cs │ │ │ ├── CreateNationalSocietyTestDataInputValidator.cs │ │ │ ├── CreateProjectTestData.cs │ │ │ ├── CreateProjectTestDataBusinessValidator.cs │ │ │ ├── CreateProjectTestDataInputValidator.cs │ │ │ ├── CreateProjectsHealthRiskTestData.cs │ │ │ ├── CreateProjectsHealthRiskTestDataBusinessValidator.cs │ │ │ ├── CreateProjectsHealthRiskTestDataInputValidator.cs │ │ │ ├── CreateUserTestData.cs │ │ │ ├── CreateUserTestDataBusinessValidator.cs │ │ │ ├── CreateUserTestDataInputValidator.cs │ │ │ ├── Data │ │ │ │ ├── HealthRiskWithKeyMessage.json │ │ │ │ ├── HealthRisks.json │ │ │ │ ├── NationalSocieties.json │ │ │ │ ├── Projects.json │ │ │ │ └── Users.json │ │ │ └── TestDataCommandHandler.cs │ │ └── Users │ │ │ ├── CreateUser.cs │ │ │ ├── CreateUserBusinessValidator.cs │ │ │ ├── CreateUserInputValidator.cs │ │ │ └── User.cs │ ├── Events │ │ ├── Admin │ │ │ ├── DataVerifierAdded.cs │ │ │ └── DataVerifierRemoved.cs │ │ ├── AutomaticReplyMessages │ │ │ ├── MessageUpdated.cs │ │ │ └── ReplyMessageConfigUpdated.cs │ │ ├── Events.csproj │ │ ├── HealthRisks │ │ │ ├── HealthRiskCaseDefinitionOverridden.cs │ │ │ ├── HealthRiskCaseDefinitionSet.cs │ │ │ ├── HealthRiskCreated.cs │ │ │ ├── HealthRiskDeleted.cs │ │ │ ├── HealthRiskModified.cs │ │ │ ├── HealthRiskNameOverridden.cs │ │ │ ├── HealthRiskNameSet.cs │ │ │ ├── KeyMessageAddedToHealthRisk.cs │ │ │ └── ThresholdAddedToHealthRIsk.cs │ │ ├── NationalSocieties │ │ │ └── NationalSocietyCreated.cs │ │ ├── Projects │ │ │ ├── ProjectCreated.cs │ │ │ ├── ProjectDeleted.cs │ │ │ ├── ProjectHealthRiskAdded.cs │ │ │ ├── ProjectHealthRiskRemoved.cs │ │ │ ├── ProjectHealthRiskThresholdUpdate.cs │ │ │ └── ProjectUpdated.cs │ │ └── Users │ │ │ └── UserCreated.cs │ ├── HealthRisks.txt │ ├── NationalSociety.txt │ ├── Read │ │ ├── AutomaticReplyMessages │ │ │ ├── AllReplyMessages.cs │ │ │ ├── ReplyMessageById.cs │ │ │ └── ReplyMessagesConfig.cs │ │ ├── HealthRisks │ │ │ ├── AllHealthRisks.cs │ │ │ ├── HealthRisk.cs │ │ │ ├── HealthRiskById.cs │ │ │ ├── HealthRiskEventProcessors.cs │ │ │ └── KeyMessageEventProcessors.cs │ │ ├── NationalSocieties │ │ │ ├── AllNationalSocieties.cs │ │ │ ├── NationalSociety.cs │ │ │ ├── NationalSocietyById.cs │ │ │ └── NationalSocietyEventProcessors.cs │ │ ├── Projects │ │ │ ├── AllProjects.cs │ │ │ ├── Project.cs │ │ │ ├── ProjectById.cs │ │ │ ├── ProjectEventProcessor.cs │ │ │ ├── ProjectHealthRisk.cs │ │ │ └── ProjectHealthRiskVersion.cs │ │ ├── Read.csproj │ │ └── Users │ │ │ ├── AllUsers.cs │ │ │ ├── User.cs │ │ │ ├── UserById.cs │ │ │ └── UserEventProcessor.cs │ ├── Rules │ │ ├── Admin │ │ │ └── IsUserExisting.cs │ │ ├── AutomaticReplyMessages │ │ │ ├── IsTagValid.cs │ │ │ └── IsTagsValid.cs │ │ ├── HealthRisks │ │ │ ├── IsHealthRiskExisting.cs │ │ │ ├── IsHealthRiskUniqueWithinProject.cs │ │ │ └── IsWithinNumberOfHealthRisksLimit.cs │ │ ├── Projects │ │ │ ├── IsProjectNameUnique.cs │ │ │ └── IsUserNotVerifier.cs │ │ └── Rules.csproj │ ├── Web │ │ ├── .vscode │ │ │ ├── launch.json │ │ │ └── settings.json │ │ ├── Dockerfile │ │ ├── angular.json │ │ ├── browserslist │ │ ├── hooks │ │ │ └── pre_push │ │ ├── nginx-default.conf │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── readme.md │ │ ├── src │ │ │ ├── app │ │ │ │ ├── Admin │ │ │ │ │ └── AddDataVerifier.js │ │ │ │ ├── AutomaticReplyMessages │ │ │ │ │ ├── AllReplyMessages.js │ │ │ │ │ ├── ReplyMessageById.js │ │ │ │ │ ├── ReplyMessagesConfig.js │ │ │ │ │ └── UpdateReplyMessagesConfig.js │ │ │ │ ├── HealthRisks │ │ │ │ │ ├── AddKeyMessageToHealthRisk.js │ │ │ │ │ ├── AddProjectHealthRisk.js │ │ │ │ │ ├── AddThresholdToHealthRisk.js │ │ │ │ │ ├── AllHealthRisks.js │ │ │ │ │ ├── CreateHealthRisk.js │ │ │ │ │ ├── DeleteHealthRisk.js │ │ │ │ │ ├── HealthRisk.js │ │ │ │ │ ├── HealthRiskById.js │ │ │ │ │ ├── ModifyHealthRisk.js │ │ │ │ │ ├── OverrideCaseDefinition.js │ │ │ │ │ ├── OverrideHealthRiskName.js │ │ │ │ │ ├── SetCaseDefinition.js │ │ │ │ │ ├── SetHealthRiskName.js │ │ │ │ │ ├── add-edit-healthRisk │ │ │ │ │ │ ├── add-edit-healthRisk.component.html │ │ │ │ │ │ ├── add-edit-healthRisk.component.scss │ │ │ │ │ │ └── add-edit-healthRisk.component.ts │ │ │ │ │ ├── delete-health-risk │ │ │ │ │ │ ├── delete-healthrisk.component.html │ │ │ │ │ │ └── delete-healthrisk.component.ts │ │ │ │ │ ├── healthRisk-list │ │ │ │ │ │ ├── healthRisk-list.component.html │ │ │ │ │ │ ├── healthRisk-list.component.scss │ │ │ │ │ │ └── healthRisk-list.component.ts │ │ │ │ │ ├── healthRisks-routing.module.ts │ │ │ │ │ └── healthRisks.module.ts │ │ │ │ ├── NationalSocieties │ │ │ │ │ ├── AllNationalSocieties.js │ │ │ │ │ ├── CreateNationalSociety.js │ │ │ │ │ ├── NationalSociety.js │ │ │ │ │ └── NationalSocietyById.js │ │ │ │ ├── Projects │ │ │ │ │ ├── AllProjects.js │ │ │ │ │ ├── CreateProject.js │ │ │ │ │ ├── Project.js │ │ │ │ │ ├── ProjectById.js │ │ │ │ │ ├── ProjectHealthRiskVersion.js │ │ │ │ │ ├── UpdateProject.js │ │ │ │ │ ├── UpdateProjectHealthRiskThreshold.js │ │ │ │ │ ├── add-project │ │ │ │ │ │ ├── add-project.component.html │ │ │ │ │ │ ├── add-project.component.scss │ │ │ │ │ │ └── add-project.component.ts │ │ │ │ │ ├── project-list │ │ │ │ │ │ ├── project-list.component.html │ │ │ │ │ │ ├── project-list.component.scss │ │ │ │ │ │ └── project-list.component.ts │ │ │ │ │ ├── projects-routing.module.ts │ │ │ │ │ └── projects.module.ts │ │ │ │ ├── Tests │ │ │ │ │ ├── CreateHealthRiskTestData.js │ │ │ │ │ ├── CreateNationalSocietyTestData.js │ │ │ │ │ ├── CreateProjectTestData.js │ │ │ │ │ ├── CreateProjectsHealthRiskTestData.js │ │ │ │ │ └── CreateUserTestData.js │ │ │ │ ├── Users │ │ │ │ │ ├── AllUsers.js │ │ │ │ │ ├── CreateUser.js │ │ │ │ │ ├── User.js │ │ │ │ │ └── UserById.js │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── core │ │ │ │ │ ├── core.module.ts │ │ │ │ │ └── module-import-guard.ts │ │ │ │ ├── navigation │ │ │ │ │ ├── navbar-host.component.html │ │ │ │ │ └── navbar-host.component.ts │ │ │ │ ├── services │ │ │ │ │ └── app-insights-service.ts │ │ │ │ └── shared │ │ │ │ │ └── shared.module.ts │ │ │ ├── assets │ │ │ │ ├── .gitkeep │ │ │ │ └── bootstrap │ │ │ │ │ ├── _theme.scss │ │ │ │ │ └── _variables.scss │ │ │ ├── environments │ │ │ │ ├── environment.prod.ts │ │ │ │ ├── environment.test.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.scss │ │ │ ├── tsconfig.app.json │ │ │ └── typings.d.ts │ │ └── tsconfig.json │ ├── bounded-context.json │ └── readme.md ├── Alerts │ ├── Alerts.sln │ ├── Concepts │ │ ├── AlertRules │ │ │ ├── AlertRuleName.cs │ │ │ ├── DistanceBetweenCasesInMeters.cs │ │ │ ├── NumberOfCasesThreshold.cs │ │ │ ├── RuleId.cs │ │ │ └── ThresholdTimeframeInHours.cs │ │ ├── Alerts │ │ │ ├── AlertId.cs │ │ │ ├── AlertNumber.cs │ │ │ └── AlertStatus.cs │ │ ├── CaseReports │ │ │ ├── AgeGroup.cs │ │ │ └── Sex.cs │ │ ├── Concepts.csproj │ │ ├── DataCollector │ │ │ ├── DataCollectorId.cs │ │ │ ├── DataCollectorIdValidator.cs │ │ │ ├── Language.cs │ │ │ ├── Location.cs │ │ │ ├── PhoneNumber.cs │ │ │ └── Sex.cs │ │ ├── DataOwners │ │ │ ├── DataOwnerId.cs │ │ │ ├── Email.cs │ │ │ └── NameOfDataOwner.cs │ │ ├── HealthRisks │ │ │ └── HealthRiskNumber.cs │ │ └── Report │ │ │ └── ReportId.cs │ ├── Core │ │ ├── .dolittle │ │ │ ├── artifacts.json │ │ │ ├── event-horizons.json │ │ │ ├── resources.json │ │ │ ├── server.json │ │ │ ├── tenant-map.json │ │ │ ├── tenants.json │ │ │ └── topology.json │ │ ├── Core.csproj │ │ ├── Dockerfile │ │ ├── LoggingExtensions.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── SecurityExtensions.cs │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── hooks │ │ │ └── pre_push │ ├── Dockerfile │ ├── Domain.Specs │ │ └── Domain.Specs.csproj │ ├── Domain │ │ ├── AlertRules │ │ │ ├── AlertRule.cs │ │ │ ├── AlertRuleCommandHandler.cs │ │ │ ├── CreateAlertRule.cs │ │ │ ├── CreateAlertRuleBusinessValidator.cs │ │ │ ├── CreateAlertRuleInputValidator.cs │ │ │ ├── DeleteAlertRule.cs │ │ │ └── UpdateAlertRule.cs │ │ ├── Alerts │ │ │ ├── Alerts.cs │ │ │ ├── CloseAlert.cs │ │ │ ├── CloseAlertBusinessValidator.cs │ │ │ ├── CloseAlertCommandHandler.cs │ │ │ └── CloseAlertInputValidator.cs │ │ ├── DataOwners │ │ │ ├── DataOwner.cs │ │ │ ├── RegisterDataOwner.cs │ │ │ ├── RegisterOwnerBusinessValidator.cs │ │ │ ├── RegisterOwnerCommandHandler.cs │ │ │ └── RegisterOwnerInputValidator.cs │ │ ├── Domain.csproj │ │ └── Reports │ │ │ ├── CaseReport.cs │ │ │ ├── CaseReportData.cs │ │ │ ├── CasesCommandHandler.cs │ │ │ ├── ForcePublishNewCaseReport.cs │ │ │ ├── ForcePublishNewCaseReportBusinessValidator.cs │ │ │ └── ForcePublishNewCaseReportInputValidator.cs │ ├── Events.Admin │ │ ├── Events.Admin.csproj │ │ └── HealthRisks │ │ │ └── HealthRiskCreated.cs │ ├── Events.Reporting │ │ ├── CaseReports │ │ │ └── CaseReportRecieved.cs │ │ └── Events.Reporting.csproj │ ├── Events │ │ ├── AlertRules │ │ │ ├── AlertRuleCreated.cs │ │ │ ├── AlertRuleDeleted.cs │ │ │ └── AlertRuleUpdated.cs │ │ ├── Alerts │ │ │ ├── AlertClosed.cs │ │ │ ├── AlertOpened.cs │ │ │ └── ReportAddedToAlert.cs │ │ ├── DataCollectors │ │ │ ├── Changing │ │ │ │ ├── DataCollectorLocationChanged.cs │ │ │ │ ├── DataCollectorPrefferedLanguageChanged.cs │ │ │ │ ├── DataCollectorUserInformationChanged.cs │ │ │ │ └── DataCollectorVillageChanged.cs │ │ │ ├── PhoneNumber │ │ │ │ ├── PhoneNumberAddedToDataCollector.cs │ │ │ │ └── PhoneNumberRemovedFromDataCollector.cs │ │ │ └── Registration │ │ │ │ ├── DataCollectorRegistered.cs │ │ │ │ └── DataCollectorRemoved.cs │ │ ├── DataOwners │ │ │ └── DataOwnerRegistered.cs │ │ ├── Events.csproj │ │ └── Reports │ │ │ └── ReportRegistered.cs │ ├── Policies.Specs │ │ ├── Policies.Specs.csproj │ │ └── for_AlertRules │ │ │ ├── given │ │ │ └── an_aggregate.cs │ │ │ └── when_something_happens.cs │ ├── Policies │ │ ├── AlertRules │ │ │ └── AlertRulesProcessor.cs │ │ ├── Alerts │ │ │ ├── AlertsEventProcessor.cs │ │ │ ├── BasicMailSender.cs │ │ │ ├── IMailSender.cs │ │ │ └── MailSenderBinder.cs │ │ ├── CaseReports │ │ │ └── CaseReportsProcessor.cs │ │ └── Policies.csproj │ ├── README.md │ ├── Read.Specs │ │ └── Read.Specs.csproj │ ├── Read │ │ ├── AlertRules │ │ │ ├── AlertRule.cs │ │ │ ├── AlertRuleById.cs │ │ │ ├── AlertRuleEventProcessor.cs │ │ │ └── AllAlertRules.cs │ │ ├── Alerts │ │ │ ├── AlertEventProcesor.cs │ │ │ ├── AlertOverview.cs │ │ │ ├── AllAlertOverviews.cs │ │ │ └── Open │ │ │ │ ├── EventProcessor.cs │ │ │ │ └── OpenAlert.cs │ │ ├── DataCollectors │ │ │ ├── AllDataCollectors.cs │ │ │ ├── DataCollector.cs │ │ │ ├── DataCollectorById.cs │ │ │ └── DataCollectorEventProcessor.cs │ │ ├── DataOwners │ │ │ ├── DataOwner.cs │ │ │ ├── DataOwnerProcessor.cs │ │ │ └── GetDataOwner.cs │ │ ├── Read.csproj │ │ └── Reports │ │ │ ├── AllReports.cs │ │ │ ├── AvailableForRules │ │ │ ├── AvailableReport.cs │ │ │ └── EventProcessor.cs │ │ │ ├── Report.cs │ │ │ └── ReportEventProcessor.cs │ ├── Rules.Specs │ │ └── Rules.Specs.csproj │ ├── Rules │ │ └── Rules.csproj │ ├── Web │ │ ├── .babelrc │ │ ├── Dockerfile │ │ ├── Environments │ │ │ ├── demo_api.env │ │ │ ├── local_api.env │ │ │ ├── mock_api.env │ │ │ └── production.env │ │ ├── Features │ │ │ ├── AlertRules │ │ │ │ ├── AlertRule.js │ │ │ │ ├── AlertRuleById.js │ │ │ │ ├── AllAlertRules.js │ │ │ │ ├── CreateAlertRule.js │ │ │ │ ├── DeleteAlertRule.js │ │ │ │ └── UpdateAlertRule.js │ │ │ ├── Alerts │ │ │ │ ├── AlertOverview.js │ │ │ │ ├── AllAlertOverviews.js │ │ │ │ ├── CloseAlert.js │ │ │ │ └── Open │ │ │ │ │ └── OpenAlert.js │ │ │ ├── DataCollectors │ │ │ │ ├── AllDataCollectors.js │ │ │ │ ├── DataCollector.js │ │ │ │ └── DataCollectorById.js │ │ │ ├── DataOwners │ │ │ │ ├── DataOwner.js │ │ │ │ ├── GetDataOwner.js │ │ │ │ └── RegisterDataOwner.js │ │ │ └── Reports │ │ │ │ ├── AllReports.js │ │ │ │ ├── AvailableForRules │ │ │ │ └── AvailableReport.js │ │ │ │ ├── ForcePublishNewCaseReport.js │ │ │ │ └── Report.js │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── README.md │ │ ├── assets │ │ │ └── logo.png │ │ ├── hooks │ │ │ └── pre_push │ │ ├── index.ejs │ │ ├── jsconfig.json │ │ ├── karma.conf.js │ │ ├── mocking │ │ │ ├── MockCommandCoordinator.js │ │ │ └── MockQueryCoordinator.js │ │ ├── nginx-default.conf │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── src │ │ │ ├── assets │ │ │ │ ├── logo.png │ │ │ │ └── main.scss │ │ │ ├── components │ │ │ │ ├── AddAlertRule.js │ │ │ │ ├── AlertMenu.js │ │ │ │ ├── AlertOverview.js │ │ │ │ ├── AlertRule.js │ │ │ │ ├── AlertRuleOverview.js │ │ │ │ ├── App.js │ │ │ │ ├── Navigation │ │ │ │ │ ├── CBSNavigation.js │ │ │ │ │ ├── cbs-navigation-v1.scss │ │ │ │ │ └── cbs-navigation-v2.scss │ │ │ │ └── RegisterDataOwner.js │ │ │ ├── coordinators.js │ │ │ ├── index.js │ │ │ ├── reducer.js │ │ │ ├── saga.js │ │ │ └── store.js │ │ ├── wallaby.js │ │ ├── webpack.config.js │ │ └── webpack.config.prod.js │ └── bounded-context.json ├── Analytics │ ├── .dockerignore │ ├── Analytics.sln │ ├── Concepts │ │ ├── Alerts │ │ │ ├── AlertId.cs │ │ │ └── AlertRuleId.cs │ │ ├── CaseReportId.cs │ │ ├── Concepts.csproj │ │ ├── Constants.cs │ │ ├── DataCollectors │ │ │ ├── DataCollectorId.cs │ │ │ ├── DataCollectorName.cs │ │ │ └── Sex.cs │ │ ├── Day.cs │ │ ├── DistrictId.cs │ │ ├── DistrictName.cs │ │ ├── HealthRisks │ │ │ ├── HealthRiskId.cs │ │ │ ├── HealthRiskName.cs │ │ │ └── HealthRiskNumber.cs │ │ ├── Location.cs │ │ ├── NumberOfCasereports.cs │ │ ├── NumberOfPeople.cs │ │ ├── RegionId.cs │ │ ├── RegionName.cs │ │ ├── VillageId.cs │ │ └── VillageName.cs │ ├── Core │ │ ├── .dolittle │ │ │ ├── artifacts.json │ │ │ ├── event-horizons.json │ │ │ ├── resources.json │ │ │ ├── server.json │ │ │ ├── tenant-map.json │ │ │ ├── tenants.json │ │ │ └── topology.json │ │ ├── Core.csproj │ │ ├── LoggingExtensions.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── SecurityExtensions.cs │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Dockerfile │ ├── Events.Admin │ │ ├── Events.Admin.csproj │ │ └── HealthRisks │ │ │ ├── HealthRiskCreated.cs │ │ │ ├── HealthRiskDeleted.cs │ │ │ └── HealthRiskModified.cs │ ├── Events.Alerts │ │ ├── Alerts │ │ │ ├── AlertOpened.cs │ │ │ ├── AlertRuleCreated.cs │ │ │ └── AlertRuleUpdated.cs │ │ └── Events.Alerts.csproj │ ├── Events.Reporting │ │ ├── CaseReports │ │ │ └── CaseReportReceived.cs │ │ ├── DataCollectors │ │ │ ├── DataCollectorBeganTraining.cs │ │ │ ├── DataCollectorCompletedTraining.cs │ │ │ ├── DataCollectorRegistered.cs │ │ │ ├── DataCollectorVillageChanged.cs │ │ │ └── LastActiveUpdated.cs │ │ └── Events.Reporting.csproj │ ├── Read │ │ ├── Alerts │ │ │ ├── Alert.cs │ │ │ ├── AlertRule.cs │ │ │ └── EventProcessor.cs │ │ ├── CaseReports │ │ │ ├── AllCaseReportsQuery.cs │ │ │ ├── CaseReport.cs │ │ │ ├── CaseReportEventProcessor.cs │ │ │ ├── CaseReportsPerHealthRiskPerDay.cs │ │ │ ├── CaseReportsPerHealthRiskPerDayQuery.cs │ │ │ ├── CaseReportsPerRegionLast4Weeks.cs │ │ │ ├── CaseReportsPerRegionLast4WeeksQuery.cs │ │ │ ├── HealthRisksInRegionsLast4Weeks.cs │ │ │ ├── RegionWithHealthRisk.cs │ │ │ ├── TotalReports.cs │ │ │ └── TotalReportsQuery.cs │ │ ├── DataCollectors │ │ │ ├── AllRegions.cs │ │ │ ├── DataCollector.cs │ │ │ ├── DataCollectorsQuery.cs │ │ │ ├── District.cs │ │ │ ├── EventProcessor.cs │ │ │ ├── Region.cs │ │ │ └── Village.cs │ │ ├── HealthRisks │ │ │ ├── AllHealthRisks.cs │ │ │ ├── EventProcessor.cs │ │ │ └── HealthRisk.cs │ │ ├── Map │ │ │ ├── CaseReportForMap.cs │ │ │ ├── CaseReportsLast4Weeks.cs │ │ │ ├── CaseReportsLast4WeeksQuery.cs │ │ │ ├── CaseReportsLast7Days.cs │ │ │ ├── CaseReportsLast7DaysQuery.cs │ │ │ ├── CaseReportsPerHealthRisk.cs │ │ │ └── MapProcessor.cs │ │ ├── Overview │ │ │ ├── Last4WeeksPerHealthRisk │ │ │ │ ├── CaseReportsLast4WeeksForHealthRisk.cs │ │ │ │ ├── CaseReportsLast4WeeksPerHealthRisk.cs │ │ │ │ ├── CaseReportsLast4WeeksPerHealthRiskQuery.cs │ │ │ │ └── EventProcessor.cs │ │ │ └── LastWeekTotals │ │ │ │ ├── CaseReportTotals.cs │ │ │ │ ├── CaseReportTotalsQuery.cs │ │ │ │ └── EventProcessor.cs │ │ └── Read.csproj │ ├── Web │ │ ├── .babelrc │ │ ├── Controllers │ │ │ └── TestDataGeneratorController.cs │ │ ├── DependenciesExtensions.cs │ │ ├── Dockerfile │ │ ├── Environments │ │ │ ├── development.env │ │ │ └── production.env │ │ ├── README.md │ │ ├── assets │ │ │ ├── dolittle_logo_negative.svg │ │ │ ├── dolittle_logo_positive.svg │ │ │ ├── dolittle_symbol.svg │ │ │ ├── images │ │ │ │ └── rawpixel-653764-unsplash.jpg │ │ │ └── splash.png │ │ ├── dolittle.env │ │ ├── index.ejs │ │ ├── jsconfig.json │ │ ├── karma.conf.js │ │ ├── nginx-default.conf │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── run.js │ │ ├── src │ │ │ ├── Features │ │ │ │ ├── Alerts │ │ │ │ │ ├── Alert.js │ │ │ │ │ └── AlertRule.js │ │ │ │ ├── CaseReports │ │ │ │ │ ├── AllCaseReportsQuery.js │ │ │ │ │ ├── CaseReport.js │ │ │ │ │ ├── CaseReportsPerHealthRiskPerDay.js │ │ │ │ │ ├── CaseReportsPerHealthRiskPerDayQuery.js │ │ │ │ │ ├── CaseReportsPerRegionLast4Weeks.js │ │ │ │ │ ├── CaseReportsPerRegionLast4WeeksQuery.js │ │ │ │ │ ├── HealthRisksInRegionsLast4Weeks.js │ │ │ │ │ ├── HealthRisksInRegionsLast7Days.js │ │ │ │ │ ├── RegionWithHealthRisk.js │ │ │ │ │ ├── TotalReports.js │ │ │ │ │ └── TotalReportsQuery.js │ │ │ │ ├── DataCollectors │ │ │ │ │ ├── AllRegions.js │ │ │ │ │ ├── DataCollector.js │ │ │ │ │ ├── DataCollectorsQuery.js │ │ │ │ │ ├── District.js │ │ │ │ │ ├── Region.js │ │ │ │ │ └── Village.js │ │ │ │ ├── HealthRisks │ │ │ │ │ ├── AllHealthRisks.js │ │ │ │ │ └── HealthRisk.js │ │ │ │ ├── Map │ │ │ │ │ ├── CaseReportsLast30Days.js │ │ │ │ │ ├── CaseReportsLast30DaysQuery.js │ │ │ │ │ ├── CaseReportsLast4Weeks.js │ │ │ │ │ ├── CaseReportsLast4WeeksQuery.js │ │ │ │ │ ├── CaseReportsLast7Days.js │ │ │ │ │ └── CaseReportsLast7DaysQuery.js │ │ │ │ └── Overview │ │ │ │ │ ├── Last4WeeksPerHealthRisk │ │ │ │ │ ├── CaseReportsLast4WeeksPerHealthRisk.js │ │ │ │ │ └── CaseReportsLast4WeeksPerHealthRiskQuery.js │ │ │ │ │ └── LastWeekTotals │ │ │ │ │ ├── CaseReportTotals.js │ │ │ │ │ └── CaseReportTotalsQuery.js │ │ │ ├── actions │ │ │ │ └── analysisactions.js │ │ │ ├── assets │ │ │ │ ├── colors.scss │ │ │ │ ├── country-overview.scss │ │ │ │ ├── inclusions.scss │ │ │ │ ├── main.scss │ │ │ │ ├── map.css │ │ │ │ ├── react-leaflet.scss │ │ │ │ ├── table.scss │ │ │ │ └── vars.scss │ │ │ ├── components │ │ │ │ ├── CountryKeyFigures │ │ │ │ │ └── CountryKeyFigures.js │ │ │ │ ├── CountryOverview │ │ │ │ │ └── CountryOverview.js │ │ │ │ ├── Lightweight │ │ │ │ │ └── LightweightAreaOverview.js │ │ │ │ ├── Map.js │ │ │ │ ├── MapOverview.js │ │ │ │ ├── MapPieChart.js │ │ │ │ ├── Reports │ │ │ │ │ ├── ReportsPerHealthRiskPerDay.js │ │ │ │ │ └── ReportsPerHealthRiskPerRegionLast4Weeks.js │ │ │ │ ├── healthRisk │ │ │ │ │ └── HealthRiskSelector.js │ │ │ │ └── lastWeekTotals │ │ │ │ │ └── LastWeekTotals.js │ │ │ ├── exports.js │ │ │ ├── index.js │ │ │ ├── reducers │ │ │ │ ├── analyticsReducer.js │ │ │ │ └── index.js │ │ │ └── utils │ │ │ │ ├── dateUtils.js │ │ │ │ ├── request.js │ │ │ │ └── routes.js │ │ ├── wallaby.js │ │ └── webpack.config.js │ └── bounded-context.json ├── Navigation │ ├── Web.Angular │ │ ├── nav-top-bar.component-v2.scss │ │ ├── nav-top-bar.component.html │ │ ├── nav-top-bar.component.scss │ │ ├── nav-top-bar.component.ts │ │ ├── package-lock.json │ │ ├── package.json │ │ └── readme.md │ └── Web.React │ │ ├── .babelrc │ │ ├── index.js │ │ ├── lib │ │ ├── cbs-navigation.scss │ │ ├── colors.scss │ │ ├── index.js │ │ └── vars.scss │ │ ├── package-lock.json │ │ ├── package.json │ │ └── readme.md ├── NotificationGateway │ ├── Concepts │ │ ├── Concepts.csproj │ │ ├── MessageId.cs │ │ └── SMS │ │ │ ├── Gateways │ │ │ ├── ApiKey.cs │ │ │ ├── MessageId.cs │ │ │ ├── ModemNumber.cs │ │ │ ├── Name.cs │ │ │ ├── OID.cs │ │ │ ├── SmsGatewayId.cs │ │ │ └── SmsGatewayIdValidator.cs │ │ │ ├── Message.cs │ │ │ └── PhoneNumber.cs │ ├── Core │ │ ├── .dolittle │ │ │ ├── artifacts.json │ │ │ ├── event-horizons.json │ │ │ ├── resources.json │ │ │ ├── server.json │ │ │ ├── tenant-map.json │ │ │ ├── tenants.json │ │ │ └── topology.json │ │ ├── Core.csproj │ │ ├── Dockerfile │ │ ├── GatewayEndpoints │ │ │ ├── GatewayEventProcessor.cs │ │ │ ├── ITenantMapper.cs │ │ │ ├── ReceiveMessageFromSMSGatewayFailed.cs │ │ │ ├── SmsEagleController.cs │ │ │ ├── SmsEagleSamples │ │ │ │ ├── smseagle-1.sample │ │ │ │ ├── smseagle-2.sample │ │ │ │ └── smseagle-3.sample │ │ │ ├── TenantMapper.cs │ │ │ └── TenantMapperFileNotAccessible.cs │ │ ├── LoggingExtensions.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── Security │ │ │ ├── BypassingControllersManager.cs │ │ │ ├── ICanBypassSecurity.cs │ │ │ ├── ISecurityBypassingRequestManager.cs │ │ │ └── SecurityBindings.cs │ │ ├── SecurityExtensions.cs │ │ ├── Startup.cs │ │ ├── apikeyToTenant.json │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── hooks │ │ │ └── pre_push │ ├── Dockerfile │ ├── Domain.Specs │ │ └── Domain.Specs.csproj │ ├── Domain │ │ ├── Domain.csproj │ │ └── SMS │ │ │ ├── Gateways │ │ │ ├── AssignPhoneNumberToSmsGateway.cs │ │ │ ├── AssignPhoneNumberToSmsGatewayBusinessValidator.cs │ │ │ ├── AssignPhoneNumberToSmsGatewayInputValidator.cs │ │ │ ├── ReceiveMessageFromSMSGateway.cs │ │ │ ├── ReceiveMessageFromSMSGatewayBusinessValidator.cs │ │ │ ├── ReceiveMessageFromSMSGatewayInputValidator.cs │ │ │ ├── RegisterSmsGateway.cs │ │ │ ├── RegisterSmsGatewayBusinessValidator.cs │ │ │ ├── RegisterSmsGatewayInputValidator.cs │ │ │ ├── Rules.cs │ │ │ ├── SmsGatewayAggregate.cs │ │ │ └── SmsGatewayCommandHandlers.cs │ │ │ ├── SimulateReceivedMessage.cs │ │ │ ├── SimulateReceivedMessageBusinessValidator.cs │ │ │ ├── SimulateReceivedMessageInputValidator.cs │ │ │ ├── TextMessage.cs │ │ │ └── TextMessageCommandHandler.cs │ ├── Events │ │ ├── Events.csproj │ │ └── SMS │ │ │ ├── Gateways │ │ │ ├── SmsGatewayEnabled.cs │ │ │ ├── SmsGatewayNumberAssigned.cs │ │ │ └── SmsGatewayRegistered.cs │ │ │ └── TextMessageReceived.cs │ ├── NotificationGateway.sln │ ├── Policies.Specs │ │ └── Policies.Specs.csproj │ ├── Policies │ │ └── Policies.csproj │ ├── Read.Specs │ │ └── Read.Specs.csproj │ ├── Read │ │ ├── Read.csproj │ │ └── SMS │ │ │ ├── AllReceivedMessages.cs │ │ │ ├── Gateways │ │ │ ├── SmsGateway.cs │ │ │ ├── SmsGatewayEventProcessor.cs │ │ │ ├── SmsGatewayGetAllQuery.cs │ │ │ └── SmsGatewayGetEnabledQuery.cs │ │ │ ├── ReceivedMessage.cs │ │ │ └── TextMessageEventProcessor.cs │ ├── Rules.Specs │ │ └── Rules.Specs.csproj │ ├── Rules │ │ ├── Rules.csproj │ │ └── SMS │ │ │ └── Gateways │ │ │ ├── IsSmsGatewayExisting.cs │ │ │ ├── PhoneNumberNotExists.cs │ │ │ └── SMSGatewayMustBeEnabled.cs │ ├── Web │ │ ├── .babelrc │ │ ├── Dockerfile │ │ ├── Environments │ │ │ ├── development.env │ │ │ └── production.env │ │ ├── Features │ │ │ ├── App.js │ │ │ ├── SMS │ │ │ │ ├── AllReceivedMessages.js │ │ │ │ ├── Gateways │ │ │ │ │ ├── AssignPhoneNumberToSmsGateway.js │ │ │ │ │ ├── Gateways.js │ │ │ │ │ ├── ReceiveMessageFromSMSGateway.js │ │ │ │ │ ├── RegisterSmsGateway.js │ │ │ │ │ ├── SmsGateway.js │ │ │ │ │ ├── SmsGatewayGetAllQuery.js │ │ │ │ │ └── SmsGatewayGetEnabledQuery.js │ │ │ │ ├── Messages.js │ │ │ │ ├── ReceivedMessage.js │ │ │ │ └── SimulateReceivedMessage.js │ │ │ └── index.js │ │ ├── README.md │ │ ├── hooks │ │ │ └── pre_push │ │ ├── index.ejs │ │ ├── jsconfig.json │ │ ├── karma.conf.js │ │ ├── nginx-default.conf │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── wallaby.js │ │ ├── webpack.config.js │ │ └── webpack.config.prod.js │ └── bounded-context.json ├── Reporting │ ├── Concepts │ │ ├── AutomaticReplies │ │ │ ├── AutomaticReplyKeyMessageType.cs │ │ │ └── AutomaticReplyType.cs │ │ ├── CaseReports │ │ │ ├── AgeGroup.cs │ │ │ ├── CaseReportId.cs │ │ │ └── CaseReportIdValidator.cs │ │ ├── Concepts.csproj │ │ ├── DataCollectors │ │ │ ├── DataCollectorId.cs │ │ │ ├── DataCollectorIdValidator.cs │ │ │ ├── DisplayName.cs │ │ │ ├── DisplayNameValidator.cs │ │ │ ├── District.cs │ │ │ ├── DistrictValidator.cs │ │ │ ├── FullName.cs │ │ │ ├── FullNameValidator.cs │ │ │ ├── Language.cs │ │ │ ├── Location.cs │ │ │ ├── PhoneNumber.cs │ │ │ ├── PhoneNumberValidator.cs │ │ │ ├── Region.cs │ │ │ ├── RegionValidator.cs │ │ │ ├── Sex.cs │ │ │ ├── Village.cs │ │ │ ├── YearOfBirth.cs │ │ │ └── YearOfBirthValidator.cs │ │ ├── DataVerifiers │ │ │ ├── DataVerifierId.cs │ │ │ └── DataVerifierIdValidator.cs │ │ ├── HealthRisks │ │ │ ├── HealthRiskId.cs │ │ │ ├── HealthRiskIdValidator.cs │ │ │ ├── HealthRiskName.cs │ │ │ ├── HealthRiskNameValidator.cs │ │ │ ├── HealthRiskReadableId.cs │ │ │ └── HealthRiskReadableIdValidator.cs │ │ ├── Projects │ │ │ ├── ProjectId.cs │ │ │ ├── ProjectIdValidator.cs │ │ │ └── ProjectName.cs │ │ └── Region.cs │ ├── Core │ │ ├── .dolittle │ │ │ ├── artifacts.json │ │ │ ├── event-horizons.json │ │ │ ├── resources.json │ │ │ ├── server.json │ │ │ ├── tenant-map.json │ │ │ ├── tenants.json │ │ │ └── topology.json │ │ ├── CaseReports │ │ │ ├── ExportController.cs │ │ │ ├── Formats │ │ │ │ ├── CsvExporter.cs │ │ │ │ └── ExcelExporter.cs │ │ │ └── ICanExportCaseReports.cs │ │ ├── Core.csproj │ │ ├── Dockerfile │ │ ├── LoggingExtensions.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── SecurityExtensions.cs │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── hooks │ │ │ └── pre_push │ ├── Dockerfile │ ├── Domain.Specs │ │ ├── Domain.Specs.csproj │ │ ├── Management │ │ │ └── for_data_collectors │ │ │ │ ├── when_adding_a_phone_number │ │ │ │ ├── and_validating_a_command_with_a_missing_data_collector_id.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_phone_number.cs │ │ │ │ └── and_validating_a_valid_command.cs │ │ │ │ ├── when_beginning_training │ │ │ │ ├── and_validating_a_command_with_a_missing_data_collector_id.cs │ │ │ │ └── given │ │ │ │ │ └── a_command_builder.cs │ │ │ │ ├── when_deleting_a_datacollector │ │ │ │ ├── and_validating_a_command_with_a_missing_data_collector_id.cs │ │ │ │ └── given │ │ │ │ │ └── a_command_builder.cs │ │ │ │ ├── when_ending_training │ │ │ │ ├── and_validating_a_command_with_a_missing_data_collector_id.cs │ │ │ │ └── given │ │ │ │ │ └── a_command_builder.cs │ │ │ │ ├── when_registering_a_data_collector │ │ │ │ ├── and_validating_a_command_with_a_missing_data_collector_id.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_display_name.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_email.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_full_name.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_gps_location.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_data_verifier_Id.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_district.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_email.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_preferred_language.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_region.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_sex.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_year_of_birth.cs │ │ │ │ ├── and_validating_a_command_with_missing_phone_numbers.cs │ │ │ │ ├── and_validating_a_command_with_no_phone_numbers.cs │ │ │ │ ├── and_validating_a_valid_command.cs │ │ │ │ └── given │ │ │ │ │ └── a_command_builder.cs │ │ │ │ ├── when_removing_a_phone_number │ │ │ │ ├── and_validating_a_command_with_a_missing_data_collector_id.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_phone_number.cs │ │ │ │ └── and_validating_a_valid_command.cs │ │ │ │ └── when_updating_a_data_collector │ │ │ │ ├── and_validating_a_command_with_a_missing_data_collector_id.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_display_name.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_email.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_full_name.cs │ │ │ │ ├── and_validating_a_command_with_a_missing_gps_location.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_email.cs │ │ │ │ ├── and_validating_a_command_with_an_invalid_preferred_language.cs │ │ │ │ ├── and_validating_a_valid_command.cs │ │ │ │ └── given │ │ │ │ └── a_command_builder.cs │ │ └── ValidationResultExtensions.cs │ ├── Domain │ │ ├── Domain.csproj │ │ ├── Management │ │ │ └── DataCollectors │ │ │ │ ├── DataCollector.cs │ │ │ │ ├── EditInformation │ │ │ │ ├── AddPhoneNumberToDataCollector.cs │ │ │ │ ├── AddPhoneNumberToDataCollectorBusinessValidator.cs │ │ │ │ ├── AddPhoneNumberToDataCollectorInputValidator.cs │ │ │ │ ├── ChangeBaseInformation.cs │ │ │ │ ├── ChangeBaseInformationBusinessValidator.cs │ │ │ │ ├── ChangeBaseInformationInputValidator.cs │ │ │ │ ├── ChangeDataVerifier.cs │ │ │ │ ├── ChangeDataVerifierBusinessValidator.cs │ │ │ │ ├── ChangeDataVerifierInputValidator.cs │ │ │ │ ├── ChangeLocation.cs │ │ │ │ ├── ChangeLocationBusinessValidator.cs │ │ │ │ ├── ChangeLocationInputValidator.cs │ │ │ │ ├── ChangePreferredLanguage.cs │ │ │ │ ├── ChangePreferredLanguageBusinessValidator.cs │ │ │ │ ├── ChangePreferredLanguageInputValidator.cs │ │ │ │ ├── ChangeVillage.cs │ │ │ │ ├── ChangeVillageBusinessValidator.cs │ │ │ │ ├── ChangeVillageInputValidator.cs │ │ │ │ ├── InformationCommandHandler.cs │ │ │ │ ├── RemovePhoneNumberFromDataCollector.cs │ │ │ │ ├── RemovePhoneNumberFromDataCollectorBusinessValidator.cs │ │ │ │ └── RemovePhoneNumberFromDataCollectorInputValidator.cs │ │ │ │ ├── Registration │ │ │ │ ├── DeleteDataCollector.cs │ │ │ │ ├── DeleteDataCollectorBusinessValidator.cs │ │ │ │ ├── DeleteDataCollectorInputValidator.cs │ │ │ │ ├── RegisterDataCollector.cs │ │ │ │ ├── RegisterDataCollectorBusinessValidator.cs │ │ │ │ ├── RegisterDataCollectorInputValidator.cs │ │ │ │ └── RegistrationHandler.cs │ │ │ │ ├── Rules.cs │ │ │ │ └── Training │ │ │ │ ├── BeginTraining.cs │ │ │ │ ├── BeginTrainingBusinessValidator.cs │ │ │ │ ├── BeginTrainingInputValidator.cs │ │ │ │ ├── EndTraining.cs │ │ │ │ ├── EndTrainingBusinessValidator.cs │ │ │ │ ├── EndTrainingInputValidator.cs │ │ │ │ └── TrainingHandler.cs │ │ ├── Reporting │ │ │ ├── AutomaticReplyMessages │ │ │ │ ├── AutomaticRepliesCommandHandlers.cs │ │ │ │ ├── AutomaticReplyDefinition.cs │ │ │ │ ├── DefineAutomaticReplyForProject.cs │ │ │ │ ├── DefineAutomaticReplyForProjectValidator.cs │ │ │ │ └── DefineAutomaticReplyKeyMessageForProject.cs │ │ │ └── CaseReports │ │ │ │ └── CaseReporting.cs │ │ └── TestData │ │ │ ├── CaseReports │ │ │ └── PopulateCaseReportTestData.cs │ │ │ ├── Data │ │ │ ├── CaseReportTestDataHelper.cs │ │ │ ├── CaseReports.json │ │ │ ├── DataCollectors.json │ │ │ ├── HealthRiskTestDataHelper.cs │ │ │ └── HealthRisks.json │ │ │ ├── HealthRisks │ │ │ └── HealthRisk.cs │ │ │ └── TestDataCommandHandler.cs │ ├── Events.Admin │ │ ├── Events.Admin.csproj │ │ └── Reporting │ │ │ ├── DefaultReplyMessages │ │ │ ├── DefaultAutomaticReplyDefined.cs │ │ │ └── DefaultAutomaticReplyKeyMessageDefined.cs │ │ │ ├── HealthRisks │ │ │ ├── HealthRiskCreated.cs │ │ │ ├── HealthRiskDeleted.cs │ │ │ └── HealthRiskModified.cs │ │ │ └── Projects │ │ │ ├── ProjectCreated.cs │ │ │ └── ProjectUpdated.cs │ ├── Events.NotificationGateway │ │ ├── Events.NotificationGateway.csproj │ │ └── Reporting │ │ │ └── SMS │ │ │ └── TextMessageReceived.cs │ ├── Events │ │ ├── Events.csproj │ │ ├── Management │ │ │ ├── DataCollectors │ │ │ │ ├── EditInformation │ │ │ │ │ ├── DataCollectorDataVerifierChanged.cs │ │ │ │ │ ├── DataCollectorLocationChanged.cs │ │ │ │ │ ├── DataCollectorPrefferedLanguageChanged.cs │ │ │ │ │ ├── DataCollectorUserInformationChanged.cs │ │ │ │ │ ├── DataCollectorVillageChanged.cs │ │ │ │ │ ├── LastActiveUpdated.cs │ │ │ │ │ ├── PhoneNumberAddedToDataCollector.cs │ │ │ │ │ └── PhoneNumberRemovedFromDataCollector.cs │ │ │ │ ├── Registration │ │ │ │ │ ├── DataCollectorRegistered.cs │ │ │ │ │ └── DataCollectorRemoved.cs │ │ │ │ └── Training │ │ │ │ │ ├── DataCollectorBeganTraining.cs │ │ │ │ │ └── DataCollectorCompletedTraining.cs │ │ │ └── MessageGenerators │ │ │ │ └── MessageGenerated.cs │ │ └── Reporting │ │ │ ├── AutomaticReplyMessages │ │ │ ├── AutomaticReplyDefined.cs │ │ │ ├── AutomaticReplyKeyMessageDefined.cs │ │ │ ├── AutomaticReplyKeyMessageRemoved.cs │ │ │ └── AutomaticReplyRemoved.cs │ │ │ └── CaseReports │ │ │ ├── CaseReportFromUnknownDataCollectorReceived.cs │ │ │ ├── CaseReportIdentified.cs │ │ │ ├── CaseReportReceived.cs │ │ │ ├── InvalidReportFromUnknownDataCollectorReceived.cs │ │ │ ├── InvalidReportReceived.cs │ │ │ ├── InvalidTrainingReportReceived.cs │ │ │ └── TrainingReportReceived.cs │ ├── Policies.Specs │ │ ├── Policies.Specs.csproj │ │ └── Reporting │ │ │ └── for_notifications │ │ │ ├── given │ │ │ └── text_message_received_events.cs │ │ │ ├── when_parsing_a_correctly_formated_aggregated_case_report_sms │ │ │ ├── given │ │ │ │ └── text_message_received_events_containing_aggregated_case_reports.cs │ │ │ ├── separated_by_hash │ │ │ │ ├── given │ │ │ │ │ └── text_message_received_events_containing_aggregated_case_report.cs │ │ │ │ ├── when_it_is_a_valid_report.cs │ │ │ │ ├── when_report_has_a_negative_health_risk.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_females_over_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_females_under_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_males_over_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_males_under_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_females_over_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_females_under_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_health_risk.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_males_over_5.cs │ │ │ │ └── when_report_has_an_invalid_value_for_males_under_5.cs │ │ │ ├── separated_by_star │ │ │ │ ├── given │ │ │ │ │ └── text_message_received_events_containing_aggregated_case_report.cs │ │ │ │ ├── when_it_is_a_valid_report.cs │ │ │ │ ├── when_report_has_a_negative_health_risk.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_females_over_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_females_under_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_males_over_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_males_under_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_females_over_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_females_under_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_health_risk.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_males_over_5.cs │ │ │ │ └── when_report_has_an_invalid_value_for_males_under_5.cs │ │ │ └── separated_by_star_and_hash │ │ │ │ ├── given │ │ │ │ └── text_message_received_events_containing_aggregated_case_report.cs │ │ │ │ ├── when_it_is_a_valid_report.cs │ │ │ │ ├── when_report_has_a_negative_health_risk.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_females_over_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_females_under_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_males_over_5.cs │ │ │ │ ├── when_report_has_a_negative_number_of_cases_of_males_under_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_females_over_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_females_under_5.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_health_risk.cs │ │ │ │ ├── when_report_has_an_invalid_value_for_males_over_5.cs │ │ │ │ └── when_report_has_an_invalid_value_for_males_under_5.cs │ │ │ └── when_parsing_a_correctly_formated_single_case_report_sms │ │ │ ├── given │ │ │ └── a_text_message_received_builder_for_single_case_report.cs │ │ │ ├── separated_by_hash │ │ │ ├── given │ │ │ │ └── a_text_message_received_builder_for_single_case_report.cs │ │ │ ├── when_report_has_a_negative_age_group.cs │ │ │ ├── when_report_has_a_negative_health_risk.cs │ │ │ ├── when_report_has_a_negative_sex.cs │ │ │ ├── when_report_has_an_invalid_value_for_age_group.cs │ │ │ ├── when_report_has_an_invalid_value_for_health_risk.cs │ │ │ ├── when_report_has_an_invalid_value_for_sex.cs │ │ │ ├── when_report_has_an_out_of_range_value_for_age_group.cs │ │ │ ├── when_report_has_an_out_of_range_value_for_sex.cs │ │ │ ├── when_report_is_of_a_man_over_5.cs │ │ │ ├── when_report_is_of_a_man_under_5.cs │ │ │ ├── when_report_is_of_a_woman_over_5.cs │ │ │ └── when_report_is_of_a_woman_under_5.cs │ │ │ ├── separated_by_star │ │ │ ├── given │ │ │ │ └── a_text_message_received_builder_for_single_case_report.cs │ │ │ ├── when_report_has_a_negative_age_group.cs │ │ │ ├── when_report_has_a_negative_health_risk.cs │ │ │ ├── when_report_has_a_negative_sex.cs │ │ │ ├── when_report_has_an_invalid_value_for_age_group.cs │ │ │ ├── when_report_has_an_invalid_value_for_health_risk.cs │ │ │ ├── when_report_has_an_invalid_value_for_sex.cs │ │ │ ├── when_report_has_an_out_of_range_value_for_age_group.cs │ │ │ ├── when_report_has_an_out_of_range_value_for_sex.cs │ │ │ ├── when_report_is_of_a_man_over_5.cs │ │ │ ├── when_report_is_of_a_man_under_5.cs │ │ │ ├── when_report_is_of_a_woman_over_5.cs │ │ │ └── when_report_is_of_a_woman_under_5.cs │ │ │ └── separated_by_star_and_hash │ │ │ ├── given │ │ │ └── a_text_message_received_builder_for_single_case_report.cs │ │ │ ├── when_report_has_a_negative_age_group.cs │ │ │ ├── when_report_has_a_negative_health_risk.cs │ │ │ ├── when_report_has_a_negative_sex.cs │ │ │ ├── when_report_has_an_invalid_value_for_age_group.cs │ │ │ ├── when_report_has_an_invalid_value_for_health_risk.cs │ │ │ ├── when_report_has_an_invalid_value_for_sex.cs │ │ │ ├── when_report_has_an_out_of_range_value_for_age_group.cs │ │ │ ├── when_report_has_an_out_of_range_value_for_sex.cs │ │ │ ├── when_report_is_of_a_man_over_5.cs │ │ │ ├── when_report_is_of_a_man_under_5.cs │ │ │ ├── when_report_is_of_a_woman_over_5.cs │ │ │ └── when_report_is_of_a_woman_under_5.cs │ ├── Policies │ │ ├── Policies.csproj │ │ └── Reporting │ │ │ ├── CaseReportIdentification.cs │ │ │ └── Notifications │ │ │ ├── INotificationParser.cs │ │ │ ├── NotificationFragment.cs │ │ │ ├── NotificationParser.cs │ │ │ ├── NotificationParsingResult.cs │ │ │ └── NotificationProcessor.cs │ ├── Read.Specs │ │ └── Read.Specs.csproj │ ├── Read │ │ ├── Management │ │ │ ├── DataCollectors │ │ │ │ ├── AllDataCollectors.cs │ │ │ │ ├── DataCollector.cs │ │ │ │ ├── DataCollectorById.cs │ │ │ │ └── DataCollectorEventProcessor.cs │ │ │ └── DataVerifiers │ │ │ │ └── DataVerifier.cs │ │ ├── Read.csproj │ │ └── Reporting │ │ │ ├── AutomaticReplyMessages │ │ │ ├── AutomaticReply.cs │ │ │ ├── AutomaticReplyKeyMessage.cs │ │ │ ├── AutomaticReplyProcessor.cs │ │ │ ├── DefaultAutomaticReply.cs │ │ │ ├── DefaultAutomaticReplyKeyMessage.cs │ │ │ └── DefaultAutomaticReplyProcessor.cs │ │ │ ├── CaseReports │ │ │ ├── CaseReport.cs │ │ │ ├── CaseReportEventProcessors.cs │ │ │ └── CaseReportFromUnknownDataCollector.cs │ │ │ ├── CaseReportsForListing │ │ │ ├── AllCaseReportsForListing.cs │ │ │ ├── CaseReportForListing.cs │ │ │ ├── CaseReportForListingById.cs │ │ │ ├── CaseReportForListingEventProcessor.cs │ │ │ ├── CaseReportStatus.cs │ │ │ └── QueryExtensions.cs │ │ │ ├── DataCollectorNames │ │ │ ├── AllListedDataCollector.cs │ │ │ ├── DataCollectorEventProcessor.cs │ │ │ ├── ListedDataCollector.cs │ │ │ └── ListedDataCollectorById.cs │ │ │ ├── HealthRisks │ │ │ ├── AllHealthRisks.cs │ │ │ ├── HealthRisk.cs │ │ │ ├── HealthRiskById.cs │ │ │ └── HealthRiskEventProcessor.cs │ │ │ ├── InvalidCaseReports │ │ │ ├── InvalidCaseReport.cs │ │ │ ├── InvalidCaseReportEventProcessors.cs │ │ │ └── InvalidCaseReportFromUnknownDataCollector.cs │ │ │ ├── Projects │ │ │ ├── Project.cs │ │ │ └── ProjectsEventProcessor.cs │ │ │ └── Training │ │ │ ├── AllTrainingReports.cs │ │ │ ├── EventProcessor.cs │ │ │ └── TrainingReport.cs │ ├── Reporting.code-workspace │ ├── Reporting.sln │ ├── Rules.Specs │ │ └── Rules.Specs.csproj │ ├── Rules │ │ ├── Management │ │ │ └── DataCollectors │ │ │ │ ├── CantExist.cs │ │ │ │ ├── DisplayNameMustBeUnique.cs │ │ │ │ ├── DistrictMustBeReal.cs │ │ │ │ ├── MustBeAllowedToChangeDisplayName.cs │ │ │ │ ├── MustExist.cs │ │ │ │ ├── PhoneNumberShouldBeRegistered.cs │ │ │ │ ├── PhoneNumberShouldNotBeRegistered.cs │ │ │ │ ├── RegionMustBeReal.cs │ │ │ │ └── VillageMustBeReal.cs │ │ └── Rules.csproj │ ├── Web │ │ ├── Dockerfile │ │ ├── angular.json │ │ ├── browserslist │ │ ├── hooks │ │ │ └── pre_push │ │ ├── nginx-default.conf │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── readme.md │ │ ├── src │ │ │ ├── app │ │ │ │ ├── Management │ │ │ │ │ ├── DataCollectors │ │ │ │ │ │ ├── AddPhoneNumberToDataCollector.js │ │ │ │ │ │ ├── AllDataCollectors.js │ │ │ │ │ │ ├── ChangeBaseInformation.js │ │ │ │ │ │ ├── ChangeDataVerifier.js │ │ │ │ │ │ ├── ChangeLocation.js │ │ │ │ │ │ ├── ChangePreferredLanguage.js │ │ │ │ │ │ ├── ChangeVillage.js │ │ │ │ │ │ ├── DataCollector.js │ │ │ │ │ │ ├── DataCollectorById.js │ │ │ │ │ │ ├── DataCollectorExportService.ts │ │ │ │ │ │ ├── DataCollectors.module.ts │ │ │ │ │ │ ├── DataCollectors.routes.ts │ │ │ │ │ │ ├── DeleteDataCollector.js │ │ │ │ │ │ ├── EditInformation │ │ │ │ │ │ │ ├── AddPhoneNumberToDataCollector.js │ │ │ │ │ │ │ ├── ChangeBaseInformation.js │ │ │ │ │ │ │ ├── ChangeDataVerifier.js │ │ │ │ │ │ │ ├── ChangeLocation.js │ │ │ │ │ │ │ ├── ChangePreferredLanguage.js │ │ │ │ │ │ │ ├── ChangeVillage.js │ │ │ │ │ │ │ └── RemovePhoneNumberFromDataCollector.js │ │ │ │ │ │ ├── RegisterDataCollector.js │ │ │ │ │ │ ├── Registration │ │ │ │ │ │ │ ├── DeleteDataCollector.js │ │ │ │ │ │ │ └── RegisterDataCollector.js │ │ │ │ │ │ ├── RemovePhoneNumberFromDataCollector.js │ │ │ │ │ │ ├── Training │ │ │ │ │ │ │ ├── BeginTraining.js │ │ │ │ │ │ │ └── EndTraining.js │ │ │ │ │ │ ├── delete │ │ │ │ │ │ │ ├── delete.html │ │ │ │ │ │ │ └── delete.ts │ │ │ │ │ │ ├── details │ │ │ │ │ │ │ ├── details.html │ │ │ │ │ │ │ ├── details.scss │ │ │ │ │ │ │ └── details.ts │ │ │ │ │ │ ├── edit │ │ │ │ │ │ │ ├── edit.html │ │ │ │ │ │ │ ├── edit.scss │ │ │ │ │ │ │ └── edit.ts │ │ │ │ │ │ ├── export │ │ │ │ │ │ │ ├── export.html │ │ │ │ │ │ │ ├── export.scss │ │ │ │ │ │ │ └── export.ts │ │ │ │ │ │ ├── list │ │ │ │ │ │ │ ├── list.html │ │ │ │ │ │ │ ├── list.scss │ │ │ │ │ │ │ └── list.ts │ │ │ │ │ │ └── register │ │ │ │ │ │ │ ├── register.html │ │ │ │ │ │ │ ├── register.scss │ │ │ │ │ │ │ └── register.ts │ │ │ │ │ ├── DataVerifiers │ │ │ │ │ │ └── DataVerifier.js │ │ │ │ │ ├── Language.ts │ │ │ │ │ ├── Location.ts │ │ │ │ │ ├── Sex.ts │ │ │ │ │ └── Tests │ │ │ │ │ │ └── CreateDataCollectorTestData.js │ │ │ │ ├── Reporting │ │ │ │ │ ├── AutomaticReplyMessages │ │ │ │ │ │ ├── AutomaticReply.js │ │ │ │ │ │ ├── AutomaticReplyKeyMessage.js │ │ │ │ │ │ ├── DefaultAutomaticReply.js │ │ │ │ │ │ ├── DefaultAutomaticReplyKeyMessage.js │ │ │ │ │ │ ├── DefineAutomaticReplyForProject.js │ │ │ │ │ │ └── DefineAutomaticReplyKeyMessageForProject.js │ │ │ │ │ ├── CaseReports │ │ │ │ │ │ ├── AllTrainingReports.js │ │ │ │ │ │ ├── CaseReport.js │ │ │ │ │ │ ├── CaseReportFromUnknownDataCollector.js │ │ │ │ │ │ ├── TestData │ │ │ │ │ │ │ └── PopulateCaseReportTestData.js │ │ │ │ │ │ └── TrainingReport.js │ │ │ │ │ ├── CaseReportsForListing │ │ │ │ │ │ ├── AllCaseReportsForListing.js │ │ │ │ │ │ ├── CaseReportForListing.js │ │ │ │ │ │ ├── CaseReportForListingById.js │ │ │ │ │ │ ├── case-report-list.component.html │ │ │ │ │ │ ├── case-report-list.component.scss │ │ │ │ │ │ ├── case-report-list.component.ts │ │ │ │ │ │ ├── export │ │ │ │ │ │ │ ├── case-report-export.component.html │ │ │ │ │ │ │ ├── case-report-export.component.scss │ │ │ │ │ │ │ └── case-report-export.component.ts │ │ │ │ │ │ ├── filtering │ │ │ │ │ │ │ └── filter.pipe.ts │ │ │ │ │ │ ├── sort │ │ │ │ │ │ │ ├── columns.ts │ │ │ │ │ │ │ ├── sortable-column.component.html │ │ │ │ │ │ │ └── sortable-column.component.ts │ │ │ │ │ │ ├── training-report-list.component.html │ │ │ │ │ │ └── training-report-list.component.ts │ │ │ │ │ ├── DataCollectors │ │ │ │ │ │ ├── AllListedDataCollectors.js │ │ │ │ │ │ ├── ListedDataCollector.js │ │ │ │ │ │ └── ListedDataCollectorById.js │ │ │ │ │ ├── HealthRisks │ │ │ │ │ │ ├── AllHealthRisks.js │ │ │ │ │ │ ├── HealthRisk.js │ │ │ │ │ │ ├── HealthRiskById.js │ │ │ │ │ │ └── TestData │ │ │ │ │ │ │ └── PopulateHealthRiskTestData.js │ │ │ │ │ ├── InvalidCaseReports │ │ │ │ │ │ ├── InvalidCaseReport.js │ │ │ │ │ │ └── InvalidCaseReportFromUnknownDataCollector.js │ │ │ │ │ ├── Projects │ │ │ │ │ │ └── Project.js │ │ │ │ │ ├── reporting-routing.module.ts │ │ │ │ │ └── reporting.module.ts │ │ │ │ ├── TestData │ │ │ │ │ └── CaseReports │ │ │ │ │ │ └── PopulateCaseReportTestData.js │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── navigation │ │ │ │ │ ├── navbar-host.component.html │ │ │ │ │ └── navbar-host.component.ts │ │ │ │ ├── services │ │ │ │ │ └── app-insights-service.ts │ │ │ │ └── shared │ │ │ │ │ └── shared.module.ts │ │ │ ├── assets │ │ │ │ ├── .gitkeep │ │ │ │ └── bootstrap │ │ │ │ │ ├── _theme.scss │ │ │ │ │ └── _variables.scss │ │ │ ├── environments │ │ │ │ ├── environment.prod.ts │ │ │ │ ├── environment.test.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.scss │ │ │ ├── tsconfig.app.json │ │ │ └── typings.d.ts │ │ ├── tsconfig.json │ │ └── tslint.json │ ├── bounded-context.json │ └── readme.md └── application.json ├── VERSION ├── _config.yml └── package-lock.json /.dockerignore: -------------------------------------------------------------------------------- 1 | # Ignore non-code folders 2 | .git 3 | Codeathons 4 | Design 5 | Documentation 6 | Logs 7 | Meetings 8 | 9 | # Ignore Node modules 10 | **/node_modules/ 11 | 12 | # Ignore web binaries 13 | **/Web/dist/ 14 | 15 | # Ignore C# binaries 16 | **/bin/ 17 | **/obj/ 18 | .dockerignore 19 | .env 20 | .git 21 | .gitignore 22 | **/.vs 23 | .vscode 24 | **/.toolstarget -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps create consistency for formatting of all code 2 | # 3 | # http://EditorConfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | end_of_line = lf 9 | indent_style = space 10 | indent_size = 4 11 | charset = utf-8 12 | 13 | [*.yml] 14 | indent_size = 2 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | 3 | *.jpg binary 4 | *.JPG binary 5 | *.png binary 6 | *.PNG binary 7 | *.gif binary 8 | *.GIF binary 9 | *.dll binary 10 | *.exe binary 11 | *.ttf binary 12 | *.woff binary 13 | *.woff2 binary 14 | *.eot binary 15 | *.pptx binary 16 | *.pdf binary 17 | *.PDF binary 18 | 19 | *.cs eol=lf diff=csharp 20 | *.sln text eol=crlf -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About contributing 3 | description: Referencing the contributor guide 4 | keywords: Contributing 5 | author: karolikl 6 | --- 7 | 8 | # Contributing to this project 9 | 10 | Join the world’s largest humanitarian organisation and code for good! 11 | 12 | We welcome contributions to this project whether they are bug fixes, new features or documentation. For more information, read our [Contributor Guide.](../Documentation/Contribution/contributing.md) -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE: -------------------------------------------------------------------------------- 1 | 2 | **Please check if the PR fulfills these requirements** 3 | 4 | - [ ] The code builds and tests pass (verified by our automated build checks) 5 | - [ ] Commit messages follow this format 6 | ``` 7 | Summary of the changes 8 | - Detail 1 9 | - Detail 2 10 | 11 | Fixes #issuenumber 12 | ``` 13 | - [ ] Tests for the changes have been added (for bug fixes / features) 14 | - [ ] Code meets the expectations our engineering guidelines. https://github.com/aspnet/Home/wiki/Engineering-guidelines. 15 | 16 | Please review the guidelines for CONTRIBUTING.md for more details. -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | 3 | # blocklist 4 | branches: 5 | except: 6 | - ci 7 | 8 | # safelist 9 | branches: 10 | only: 11 | - master 12 | 13 | notifications: 14 | email: 15 | on_success: never # default: change 16 | on_failure: change # default: always 17 | 18 | services: 19 | - docker 20 | 21 | before_install: 22 | - docker pull redcrossredcrescent/cbs-cake-build:latest 23 | 24 | script: 25 | # - ls -al ${PWD} 26 | - docker run --rm --workdir=/workspace --volume ${PWD}:/workspace redcrossredcrescent/cbs-cake-build:latest ./build.sh -------------------------------------------------------------------------------- /Build/clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | find . -type d -and \( -name "obj" -o -name "bin" \) -exec rm -r {} + -------------------------------------------------------------------------------- /Build/kill_all_dot_net.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ps -ef | grep -i dotnet | awk {'print $2'} | xargs kill -9 -------------------------------------------------------------------------------- /Build/tools/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Codeathons/20170929 Oslo/TechnicalIntro.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Codeathons/20170929 Oslo/TechnicalIntro.pptx -------------------------------------------------------------------------------- /Deploy/Compose/config/admin-event-horizons.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /Deploy/Compose/config/alerts-event-horizons.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /Deploy/Compose/config/apikeyToTenant.json: -------------------------------------------------------------------------------- 1 | {"ThereWillBeAnApiKeyHere":"445f8ea8-1a6f-40d7-b2fc-796dba92dc44"} -------------------------------------------------------------------------------- /Deploy/Compose/config/notificationgateway-event-horizons.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /Deploy/Compose/config/tenant-map.json: -------------------------------------------------------------------------------- 1 | { 2 | "strategy": "hostname", 3 | "fallbackToDeveloperTenant": true, 4 | "configuration": { 5 | "segments": "first" 6 | }, 7 | "map": { 8 | "dev": "445f8ea8-1a6f-40d7-b2fc-796dba92dc44", 9 | "admin": "5d1cc845-8874-4cd0-b975-6242ea270b75", 10 | "country_one": "b3a3d542-dd0c-4ef2-bafe-cc5dc9de3da4", 11 | "country_two": "255c3e7c-a7ad-43aa-ad03-a5cf71bd04b2" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Deploy/Compose/config/tenants.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": {}, 3 | "5d1cc845-8874-4cd0-b975-6242ea270b75": {}, 4 | "b3a3d542-dd0c-4ef2-bafe-cc5dc9de3da4": {}, 5 | "255c3e7c-a7ad-43aa-ad03-a5cf71bd04b2": {} 6 | } -------------------------------------------------------------------------------- /Deploy/K8S/namespaces.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Namespace 4 | metadata: 5 | name: cbs-system 6 | --- 7 | apiVersion: v1 8 | kind: Namespace 9 | metadata: 10 | name: cbs-app 11 | -------------------------------------------------------------------------------- /Deploy/Local/ReverseProxy/main.js: -------------------------------------------------------------------------------- 1 | const app = require('express')(); 2 | const proxy = require('http-proxy-middleware'); 3 | 4 | // UserManagement 5 | app.use('/datacollectors', proxy({ 6 | target: { 7 | host: 'localhost', 8 | port: 4202, 9 | }, 10 | })); 11 | 12 | // VolunteerReporting 13 | app.use('/reporting', proxy({ 14 | target: { 15 | host: 'localhost', 16 | port: 4203, 17 | }, 18 | })); 19 | 20 | // Admin 21 | app.use('/', proxy({ 22 | target: { 23 | host: 'localhost', 24 | port: 4201, 25 | }, 26 | })); 27 | 28 | app.listen(3000); -------------------------------------------------------------------------------- /Deploy/Local/ReverseProxy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reverseproxy", 3 | "version": "1.0.0", 4 | "description": "Reverse http-proxy for running all the CBS B.C. on your machine during dev.", 5 | "main": "main.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Jakob", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.16.4", 13 | "http-proxy-middleware": "^0.19.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Documentation/.gitignore: -------------------------------------------------------------------------------- 1 | # docfx ignores 2 | 3 | /**/DROP/ 4 | /**/TEMP/ 5 | /**/packages/ 6 | /**/bin/ 7 | /**/obj/ 8 | _site 9 | -------------------------------------------------------------------------------- /Documentation/Architecture/Diagrams.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Architecture/Diagrams.pptx -------------------------------------------------------------------------------- /Documentation/Architecture/frontend.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: 6 | --- 7 | # Frontend 8 | 9 | ## Scaffold new Angular components 10 | 11 | (Active path: `cbs/Source/Example/Frontend`) 12 | 13 | Create new component 14 | 15 | > `ng g c folder/componentname` 16 | 17 | Creat new service 18 | 19 | > `ng g s core/services/servicename` 20 | 21 | Creat new pipe 22 | 23 | > `ng g p shared/pipes/pipename` -------------------------------------------------------------------------------- /Documentation/Architecture/images/at_a_glance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Architecture/images/at_a_glance.png -------------------------------------------------------------------------------- /Documentation/Architecture/images/cqrs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Architecture/images/cqrs.png -------------------------------------------------------------------------------- /Documentation/Architecture/images/offline_syncing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Architecture/images/offline_syncing.png -------------------------------------------------------------------------------- /Documentation/Architecture/images/top_level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Architecture/images/top_level.png -------------------------------------------------------------------------------- /Documentation/Architecture/logging.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About logging 3 | description: 4 | keywords: 5 | author: 6 | --- 7 | # Logging 8 | 9 | ## C# Serilog 10 | 11 | ## LogStash 12 | 13 | ## Kibana -------------------------------------------------------------------------------- /Documentation/Architecture/sms_gateway.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: 6 | --- 7 | # SMS Gateway -------------------------------------------------------------------------------- /Documentation/Contribution/images/issues_add_note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Contribution/images/issues_add_note.png -------------------------------------------------------------------------------- /Documentation/Contribution/images/issues_backlog_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Contribution/images/issues_backlog_new.png -------------------------------------------------------------------------------- /Documentation/Contribution/images/issues_convert_note_to_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Contribution/images/issues_convert_note_to_issue.png -------------------------------------------------------------------------------- /Documentation/Contribution/images/issues_converted_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Contribution/images/issues_converted_issue.png -------------------------------------------------------------------------------- /Documentation/Contribution/images/issues_issue_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Contribution/images/issues_issue_details.png -------------------------------------------------------------------------------- /Documentation/Contribution/images/issues_note_to_issue_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Contribution/images/issues_note_to_issue_details.png -------------------------------------------------------------------------------- /Documentation/Contribution/toc.yml: -------------------------------------------------------------------------------- 1 | - name: Contributing 2 | href: contributing.md 3 | - name: Development environment 4 | href: development_environment.md 5 | - name: Documenting 6 | href: documentation.md 7 | - name: Getting started 8 | href: getting_started.md 9 | - name: Issues 10 | href: issues.md -------------------------------------------------------------------------------- /Documentation/Deployment/build.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: 6 | --- 7 | # Build -------------------------------------------------------------------------------- /Documentation/Deployment/container_registry.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: 6 | --- 7 | # Container Registry -------------------------------------------------------------------------------- /Documentation/Deployment/release_management.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: 6 | --- 7 | # Release Management -------------------------------------------------------------------------------- /Documentation/Projects/Admin/Events/HealthRiskCreated.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: roarfred 6 | --- 7 | # Event: HealthRiskCreated -------------------------------------------------------------------------------- /Documentation/Projects/Admin/Events/HealthRiskUpdated.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: roarfred 6 | --- 7 | # Event: HealthRiskUpdated -------------------------------------------------------------------------------- /Documentation/Projects/Admin/Events/ProjectAreasChanged.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: roarfred 6 | --- 7 | # Event: ProjectAreasChanged -------------------------------------------------------------------------------- /Documentation/Projects/Admin/Events/ProjectDataOwnerChanged.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: roarfred 6 | --- 7 | # Event: ProjectDataOwnerChanged -------------------------------------------------------------------------------- /Documentation/Projects/Admin/Events/ProjectHealthRisksChanged.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: roarfred 6 | --- 7 | # Event: ProjectHealthRisksChanged -------------------------------------------------------------------------------- /Documentation/Projects/Admin/Events/ProjectSmsReportingStructureChanged.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: roarfred 6 | --- 7 | # Event: ProjectSmsReportingStructureChanged -------------------------------------------------------------------------------- /Documentation/Projects/Admin/assets/physical-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Admin/assets/physical-view.png -------------------------------------------------------------------------------- /Documentation/Projects/Admin/assets/reporting-feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Admin/assets/reporting-feedback.png -------------------------------------------------------------------------------- /Documentation/Projects/Admin/assets/scenarios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Admin/assets/scenarios.png -------------------------------------------------------------------------------- /Documentation/Projects/Admin/assets/system-context.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Admin/assets/system-context.png -------------------------------------------------------------------------------- /Documentation/Projects/Alerts/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: einari 6 | --- 7 | # Alerts 8 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_size = 2 8 | indent_style = space 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/.gitignore: -------------------------------------------------------------------------------- 1 | # Include your project-specific ignores in this file 2 | # Read about how to use .gitignore: https://help.github.com/articles/ignoring-files 3 | # Useful .gitignore templates: https://github.com/github/gitignore 4 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Ageandsexdistributionoverdifferenttimeframes.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Barchartsbydistrict.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/DistrictPersonreportingfunnelplotA.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/DistrictPersonreportingfunnelplotB.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Epicurvebyday.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Epicurvebydaydodgedbyage.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Epicurvebyweek.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Epicurvebyweekdodgedbyage.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Mapbygeographicalarea.css: -------------------------------------------------------------------------------- 1 | body { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Weeklyepicurvesbyagesex.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/Weeklyepicurvesbygeographicalarea.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: gray; 3 | } 4 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/favicon.ico -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/humans.txt: -------------------------------------------------------------------------------- 1 | # humanstxt.org/ 2 | # The humans responsible & technology colophon 3 | 4 | # TEAM 5 | 6 | -- -- 7 | 8 | # THANKS 9 | 10 | 11 | 12 | # TECHNOLOGY COLOPHON 13 | 14 | CSS3, HTML5 15 | Apache Server Configs, jQuery, Modernizr, Normalize.css 16 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/icon.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/images/icon/rodekors.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/images/icon/rodekors.jpg -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/images/icon/rodekors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/images/icon/rodekors.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/Barchartsbydistrict.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/DistrictPersonreportingfunnelplotA.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/DistrictPersonreportingfunnelplotB.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/Epicurvebydaydodgedbyage.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/Epicurvebydaydodgedbyage.js -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/Weeklyepicurvesbygeographicalarea.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user/ -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/casereports-2018-September-28 (1).xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/casereports-2018-September-28 (1).xlsx -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/datacollectors-2018-September-28 (1).xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/datacollectors-2018-September-28 (1).xlsx -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/gadm36_NOR_1_sp.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/gadm36_NOR_1_sp.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/gadm36_NOR_2_sf.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/gadm36_NOR_2_sf.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/gadm36_NOR_2_sp.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/gadm36_NOR_2_sp.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/old_gadm36_NOR_1_sp.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/data/old_gadm36_NOR_1_sp.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/project.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: No 4 | SaveWorkspace: No 5 | AlwaysSaveHistory: No 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-1-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/js/fakedata/report_files/figure-markdown_strict/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/mapdata.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/mapdata.csv -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/mapdata.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/mapdata.json -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "", 3 | "name": "", 4 | "icons": [{ 5 | "src": "icon.png", 6 | "type": "image/png", 7 | "sizes": "192x192" 8 | }], 9 | "start_url": "/?utm_source=homescreen", 10 | "background_color": "#fafafa", 11 | "theme_color": "#fafafa" 12 | } 13 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/tile-wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/tile-wide.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/tile.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/font-awesome-5/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/close.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/loading.gif -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/next.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/dist/images/prev.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/close.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/loading.gif -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/next.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/lightbox2/src/images/prev.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.eot -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.ttf -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff2 -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/slick/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/slick/ajax-loader.gif -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/slick/config.rb: -------------------------------------------------------------------------------- 1 | css_dir = "." 2 | sass_dir = "." 3 | images_dir = "." 4 | fonts_dir = "fonts" 5 | relative_assets = true 6 | 7 | output_style = :compact 8 | line_comments = false 9 | 10 | preferred_syntax = :scss -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/slick/fonts/slick.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/slick/fonts/slick.eot -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/slick/fonts/slick.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/slick/fonts/slick.ttf -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/Web Mockup/vendor/slick/fonts/slick.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/Web Mockup/vendor/slick/fonts/slick.woff -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user/ -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/data/NOR_adm1.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/data/NOR_adm1.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/data/casereports-2018-September-28 (1).xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/data/casereports-2018-September-28 (1).xlsx -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/data/datacollectors-2018-September-28 (1).xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/data/datacollectors-2018-September-28 (1).xlsx -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/data/gadm36_NOR_1_sp.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/data/gadm36_NOR_1_sp.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/data/gadm36_NOR_2_sf.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/data/gadm36_NOR_2_sf.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/data/gadm36_NOR_2_sp.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/data/gadm36_NOR_2_sp.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/data/old_gadm36_NOR_1_sp.rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/data/old_gadm36_NOR_1_sp.rds -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-1-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/archive/fakedata/report_files/figure-markdown_strict/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/archive/volunteer_individ.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/archive/volunteer_individ.jpg -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-11-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-11-2.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-13-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-13-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-14-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-14-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-15-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-15-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/graphs/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/graphs/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/Scanned-Document-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/Scanned-Document-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/Scanned-Document-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/Scanned-Document-2.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/Scanned-Document-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/Scanned-Document-3.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/Scanned-Document-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/Scanned-Document-4.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/Scanned-Document-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/Scanned-Document-5.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Analytics/images/index/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Analytics/images/index/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /Documentation/Projects/Core/events.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: einari 6 | --- 7 | # Events 8 | 9 | https://github.com/Microsoft/CSharpClient-for-Kafka 10 | 11 | https://qbox.io/blog/kafka-and-elasticsearch-a-perfect-match-1 12 | -------------------------------------------------------------------------------- /Documentation/Projects/Portal/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About portal 3 | description: This contains an overview portal 4 | keywords: Portal 5 | author: einari 6 | --- 7 | # Portal 8 | 9 | ## Navigation 10 | 11 | ## Login 12 | 13 | ## User profile -------------------------------------------------------------------------------- /Documentation/Projects/Reporting/2017-09-29 14-31 page 1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Reporting/2017-09-29 14-31 page 1.jpg -------------------------------------------------------------------------------- /Documentation/Projects/Reporting/Detailed_Alert_Map.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Reporting/Detailed_Alert_Map.jpg -------------------------------------------------------------------------------- /Documentation/Projects/Reporting/Detailed_Alert_Timeline.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Reporting/Detailed_Alert_Timeline.jpg -------------------------------------------------------------------------------- /Documentation/Projects/Reporting/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: einari 6 | --- 7 | # Reporting 8 | -------------------------------------------------------------------------------- /Documentation/Projects/Sms/Architecture_Duplex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Sms/Architecture_Duplex.png -------------------------------------------------------------------------------- /Documentation/Projects/Sms/Architecture_Incoming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Sms/Architecture_Incoming.png -------------------------------------------------------------------------------- /Documentation/Projects/Sms/Flow_Duplex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Sms/Flow_Duplex.png -------------------------------------------------------------------------------- /Documentation/Projects/Sms/Flow_Incoming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Sms/Flow_Incoming.png -------------------------------------------------------------------------------- /Documentation/Projects/Sms/Postman_Eagle_Sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Sms/Postman_Eagle_Sample.png -------------------------------------------------------------------------------- /Documentation/Projects/Sms/Postman_Sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Sms/Postman_Sample.png -------------------------------------------------------------------------------- /Documentation/Projects/User Management/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | description: 4 | keywords: 5 | author: einari 6 | --- 7 | # User Management 8 | 9 | All issues for this project can be found [here](https://github.com/IFRCGo/cbs/projects/2). 10 | 11 | ## Description 12 | 13 | ## Mobile 14 | 15 | ## SMS 16 | 17 | ## Admin View 18 | -------------------------------------------------------------------------------- /Documentation/Projects/Volunteer Reporting/data collector workflow 2017.09.30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Volunteer Reporting/data collector workflow 2017.09.30.jpg -------------------------------------------------------------------------------- /Documentation/Projects/Volunteer Reporting/data_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Projects/Volunteer Reporting/data_flow.png -------------------------------------------------------------------------------- /Documentation/Requirements/CBS Functional requirements specification.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Requirements/CBS Functional requirements specification.pdf -------------------------------------------------------------------------------- /Documentation/Requirements/March 2017 - CBS v2 Diagrams.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Documentation/Requirements/March 2017 - CBS v2 Diagrams.pdf -------------------------------------------------------------------------------- /Documentation/readme.md: -------------------------------------------------------------------------------- 1 | ## How to build the documentation site 2 | 3 | 1. Download and unzip docfx https://github.com/dotnet/docfx/releases 4 | 2. Add the folder with docfx in to your environment path 5 | 3. With `\cbs\Documentation` as active folder, build and serve docs on http://localhost:8080 using 6 | `docfx --serve` -------------------------------------------------------------------------------- /Documentation/toc.yml: -------------------------------------------------------------------------------- 1 | - name: Developer documentation 2 | href: Contribution/ 3 | homepage: Contribution/getting_started.md -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2161.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2161.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2162.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2162.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2163.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2163.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2164.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2164.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2165.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2165.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2166.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2166.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2167.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2167.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2168.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2168.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2169.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2169.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2170.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2170.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2171.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2171.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2172.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2172.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2173.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2173.JPG -------------------------------------------------------------------------------- /Meetings/20170911 - Core Team - Planning/IMG_2174.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Meetings/20170911 - Core Team - Planning/IMG_2174.JPG -------------------------------------------------------------------------------- /Meetings/20171025 - Community standup.md: -------------------------------------------------------------------------------- 1 | # Community Standup, 25.10.2017 2 | 3 | ## Agenda 4 | 5 | * What has happened since the last time 6 | - Volunteer Reporting 7 | - Admin 8 | - UX 9 | * Infrastructure 10 | - Changes 11 | - Azure status 12 | * Until next time 13 | - Defining MVP 14 | - Community standup 15 | 16 | ## Recording 17 | 18 | You can view the recording of the community standup [here](https://1drv.ms/v/s!Auypu7NkOVm_nbtiDbJZRhHY9EjqMA). -------------------------------------------------------------------------------- /NuGet.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Source/.dockerignore: -------------------------------------------------------------------------------- 1 | # Ignore Node modules 2 | **/node_modules/ 3 | 4 | # Ignore web binaries 5 | **/Web/dist/ 6 | 7 | # Ignore C# binaries 8 | **/bin/ 9 | **/obj/ 10 | .dockerignore 11 | .env 12 | .git 13 | .gitignore 14 | **/.vs 15 | .vscode 16 | **/.toolstarget -------------------------------------------------------------------------------- /Source/Admin/Concepts/Concepts.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Source/Admin/Core/.dolittle/event-horizons.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /Source/Admin/Core/.dolittle/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": { 3 | "readModels": { 4 | "host": "mongodb://localhost:27017", 5 | "database": "cbs_admin_read_models", 6 | "useSSL": false 7 | }, 8 | "eventStore": { 9 | "host": "mongodb://localhost:27017", 10 | "database": "cbs_admin_event_store", 11 | "useSSL": false 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /Source/Admin/Core/.dolittle/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "interaction": { 3 | "port": 50051, 4 | "unixSocket": "/var/run/cbs.admin.interaction.server.sock" 5 | }, 6 | "management": { 7 | "port": 50151, 8 | "unixSocket": "/var/run/cbs.admin.management.server.sock" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Admin/Core/.dolittle/tenant-map.json: -------------------------------------------------------------------------------- 1 | { 2 | "strategy": "hostname", 3 | "fallbackToDeveloperTenant": true, 4 | "configuration": { 5 | "segments": "first" 6 | }, 7 | "map": { 8 | "Development": "445f8ea8-1a6f-40d7-b2fc-796dba92dc44" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Admin/Core/.dolittle/tenants.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": {} 3 | } -------------------------------------------------------------------------------- /Source/Admin/Core/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/Admin/Domain/Admin/Rules.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Domain.Admin 4 | { 5 | public delegate bool IsUserExisting(Guid id); 6 | } 7 | -------------------------------------------------------------------------------- /Source/Admin/Domain/HealthRisks/AssociateHealthRiskWithProject.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | -------------------------------------------------------------------------------- /Source/Admin/Events/Events.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Source/Admin/Read/Read.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Source/Admin/Web/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "chrome", 9 | "request": "launch", 10 | "name": "Launch Chrome against localhost", 11 | "url": "http://localhost:4200", 12 | "webRoot": "${workspaceFolder}" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "**/.git": true, 4 | "**/.svn": true, 5 | "**/.hg": true, 6 | "**/CVS": true, 7 | "**/.DS_Store": true, 8 | "**/node_modules": true 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Admin/Web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:11.6-slim AS build 2 | ARG mode=build-test 3 | 4 | # Install dependencies 5 | COPY ./Navigation /CBS/Source/Navigation 6 | COPY ./Admin/Web/package.json /CBS/Source/Admin/Web/package.json 7 | WORKDIR /CBS/Source/Admin/Web 8 | RUN yarn install 9 | 10 | # Build production code 11 | COPY ./Admin/Web /CBS/Source/Admin/Web 12 | WORKDIR /CBS/Source/Admin/Web 13 | RUN npm run ${mode} 14 | 15 | # Build runtime image 16 | FROM nginx:1.15-alpine 17 | COPY --from=build /CBS/Source/Admin/Web/dist /usr/share/nginx/html 18 | COPY --from=build /CBS/Source/Admin/Web/nginx-default.conf /etc/nginx/conf.d/default.conf -------------------------------------------------------------------------------- /Source/Admin/Web/browserslist: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # You can see what browsers were selected by your queries by running: 6 | # npx browserslist 7 | 8 | > 0.5% 9 | last 2 versions 10 | Firefox ESR 11 | not dead 12 | not IE 9-11 # For IE 9-11 support, remove 'not'. -------------------------------------------------------------------------------- /Source/Admin/Web/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/Admin/Web/nginx-default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | alias /usr/share/nginx/html/; 7 | 8 | # Serve all files in the normal way 9 | location ~ \.[^/]*$ { 10 | } 11 | 12 | # Everything else goes to /index.html 13 | try_files '' /admin/index.html; 14 | } 15 | 16 | error_page 500 502 503 504 /50x.html; 17 | location = /50x.html { 18 | root /usr/share/nginx/html; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/AutomaticReplyMessages/AllReplyMessages.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllReplyMessages extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllReplyMessages'; 12 | this.generatedFrom = 'Read.AutomaticReplyMessages.AllReplyMessages'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/AutomaticReplyMessages/UpdateReplyMessagesConfig.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class UpdateReplyMessagesConfig extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = 'f873d1f4-8419-4383-9fc4-4c3373f579a1'; 12 | 13 | this.messages = []; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/HealthRisks/AllHealthRisks.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllHealthRisks extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllHealthRisks'; 12 | this.generatedFrom = 'Read.HealthRisks.AllHealthRisks'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/HealthRisks/DeleteHealthRisk.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class DeleteHealthRisk extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = '7f5a6601-6a27-4956-afc6-3b1f27bc5a25'; 12 | 13 | this.healthRiskId = '00000000-0000-0000-0000-000000000000'; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/HealthRisks/SetHealthRiskName.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class SetHealthRiskName extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = '54b69ddc-5317-4b6d-9c48-dedf01904327'; 12 | 13 | this.healthRisk = '00000000-0000-0000-0000-000000000000'; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/HealthRisks/add-edit-healthRisk/add-edit-healthRisk.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Admin/Web/src/app/HealthRisks/add-edit-healthRisk/add-edit-healthRisk.component.scss -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/HealthRisks/healthRisk-list/healthRisk-list.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Admin/Web/src/app/HealthRisks/healthRisk-list/healthRisk-list.component.scss -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/NationalSocieties/AllNationalSocieties.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllNationalSocieties extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllNationalSocieties'; 12 | this.generatedFrom = 'Read.NationalSocieties.AllNationalSocieties'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Projects/AllProjects.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllProjects extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllProjects'; 12 | this.generatedFrom = 'Read.Projects.AllProjects'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Projects/UpdateProjectHealthRiskThreshold.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class UpdateProjectHealthRiskThreshold extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = '30ebc645-9c1f-4887-89e2-34b412401fe2'; 12 | 13 | this.threshold = 0; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Projects/add-project/add-project.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Admin/Web/src/app/Projects/add-project/add-project.component.scss -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Projects/project-list/project-list.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Admin/Web/src/app/Projects/project-list/project-list.component.scss -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Projects/projects.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { SharedModule } from '../shared/shared.module'; 4 | import { ProjectsRouting } from './projects-routing.module'; 5 | import { AddProjectComponent } from './add-project/add-project.component'; 6 | import { ProjectListComponent } from './project-list/project-list.component'; 7 | 8 | @NgModule({ 9 | imports: [ 10 | ProjectsRouting, 11 | SharedModule 12 | ], 13 | declarations: [ 14 | AddProjectComponent, 15 | ProjectListComponent 16 | ] 17 | }) 18 | 19 | export class ProjectModule { } 20 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Tests/CreateHealthRiskTestData.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class CreateHealthRiskTestData extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = '269f0087-f2a7-4fce-bfb6-5a136d614201'; 12 | 13 | this.id = '00000000-0000-0000-0000-000000000000'; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Tests/CreateProjectTestData.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class CreateProjectTestData extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = '5f3fb27e-08bb-4156-8323-7535bdf747e2'; 12 | 13 | this.id = '00000000-0000-0000-0000-000000000000'; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Tests/CreateUserTestData.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class CreateUserTestData extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = 'd344314a-8349-405c-96fb-6e39f31b42b5'; 12 | 13 | this.id = '00000000-0000-0000-0000-000000000000'; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/Users/UserById.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class UserById extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'UserById'; 12 | this.generatedFrom = 'Read.Users.UserById'; 13 | 14 | this.userId = '00000000-0000-0000-0000-000000000000'; 15 | } 16 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'cbs-root', 5 | templateUrl: './app.component.html' 6 | }) 7 | export class AppComponent { 8 | title = 'cbs'; 9 | } 10 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/core/core.module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from '@angular/common'; 2 | import { NgModule, Optional, SkipSelf } from '@angular/core'; 3 | 4 | import { throwIfAlreadyLoaded } from './module-import-guard'; 5 | 6 | @NgModule({ 7 | imports: [ 8 | CommonModule 9 | ], 10 | providers: [ 11 | ], 12 | declarations: [] 13 | }) 14 | 15 | export class CoreModule { 16 | constructor(@Optional() @SkipSelf() parentModule: CoreModule) { 17 | throwIfAlreadyLoaded(parentModule, 'CoreModule'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/core/module-import-guard.ts: -------------------------------------------------------------------------------- 1 | export function throwIfAlreadyLoaded(parentModule: any, moduleName: string) { 2 | if (parentModule) { 3 | throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`); 4 | } 5 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/app/navigation/navbar-host.component.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /Source/Admin/Web/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Admin/Web/src/assets/.gitkeep -------------------------------------------------------------------------------- /Source/Admin/Web/src/assets/bootstrap/_theme.scss: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) 2017 International Federation of Red Cross. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | th{ 7 | color: $table-header; 8 | background-color: $table-header-bg; 9 | } -------------------------------------------------------------------------------- /Source/Admin/Web/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | api: '/admin', 4 | appInsightsInstrumentationKey: 'ca4137d7-10b6-4f10-a75b-5b915d96fedb' 5 | }; 6 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/environments/environment.test.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: false, 3 | api: '/admin', 4 | appInsightsInstrumentationKey: '36bdf7e0-884f-4391-8f08-11ebd48b9023' 5 | }; 6 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false, 8 | api: 'http://localhost:5001', 9 | appInsightsInstrumentationKey: '36bdf7e0-884f-4391-8f08-11ebd48b9023' 10 | }; 11 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/styles.scss: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) 2017 International Federation of Red Cross. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | @import 'assets/bootstrap/variables'; 7 | @import '../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap'; 8 | @import 'assets/bootstrap/theme'; 9 | 10 | html { 11 | font-size: 16px; 12 | } 13 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "module": "es2015", 7 | "esModuleInterop": true, 8 | "types": [] 9 | }, 10 | "exclude": [ 11 | "test.ts", 12 | "**/*.spec.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /Source/Admin/Web/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | -------------------------------------------------------------------------------- /Source/Admin/bounded-context.json: -------------------------------------------------------------------------------- 1 | { 2 | "application": "fcb9885f-8b19-192e-be61-f966ee1c1640", 3 | "boundedContext": "64b3befc-2fb6-42f9-9e4b-bcb426fffffb", 4 | "boundedContextName": "Admin", 5 | "resources": { 6 | "readModels": { 7 | "production": "MongoDB", 8 | "development": "MongoDB" 9 | }, 10 | "eventStore": { 11 | "production": "MongoDB", 12 | "development": "MongoDB" 13 | } 14 | }, 15 | "core": { 16 | "language": "csharp" 17 | }, 18 | "interaction": [] 19 | } -------------------------------------------------------------------------------- /Source/Alerts/Concepts/Alerts/AlertId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace Concepts.Alerts 7 | { 8 | public class AlertId : ConceptAs 9 | { 10 | public static readonly AlertId Empty = Guid.Empty; 11 | 12 | public static implicit operator AlertId(Guid value) 13 | { 14 | return new AlertId { Value = value }; 15 | } 16 | public static implicit operator AlertId(string value) 17 | { 18 | return new AlertId { Value = Guid.Parse(value) }; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Source/Alerts/Concepts/Alerts/AlertNumber.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.Alerts 4 | { 5 | public class AlertNumber : ConceptAs 6 | { 7 | public static implicit operator AlertNumber(uint value) 8 | { 9 | return new AlertNumber { Value = value }; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /Source/Alerts/Concepts/Alerts/AlertStatus.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.Alerts 4 | { 5 | public enum AlertStatus 6 | { 7 | Open = 0, 8 | Escalated = 1, 9 | Closed = 2, 10 | Dismissed = 3 11 | } 12 | } -------------------------------------------------------------------------------- /Source/Alerts/Concepts/CaseReports/AgeGroup.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.CaseReports 7 | { 8 | public enum AgeGroup 9 | { 10 | NotSet = 0, 11 | AgeUnder5 = 1, 12 | Age5AndOver = 2 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/Alerts/Concepts/CaseReports/Sex.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.CaseReports 7 | { 8 | public enum Sex 9 | { 10 | NotSet = 0, 11 | Male = 1, 12 | Female = 2 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/Alerts/Concepts/Concepts.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Source/Alerts/Concepts/DataCollector/Language.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.DataCollector 7 | { 8 | public enum Language 9 | { 10 | English = 0, 11 | French, 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Alerts/Concepts/DataCollector/Sex.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.DataCollector 7 | { 8 | public enum Sex 9 | { 10 | Male = 1, 11 | Female = 2 12 | } 13 | } -------------------------------------------------------------------------------- /Source/Alerts/Concepts/DataOwners/Email.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.DataOwners 4 | { 5 | public class Email : ConceptAs 6 | { 7 | public static implicit operator Email(string value) 8 | { 9 | return new Email {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/Alerts/Concepts/DataOwners/NameOfDataOwner.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.DataOwners 4 | { 5 | public class NameOfDataOwner : ConceptAs 6 | { 7 | public static implicit operator NameOfDataOwner(string value) 8 | { 9 | return new NameOfDataOwner {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/Alerts/Core/.dolittle/event-horizons.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /Source/Alerts/Core/.dolittle/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": { 3 | "readModels": { 4 | "host": "mongodb://localhost:27017", 5 | "database": "read_model_database", 6 | "useSSL": false 7 | }, 8 | "eventStore": { 9 | "host": "mongodb://localhost:27017", 10 | "database": "event_store", 11 | "useSSL": false 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/Alerts/Core/.dolittle/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "interaction": { 3 | "port": 50052, 4 | "unixSocket": "/var/run/dolittle.interaction.server.sock" 5 | }, 6 | "management": { 7 | "port": 50053, 8 | "unixSocket": "/var/run/dolittle.management.server.sock" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Alerts/Core/.dolittle/tenant-map.json: -------------------------------------------------------------------------------- 1 | { 2 | "strategy": "hostname", 3 | "fallbackToDeveloperTenant": true, 4 | "configuration": { 5 | "segments": "first" 6 | }, 7 | "map": { 8 | "Development": "445f8ea8-1a6f-40d7-b2fc-796dba92dc44" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Alerts/Core/.dolittle/tenants.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": {} 3 | } -------------------------------------------------------------------------------- /Source/Alerts/Core/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Alerts/Core/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Information" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /Source/Alerts/Core/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/Alerts/CloseAlert.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands; 2 | using System; 3 | 4 | namespace Domain.Alerts 5 | { 6 | public class CloseAlert : ICommand 7 | { 8 | public int AlertNumber { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/Alerts/CloseAlertBusinessValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.Alerts 4 | { 5 | public class CloseAlertBusinessValidator : CommandBusinessValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/Alerts/CloseAlertInputValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.Alerts 4 | { 5 | public class CloseAlertInputValidator : CommandInputValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/DataOwners/DataOwner.cs: -------------------------------------------------------------------------------- 1 | using Concepts.DataOwners; 2 | using Dolittle.Domain; 3 | using Dolittle.Runtime.Events; 4 | using Events.DataOwners; 5 | 6 | namespace Domain.DataOwners 7 | { 8 | public class DataOwner : AggregateRoot 9 | { 10 | public DataOwner(EventSourceId id) : base(id) 11 | { 12 | 13 | } 14 | 15 | public void RegisterDataOwner(NameOfDataOwner name, Email email) 16 | { 17 | Apply(new DataOwnerRegistered(EventSourceId, name, email)); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/DataOwners/RegisterOwnerBusinessValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.DataOwners 4 | { 5 | public class RegisterOwnerBusinessValidator : CommandBusinessValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/DataOwners/RegisterOwnerInputValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.DataOwners 4 | { 5 | public class RegisterOwnerInputValidator : CommandInputValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/Domain.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/Reports/ForcePublishNewCaseReportBusinessValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.Reports 4 | { 5 | public class ForcePublishNewCaseReportBusinessValidator : CommandBusinessValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/Alerts/Domain/Reports/ForcePublishNewCaseReportInputValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.Reports 4 | { 5 | public class ForcePublishNewCaseReportInputValidator : CommandInputValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/Alerts/Events.Admin/Events.Admin.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/Alerts/Events.Reporting/Events.Reporting.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/Alerts/Events/Alerts/AlertClosed.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Events; 2 | using System; 3 | 4 | namespace Events.Alerts 5 | { 6 | public class AlertClosed : IEvent 7 | { 8 | public AlertClosed(int alertNumber) 9 | { 10 | AlertNumber= alertNumber; 11 | } 12 | 13 | public int AlertNumber { get; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Source/Alerts/Events/Alerts/ReportAddedToAlert.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Events; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace Events.Alerts 7 | { 8 | public class ReportAddedToAlert : IEvent 9 | { 10 | public ReportAddedToAlert(Guid reportId, Guid alertId) 11 | { 12 | ReportId = reportId; 13 | AlertId = alertId; 14 | } 15 | public Guid ReportId { get; } 16 | public Guid AlertId { get; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Alerts/Events/DataOwners/DataOwnerRegistered.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Dolittle.Events; 3 | using Dolittle.Runtime.Events; 4 | 5 | namespace Events.DataOwners 6 | { 7 | public class DataOwnerRegistered : IEvent 8 | { 9 | public Guid Id { get; } 10 | public string Name { get; } 11 | public string Email { get; } 12 | 13 | public DataOwnerRegistered(Guid id, string name, string email) 14 | { 15 | Id = id; 16 | Name = name; 17 | Email = email; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Alerts/Events/Events.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Source/Alerts/Policies.Specs/for_AlertRules/given/an_aggregate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Dolittle.Runtime.Events; 3 | using Domain.DataOwners; 4 | using Machine.Specifications; 5 | 6 | namespace Policies.Specs.for_AlertRules.given 7 | { 8 | public class an_aggregate 9 | { 10 | protected static DataOwner event_source; 11 | protected static EventSourceId event_source_id; 12 | 13 | Establish context = () => 14 | { 15 | event_source_id = Guid.NewGuid(); 16 | event_source = new DataOwner(event_source_id); 17 | }; 18 | } 19 | } -------------------------------------------------------------------------------- /Source/Alerts/Policies/Alerts/IMailSender.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Policies.Alerts 6 | { 7 | public interface IMailSender 8 | { 9 | void Send(string emailTo, string subject, string textBody); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Source/Alerts/Policies/Alerts/MailSenderBinder.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.DependencyInversion; 2 | 3 | namespace Policies.Alerts 4 | { 5 | public class MailSenderBinder : ICanProvideBindings 6 | { 7 | public void Provide(IBindingProviderBuilder builder) 8 | { 9 | builder.Bind().To(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/Alerts/README.md: -------------------------------------------------------------------------------- 1 | 2 | See Readme.md in Web folder on how to run frontend 3 | 4 | ----------- 5 | 6 | Currently for triggered alert email is sent using basic SMTP sender. 7 | To make it work please set up following environment variables: 8 | export ALERT_MAILER_FROM=_from@mail.com_ 9 | export ALERT_MAILER_HOST=_smtpServerHost_ 10 | export ALERT_MAILER_USER=_username_ 11 | export ALERT_MAILER_PASSWORD=_password_ 12 | export ALERT_MAILER_PORT=_smtpPort_ 13 | export ALERT_MAILER_USESSL=_useSsl_ -------------------------------------------------------------------------------- /Source/Alerts/Read/Alerts/AlertOverview.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Concepts.Alerts; 3 | using Concepts.HealthRisks; 4 | using Dolittle.ReadModels; 5 | 6 | namespace Read.Alerts 7 | { 8 | public class AlertOverview : IReadModel 9 | { 10 | public AlertNumber AlertNumber { get; set; } 11 | public HealthRiskNumber HealthRiskNumber { get; set; } 12 | public string HealthRiskName { get; set; } 13 | public int NumberOfReports { get; set; } 14 | public DateTimeOffset OpenedAt { get; set; } 15 | public AlertStatus Status { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Source/Alerts/Read/Alerts/Open/OpenAlert.cs: -------------------------------------------------------------------------------- 1 | using Concepts.Alerts; 2 | using Concepts.HealthRisks; 3 | using Dolittle.ReadModels; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Text; 7 | 8 | namespace Read.Alerts.Open 9 | { 10 | public class OpenAlert : IReadModel 11 | { 12 | public HealthRiskNumber Id { get; set; } 13 | public AlertId AlertId { get; set; } 14 | public AlertNumber AlertNumber { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Source/Alerts/Read/DataOwners/DataOwner.cs: -------------------------------------------------------------------------------- 1 | using Concepts.AlertRules; 2 | using Concepts.DataOwners; 3 | using Dolittle.ReadModels; 4 | 5 | namespace Read.DataOwners 6 | { 7 | public class DataOwner : IReadModel 8 | { 9 | public DataOwnerId Id { get; set; } 10 | public Email Email { get; set; } 11 | public NameOfDataOwner Name { get; set; } 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/Alerts/Read/DataOwners/GetDataOwner.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using Dolittle.Queries; 4 | using Dolittle.ReadModels; 5 | 6 | namespace Read.DataOwners 7 | { 8 | public class GetDataOwner : IQueryFor 9 | { 10 | readonly IReadModelRepositoryFor _repositoryForDataOwner; 11 | 12 | 13 | public GetDataOwner(IReadModelRepositoryFor repositoryForDataOwner) 14 | { 15 | _repositoryForDataOwner = repositoryForDataOwner; 16 | } 17 | 18 | public IQueryable Query => _repositoryForDataOwner.Query; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Alerts/Read/Read.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Source/Alerts/Read/Reports/AllReports.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using Dolittle.Queries; 4 | using Dolittle.ReadModels; 5 | 6 | namespace Read.Reports 7 | { 8 | public class AllReports : IQueryFor 9 | { 10 | readonly IReadModelRepositoryFor _repositoryForReport; 11 | 12 | public AllReports(IReadModelRepositoryFor repositoryForReport) 13 | { 14 | _repositoryForReport = repositoryForReport; 15 | } 16 | 17 | public IQueryable Query => _repositoryForReport.Query; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Source/Alerts/Read/Reports/AvailableForRules/AvailableReport.cs: -------------------------------------------------------------------------------- 1 | using Concepts.Report; 2 | using Dolittle.ReadModels; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Text; 6 | 7 | namespace Read.Reports.AvailableForRules 8 | { 9 | public class AvailableReport : IReadModel 10 | { 11 | public ReportId Id { get; set; } 12 | public double Latitude { get; set; } 13 | public double Longitude { get; set; } 14 | public DateTimeOffset Timestamp { get; set; } 15 | public Guid HealthRiskId { get; set; } 16 | public int HealthRiskNumber { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Alerts/Web/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./node_modules/@dolittle/build.react/.babelrc" 3 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:11.6-stretch AS build 2 | ARG mode=build-test 3 | 4 | # Install dependencies 5 | COPY ./Alerts/Web/package.json /CBS/Source/Alerts/Web/package.json 6 | WORKDIR /CBS/Source/Alerts/Web 7 | RUN yarn install 8 | 9 | # Build production code 10 | COPY ./Alerts/Web /CBS/Source/Alerts/Web 11 | WORKDIR /CBS/Source/Alerts/Web 12 | RUN yarn build 13 | 14 | # Build runtime image 15 | FROM nginx:1.15-alpine 16 | COPY --from=build /CBS/Source/Alerts/Web/nginx-default.conf /etc/nginx/conf.d/default.conf 17 | COPY --from=build /CBS/Source/Alerts/Web/dist /usr/share/nginx/html 18 | -------------------------------------------------------------------------------- /Source/Alerts/Web/Environments/demo_api.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=http://demo.cbsrc.org/alerts 2 | MOCK_COORDINATORS=false -------------------------------------------------------------------------------- /Source/Alerts/Web/Environments/local_api.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=http://localhost:5000 2 | MOCK_COORDINATORS=false -------------------------------------------------------------------------------- /Source/Alerts/Web/Environments/mock_api.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=/ 2 | MOCK_COORDINATORS=true -------------------------------------------------------------------------------- /Source/Alerts/Web/Environments/production.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=/alerts 2 | MOCK_COORDINATORS=false -------------------------------------------------------------------------------- /Source/Alerts/Web/Features/AlertRules/AllAlertRules.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllAlertRules extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllAlertRules'; 12 | this.generatedFrom = 'Read.AlertRules.AllAlertRules'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/Features/AlertRules/DeleteAlertRule.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class DeleteAlertRule extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = 'edb15eb4-218d-40f4-bc7f-e5764491f7d8'; 12 | 13 | this.id = '00000000-0000-0000-0000-000000000000'; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/Features/Alerts/AllAlertOverviews.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllAlertOverviews extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllAlertOverviews'; 12 | this.generatedFrom = 'Read.Alerts.AllAlertOverviews'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/Features/Alerts/CloseAlert.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class CloseAlert extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = 'fd844bf3-5a55-47b8-b0ae-da3b64aed1ac'; 12 | 13 | this.alertNumber = 0; 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/Features/DataCollectors/AllDataCollectors.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllDataCollectors extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllDataCollectors'; 12 | this.generatedFrom = 'Read.DataCollectors.AllDataCollectors'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/Features/DataOwners/GetDataOwner.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class GetDataOwner extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'GetDataOwner'; 12 | this.generatedFrom = 'Read.DataOwners.GetDataOwner'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/Features/Reports/AllReports.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllReports extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllReports'; 12 | this.generatedFrom = 'Read.Reports.AllReports'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/README.md: -------------------------------------------------------------------------------- 1 | > __Note__: There are currently some issues with dependencies while using `npm`. So for the time being, please use `yarn` instead [see here](https://yarnpkg.com/en/). 2 | 3 | # Start web project 4 | - Go to Source/Alerts/Web do "yarn install" 5 | - Then "yarn start" to build and run for local development. Mock data is used for now 6 | 7 | "yarn build" is used to build for prodction -------------------------------------------------------------------------------- /Source/Alerts/Web/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Alerts/Web/assets/logo.png -------------------------------------------------------------------------------- /Source/Alerts/Web/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/Alerts/Web/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%- htmlWebpackPlugin.options.metadata.title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /Source/Alerts/Web/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true 4 | } 5 | } -------------------------------------------------------------------------------- /Source/Alerts/Web/karma.conf.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | module.exports = require("@dolittle/build/karma.conf.js"); 3 | -------------------------------------------------------------------------------- /Source/Alerts/Web/nginx-default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | alias /usr/share/nginx/html/; 7 | 8 | # Serve all files in the normal way 9 | location ~ \.[^/]*$ { 10 | } 11 | 12 | # Everything else goes to /index.html 13 | try_files '' /index.html; 14 | } 15 | 16 | error_page 500 502 503 504 /50x.html; 17 | location = /50x.html { 18 | root /usr/share/nginx/html; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Alerts/Web/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Alerts/Web/src/assets/logo.png -------------------------------------------------------------------------------- /Source/Alerts/Web/src/assets/main.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Main entry Sass file 3 | */ 4 | 5 | .alerts { 6 | padding: 2rem; 7 | 8 | button { 9 | margin-right: 20px; 10 | } 11 | } 12 | .alert-menu { 13 | display: flex; 14 | width: 50%; 15 | margin-top: 28px; 16 | margin-left: 166px; 17 | margin-bottom: 20px; 18 | justify-content: flex-start; 19 | } 20 | .menu-button { 21 | text-decoration: none; 22 | text-align: center; 23 | font-size: 16px; 24 | color: #234361; 25 | flex: 1; 26 | } 27 | -------------------------------------------------------------------------------- /Source/Alerts/Web/src/components/AlertRule.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Table } from 'evergreen-ui'; 3 | 4 | const AlertRule = ({ rule }) => { 5 | return ( 6 | 7 | {rule.alertRuleName} 8 | {rule.healthRiskId} 9 | {rule.numberOfCasesThreshold} 10 | {rule.thresholdTimeframeInHours} 11 | 12 | ); 13 | }; 14 | 15 | export default AlertRule; 16 | -------------------------------------------------------------------------------- /Source/Alerts/Web/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import { Provider } from 'react-redux'; 4 | import App from './components/App'; 5 | import store from './store'; 6 | import './assets/main.scss'; 7 | 8 | ReactDOM.render( 9 | 10 | 11 | , 12 | document.getElementById('root') 13 | ); -------------------------------------------------------------------------------- /Source/Alerts/Web/wallaby.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@dolittle/build.react/wallaby.js')('Features', () => {}); -------------------------------------------------------------------------------- /Source/Alerts/Web/webpack.config.prod.js: -------------------------------------------------------------------------------- 1 | process.env.DOLITTLE_WEBPACK_BASE_URL = '/alerts/' 2 | module.exports = require('./webpack.config.js'); 3 | -------------------------------------------------------------------------------- /Source/Alerts/bounded-context.json: -------------------------------------------------------------------------------- 1 | { 2 | "application": "fcb9885f-8b19-192e-be61-f966ee1c1640", 3 | "boundedContext": "c5e3a9d7-fa1f-f106-7532-5584112f70e2", 4 | "boundedContextName": "Alerts", 5 | "resources": { 6 | "readModels": { 7 | "production": "MongoDB", 8 | "development": "MongoDB" 9 | }, 10 | "eventStore": { 11 | "production": "MongoDB", 12 | "development": "MongoDB" 13 | } 14 | }, 15 | "core": { 16 | "language": "csharp" 17 | }, 18 | "interaction": [] 19 | } -------------------------------------------------------------------------------- /Source/Analytics/.dockerignore: -------------------------------------------------------------------------------- 1 | # Ignore Node modules 2 | **/node_modules/ 3 | 4 | # Ignore web binaries 5 | **/Web/dist/ 6 | 7 | # Ignore C# binaries 8 | **/bin/ 9 | **/obj/ 10 | .dockerignore 11 | .env 12 | .git 13 | .gitignore 14 | **/.vs 15 | .vscode 16 | **/.toolstarget -------------------------------------------------------------------------------- /Source/Analytics/Concepts/Alerts/AlertId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts.Alerts 5 | { 6 | public class AlertId : ConceptAs 7 | { 8 | public static implicit operator AlertId(Guid value) 9 | { 10 | return new AlertId {Value = value}; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Analytics/Concepts/Alerts/AlertRuleId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts.Alerts 5 | { 6 | public class AlertRuleId : ConceptAs 7 | { 8 | public static implicit operator AlertRuleId(Guid value) 9 | { 10 | return new AlertRuleId {Value = value}; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Analytics/Concepts/CaseReportId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts 5 | { 6 | public class CaseReportId : ConceptAs 7 | { 8 | public static readonly CaseReportId NotSet = Guid.Empty; 9 | 10 | public static implicit operator CaseReportId (Guid value) 11 | { 12 | return new CaseReportId { Value = value }; 13 | } 14 | public static implicit operator CaseReportId(string id) 15 | { 16 | return new CaseReportId { Value = Guid.Parse(id) }; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Source/Analytics/Concepts/Concepts.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Source/Analytics/Concepts/Constants.cs: -------------------------------------------------------------------------------- 1 | namespace Concepts 2 | { 3 | public class Constants 4 | { 5 | public static string TotalReportsID = "17ef2cc2-bb54-4a54-b5bf-b2f17a0196ca"; 6 | } 7 | } -------------------------------------------------------------------------------- /Source/Analytics/Concepts/DataCollectors/Sex.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.DataCollectors 7 | { 8 | public enum Sex 9 | { 10 | Male = 1, 11 | Female = 2 12 | } 13 | } -------------------------------------------------------------------------------- /Source/Analytics/Concepts/DistrictId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts 5 | { 6 | public class DistrictId : ConceptAs 7 | { 8 | public static implicit operator DistrictId(Guid value) 9 | { 10 | return new DistrictId {Value = value}; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Analytics/Concepts/NumberOfCasereports.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts 4 | { 5 | public class NumberOfCasereports : ConceptAs 6 | { 7 | public static implicit operator NumberOfCasereports(int value) 8 | { 9 | return new NumberOfCasereports {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/Analytics/Concepts/RegionId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts 5 | { 6 | public class RegionId : ConceptAs 7 | { 8 | public static implicit operator RegionId(Guid value) 9 | { 10 | return new RegionId {Value = value}; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Analytics/Concepts/VillageId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts 5 | { 6 | public class VillageId : ConceptAs 7 | { 8 | public static implicit operator VillageId(Guid value) 9 | { 10 | return new VillageId {Value = value}; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Analytics/Core/.dolittle/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": { 3 | "readModels": { 4 | "host": "mongodb://localhost:27017", 5 | "database": "analytics_read_models", 6 | "useSSL": false 7 | }, 8 | "eventStore": { 9 | "host": "mongodb://localhost:27017", 10 | "database": "analytics_event_store", 11 | "useSSL": false 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/Analytics/Core/.dolittle/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "interaction": { 3 | "port": 50052, 4 | "unixSocket": "/var/run/cbs.analytics.interaction.server.sock" 5 | }, 6 | "management": { 7 | "port": 50053, 8 | "unixSocket": "/var/run/cbs.analytics.management.server.sock" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Analytics/Core/.dolittle/tenant-map.json: -------------------------------------------------------------------------------- 1 | { 2 | "strategy": "hostname", 3 | "fallbackToDeveloperTenant": true, 4 | "configuration": { 5 | "segments": "first" 6 | }, 7 | "map": { 8 | "dev": "445f8ea8-1a6f-40d7-b2fc-796dba92dc44" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Analytics/Core/.dolittle/tenants.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": {} 3 | } -------------------------------------------------------------------------------- /Source/Analytics/Core/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Analytics/Core/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Information" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /Source/Analytics/Events.Admin/Events.Admin.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/Analytics/Events.Alerts/Events.Alerts.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/Analytics/Events.Reporting/Events.Reporting.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/Analytics/Read/CaseReports/AllCaseReportsQuery.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using Dolittle.Queries; 3 | using Dolittle.ReadModels; 4 | 5 | namespace Read.CaseReports 6 | { 7 | public class AllCaseReportsQuery : IQueryFor 8 | { 9 | readonly IReadModelRepositoryFor _repositoryForCaseReport; 10 | 11 | public AllCaseReportsQuery(IReadModelRepositoryFor repositoryForCaseReport) 12 | { 13 | _repositoryForCaseReport = repositoryForCaseReport; 14 | } 15 | 16 | public IQueryable Query => _repositoryForCaseReport.Query; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Analytics/Read/DataCollectors/AllRegions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using Dolittle.Queries; 4 | using Dolittle.ReadModels; 5 | 6 | namespace Read.DataCollectors 7 | { 8 | public class AllRegions : IQueryFor 9 | { 10 | readonly IReadModelRepositoryFor _repositoryForRegion; 11 | 12 | public AllRegions(IReadModelRepositoryFor repositoryForRegion) 13 | { 14 | _repositoryForRegion = repositoryForRegion; 15 | } 16 | 17 | public IQueryable Query => _repositoryForRegion.Query; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Source/Analytics/Read/Map/CaseReportForMap.cs: -------------------------------------------------------------------------------- 1 | using Concepts; 2 | using Concepts.HealthRisks; 3 | 4 | namespace Read.Map 5 | { 6 | public class CaseReportForMap 7 | { 8 | public HealthRiskName HealthRiskName { get; set; } 9 | public NumberOfPeople NumberOfPeople { get; set; } 10 | public Location Location { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/Analytics/Read/Map/CaseReportsLast4Weeks.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.ReadModels; 2 | using Concepts; 3 | using Concepts.HealthRisks; 4 | using System.Collections.Generic; 5 | using MongoDB.Bson.Serialization.Attributes; 6 | using MongoDB.Bson.Serialization.Options; 7 | 8 | namespace Read.Map 9 | { 10 | public class CaseReportsLast4Weeks : IReadModel 11 | { 12 | public Day Id { get; set; } 13 | 14 | [BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)] 15 | public IDictionary> CaseReportsPerHealthRisk { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Source/Analytics/Read/Map/CaseReportsLast7Days.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.ReadModels; 2 | using Concepts; 3 | using Concepts.HealthRisks; 4 | using System.Collections.Generic; 5 | using MongoDB.Bson.Serialization.Attributes; 6 | using MongoDB.Bson.Serialization.Options; 7 | 8 | namespace Read.Map 9 | { 10 | public class CaseReportsLast7Days : IReadModel 11 | { 12 | public Day Id { get; set; } 13 | [BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)] 14 | public IDictionary> CaseReportsPerHealthRisk{ get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /Source/Analytics/Read/Map/CaseReportsPerHealthRisk.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Concepts.HealthRisks; 3 | 4 | namespace Read.Map 5 | { 6 | public class CaseReportsPerHealthRisk 7 | { 8 | public HealthRiskName HealthRiskName { get; set; } 9 | public IList CaseReports { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | ["@babel/plugin-proposal-decorators", { "legacy": true }], 4 | ["@babel/plugin-proposal-class-properties", { "loose": true }], 5 | ["@babel/plugin-proposal-private-methods", { "loose": true }], 6 | "@babel/plugin-transform-async-to-generator" 7 | ], 8 | "presets": [ 9 | "@babel/preset-react", 10 | [ 11 | "@babel/preset-env", 12 | { 13 | "useBuiltIns":"entry", 14 | "loose": true, 15 | "exclude": [ 16 | "transform-regenerator" 17 | ] 18 | } 19 | ] 20 | ] 21 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/Environments/development.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=http://localhost:4010 2 | REACT_APP_APP_INSIGHTS_INSTRUMENTATION_KEY=36bdf7e0-884f-4391-8f08-11ebd48b9023 -------------------------------------------------------------------------------- /Source/Analytics/Web/Environments/production.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=/analytics 2 | REACT_APP_APP_INSIGHTS_INSTRUMENTATION_KEY=ca4137d7-10b6-4f10-a75b-5b915d96fedb -------------------------------------------------------------------------------- /Source/Analytics/Web/assets/images/rawpixel-653764-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Analytics/Web/assets/images/rawpixel-653764-unsplash.jpg -------------------------------------------------------------------------------- /Source/Analytics/Web/assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Analytics/Web/assets/splash.png -------------------------------------------------------------------------------- /Source/Analytics/Web/dolittle.env: -------------------------------------------------------------------------------- 1 | DOLITTLE_WEB_TITLE=Analytics 2 | DOLITTLE_WEBPACK_BASE_URL=/ -------------------------------------------------------------------------------- /Source/Analytics/Web/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true 4 | } 5 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/karma.conf.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | module.exports = require("@dolittle/build/karma.conf.js"); 3 | -------------------------------------------------------------------------------- /Source/Analytics/Web/nginx-default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | alias /usr/share/nginx/html/; 7 | 8 | # Serve all files in the normal way 9 | location ~ \.[^/]*$ { 10 | } 11 | 12 | # Everything else goes to /index.html 13 | try_files '' /index.html; 14 | } 15 | 16 | error_page 500 502 503 504 /50x.html; 17 | location = /50x.html { 18 | root /usr/share/nginx/html; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/Features/CaseReports/AllCaseReportsQuery.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllCaseReportsQuery extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllCaseReportsQuery'; 12 | this.generatedFrom = 'Read.CaseReports.AllCaseReportsQuery'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/src/Features/CaseReports/TotalReportsQuery.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class TotalReportsQuery extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'TotalReportsQuery'; 12 | this.generatedFrom = 'Read.CaseReports.TotalReportsQuery'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/src/Features/DataCollectors/AllRegions.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllRegions extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllRegions'; 12 | this.generatedFrom = 'Read.DataCollectors.AllRegions'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/src/Features/DataCollectors/DataCollectorsQuery.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class DataCollectorsQuery extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'DataCollectorsQuery'; 12 | this.generatedFrom = 'Read.DataCollectors.DataCollectorsQuery'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/src/Features/HealthRisks/AllHealthRisks.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllHealthRisks extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllHealthRisks'; 12 | this.generatedFrom = 'Read.HealthRisks.AllHealthRisks'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Analytics/Web/src/actions/analysisactions.js: -------------------------------------------------------------------------------- 1 | export function updateRange(name, range) { 2 | return dispatch => 3 | dispatch({ type: "UPDATE_RANGE", payload: range, name: name }); 4 | } 5 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/assets/colors.scss: -------------------------------------------------------------------------------- 1 | $rc-red: #ca0000; 2 | $rc-red-darker: #ab0900; 3 | 4 | $light-grey: #ece4e4; 5 | $medium-grey: #cfcdcc; 6 | $grey: #808080; 7 | 8 | $link-color: rgb(206, 23, 30); 9 | $gray-lighter: lighten(#000, 50%); 10 | 11 | $brand-primary: #234361; 12 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/assets/inclusions.scss: -------------------------------------------------------------------------------- 1 | @import "country-overview.scss"; 2 | @import "table.scss"; 3 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/assets/table.scss: -------------------------------------------------------------------------------- 1 | .tableContainer { 2 | margin-left: 0; 3 | } 4 | 5 | .table { 6 | border: 1px solid $medium-grey; 7 | margin-bottom: 50px; 8 | } 9 | 10 | .tableHead { 11 | background-color: $light-grey; 12 | } 13 | 14 | .headerText { 15 | font-family: "Lato", sans-serif; 16 | color: black !important; //these are marked as !important to override Google's MuiTable styling 17 | padding: 0.3rem !important; 18 | } 19 | 20 | .cell { 21 | font-family: "Lato", sans-serif; 22 | padding: 0 1rem !important; 23 | } 24 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/assets/vars.scss: -------------------------------------------------------------------------------- 1 | // Main breakpoints 2 | $screen-sm: 480px; 3 | $screen-md: 768px; 4 | $screen-lg: 1100px; 5 | 6 | $screen-sm-max: $screen-sm; 7 | $screen-md-max: $screen-md; 8 | $screen-lg-max: $screen-lg; 9 | 10 | $baseFontSize: 16; 11 | $baseFontSizeSmall: 14; 12 | 13 | @mixin fontSize($size: $baseFontSize, $rootSize: 16) { 14 | $remValue: ($size / $rootSize) + rem; 15 | $pxValue: $size + px; 16 | font-size: $pxValue; 17 | font-size: $remValue; 18 | } 19 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/exports.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This is only used for defining what this module exports 3 | * If you're looking for the index, check the index.js located in the Admin/Web.Frontend root folder 4 | */ 5 | import Analytics from './components/Analytics'; 6 | 7 | export default Analytics; 8 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/reducers/analyticsReducer.js: -------------------------------------------------------------------------------- 1 | const baseState = { 2 | range: { 3 | from: null, 4 | to: null 5 | } 6 | }; 7 | 8 | function analytics() { 9 | return (state = baseState, action) => { 10 | switch (action.type) { 11 | case "UPDATE_RANGE": { 12 | return { ...state, range: action.payload }; 13 | } 14 | default: 15 | return state; 16 | } 17 | }; 18 | } 19 | 20 | export default analytics; 21 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from "redux"; 2 | import analytics from "./analyticsReducer"; 3 | 4 | export default combineReducers({ 5 | analytics: analytics() 6 | }); 7 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/utils/request.js: -------------------------------------------------------------------------------- 1 | export function getJson(url) { 2 | return fetch(url, { method: "GET" }).then(response => response.json()); 3 | } 4 | -------------------------------------------------------------------------------- /Source/Analytics/Web/src/utils/routes.js: -------------------------------------------------------------------------------- 1 | import Analytics from "../components/Analytics"; 2 | 3 | export const routes = [ 4 | { 5 | component: Analytics, 6 | path: '/analytics/', 7 | exact: false 8 | } 9 | ]; -------------------------------------------------------------------------------- /Source/Analytics/Web/wallaby.js: -------------------------------------------------------------------------------- 1 | const wallaby = require('@dolittle/build.aurelia/wallaby') 2 | module.exports = wallaby('Features'); 3 | -------------------------------------------------------------------------------- /Source/Analytics/bounded-context.json: -------------------------------------------------------------------------------- 1 | { 2 | "application": "fcb9885f-8b19-192e-be61-f966ee1c1640", 3 | "boundedContext": "f5afe568-20f2-e831-7b70-69e224b08af9", 4 | "boundedContextName": "Analytics", 5 | "resources": { 6 | "readModels": { 7 | "production": "MongoDB", 8 | "development": "MongoDB" 9 | }, 10 | "eventStore": { 11 | "production": "MongoDB", 12 | "development": "MongoDB" 13 | } 14 | }, 15 | "core": { 16 | "language": "csharp" 17 | }, 18 | "interaction": [] 19 | } 20 | -------------------------------------------------------------------------------- /Source/Navigation/Web.Angular/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "navigation", 3 | "version": "1.0.3", 4 | "lockfileVersion": 1 5 | } 6 | -------------------------------------------------------------------------------- /Source/Navigation/Web.Angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "navigation", 3 | "version": "1.0.3", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC" 11 | } 12 | -------------------------------------------------------------------------------- /Source/Navigation/Web.React/.babelrc: -------------------------------------------------------------------------------- 1 | { "plugins": ["@babel/plugin-transform-react-jsx"] } -------------------------------------------------------------------------------- /Source/Navigation/Web.React/lib/colors.scss: -------------------------------------------------------------------------------- 1 | $rc-red: #ca0000; 2 | $rc-red-darker: #ab0900; 3 | 4 | $light-grey: #ece4e4; 5 | $medium-grey: #cfcdcc; 6 | $grey: #808080; 7 | 8 | $link-color: rgb(206, 23, 30); 9 | $gray-lighter: lighten(#000, 50%); 10 | 11 | $brand-primary: #234361; 12 | -------------------------------------------------------------------------------- /Source/Navigation/Web.React/lib/vars.scss: -------------------------------------------------------------------------------- 1 | // Main breakpoints 2 | $screen-sm: 480px; 3 | $screen-md: 768px; 4 | $screen-lg: 1100px; 5 | 6 | $screen-sm-max: $screen-sm; 7 | $screen-md-max: $screen-md; 8 | $screen-lg-max: $screen-lg; 9 | 10 | $baseFontSize: 16; 11 | $baseFontSizeSmall: 14; 12 | 13 | @mixin fontSize($size: $baseFontSize, $rootSize: 16) { 14 | $remValue: ($size / $rootSize) + rem; 15 | $pxValue: $size + px; 16 | font-size: $pxValue; 17 | font-size: $remValue; 18 | } 19 | -------------------------------------------------------------------------------- /Source/Navigation/Web.React/readme.md: -------------------------------------------------------------------------------- 1 | To run: 2 | 1. In this folder, run `npm link` 3 | 2. In the web folder you want to use, run `npm link ../../Web.React` so that you create a reference back to this folder 4 | 5 | To update: 6 | Run `babel index.js lib/index.js`. The node module listens to the transpiled lib-file. As the navbar has no Webpack setup, babel must be called manually to transpile. -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/Concepts.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/MessageId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts 5 | { 6 | public class MessageId : ConceptAs 7 | { 8 | public static implicit operator MessageId(Guid value) 9 | { 10 | return new MessageId {Value = value}; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Gateways/ApiKey.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.SMS.Gateways 4 | { 5 | public class ApiKey : ConceptAs 6 | { 7 | public static implicit operator ApiKey(string value) 8 | { 9 | return new ApiKey {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Gateways/MessageId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.SMS.Gateways 4 | { 5 | public class MessageId : ConceptAs 6 | { 7 | public static implicit operator MessageId(int value) 8 | { 9 | return new MessageId {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Gateways/ModemNumber.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.SMS.Gateways 4 | { 5 | public class ModemNumber : ConceptAs 6 | { 7 | public static implicit operator ModemNumber(int value) 8 | { 9 | return new ModemNumber {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Gateways/Name.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.SMS.Gateways 4 | { 5 | public class Name : ConceptAs 6 | { 7 | public static implicit operator Name(string value) 8 | { 9 | return new Name {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Gateways/OID.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.SMS.Gateways 4 | { 5 | public class OID : ConceptAs 6 | { 7 | public static implicit operator OID(string value) 8 | { 9 | return new OID {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Gateways/SmsGatewayId.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | using System; 3 | 4 | namespace Concepts.SMS.Gateways 5 | { 6 | public class SmsGatewayId : ConceptAs 7 | { 8 | public static implicit operator SmsGatewayId(Guid value) 9 | { 10 | return new SmsGatewayId {Value = value}; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Gateways/SmsGatewayIdValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Validation; 2 | using FluentValidation; 3 | 4 | namespace Concepts.SMS.Gateways 5 | { 6 | public class SmsGatewayIdValidator : InputValidator 7 | { 8 | public SmsGatewayIdValidator() 9 | { 10 | RuleFor(x => x.Value) 11 | .NotEmpty() 12 | .WithMessage("Sms Gateway Id cannot be empty"); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/Message.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.SMS 4 | { 5 | public class Message : ConceptAs 6 | { 7 | public static implicit operator Message(string value) 8 | { 9 | return new Message {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Concepts/SMS/PhoneNumber.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.SMS 4 | { 5 | public class PhoneNumber : ConceptAs 6 | { 7 | public static implicit operator PhoneNumber(string value) 8 | { 9 | return new PhoneNumber {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/.dolittle/event-horizons.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/.dolittle/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": { 3 | "readModels": { 4 | "host": "mongodb://localhost:27017", 5 | "database": "cbs_notificationgateway_read_models", 6 | "useSSL": false 7 | }, 8 | "eventStore": { 9 | "host": "mongodb://localhost:27017", 10 | "database": "cbs_notificationgateway_event_store", 11 | "useSSL": false 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/.dolittle/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "interaction": { 3 | "port": 50060, 4 | "unixSocket": "/var/run/cbs.notifications.interaction.server.sock" 5 | }, 6 | "management": { 7 | "port": 50160, 8 | "unixSocket": "/var/run/cbs.notifications.management.server.sock" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/.dolittle/tenant-map.json: -------------------------------------------------------------------------------- 1 | { 2 | "strategy": "hostname", 3 | "fallbackToDeveloperTenant": true, 4 | "configuration": { 5 | "segments": "first" 6 | }, 7 | "map": { 8 | "Development": "445f8ea8-1a6f-40d7-b2fc-796dba92dc44" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/.dolittle/tenants.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": {} 3 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/.dolittle/topology.json: -------------------------------------------------------------------------------- 1 | { 2 | "modules": {}, 3 | "features": { 4 | "1fe47770-08ec-4642-801c-afc0ccf02fff": { 5 | "name": "SMS", 6 | "subFeatures": { 7 | "1e4338a5-859f-423c-9c4e-a975217ddbd9": { 8 | "name": "Gateways", 9 | "subFeatures": {} 10 | } 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/GatewayEndpoints/ITenantMapper.cs: -------------------------------------------------------------------------------- 1 | using Concepts.SMS.Gateways; 2 | using Dolittle.Tenancy; 3 | 4 | namespace Core.GatewayEndpoints 5 | { 6 | public interface ITenantMapper 7 | { 8 | TenantId GetTenantFor(ApiKey apiKey); 9 | void SetTenantFor(ApiKey apiKey, TenantId tenantId); 10 | } 11 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/GatewayEndpoints/SmsEagleSamples/smseagle-1.sample: -------------------------------------------------------------------------------- 1 | POST /notifications/smseagle/incoming HTTP/1.0 2 | Host: localhost:8080 3 | Connection: close 4 | Content-Length: 126 5 | Content-Type: application/x-www-form-urlencoded 6 | 7 | sender=123456789×tamp=20190330194502&text=This+is+an+incoming+sms&msgid=431&oid=&modemno=1&apikey=ThereWillBeAnApiKeyHere -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/GatewayEndpoints/SmsEagleSamples/smseagle-2.sample: -------------------------------------------------------------------------------- 1 | POST /notifications/smseagle/incoming HTTP/1.0 2 | Host: localhost:8080 3 | Connection: close 4 | Content-Length: 118 5 | Content-Type: application/x-www-form-urlencoded 6 | 7 | sender=%2B4787654321×tamp=20190330194610&text=Random+text&msgid=182&oid=&modemno=1&apikey=ThereWillBeAnApiKeyHere -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/GatewayEndpoints/SmsEagleSamples/smseagle-3.sample: -------------------------------------------------------------------------------- 1 | POST /notifications/smseagle/incoming HTTP/1.0 2 | Host: localhost:8080 3 | Connection: close 4 | Content-Length: 116 5 | Content-Type: application/x-www-form-urlencoded 6 | 7 | sender=%2B4787654321×tamp=20190330194655&text=1%232%233&msgid=183&oid=&modemno=1&apikey=ThereWillBeAnApiKeyHere -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/GatewayEndpoints/TenantMapperFileNotAccessible.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace Core.GatewayEndpoints 5 | { 6 | public class TenantMapperFileNotAccessible : IOException 7 | { 8 | public TenantMapperFileNotAccessible(string message) : base(message) 9 | { 10 | } 11 | 12 | public TenantMapperFileNotAccessible(string message, Exception innerException) : base(message, innerException) 13 | { 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/Security/ICanBypassSecurity.cs: -------------------------------------------------------------------------------- 1 | 2 | using Microsoft.AspNetCore.Http; 3 | 4 | namespace Core.Security 5 | { 6 | public interface ICanBypassSecurity 7 | { 8 | bool ShouldBypassSecurity(HttpContext httpContext); 9 | } 10 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/Security/ISecurityBypassingRequestManager.cs: -------------------------------------------------------------------------------- 1 | 2 | using Microsoft.AspNetCore.Http; 3 | 4 | namespace Core.Security 5 | { 6 | public interface ISecurityBypassingRequestManager 7 | { 8 | bool ShouldBypassSecurity(HttpContext httpContext); 9 | } 10 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/Security/SecurityBindings.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.DependencyInversion; 2 | 3 | namespace Core.Security 4 | { 5 | public class SecurityBindings : ICanProvideBindings 6 | { 7 | public void Provide(IBindingProviderBuilder builder) 8 | { 9 | builder.Bind().To(); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/apikeyToTenant.json: -------------------------------------------------------------------------------- 1 | {"388dd4ff-f3e8-4a67-8324-ed2bacc7955a":"445f8ea8-1a6f-40d7-b2fc-796dba92dc44"} -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Information" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Core/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/Gateways/AssignPhoneNumberToSmsGateway.cs: -------------------------------------------------------------------------------- 1 | using Concepts.SMS; 2 | using Concepts.SMS.Gateways; 3 | using Dolittle.Commands; 4 | 5 | namespace Domain.SMS.Gateways 6 | { 7 | public class AssignPhoneNumberToSmsGateway : ICommand 8 | { 9 | public SmsGatewayId SmsGatewayId {get; set;} 10 | public PhoneNumber PhoneNumber {get; set;} 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/Gateways/ReceiveMessageFromSMSGatewayBusinessValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | using FluentValidation; 3 | 4 | namespace Domain.SMS.Gateways 5 | { 6 | public class ReceiveMessageFromSMSGatewayBusinessValidator : CommandBusinessValidatorFor 7 | { 8 | public ReceiveMessageFromSMSGatewayBusinessValidator(SMSGatewayMustBeEnabled beEnabled) 9 | { 10 | RuleFor(_ => _.ApiKey).Must(_ => beEnabled(_)).WithMessage("Messages from disabled gateways are not accepted"); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/Gateways/ReceiveMessageFromSMSGatewayInputValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.SMS.Gateways 4 | { 5 | public class ReceiveMessageFromSMSGatewayInputValidator : CommandInputValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/Gateways/RegisterSmsGateway.cs: -------------------------------------------------------------------------------- 1 | using Concepts.SMS.Gateways; 2 | using Dolittle.Commands; 3 | 4 | namespace Domain.SMS.Gateways 5 | { 6 | public class RegisterSmsGateway : ICommand 7 | { 8 | public SmsGatewayId SmsGatewayId {get; set;} 9 | public Name Name {get; set;} 10 | public ApiKey ApiKey { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/Gateways/Rules.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Concepts.SMS; 3 | using Concepts.SMS.Gateways; 4 | 5 | namespace Domain.SMS.Gateways 6 | { 7 | public delegate bool PhoneNumberNotExists(string number); 8 | public delegate bool SmsGatewayDoesNotExist(Guid id); 9 | public delegate bool SMSGatewayMustBeEnabled(ApiKey apiKey); 10 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/SimulateReceivedMessage.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands; 2 | using Concepts; 3 | using Concepts.SMS; 4 | using System; 5 | 6 | namespace Domain.SMS 7 | { 8 | public class SimulateReceivedMessage : ICommand 9 | { 10 | public MessageId Id { get; set; } 11 | public PhoneNumber Sender { get; set;} 12 | public Message Text { get; set; } 13 | public DateTimeOffset Received { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/SimulateReceivedMessageBusinessValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.SMS 4 | { 5 | public class SimulateReceivedMessageBusinessValidator : CommandBusinessValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Domain/SMS/SimulateReceivedMessageInputValidator.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands.Validation; 2 | 3 | namespace Domain.SMS 4 | { 5 | public class SimulateReceivedMessageInputValidator : CommandInputValidatorFor 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Events/Events.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Events/SMS/Gateways/SmsGatewayEnabled.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Dolittle.Events; 3 | 4 | namespace Events.SMS.Gateways 5 | { 6 | public class SmsGatewayEnabled : IEvent 7 | { 8 | public SmsGatewayEnabled(Guid id, bool enabled) 9 | { 10 | Id = id; 11 | Enabled = enabled; 12 | } 13 | 14 | public Guid Id { get; } 15 | public bool Enabled { get; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Events/SMS/Gateways/SmsGatewayNumberAssigned.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Dolittle.Events; 3 | 4 | namespace Events.SMS.Gateways 5 | { 6 | public class SmsGatewayNumberAssigned : IEvent 7 | { 8 | public Guid Id { get; } 9 | public string PhoneNumber { get; } 10 | 11 | public SmsGatewayNumberAssigned(Guid id, string phoneNumber) 12 | { 13 | this.PhoneNumber = phoneNumber; 14 | this.Id = id; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Events/SMS/Gateways/SmsGatewayRegistered.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Dolittle.Events; 3 | 4 | namespace Events.SMS.Gateways 5 | { 6 | public class SmsGatewayRegistered : IEvent 7 | { 8 | public SmsGatewayRegistered( 9 | Guid id, 10 | string name, 11 | string apiKey) 12 | { 13 | Id = id; 14 | Name = name; 15 | ApiKey = apiKey; 16 | } 17 | 18 | public Guid Id { get; } 19 | public string Name { get; } 20 | public string ApiKey { get; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Policies/Policies.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Read/Read.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Read/SMS/Gateways/SmsGateway.cs: -------------------------------------------------------------------------------- 1 | using Concepts.SMS.Gateways; 2 | using Dolittle.ReadModels; 3 | 4 | namespace Read.SMS.Gateways 5 | { 6 | public class SmsGateway : IReadModel 7 | { 8 | public SmsGateway(SmsGatewayId id) 9 | { 10 | Id = id; 11 | } 12 | public SmsGatewayId Id {get; set;} 13 | public string Name {get; set;} 14 | public bool Enabled {get; set;} 15 | public string PhoneNumber {get; set;} 16 | public string ApiKey {get; set;} 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Read/SMS/ReceivedMessage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Concepts; 3 | using Concepts.SMS; 4 | using Dolittle.ReadModels; 5 | 6 | namespace Read.SMS 7 | { 8 | public class ReceivedMessage : IReadModel 9 | { 10 | public MessageId Id { get; set; } 11 | public PhoneNumber Sender { get; set;} 12 | public Message Text { get; set; } 13 | public DateTimeOffset Received { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./node_modules/@dolittle/build.react/.babelrc" 3 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/Environments/development.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=http://localhost:5010 -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/Environments/production.env: -------------------------------------------------------------------------------- 1 | API_BASE_URL=/notifications -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/Features/SMS/AllReceivedMessages.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllReceivedMessages extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllReceivedMessages'; 12 | this.generatedFrom = 'Read.SMS.AllReceivedMessages'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/Features/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | ReactDOM.render(, document.getElementById('root')); 6 | 7 | module.hot.accept(); -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/README.md: -------------------------------------------------------------------------------- 1 | > __Note__: There are currently some issues with dependencies while using `npm`. So for the time being, please use `yarn` instead [see here](https://yarnpkg.com/en/). -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%- htmlWebpackPlugin.options.metadata.title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true 4 | } 5 | } -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/karma.conf.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | module.exports = require("@dolittle/build/karma.conf.js"); 3 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/nginx-default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | alias /usr/share/nginx/html/; 7 | 8 | # Serve all files in the normal way 9 | location ~ \.[^/]*$ { 10 | } 11 | 12 | # Everything else goes to /index.html 13 | try_files '' /index.html; 14 | } 15 | 16 | error_page 500 502 503 504 /50x.html; 17 | location = /50x.html { 18 | root /usr/share/nginx/html; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/wallaby.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@dolittle/build.react/wallaby.js')('Features', () => {}); -------------------------------------------------------------------------------- /Source/NotificationGateway/Web/webpack.config.prod.js: -------------------------------------------------------------------------------- 1 | process.env.DOLITTLE_WEBPACK_BASE_URL = '/notifications/' 2 | module.exports = require('./webpack.config.js'); 3 | -------------------------------------------------------------------------------- /Source/NotificationGateway/bounded-context.json: -------------------------------------------------------------------------------- 1 | { 2 | "application": "fcb9885f-8b19-192e-be61-f966ee1c1640", 3 | "boundedContext": "07f31e26-809d-3e14-3a9c-edc092366924", 4 | "boundedContextName": "NotificationGateway", 5 | "resources": { 6 | "readModels": { 7 | "production": "MongoDB", 8 | "development": "MongoDB" 9 | }, 10 | "eventStore": { 11 | "production": "MongoDB", 12 | "development": "MongoDB" 13 | } 14 | }, 15 | "core": { 16 | "language": "csharp" 17 | }, 18 | "interaction": [] 19 | } -------------------------------------------------------------------------------- /Source/Reporting/Concepts/CaseReports/AgeGroup.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.CaseReports 7 | { 8 | public enum AgeGroup 9 | { 10 | AgeUnder5 = 1, 11 | Age5AndOver = 2 12 | } 13 | } -------------------------------------------------------------------------------- /Source/Reporting/Concepts/Concepts.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Source/Reporting/Concepts/DataCollectors/Language.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.DataCollectors 7 | { 8 | public enum Language 9 | { 10 | English = 0, 11 | French, 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Reporting/Concepts/DataCollectors/Sex.cs: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) The International Federation of Red Cross and Red Crescent Societies. All rights reserved. 3 | * Licensed under the MIT License. See LICENSE in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | namespace Concepts.DataCollectors 7 | { 8 | public enum Sex 9 | { 10 | Male = 1, 11 | Female = 2 12 | } 13 | } -------------------------------------------------------------------------------- /Source/Reporting/Concepts/HealthRisks/HealthRiskName.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.HealthRisks 4 | { 5 | public class HealthRiskName : ConceptAs 6 | { 7 | public static HealthRiskName NotSet = string.Empty; 8 | public static implicit operator HealthRiskName(string name) => new HealthRiskName { Value = name }; 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Reporting/Concepts/Projects/ProjectName.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts.Projects 4 | { 5 | public class ProjectName : ConceptAs 6 | { 7 | public static implicit operator ProjectName(string value) 8 | { 9 | return new ProjectName { Value = value }; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /Source/Reporting/Concepts/Region.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Concepts; 2 | 3 | namespace Concepts 4 | { 5 | public class Region : ConceptAs 6 | { 7 | public static implicit operator Region(string value) 8 | { 9 | return new Region {Value = value}; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/Reporting/Core/.dolittle/event-horizons.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "application": "fcb9885f-8b19-192e-be61-f966ee1c1640", 4 | "boundedContext": "07f31e26-809d-3e14-3a9c-edc092366924", 5 | "url": "localhost:50060", 6 | "events": [ 7 | { 8 | "id": "573d4609-fa75-4c2f-8d7c-f7cf7da3de53", 9 | "generation": 1 10 | } 11 | ] 12 | } 13 | ] -------------------------------------------------------------------------------- /Source/Reporting/Core/.dolittle/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": { 3 | "readModels": { 4 | "host": "mongodb://localhost:27017", 5 | "database": "cbs_reporting_read_models", 6 | "useSSL": false 7 | }, 8 | "eventStore": { 9 | "host": "mongodb://localhost:27017", 10 | "database": "cbs_reporting_event_store", 11 | "useSSL": false 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/Reporting/Core/.dolittle/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "interaction": { 3 | "port": 50053, 4 | "unixSocket": "/var/run/cbs.reporting.interaction.server.sock" 5 | }, 6 | "management": { 7 | "port": 50153, 8 | "unixSocket": "/var/run/cbs.reporting.management.server.sock" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Reporting/Core/.dolittle/tenant-map.json: -------------------------------------------------------------------------------- 1 | { 2 | "strategy": "hostname", 3 | "fallbackToDeveloperTenant": true, 4 | "configuration": { 5 | "segments": "first" 6 | }, 7 | "map": { 8 | "Development": "445f8ea8-1a6f-40d7-b2fc-796dba92dc44" 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Reporting/Core/.dolittle/tenants.json: -------------------------------------------------------------------------------- 1 | { 2 | "445f8ea8-1a6f-40d7-b2fc-796dba92dc44": {} 3 | } -------------------------------------------------------------------------------- /Source/Reporting/Core/CaseReports/ICanExportCaseReports.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Read.Reporting.CaseReportsForListing; 7 | 8 | namespace Core.CaseReports 9 | { 10 | public interface ICanExportCaseReports 11 | { 12 | string Format { get; } 13 | string MIMEType { get; } 14 | string FileExtension { get; } 15 | void WriteReportsTo(IEnumerable reports, Stream stream); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Source/Reporting/Core/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Reporting/Core/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Information" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /Source/Reporting/Core/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/Reporting/Domain/Management/DataCollectors/Registration/DeleteDataCollector.cs: -------------------------------------------------------------------------------- 1 | using Concepts.DataCollectors; 2 | using Dolittle.Commands; 3 | 4 | namespace Domain.Management.DataCollectors.Registration 5 | { 6 | public class DeleteDataCollector : ICommand 7 | { 8 | public DataCollectorId DataCollectorId { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Source/Reporting/Domain/TestData/CaseReports/PopulateCaseReportTestData.cs: -------------------------------------------------------------------------------- 1 | using Dolittle.Commands; 2 | 3 | namespace Domain.TestData.CaseReports 4 | { 5 | public class PopulateCaseReportTestData : ICommand 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Source/Reporting/Domain/TestData/Data/HealthRiskTestDataHelper.cs: -------------------------------------------------------------------------------- 1 | using Concepts.HealthRisks; 2 | 3 | namespace Domain.TestData.Data 4 | { 5 | public class HealthRiskTestDataHelper 6 | { 7 | public HealthRiskId Id { get; set; } 8 | public HealthRiskReadableId ReadableId { get; set; } 9 | public HealthRiskName Name { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Source/Reporting/Domain/TestData/Data/HealthRisks.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Id": "9cd3c7b5-6973-45c3-a8d3-58d9eb38824c", 4 | "ReadableId": "2", 5 | "Name": "AWD" 6 | }, 7 | { 8 | "Id": "E2A1AE23-F9D6-42B0-81FC-0FF15917C83B", 9 | "ReadableId": "3", 10 | "Name": "Measels" 11 | }, 12 | { 13 | "Id": "82DCD6AF-49A5-4D50-AC93-A85229021EB7", 14 | "ReadableId": "6", 15 | "Name": "Bloody diarrhea" 16 | }, 17 | { 18 | "Id": "B98231C8-2209-4472-87A6-46F927E6225F", 19 | "ReadableId": "4", 20 | "Name": "Ebola" 21 | } 22 | ] -------------------------------------------------------------------------------- /Source/Reporting/Events.Admin/Events.Admin.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/Reporting/Events.NotificationGateway/Events.NotificationGateway.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/Reporting/Events/Events.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | $(NoWarn);1591 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Source/Reporting/Reporting.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "." 5 | }, 6 | { 7 | "path": "../Infrastructure" 8 | } 9 | ], 10 | "settings": {} 11 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/browserslist: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # You can see what browsers were selected by your queries by running: 6 | # npx browserslist 7 | 8 | > 0.5% 9 | last 2 versions 10 | Firefox ESR 11 | not dead 12 | not IE 9-11 # For IE 9-11 support, remove 'not'. -------------------------------------------------------------------------------- /Source/Reporting/Web/hooks/pre_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | REPO_ROOT=../../.. 3 | source $REPO_ROOT/Build/docker_cloud/pre_push 4 | -------------------------------------------------------------------------------- /Source/Reporting/Web/nginx-default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location /datacollectors/ { 6 | alias /usr/share/nginx/html/; 7 | 8 | # Serve all files in the normal way 9 | location ~ \.[^/]*$ { 10 | } 11 | 12 | # Everything else goes to /index.html 13 | try_files '' /reporting/index.html; 14 | } 15 | 16 | error_page 500 502 503 504 /50x.html; 17 | location = /50x.html { 18 | root /usr/share/nginx/html; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/DataCollectors/details/details.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Reporting/Web/src/app/Management/DataCollectors/details/details.scss -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/DataCollectors/edit/edit.scss: -------------------------------------------------------------------------------- 1 | #dataCollectorLocation { 2 | height: 300px; 3 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/DataCollectors/export/export.scss: -------------------------------------------------------------------------------- 1 | form table { 2 | border-spacing: 1em; 3 | border-collapse: separate; 4 | } 5 | 6 | form table label { 7 | font-weight: normal; 8 | margin-bottom: 0; 9 | } 10 | 11 | form table input[type=radio] { 12 | margin-left: 0.5em; 13 | } 14 | 15 | form table tr { 16 | vertical-align: top; 17 | } 18 | 19 | form table.fieldTable { 20 | border-spacing: 0; 21 | } 22 | 23 | form table.fieldTable label { 24 | margin-right: 2em; 25 | } 26 | 27 | div.actions { 28 | text-align: right; 29 | } 30 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/DataCollectors/list/list.scss: -------------------------------------------------------------------------------- 1 | .header { 2 | h2 { 3 | display: inline-block; 4 | } 5 | 6 | a { 7 | float: right; 8 | display: inline-block; 9 | line-height: 63px; 10 | margin: 8px 4px; 11 | } 12 | } 13 | 14 | .alert-danger { 15 | padding: 10px; 16 | margin: 10px 0; 17 | } 18 | 19 | .action-cell { 20 | margin-right: 5px; 21 | cursor: pointer; 22 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/DataCollectors/register/register.scss: -------------------------------------------------------------------------------- 1 | agm-map { 2 | height: 300px; 3 | } 4 | .lat { 5 | margin-right: 10px; 6 | } 7 | .lng { 8 | margin-left: 10px; 9 | margin-right: 10px; 10 | } 11 | .map-container { 12 | margin-bottom: 15px; 13 | } 14 | #mapid { 15 | height: 300px; 16 | } 17 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/Language.ts: -------------------------------------------------------------------------------- 1 | export enum Language { 2 | English = 0, 3 | French 4 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/Location.ts: -------------------------------------------------------------------------------- 1 | export class Location { 2 | 3 | latitude: number; 4 | longitude: number; 5 | 6 | constructor() { 7 | this.latitude = -1; 8 | this.longitude = -1; 9 | } 10 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/Sex.ts: -------------------------------------------------------------------------------- 1 | export enum Sex { 2 | Male = 1, 3 | Female = 2 4 | }; -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Management/Tests/CreateDataCollectorTestData.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class CreateDataCollectorTestData extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = '8d7bc6a3-c8fb-487f-84f2-c133057074d9'; 12 | 13 | } 14 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Reporting/CaseReports/TestData/PopulateCaseReportTestData.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class PopulateCaseReportTestData extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = 'e2426d26-5715-48ec-97cf-2d64fac66643'; 12 | 13 | } 14 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Reporting/CaseReportsForListing/export/case-report-export.component.scss: -------------------------------------------------------------------------------- 1 | form { 2 | h3 { 3 | font-size: 2rem; 4 | } 5 | 6 | .format-options { 7 | margin: 1rem 0; 8 | } 9 | 10 | label { 11 | cursor: pointer; 12 | padding: 1rem; 13 | } 14 | } 15 | 16 | div.actions { 17 | text-align: right; 18 | } 19 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Reporting/CaseReportsForListing/sort/sortable-column.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{column.description}} 4 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/Reporting/HealthRisks/AllHealthRisks.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Query Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Query } from '@dolittle/queries'; 6 | 7 | export class AllHealthRisks extends Query 8 | { 9 | constructor() { 10 | super(); 11 | this.nameOfQuery = 'AllHealthRisks'; 12 | this.generatedFrom = 'Read.Reporting.HealthRisks.AllHealthRisks'; 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/TestData/CaseReports/PopulateCaseReportTestData.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * This file is an automatically generated Command Proxy 3 | * 4 | *--------------------------------------------------------------------------------------------*/ 5 | import { Command } from '@dolittle/commands'; 6 | 7 | export class PopulateCaseReportTestData extends Command 8 | { 9 | constructor() { 10 | super(); 11 | this.type = '79c674e6-6f04-476a-8608-1ddfcde8f702'; 12 | 13 | } 14 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'cbs-root', 5 | templateUrl: './app.component.html' 6 | }) 7 | export class AppComponent { 8 | title = 'cbs'; 9 | } 10 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/app/navigation/navbar-host.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/cbs/d8b6d66d08ddee9401bc01d2495848409ab535fb/Source/Reporting/Web/src/assets/.gitkeep -------------------------------------------------------------------------------- /Source/Reporting/Web/src/assets/bootstrap/_theme.scss: -------------------------------------------------------------------------------- 1 | th{ 2 | color: $table-header; 3 | background-color: $table-header-bg; 4 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | api: 'http://dev.cbsrc.org/reporting', 4 | appInsightsInstrumentationKey: 'ca4137d7-10b6-4f10-a75b-5b915d96fedb' 5 | }; 6 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/environments/environment.test.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: false, 3 | api: '/reporting', 4 | appInsightsInstrumentationKey: '36bdf7e0-884f-4391-8f08-11ebd48b9023' 5 | }; 6 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false, 8 | api: 'http://localhost:5003', 9 | appInsightsInstrumentationKey: '36bdf7e0-884f-4391-8f08-11ebd48b9023' 10 | }; 11 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/styles.scss: -------------------------------------------------------------------------------- 1 | @import 'assets/bootstrap/variables'; 2 | @import '../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap'; 3 | @import 'assets/bootstrap/theme'; 4 | 5 | form { // TODO: Style the user-form with properly scoped CSS 6 | max-width: 768px; 7 | margin: 0 auto; 8 | } 9 | 10 | .form-group { 11 | select, 12 | input { 13 | background-color: #fafafa; 14 | border: 1px solid #363534; 15 | border-radius: 0 ; 16 | } 17 | } 18 | 19 | .back-button { 20 | display: block; 21 | margin: 20px 0; 22 | } 23 | 24 | html { 25 | font-size: 16px; 26 | } -------------------------------------------------------------------------------- /Source/Reporting/Web/src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "types": [] 7 | }, 8 | "exclude": [ 9 | "test.ts", 10 | "**/*.spec.ts" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /Source/Reporting/Web/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | -------------------------------------------------------------------------------- /Source/Reporting/Web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "importHelpers": true, 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "moduleResolution": "node", 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "target": "es2015", 12 | "allowJs": true, 13 | "typeRoots": [ 14 | "node_modules/@types" 15 | ], 16 | "lib": [ 17 | "es2017", 18 | "dom" 19 | ], 20 | "module": "esnext", 21 | "baseUrl": "./" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/Reporting/bounded-context.json: -------------------------------------------------------------------------------- 1 | { 2 | "application": "fcb9885f-8b19-192e-be61-f966ee1c1640", 3 | "boundedContext": "da2a4710-06fa-8660-bf95-81dd95606f63", 4 | "boundedContextName": "Reporting", 5 | "resources": { 6 | "readModels": { 7 | "production": "MongoDB", 8 | "development": "MongoDB" 9 | }, 10 | "eventStore": { 11 | "production": "MongoDB", 12 | "development": "MongoDB" 13 | } 14 | }, 15 | "core": { 16 | "language": "csharp" 17 | }, 18 | "interaction": [] 19 | } -------------------------------------------------------------------------------- /Source/application.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "fcb9885f-8b19-192e-be61-f966ee1c1640", 3 | "name": "CBS" 4 | } 5 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 1.0 2 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "lockfileVersion": 1 3 | } 4 | --------------------------------------------------------------------------------