profile
viewpoint

ShruthiPitta/AndroidBootCamp 0

TW android boot camp

ShruthiPitta/ngDialog 0

Modals and popups provider for Angular.js applications

ShruthiPitta/openmrs-core 0

OpenMRS API and web application code

ShruthiPitta/openmrs-module-bahmniapps 0

Angular.JS based UI application that is used by Clinicians and Patient care providers.

ShruthiPitta/openmrs-module-emrapi 0

Higher-level APIs to support building EMR functionality in OpenMRS, to supplement the data-level APIs in the OpenMRS core.

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 44 minutes

push eventBahmni/openmrs-module-appointments

Himabindu Thungathurty

commit sha 0db57629bacc8e97991e1c328aeb938d074f6b29

Bindu | BAH-1136 | Change query to get provider from patient appointment provider table

view details

buvaneswari-arun

commit sha 1bdd81cb23abfa2462d4298df8939d9d68bd6f19

Merge pull request #52 from Bahmni/BAH-1136 Bindu | BAH-1136 | Change query to get provider from patient appointment provider table

view details

push time in 4 hours

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

create barnchBahmni/openmrs-module-appointments

branch : BAH-1136

created branch 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

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

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

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

push eventBahmni/openmrs-module-appointments

Dimitri R

commit sha c5c09c29a5efc3a34fed2a4e43fd17b92ba90278

