profile
viewpoint
Dharmender Srivastav kumarvastav

kumarvastav/caapybara-spinach-rspec-example 0

This repository comes with a sample feature implementations using Spinach as BDD framework, rspec for expectations/assertion library and Capybara as webdriver (wrapper on Selenium).

kumarvastav/jarvis 0

Simple program to listen and respond with defined questions n answers

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 an hour

delete branch beekpr/beekeeper-gradle-plugins

delete branch : dependabot/gradle/org.owasp-dependency-check-gradle-6.0.5

delete time in 2 hours

PR closed beekpr/beekeeper-gradle-plugins

Bump dependency-check-gradle from 5.3.2.1 to 6.0.5 dependencies

Bumps dependency-check-gradle from 5.3.2.1 to 6.0.5.

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+1 -1

1 comment

1 changed file

dependabot-preview[bot]

pr closed time in 2 hours

pull request commentbeekpr/beekeeper-gradle-plugins

Bump dependency-check-gradle from 5.3.2.1 to 6.0.5

Superseded by #143.

dependabot-preview[bot]

comment created time in 2 hours

PR opened beekpr/beekeeper-gradle-plugins

Bump dependency-check-gradle from 5.3.2.1 to 6.1.0

Bumps dependency-check-gradle from 5.3.2.1 to 6.1.0.

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+1 -1

0 comment

1 changed file

pr created time in 2 hours

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 6 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 19 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 19 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 19 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

more