profile
viewpoint

Pull request review commentBahmni/bahmni-java-utils

BAH-1127|Buvaneswari|OpenElis not syncing with OpenMRS

 public HttpRequestDetails getRequestDetails(URI uri) {      @Override     public HttpRequestDetails refreshRequestDetails(URI uri) {-        DefaultHttpClient httpClient = new DefaultHttpClient();         try {+             CookieStore cookieStore = new BasicCookieStore();             HttpContext httpContext = new BasicHttpContext();-            httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);--            httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, authenticationDetails.getReadTimeout());-            httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, authenticationDetails.getConnectionTimeout());-+            httpContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);             HttpPost httpPost = new HttpPost(uri);              logger.info(String.format("Executing request: %s", httpPost.getRequestLine()));+            RequestConfig requestConfig = RequestConfig.custom()+                    .setConnectTimeout(authenticationDetails.getReadTimeout())+                    .setSocketTimeout(60000)

@buvaneswari-arun can we have constant defined here instead of hardcoding the value

buvaneswari-arun

comment created time in 41 minutes

Pull request review commentBahmni/default-config

BAH-1125 - Swati/Praveena - Hide 'Join teleconsultation' button on non-teleconsultation Appointments

 angular.module('bahmni.common.displaycontrol.custom')             var jitsiMeetingId = $scope.upcomingAppointmentsUUIDs[appointmentIndex];             appService.setTeleConsultationVars(jitsiMeetingId, true);         };+        $scope.showJoinTeleconsultationOption = function (appointmentIndex) {

Please refrain from hard-coding texts. 'Scheduled' - please pull it from config.

praveenadayanand

comment created time in 5 hours

Pull request review commentBahmni/bahmni-core

BAH-1127|Buvaneswari|openElis to OpenMRS sync

                 <version>${calculationModuleVersion}</version>                 <scope>test</scope>             </dependency>+

Agreed. Will remove this.

buvaneswari-arun

comment created time in 18 hours

Pull request review commentBahmni/bahmni-core

BAH-1127|Buvaneswari|openElis to OpenMRS sync

                 <version>${calculationModuleVersion}</version>                 <scope>test</scope>             </dependency>+

are these needed? jaxb are all XML schema and binding dependencies.

buvaneswari-arun

comment created time in 18 hours

Pull request review commentBahmni/bahmni-java-utils

BAH-1127|Buvaneswari|OpenElis not syncing with OpenMRS

 public HttpResponse get(HttpRequestDetails requestDetails) {     }      public HttpResponse get(HttpRequestDetails requestDetails, HttpHeaders httpHeaders) {-        defaultHttpClient = (connectionManager == null) ? new DefaultHttpClient() : new DefaultHttpClient(connectionManager);-        defaultHttpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, readTimeout);-        defaultHttpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectTimeout);          HttpGet httpGet = new HttpGet(requestDetails.getUri());+        RequestConfig requestConfig = RequestConfig.custom()+                .setConnectTimeout(readTimeout)+                .setSocketTimeout(connectTimeout)+                .build();+        if(connectionManager == null) {+            connectionManager = new PoolingHttpClientConnectionManager();+        }+        closeableHttpClient = HttpClientBuilder.create()

you could have done with try with resources block, then you would not have to handle the closing part. But if caller is calling the closeConnection() and you wouldn't want to refactor that - then its ok

buvaneswari-arun

comment created time in 18 hours

Pull request review commentBahmni/bahmni-java-utils

BAH-1127|Buvaneswari|OpenElis not syncing with OpenMRS

             <scope>test</scope>         </dependency>     </dependencies>+    <build>

is this required? the httpcomponents is mentioned as provided dependency anyway

buvaneswari-arun

comment created time in 18 hours

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha b505df23075ffbaf921d96964d9b0eb6eacf5b73

Vinisha, Supriya | MOBN-1579 | Add video concept to Video Upload section

view details

push time in 19 hours

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha 9fcf178a56c4e22590beebbba63b99a324574e02

Supriya, Vinisha, Tarun | MOBN-1575 | MOBN-1579 | Add set members to Form sections

view details

push time in a day

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha f9f375505e7bdb83200359fb4c8c1ed8172f52d3

Vinisha, Supriya | MOBN-1575 |MOBN-1579 | Add migrations to liquibase.xml

view details

push time in a day

issue openedBahmni/bahmni-playbooks

Successfully installed bahmni, but failed to install dcm4chee.

