Skip to content

Commit a4c4c85

Browse files
siddh1004Siddharth Agarwal
andauthored
Androapp 5724 remove organization unit in tei event ds card if user only has access to one org unit (#3459)
* add logic to show organisation unit organisation unit in TEI list, DataSet and tracker program list will only be shown when user has access to more than one organisation unit. * fix lint error * move `displayOrgUnitName` logic to ui layer --------- Co-authored-by: Siddharth Agarwal <[email protected]>
1 parent cd0925e commit a4c4c85

File tree

12 files changed

+51
-19
lines changed

12 files changed

+51
-19
lines changed

app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailLiveAdapter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ class ProgramEventDetailLiveAdapter(
5151
event = it,
5252
editable = it.event?.uid()
5353
?.let { eventViewModel.isEditable(it) } ?: true,
54+
displayOrgUnit = it.event?.program()
55+
?.let { program -> eventViewModel.displayOrganisationUnit(program) } ?: true,
5456
onSyncIconClick = {
5557
eventViewModel.eventSyncClicked.value = it.event?.uid()
5658
},

app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ interface ProgramEventDetailRepository {
2626
fun programHasCoordinates(): Boolean
2727
fun programHasAnalytics(): Boolean
2828
fun isEventEditable(eventUid: String): Boolean
29+
fun displayOrganisationUnit(programUid: String): Boolean
2930
}

app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailRepositoryImpl.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,10 @@ class ProgramEventDetailRepositoryImpl internal constructor(
177177
override fun isEventEditable(eventUid: String): Boolean {
178178
return d2.eventModule().eventService().blockingIsEditable(eventUid)
179179
}
180+
181+
override fun displayOrganisationUnit(programUid: String): Boolean {
182+
return d2.organisationUnitModule().organisationUnits()
183+
.byProgramUids(listOf(programUid))
184+
.blockingGet().size > 1
185+
}
180186
}

app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ class ProgramEventDetailViewModel(
1717
val eventClicked = MutableLiveData<Pair<String, String>?>(null)
1818
var updateEvent: String? = null
1919
var recreationActivity: Boolean = false
20+
2021
enum class EventProgramScreen {
2122
LIST, MAP, ANALYTICS
2223
}
24+
2325
private val _currentScreen = MutableLiveData(EventProgramScreen.LIST)
2426
val currentScreen: LiveData<EventProgramScreen>
2527
get() = _currentScreen.distinctUntilChanged()
@@ -60,4 +62,8 @@ class ProgramEventDetailViewModel(
6062
fun isEditable(eventUid: String): Boolean {
6163
return eventRepository.isEventEditable(eventUid)
6264
}
65+
66+
fun displayOrganisationUnit(programUid: String): Boolean {
67+
return eventRepository.displayOrganisationUnit(programUid)
68+
}
6369
}

app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventMapper.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import org.dhis2.commons.data.EventViewModel
55
import org.dhis2.commons.data.EventViewModelType
66
import org.dhis2.commons.data.ProgramEventViewModel
77
import org.dhis2.commons.data.tuples.Pair
8-
import org.dhis2.commons.reporting.CrashReportController
98
import org.dhis2.data.dhislogic.DhisPeriodUtils
109
import org.dhis2.utils.DateUtils
1110
import org.hisp.dhis.android.core.D2
@@ -25,18 +24,12 @@ import javax.inject.Inject
2524
class ProgramEventMapper @Inject constructor(
2625
val d2: D2,
2726
val periodUtils: DhisPeriodUtils,
28-
val crashReportController: CrashReportController,
2927
) {
3028

3129
fun eventToEventViewModel(event: Event): EventViewModel {
3230
val programStage =
3331
d2.programModule().programStages().uid(event.programStage()).blockingGet()
3432

35-
crashReportController.addBreadCrumb(
36-
"ProgramEventMapper.eventToEventViewModel",
37-
"Event: $event",
38-
)
39-
4033
val eventDate = event.eventDate() ?: event.dueDate()
4134

4235
return EventViewModel(

app/src/main/java/org/dhis2/usescases/programEventDetail/eventList/ui/mapper/EventCardMapper.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,14 @@ class EventCardMapper(
3838
fun map(
3939
event: EventViewModel,
4040
editable: Boolean,
41+
displayOrgUnit: Boolean,
4142
onSyncIconClick: () -> Unit,
4243
onCardClick: () -> Unit,
4344
): ListCardUiModel {
4445
return ListCardUiModel(
4546
title = event.displayDate ?: "",
4647
lastUpdated = event.lastUpdate.toDateSpan(context),
47-
additionalInfo = getAdditionalInfoList(event, editable),
48+
additionalInfo = getAdditionalInfoList(event, editable, displayOrgUnit),
4849
actionButton = {
4950
ProvideSyncButton(
5051
state = event.event?.aggregatedSyncState(),
@@ -60,6 +61,7 @@ class EventCardMapper(
6061
private fun getAdditionalInfoList(
6162
event: EventViewModel,
6263
editable: Boolean,
64+
displayOrgUnit: Boolean,
6365
): List<AdditionalInfoItem> {
6466
val list = event.dataElementValues?.filter {
6567
!it.second.isNullOrEmpty()
@@ -70,10 +72,12 @@ class EventCardMapper(
7072
)
7173
}?.toMutableList() ?: mutableListOf()
7274

73-
checkRegisteredIn(
74-
list = list,
75-
orgUnit = event.orgUnitName,
76-
)
75+
if (displayOrgUnit) {
76+
checkRegisteredIn(
77+
list = list,
78+
orgUnit = event.orgUnitName,
79+
)
80+
}
7781

7882
checkCategoryCombination(
7983
list = list,

app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,7 @@ private SearchTeiModel transform(TrackedEntitySearchItem searchItem, @Nullable P
804804
searchTei.setHeader(searchItem.getHeader());
805805
searchTei.setSortingValue(sortingValueSetter.setSortingItem(searchTei, sortingItem));
806806
searchTei.setTEType(searchItem.getType().displayName());
807+
searchTei.setDisplayOrgUnit(displayOrgUnit());
807808
return searchTei;
808809
}
809810

@@ -948,4 +949,10 @@ public boolean canCreateInProgramWithoutSearch() {
948949
return programConfiguration != null && Boolean.TRUE.equals(programConfiguration.optionalSearch());
949950
}
950951
}
952+
953+
private boolean displayOrgUnit() {
954+
return d2.organisationUnitModule().organisationUnits()
955+
.byProgramUids(Collections.singletonList(currentProgram))
956+
.blockingGet().size() > 1;
957+
}
951958
}

app/src/main/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapper.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,13 @@ class TEICardMapper(
118118
attributeList.removeIf { it.value.isEmpty() || it.value == "-" }
119119

120120
return attributeList.also { list ->
121-
checkEnrolledIn(
122-
list = list,
123-
enrolledOrgUnit = searchTEIModel.enrolledOrgUnit,
124-
)
121+
if (searchTEIModel.displayOrgUnit) {
122+
checkEnrolledIn(
123+
list = list,
124+
enrolledOrgUnit = searchTEIModel.enrolledOrgUnit,
125+
)
126+
}
127+
125128
checkEnrolledPrograms(
126129
list = list,
127130
enrolledPrograms = searchTEIModel.programInfo,

app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.dhis2.usescases.programEventDetail
22

3-
import org.dhis2.commons.reporting.CrashReportController
43
import org.dhis2.data.dhislogic.DhisPeriodUtils
54
import org.hisp.dhis.android.core.D2
65
import org.hisp.dhis.android.core.category.CategoryOptionCombo
@@ -25,11 +24,10 @@ class ProgramEventMapperTest {
2524

2625
private val d2: D2 = Mockito.mock(D2::class.java, RETURNS_DEEP_STUBS)
2726
private val periodUtil: DhisPeriodUtils = mock()
28-
private val crashReportController: CrashReportController = mock()
2927

3028
@Before
3129
fun setUp() {
32-
mapper = ProgramEventMapper(d2, periodUtil, crashReportController)
30+
mapper = ProgramEventMapper(d2, periodUtil)
3331
}
3432

3533
@Test

app/src/test/java/org/dhis2/usescases/programEventDetail/eventList/mapper/EventCardMapperTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class EventCardMapperTest {
4747
val result = mapper.map(
4848
event = model,
4949
editable = true,
50+
displayOrgUnit = true,
5051
onSyncIconClick = {},
5152
onCardClick = {},
5253
)

0 commit comments

Comments
 (0)