BAH-1133: Setting up time zone sensitive tests, adjusting GitHub Actions. (#51) * BAH-1133: Setting up time zone sensitive tests, adjusting GitHub Actions. * BAH-1133: setAppointments_shouldThrowWhenFrequecyIsDecreasedSuchThatEndDateIsInPast to run on IST. * BAH-1133: Removed already simplified shouldThrowExceptionWhenFrequecyIsDecreasedSuchThatEndateIsInPast. * BAH-1133: Simplifying further setAppointments_shouldThrowWhenFrequecyIsDecreasedSuchThatEndDateIsInPast.

view details

push time in 3 days

PR merged Bahmni/openmrs-module-appointments

Reviewers
BAH-1133: Setting up time zone sensitive tests, adjusting GitHub Actions.

Ticket

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

+77 -90

0 comment

5 changed files

mks-d

pr closed time in 3 days

Pull request review commentBahmni/openmrs-module-appointments

BAH-1133: Setting up time zone sensitive tests, adjusting GitHub Actions.

 public void shouldReturnEndOfDay() {      @Test     public void shouldConvertDateToMilliSeconds() throws ParseException {+    	TimeZone.setDefault(TimeZone.getTimeZone("IST"));

my bad...i missed going through the card before having a look at PR. Totally makes sense

mks-d

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

Pull request review commentBahmni/openmrs-module-appointments

BAH-1133: Setting up time zone sensitive tests, adjusting GitHub Actions.

 public void shouldReturnEndOfDay() {      @Test     public void shouldConvertDateToMilliSeconds() throws ParseException {+    	TimeZone.setDefault(TimeZone.getTimeZone("IST"));

@binduak it is not ok to have Maven builds that are time zone dependent. The whole point of this ticket is to get rid of that situation.

Devs, when writing test cases that are time zone dependent, should be aware of it and should explicitly make this part of their test setups.

mks-d

comment created time in 6 days

Pull request review commentBahmni/openmrs-module-appointments

BAH-1133: Setting up time zone sensitive tests, adjusting GitHub Actions.

 public void shouldReturnEndOfDay() {      @Test     public void shouldConvertDateToMilliSeconds() throws ParseException {+    	TimeZone.setDefault(TimeZone.getTimeZone("IST"));

@mks-d we can have this timezone configuration as part of the mvn build command ?

mks-d

comment created time in 6 days

PR opened Bahmni/openmrs-module-appointments

Reviewers
BAH-1133: Setting up time zone sensitive tests, adjusting GitHub Actions.

Ticket

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

+37 -33

0 comment

4 changed files

pr created 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

PR opened Bahmni/form-controls

Bindu, Tarun | BAH-1017 | MOBN-1551 | Save event not working in Preview Tab
  • Bindu, Tarun | MOBN-1551 | added callback method to get the container data object

  • Bindu, Tarun | MOBN-1551 | Refactor code and fix unit tests

  • Bindu, Tarun | MOBN-1551 | Bump up form-controls version to 0.93.3

Co-authored-by: tarunkumar-tw tarunkumar.s@thoughtworks.com

+14 -1

0 comment

1 changed file

pr created time in 7 days

push eventBahmni/openmrs-module-appointments-frontend

binduak

commit sha 1a4a9ef4c2f4e5497709216c9e4f5c3f076400e4

Vineela, Bindu, Kirity| AP-74 | Duplicate appointments created when trying to create a single appointment

view details

venkatavineela

commit sha 39f1af945f9e92f162401d5d5e48a58af1b19b19

Vineela | AP-69 | Add date and week picker and navigator

view details

venkatavineela

commit sha 652d55a66a5d0527fc8c468a4a325072cb292faa

Supriya, Tarun, Vineela | AP-69 | Fix test cases and css

view details

binduak

commit sha 3e65b22ae6bf95488ab1053954f05381ecb6a3b6

Bindu | AP-75 | Add gradle files to build rpm for appointments-frontend

view details

binduak

commit sha 4e731ffd33e45502248d2b5b9dce33b92eec9cd9

Bindu | AP-75 | Adding executable permissions to gradlew file

view details

buvaneswari-arun

commit sha 27def50dba5010760823f1c0d83731a1713b5814

Merge pull request #133 from bahmni-msf/AP-74 Vineela, Bindu, Kirity| AP-74 | Duplicate appointments created when trying to create a single appointment

view details

buvaneswari-arun

commit sha 6e387da3ba7aa5a2b2232fa37a70f880a14a046e

Merge pull request #147 from Bahmni/AP-75 Bindu | AP-75 | Build an rpm to build bahmni-appointments-frontend code to deploy in the bahmni instance

view details

praveenadayanand

commit sha 44a872733414d800d15049a16f61771be344b930

BAH-1093 : Tele-consultation feature merge (#149) * Gracil/Hamza | Add 'Add Teleconsultation' button to the appointment plan component * CON-19 | Gracil - Added Join Teleconsultation button on the appointment popup * [Kaleeaswari] Deploying app to the environment * [Kaleeaswari] Deploying app to the environment - specifying correct project name * [Kaleeaswari] Deploying app to the environment - moving dist to appropriate folder * [Kaleeaswari] Deploying app to the environment - moving dist to appropriate folder * [Kaleeaswari] Deploying app to the environment - Extracting test to separate task * SM, DL: templated/standardised octo CLI commands * Temporary test to see if changes are reflected in app on env * Revert temp test * [vishal] add rename isTeleconsulationEnabled to teleconslutation * Zafar/Natheesh | #40, Added teleconsulting in list view. Co-authored-by: Natheeshkumar <natheeshece@gmail.com> * Zafar/Natheesh | #40, Fixed join teleconsultation visibility Co-authored-by: Natheeshkumar <natheeshece@gmail.com> * Zafar/Natheesh | #97, Added copy link button in list-view Co-authored-by: Natheeshkumar <natheeshece@gmail.com> * Zafar/Natheesh | #97, Added copy link button in calender-view Co-authored-by: Natheeshkumar <natheeshece@gmail.com> * Zafar/Natheesh | #97, Added title for copy link button. Co-authored-by: Natheeshkumar <natheeshece@gmail.com> * Zafar/Natheesh | #97, Refactored class name and padding for copy-clip button Co-authored-by: Natheeshkumar <natheeshece@gmail.com> * WIP Appointment UI - Separate field for Teleconsultation - pairing with @Ana Karolina * Appointment UI - Separate field for Teleconsultation - Clean up code - pairing with Ana Karolina * Appointment UI - Separate field for Teleconsultation - Clean up code - Pairing with Ana Karolina * Fix Appointment Type not appearing when editing existing appointment * Open Patient summary when clicking Join Teleconsultation * Natheesh/Monica | #112 Fixed check/uncheck Teleconsultiation checkbox Signed-off-by: Natheeshkumar <natheeshkumar.r@thoughtworks.com> * Natheesh/Monica | #112 Fixed the SQL Exception Signed-off-by: natheeshsunway <natheeshece@gmail.com> Co-authored-by: monicarajendran <monicarajendran96@gmail.com> * Natheesh/Monica | #119 Added Email warning message on saving appointment Co-authored-by: monicarajendran <monicarajendran96@gmail.com> Signed-off-by: natheeshsunway <natheeshece@gmail.com> * Natheesh/Monica | #119 Refactored Email warning message showing based on teleconsultation Co-authored-by: monicarajendran <monicarajendran96@gmail.com> Signed-off-by: natheeshsunway <natheeshece@gmail.com> * make join teleconsult button enable for only scheduled meetings * Removed usage of "::set_env" from github actions * Praveena/Swati : navigation control fix * Resolve review comments * remove https from constants * Praveena | Removed github actions before merging to Bahmni product * swati|praveena: Implementation of review comments * make CopyLink internationalisation Co-authored-by: kaleeaswari <skaleeas@thoughtworks.com> Co-authored-by: Steve M <smorris@thoughtworks.com> Co-authored-by: Deedee <deedee> Co-authored-by: Zafar <momin.zafaraabid@thoughtworks.com> Co-authored-by: Natheeshkumar <natheeshece@gmail.com> Co-authored-by: Carlos Rigo <carlos.rigocano@thoughtworks.com> Co-authored-by: Natheeshkumar <natheeshkumar.r@thoughtworks.com> Co-authored-by: monicarajendran <monicarajendran96@gmail.com> Co-authored-by: Mahesh Ippili <maheshippili@Maheshs-MacBook-Pro.local> Co-authored-by: swatigogia2020 <swati.gogia@thoughtworks.com>

view details

Pedro Sousa - ICRC

commit sha 0b64050168d2cfebd1162b335c78dc37f4003173

BAH-1123: Patient ID as configurable hyperlink on Appointments List View (#152) * Patient ID as configurable hyperlink on Appointments List View * Open patient dashboard on new window * Reviewed configurable patient link to use alias substitution * Bump version from 0.0.2 to 0.0.3 * Updated patient link URL

view details

dependabot[bot]

commit sha 2f3ebfa281e6ec2bce0a2c4dd0a6a1c4f1a88f2c

Bump angular from 1.5.7 to 1.8.0 Bumps [angular](https://github.com/angular/angular.js) from 1.5.7 to 1.8.0. - [Release notes](https://github.com/angular/angular.js/releases) - [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md) - [Commits](https://github.com/angular/angular.js/compare/v1.5.7...v1.8.0) Signed-off-by: dependabot[bot] <support@github.com>

view details

push time in 7 days

more