Use docker container (centos 7.6) and bahmni install command to deploy bahmni(0.92) successfully, and can access services such as Bahmni-EMR and Bahmni-LAB through the web. But cannot access http://172.17.0.2/dcm4chee-web3, because dcm4chee has not been installed correctly. Querying Bahmni Wiki: Advanced Installation Options did not find out how to install dcm4chee through bahmni install. Any help would be appreciated.

bahmni start:
PLAY [pacs-integration-db:pacs-integration-db-slave] ***************************
skipping: no hosts matched
 [WARNING]: Could not match supplied host pattern, ignoring: pacs-integration
PLAY [pacs-integration] ********************************************************
skipping: no hosts matched
PLAY [atomfeed-console] ********************************************************
META: ran handlers
META: ran handlers
META: ran handlers
 [WARNING]: Could not match supplied host pattern, ignoring: dcm4chee-db
 [WARNING]: Could not match supplied host pattern, ignoring: dcm4chee-db-slave
PLAY [dcm4chee-db,dcm4chee-db-slave] *******************************************
skipping: no hosts matched
 [WARNING]: Could not match supplied host pattern, ignoring: dcm4chee
PLAY [dcm4chee] ****************************************************************
skipping: no hosts matched
 [WARNING]: Could not match supplied host pattern, ignoring: bahmni-event-log-
service
PLAY [bahmni-event-log-service] ************************************************
skipping: no hosts matched

created time in 2 days

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha 26985eca206f818c2f56b38c2950ae85628dc9f9

Vinisha, Supriya | MOBN-1575 |MOBN-1579 | Add migrations to liquibase.xml

view details

push time in 3 days

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha db2b46c46446eb56b2151e562d1a1333f4f54aa4

Vinisha, Supriya | MOBN-1575 |MOBN-1579 | Add migrations to liquibase.xml

view details

push time in 3 days

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha 833e57122a30c861763316993da0957f046e3a4c

Vinisha, Supriya | MOBN-1575 | MOBN-1579 | Add mappings of child concepts to parent concepts and references to CEIL concepts for Network Physiotherapy form

view details

Supriya Muppiri

commit sha 7b869c18a75e0d70fbb958f5d85a39b5ac59be07

Vinisha, Supriya | MOBN-1575 | Change concept name to Network Physiotherapy

view details

push time in 3 days

Pull request review commentBahmni/default-config

BAH-1125 - Swati/Praveena - Hide 'Join teleconsultation' button on non-teleconsultation Appointments

 <h2 class="section-title" ng-click="goToListView()"><span style="border-bottom:                         {{detail}}                     </td>                     <td>-                        <button style="background: #669998; color: white;" ng-if="appointment.DASHBOARD_APPOINTMENTS_STATUS_KEY == 'Scheduled'" ng-click="openJitsiMeet($index)">+                        <button style="background: #669998; color: white;" ng-if="appointment.DASHBOARD_APPOINTMENTS_STATUS_KEY == 'Scheduled' && appointment.DASHBOARD_APPOINTMENTS_TELECONSULTATION == true" ng-click="openJitsiMeet($index)">

changes done

praveenadayanand

comment created time in 3 days

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha f8ee7b5cbb80a3d67aa3be5cfa62b2cb9e1cc549

Vinisha, Supriya | MOBN-1575 | MOBN-1579 | Add mappings of child concepts to parent concepts and references to CEIL concepts for Network Physiotherapy form

view details

push time in 3 days

push eventbahmni-msf/amman-config

Supriya Muppiri

commit sha 001a519dbd98fbf9a953edfca22c4d45736f2807

Vinisha,Supriya,Tarun | MOBN-1575 | Modify concept names to correct values.

view details

push time in 3 days

Pull request review commentBahmni/bahmni-offline-sync

BAh-1106 | Gopi,Shriram | Changes Related To Zipping of AddressHierarchy and OfflineConcepts

+package org.bahmni.module.bahmniOfflineSync.strategy;++import org.apache.commons.logging.Log;+import org.apache.commons.logging.LogFactory;+import org.bahmni.module.bahmniOfflineSync.eventLog.EventLog;+import org.bahmni.module.bahmniOfflineSync.utils.AddressHierarchyLevelWithLevelEntryName;+import org.bahmni.module.bahmniOfflineSync.utils.SelectiveSyncStrategyHelper;+import org.ict4h.atomfeed.server.domain.EventRecord;+import org.openmrs.*;+import org.openmrs.api.context.Context;+import org.openmrs.module.addresshierarchy.AddressHierarchyEntry;+import org.openmrs.module.addresshierarchy.AddressHierarchyLevel;+import org.openmrs.module.addresshierarchy.service.AddressHierarchyService;+import org.springframework.util.StringUtils;++import java.sql.SQLException;+import java.util.*;++public class SelectiveSyncStrategy extends AbstractOfflineSyncStrategy {+    private static final String ATTRIBUTE_TYPE_NAME = "addressCode";+    protected static Log log = LogFactory.getLog(SelectiveSyncStrategy.class);+    private static AddressHierarchyService addressHierarchyService = Context.getService(AddressHierarchyService.class);++    public SelectiveSyncStrategy() throws SQLException {+        super();++    }++    protected String evaluateFilterForPatient(String uuid) {+        String patientFilter = null;+        Patient patient = patientService.getPatientByUuid(uuid);++        if (patient != null && patient.getAttribute(ATTRIBUTE_TYPE_NAME) != null) {+            patientFilter = patient.getAttribute(ATTRIBUTE_TYPE_NAME).getValue();+        }++        return patientFilter;+    }++    private String evaluateFilterForEncounter(String uuid) {+        String filter = null;+        Encounter encounter = encounterService.getEncounterByUuid(uuid);+        if (encounter != null)+            filter = evaluateFilterForPatient(encounter.getPatient().getUuid());+        return filter;+    }++    private String evaluateFilterForAddressHierarchy(String uuid) {+        String addressHierarchyFilter = null;+        AddressHierarchyService addressHierarchyService = Context.getService(AddressHierarchyService.class);+        AddressHierarchyEntry addressHierarchyEntry = addressHierarchyService.getAddressHierarchyEntryByUuid(uuid);+        if (addressHierarchyEntry != null && addressHierarchyEntry.getLevel() != null && addressHierarchyEntry.getLevel().getId() > 3) {+            addressHierarchyFilter = addressHierarchyEntry.getUserGeneratedId();+        }+        return addressHierarchyFilter;+    }+++    public Map<String, List<String>> getFilterForDevice(String providerUuid, String addressUuid, String loginLocationUuid) {+        if(addressUuid.equals("null") || addressUuid.isEmpty()) {+            throw new RuntimeException("Please give address for this login location in openmrs");+        }+        Map<String, List<String>> categoryFilterMap = new HashMap();+        AddressHierarchyService addressHierarchyService = Context.getService(AddressHierarchyService.class);+        AddressHierarchyEntry addressHierarchyEntry = addressHierarchyService.getAddressHierarchyEntryByUuid(addressUuid);+        List transactionalDataFilters = getTransactionalDataFilters(loginLocationUuid, addressHierarchyService, addressHierarchyEntry);+        categoryFilterMap.put("patient", transactionalDataFilters);+        categoryFilterMap.put("encounter", transactionalDataFilters);+        categoryFilterMap.put("addressHierarchy", getFiltersForAddressHierarchy(addressHierarchyEntry));+        //categoryFilterMap.put("parentAddressHierarchy", new ArrayList<String>());+        categoryFilterMap.put("offline-concepts", new ArrayList<String>());+        categoryFilterMap.put("forms", new ArrayList<>());+        return categoryFilterMap;+    }++    private List getTransactionalDataFilters(String loginLocationUuid, AddressHierarchyService addressHierarchyService, AddressHierarchyEntry addressHierarchyEntry) {+        List transactionalDataFilters = new ArrayList();+        if (addressHierarchyEntry != null) {+            LocationAttributeType catchmentFiltersAttribute = locationService.getLocationAttributeTypeByName("catchmentFilters");+            String userGeneratedId = addressHierarchyEntry.getUserGeneratedId();+            LocationAttribute catchmentFilters = getCatchmentFilters(loginLocationUuid, catchmentFiltersAttribute);+            List<AddressHierarchyEntry> childAddressHierarchyEntries = addressHierarchyService.getChildAddressHierarchyEntries(addressHierarchyEntry);+            List<String> transactionalFilters = getCatchmentIds(catchmentFilters, childAddressHierarchyEntries, addressHierarchyService, addressHierarchyEntry);+            transactionalDataFilters.add(userGeneratedId);+            transactionalDataFilters.addAll(transactionalFilters);+        }+        return transactionalDataFilters;+    }++    private LocationAttribute getCatchmentFilters(String loginLocationUuid, LocationAttributeType catchmentFiltersAttribute) {+        Location location = locationService.getLocationByUuid(loginLocationUuid);+        List<LocationAttribute> attributes = (List<LocationAttribute>) location.getActiveAttributes();+        for (LocationAttribute attribute : attributes) {+            if (attribute.getAttributeType().equals(catchmentFiltersAttribute)) {+                return attribute;+            }+        }+        return null;+    }++    private List<String> getCatchmentIds(LocationAttribute catchmentFilters, List<AddressHierarchyEntry> childAddressHierarchyEntries, AddressHierarchyService addressHierarchyService, AddressHierarchyEntry addressHierarchyEntry) {+        List<String> wardIDs = new ArrayList();+        if (catchmentFilters != null) {+            String wardsName = trim(catchmentFilters.getValue().toString());+            Set<String> wardsNameList = StringUtils.commaDelimitedListToSet(wardsName);+            for (String wardName : wardsNameList) {+                AddressHierarchyEntry childAddressHierarchyEntry = addressHierarchyService.getChildAddressHierarchyEntryByName(addressHierarchyEntry, wardName);+                if (childAddressHierarchyEntry == null) {+                    throw new RuntimeException("Please check your catchmentFilters configuration in openmrs!!");+                } else {+                    getAllWardIds(childAddressHierarchyEntry, addressHierarchyService, wardIDs);+                }+            }+        } else {+            updateWardIds(addressHierarchyService, wardIDs, childAddressHierarchyEntries);+        }+        return wardIDs;+    }++    private void getAllWardIds(AddressHierarchyEntry addressHierarchyEntry, AddressHierarchyService addressHierarchyService, List<String> wardIDs) {+        if (addressHierarchyEntry == null) {+            return;+        }+        wardIDs.add(addressHierarchyEntry.getUserGeneratedId());+        List<AddressHierarchyEntry> childAddressHierarchyEntries = addressHierarchyService.getChildAddressHierarchyEntries(addressHierarchyEntry);+        updateWardIds(addressHierarchyService, wardIDs, childAddressHierarchyEntries);+    }++    private void updateWardIds(AddressHierarchyService addressHierarchyService, List<String> wardIDs, List<AddressHierarchyEntry> childAddressHierarchyEntries) {+        for (AddressHierarchyEntry childAddressHierarchyEntry : childAddressHierarchyEntries) {+            getAllWardIds(childAddressHierarchyEntry, addressHierarchyService, wardIDs);+        }+    }++    private String trim(String content) {+        content = content.trim();+        return content.replaceAll("(\\s*,\\s*)", ",");+    }++    @Override+    public List<String> getEventCategoriesList() {+        List<String> eventCategoryList = new ArrayList();++        eventCategoryList.add("patient");+        eventCategoryList.add("encounter");+        eventCategoryList.add("addressHierarchy");+        eventCategoryList.add("parentAddressHierarchy");+        eventCategoryList.add("offline-concepts");+        eventCategoryList.add("forms");++        return eventCategoryList;+    }++++    private List<String> getFiltersForAddressHierarchy(AddressHierarchyEntry addressHierarchyEntry) {+        List addressHierarchyFilters = new ArrayList();+        while (addressHierarchyEntry.getParent() != null) {+            if (addressHierarchyEntry.getUserGeneratedId().length() == 6) {+                addressHierarchyFilters.add(addressHierarchyEntry.getUserGeneratedId());+                break;+            }+            addressHierarchyEntry = addressHierarchyEntry.getParent();+        }+        return addressHierarchyFilters;+    }++    @Override+    public List<EventLog> getEventLogsFromEventRecords(List<EventRecord> eventRecords) {+        List<EventLog> eventLogs = new ArrayList<EventLog>();++        for (EventRecord er : eventRecords) {+            EventLog eventLog = new EventLog(er.getUuid(),er.getCategory(),er.getTimeStamp(),er.getContents(), null, er.getUuid());+            String category = er.getCategory();+            String uuid = getUuidFromURL(er.getContents());+            String filter = null;++            if (!uuid.isEmpty()) {+                if (category.equalsIgnoreCase("all-concepts")) {+                    if (isOfflineConceptEvent(uuid)) {+                        eventLog.setCategory("offline-concepts");+                    } else {+                        eventLog.setCategory("concepts");+                    }+                }++                if (category.equalsIgnoreCase("Patient")|| category.equalsIgnoreCase("LabOrderResults")) {+                   // filter = evaluateFilterForPatient(uuid);

Removed comments @binduak

gopikrishna-yaramothu

comment created time in 3 days

Pull request review commentBahmni/bahmni-connect

BAH 1109, BAH 1106 | Shriram , Gopi , Rakesh , Aakash , Som | Zipping and importing AddressHierarchy & OfflineConcepts Data in BahmniConnect & Selective Sync Strategy

 'use strict';  angular.module('bahmni.home')-    .controller('DashboardController', ['$scope', '$state', 'appService', 'locationService', 'spinner', '$bahmniCookieStore', '$window', '$q', 'offlineService', 'schedulerService', 'eventQueue', 'offlineDbService', 'androidDbService', 'networkStatusService', 'messagingService', '$translate',-        function ($scope, $state, appService, locationService, spinner, $bahmniCookieStore, $window, $q, offlineService, schedulerService, eventQueue, offlineDbService, androidDbService, networkStatusService, messagingService, $translate) {+    .controller('DashboardController', ['$scope', '$state', 'appService', 'locationService', 'spinner', '$bahmniCookieStore', '$window', '$q', 'offlineService', 'schedulerService', 'eventQueue', 'offlineDbService', 'androidDbService', 'networkStatusService', 'messagingService', '$translate', '$http',+        function ($scope, $state, appService, locationService, spinner, $bahmniCookieStore, $window, $q, offlineService, schedulerService, eventQueue, offlineDbService, androidDbService, networkStatusService, messagingService, $translate, $http) {             $scope.appExtensions = appService.getAppDescriptor().getExtensions($state.current.data.extensionPointId, "link") || [];             $scope.selectedLocationUuid = {};             $scope.isOfflineApp = offlineService.isOfflineApp();             $scope.isPWAapp = offlineService.isChromeApp();+            $scope.isSelectiveSyncStrategy = false;++            var verifySelectiveSync = function () {+                $http.get('/openmrs/ws/rest/v1/eventlog/filter/globalProperty/', {+                    method: "GET",+                    params: { q: 'bahmniOfflineSync.strategy' },

We didn't have any service that will do the needful Bindu. if it's better to use service we will create a new service . please suggest us .

gopikrishna-yaramothu

comment created time in 3 days

pull request commentBahmni/bahmni-connect

BAH 1109, BAH 1106 | Shriram , Gopi , Rakesh , Aakash , Som | Zipping and importing AddressHierarchy & OfflineConcepts Data in BahmniConnect & Selective Sync Strategy

@gopikrishna-yaramothu the below files doesn't have any new test cases added selectiveSyncService.js , selectiveSchedulerService.js

gopikrishna-yaramothu

comment created time in 3 days

Pull request review commentBahmni/bahmni-connect

BAH 1109, BAH 1106 | Shriram , Gopi , Rakesh , Aakash , Som | Zipping and importing AddressHierarchy & OfflineConcepts Data in BahmniConnect & Selective Sync Strategy

 'use strict';  angular.module('bahmni.registration')-    .controller('NavigationController', ['$scope', '$rootScope', '$location', 'sessionService', '$window', 'appService', '$sce', 'offlineService', 'schedulerService',-        function ($scope, $rootScope, $location, sessionService, $window, appService, $sce, offlineService, schedulerService) {+    .controller('NavigationController', ['$scope', '$rootScope', '$location', 'sessionService', '$window', 'appService', '$sce', 'offlineService', 'schedulerService', '$http',+        function ($scope, $rootScope, $location, sessionService, $window, appService, $sce, offlineService, schedulerService, $http) {             $scope.extensions = appService.getAppDescriptor().getExtensions("org.bahmni.registration.navigation", "link");             $scope.isOfflineApp = offlineService.isOfflineApp();+            $scope.isSelectiveSyncStrategy = false;++            var verifySelectiveSync = function () {+                $http.get('/openmrs/ws/rest/v1/eventlog/filter/globalProperty/', {+                    method: "GET",+                    params: { q: 'bahmniOfflineSync.strategy' },

@gopikrishna-yaramothu same as mentioned above

gopikrishna-yaramothu

comment created time in 3 days

Pull request review commentBahmni/bahmni-connect

BAH 1109, BAH 1106 | Shriram , Gopi , Rakesh , Aakash , Som | Zipping and importing AddressHierarchy & OfflineConcepts Data in BahmniConnect & Selective Sync Strategy

 'use strict';  angular.module('bahmni.home')-    .controller('DashboardController', ['$scope', '$state', 'appService', 'locationService', 'spinner', '$bahmniCookieStore', '$window', '$q', 'offlineService', 'schedulerService', 'eventQueue', 'offlineDbService', 'androidDbService', 'networkStatusService', 'messagingService', '$translate',-        function ($scope, $state, appService, locationService, spinner, $bahmniCookieStore, $window, $q, offlineService, schedulerService, eventQueue, offlineDbService, androidDbService, networkStatusService, messagingService, $translate) {+    .controller('DashboardController', ['$scope', '$state', 'appService', 'locationService', 'spinner', '$bahmniCookieStore', '$window', '$q', 'offlineService', 'schedulerService', 'eventQueue', 'offlineDbService', 'androidDbService', 'networkStatusService', 'messagingService', '$translate', '$http',+        function ($scope, $state, appService, locationService, spinner, $bahmniCookieStore, $window, $q, offlineService, schedulerService, eventQueue, offlineDbService, androidDbService, networkStatusService, messagingService, $translate, $http) {             $scope.appExtensions = appService.getAppDescriptor().getExtensions($state.current.data.extensionPointId, "link") || [];             $scope.selectedLocationUuid = {};             $scope.isOfflineApp = offlineService.isOfflineApp();             $scope.isPWAapp = offlineService.isChromeApp();+            $scope.isSelectiveSyncStrategy = false;++            var verifySelectiveSync = function () {+                $http.get('/openmrs/ws/rest/v1/eventlog/filter/globalProperty/', {+                    method: "GET",+                    params: { q: 'bahmniOfflineSync.strategy' },

this shouldn't be part of controller. Do we have any service that it talks to. If yes, we can move the code to the service file @gopikrishna-yaramothu

gopikrishna-yaramothu

comment created time in 3 days

Pull request review commentBahmni/bahmni-offline-sync

BAh-1106 | Gopi,Shriram | Changes Related To Zipping of AddressHierarchy and OfflineConcepts

+package org.bahmni.module.bahmniOfflineSync.strategy;++import org.apache.commons.logging.Log;+import org.apache.commons.logging.LogFactory;+import org.bahmni.module.bahmniOfflineSync.eventLog.EventLog;+import org.bahmni.module.bahmniOfflineSync.utils.AddressHierarchyLevelWithLevelEntryName;+import org.bahmni.module.bahmniOfflineSync.utils.SelectiveSyncStrategyHelper;+import org.ict4h.atomfeed.server.domain.EventRecord;+import org.openmrs.*;+import org.openmrs.api.context.Context;+import org.openmrs.module.addresshierarchy.AddressHierarchyEntry;+import org.openmrs.module.addresshierarchy.AddressHierarchyLevel;+import org.openmrs.module.addresshierarchy.service.AddressHierarchyService;+import org.springframework.util.StringUtils;++import java.sql.SQLException;+import java.util.*;++public class SelectiveSyncStrategy extends AbstractOfflineSyncStrategy {+    private static final String ATTRIBUTE_TYPE_NAME = "addressCode";+    protected static Log log = LogFactory.getLog(SelectiveSyncStrategy.class);+    private static AddressHierarchyService addressHierarchyService = Context.getService(AddressHierarchyService.class);++    public SelectiveSyncStrategy() throws SQLException {+        super();++    }++    protected String evaluateFilterForPatient(String uuid) {+        String patientFilter = null;+        Patient patient = patientService.getPatientByUuid(uuid);++        if (patient != null && patient.getAttribute(ATTRIBUTE_TYPE_NAME) != null) {+            patientFilter = patient.getAttribute(ATTRIBUTE_TYPE_NAME).getValue();+        }++        return patientFilter;+    }++    private String evaluateFilterForEncounter(String uuid) {+        String filter = null;+        Encounter encounter = encounterService.getEncounterByUuid(uuid);+        if (encounter != null)+            filter = evaluateFilterForPatient(encounter.getPatient().getUuid());+        return filter;+    }++    private String evaluateFilterForAddressHierarchy(String uuid) {+        String addressHierarchyFilter = null;+        AddressHierarchyService addressHierarchyService = Context.getService(AddressHierarchyService.class);+        AddressHierarchyEntry addressHierarchyEntry = addressHierarchyService.getAddressHierarchyEntryByUuid(uuid);+        if (addressHierarchyEntry != null && addressHierarchyEntry.getLevel() != null && addressHierarchyEntry.getLevel().getId() > 3) {+            addressHierarchyFilter = addressHierarchyEntry.getUserGeneratedId();+        }+        return addressHierarchyFilter;+    }+++    public Map<String, List<String>> getFilterForDevice(String providerUuid, String addressUuid, String loginLocationUuid) {+        if(addressUuid.equals("null") || addressUuid.isEmpty()) {+            throw new RuntimeException("Please give address for this login location in openmrs");+        }+        Map<String, List<String>> categoryFilterMap = new HashMap();+        AddressHierarchyService addressHierarchyService = Context.getService(AddressHierarchyService.class);+        AddressHierarchyEntry addressHierarchyEntry = addressHierarchyService.getAddressHierarchyEntryByUuid(addressUuid);+        List transactionalDataFilters = getTransactionalDataFilters(loginLocationUuid, addressHierarchyService, addressHierarchyEntry);+        categoryFilterMap.put("patient", transactionalDataFilters);+        categoryFilterMap.put("encounter", transactionalDataFilters);+        categoryFilterMap.put("addressHierarchy", getFiltersForAddressHierarchy(addressHierarchyEntry));+        //categoryFilterMap.put("parentAddressHierarchy", new ArrayList<String>());+        categoryFilterMap.put("offline-concepts", new ArrayList<String>());+        categoryFilterMap.put("forms", new ArrayList<>());+        return categoryFilterMap;+    }++    private List getTransactionalDataFilters(String loginLocationUuid, AddressHierarchyService addressHierarchyService, AddressHierarchyEntry addressHierarchyEntry) {+        List transactionalDataFilters = new ArrayList();+        if (addressHierarchyEntry != null) {+            LocationAttributeType catchmentFiltersAttribute = locationService.getLocationAttributeTypeByName("catchmentFilters");+            String userGeneratedId = addressHierarchyEntry.getUserGeneratedId();+            LocationAttribute catchmentFilters = getCatchmentFilters(loginLocationUuid, catchmentFiltersAttribute);+            List<AddressHierarchyEntry> childAddressHierarchyEntries = addressHierarchyService.getChildAddressHierarchyEntries(addressHierarchyEntry);+            List<String> transactionalFilters = getCatchmentIds(catchmentFilters, childAddressHierarchyEntries, addressHierarchyService, addressHierarchyEntry);+            transactionalDataFilters.add(userGeneratedId);+            transactionalDataFilters.addAll(transactionalFilters);+        }+        return transactionalDataFilters;+    }++    private LocationAttribute getCatchmentFilters(String loginLocationUuid, LocationAttributeType catchmentFiltersAttribute) {+        Location location = locationService.getLocationByUuid(loginLocationUuid);+        List<LocationAttribute> attributes = (List<LocationAttribute>) location.getActiveAttributes();+        for (LocationAttribute attribute : attributes) {+            if (attribute.getAttributeType().equals(catchmentFiltersAttribute)) {+                return attribute;+            }+        }+        return null;+    }++    private List<String> getCatchmentIds(LocationAttribute catchmentFilters, List<AddressHierarchyEntry> childAddressHierarchyEntries, AddressHierarchyService addressHierarchyService, AddressHierarchyEntry addressHierarchyEntry) {+        List<String> wardIDs = new ArrayList();+        if (catchmentFilters != null) {+            String wardsName = trim(catchmentFilters.getValue().toString());+            Set<String> wardsNameList = StringUtils.commaDelimitedListToSet(wardsName);+            for (String wardName : wardsNameList) {+                AddressHierarchyEntry childAddressHierarchyEntry = addressHierarchyService.getChildAddressHierarchyEntryByName(addressHierarchyEntry, wardName);+                if (childAddressHierarchyEntry == null) {+                    throw new RuntimeException("Please check your catchmentFilters configuration in openmrs!!");+                } else {+                    getAllWardIds(childAddressHierarchyEntry, addressHierarchyService, wardIDs);+                }+            }+        } else {+            updateWardIds(addressHierarchyService, wardIDs, childAddressHierarchyEntries);+        }+        return wardIDs;+    }++    private void getAllWardIds(AddressHierarchyEntry addressHierarchyEntry, AddressHierarchyService addressHierarchyService, List<String> wardIDs) {+        if (addressHierarchyEntry == null) {+            return;+        }+        wardIDs.add(addressHierarchyEntry.getUserGeneratedId());+        List<AddressHierarchyEntry> childAddressHierarchyEntries = addressHierarchyService.getChildAddressHierarchyEntries(addressHierarchyEntry);+        updateWardIds(addressHierarchyService, wardIDs, childAddressHierarchyEntries);+    }++    private void updateWardIds(AddressHierarchyService addressHierarchyService, List<String> wardIDs, List<AddressHierarchyEntry> childAddressHierarchyEntries) {+        for (AddressHierarchyEntry childAddressHierarchyEntry : childAddressHierarchyEntries) {+            getAllWardIds(childAddressHierarchyEntry, addressHierarchyService, wardIDs);+        }+    }++    private String trim(String content) {+        content = content.trim();+        return content.replaceAll("(\\s*,\\s*)", ",");+    }++    @Override+    public List<String> getEventCategoriesList() {+        List<String> eventCategoryList = new ArrayList();++        eventCategoryList.add("patient");+        eventCategoryList.add("encounter");+        eventCategoryList.add("addressHierarchy");+        eventCategoryList.add("parentAddressHierarchy");+        eventCategoryList.add("offline-concepts");+        eventCategoryList.add("forms");++        return eventCategoryList;+    }++++    private List<String> getFiltersForAddressHierarchy(AddressHierarchyEntry addressHierarchyEntry) {+        List addressHierarchyFilters = new ArrayList();+        while (addressHierarchyEntry.getParent() != null) {+            if (addressHierarchyEntry.getUserGeneratedId().length() == 6) {+                addressHierarchyFilters.add(addressHierarchyEntry.getUserGeneratedId());+                break;+            }+            addressHierarchyEntry = addressHierarchyEntry.getParent();+        }+        return addressHierarchyFilters;+    }++    @Override+    public List<EventLog> getEventLogsFromEventRecords(List<EventRecord> eventRecords) {+        List<EventLog> eventLogs = new ArrayList<EventLog>();++        for (EventRecord er : eventRecords) {+            EventLog eventLog = new EventLog(er.getUuid(),er.getCategory(),er.getTimeStamp(),er.getContents(), null, er.getUuid());+            String category = er.getCategory();+            String uuid = getUuidFromURL(er.getContents());+            String filter = null;++            if (!uuid.isEmpty()) {+                if (category.equalsIgnoreCase("all-concepts")) {+                    if (isOfflineConceptEvent(uuid)) {+                        eventLog.setCategory("offline-concepts");+                    } else {+                        eventLog.setCategory("concepts");+                    }+                }++                if (category.equalsIgnoreCase("Patient")|| category.equalsIgnoreCase("LabOrderResults")) {+                   // filter = evaluateFilterForPatient(uuid);

@gopikrishna-yaramothu not realised before.. i see comments here too. are these required here ?

gopikrishna-yaramothu

comment created time in 3 days

push eventbahmni-msf/amman-config

tarunkumar-tw

commit sha 6b8b481591ff7688836946e7fb11e1a39c8308a5

Tarun | MOBN-1573 | Add caretaker program

view details

tarunkumar-tw

commit sha 9e62b1d9327a8532d6ca64e4eaec1ddb6e7c9df7

Merge pull request #6 from bahmni-msf/MOBN-1573 Tarun | MOBN-1573 | Add caretaker program

view details

push time in 6 days

create barnchbahmni-msf/amman-config

branch : MOBN-1573

created branch time in 6 days

create barnchbahmni-msf/amman-config

branch : MOBN-1575

created branch time in 6 days

PR opened Bahmni/form-controls

Supriya, Tarun | BAH-1132 | MOBN-1188 | Fix issues with complex concepts when addMore is enabled
  • Tarun,Supriya | MOBN-1188 | Fix issues with complex concepts when addMore is enabled

  • Supriya, Tarun | MOBN-1188 | Fix unit tests

  • Supriya, Tarun | MOBN-1188 | Fix issues for complex concepts with addMore enabled

  • Supriya, Tarun | MOBN-1188 | Fix issues for complex concepts with addMore enabled

  • Supriya, Tarun | MOBN-1188 | Add unit tests for canAddNextFormFieldPath Co-authored-by: Supriya Muppiri supriya.muppiri@thoughtworks.com

https://bahmni.atlassian.net/browse/BAH-1132

+83 -2

0 comment

2 changed files

pr created time in 7 days

PR opened Bahmni/form-controls

Supriya, Vinisha | BAH-1131 | MOBN-1559 | Add step attribute to numeric input field
  • Supriya, Vinisha | MOBN-1559 | Add step attribute to numeric input field

  • Supriya, Vinisha | MOBN-1559 | Bump up version to 0.93.1

https://bahmni.atlassian.net/browse/BAH-1131

+4 -4

0 comment

2 changed files

pr created time in 7 days

more