You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@fineract.apache.org by "chinmaya samantara (Jira)" <ji...@apache.org> on 2026/10/12 14:24:00 UTC
[jira] [Commented] (FINERACT-2917) Updating meeting attendance changes the wrong meeting and does not save new attendees
[ https://issues.apache.org/jira/browse/FINERACT-2917?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18126357#comment-18126357 ]
chinmaya samantara commented on FINERACT-2917:
----------------------------------------------
PR: https://github.com/apache/fineract/pull/6627
> Updating meeting attendance changes the wrong meeting and does not save new attendees
> -------------------------------------------------------------------------------------
>
> Key: FINERACT-2917
> URL: https://issues.apache.org/jira/browse/FINERACT-2917
> Project: Apache Fineract
> Issue Type: Bug
> Reporter: chinmaya samantara
> Assignee: chinmaya samantara
> Priority: Major
>
> Since FINERACT-2548, updating attendance on an existing meeting (POST /\{entityType}/\{entityId}/meetings/\{meetingId}?command=saveOrUpdateAttendance) has three problems in MeetingAttendanceWriteServiceImpl. The first one silently changes attendance on a different meeting.
> *1. The wrong meeting is updated*
> {code:java}
> var meeting = meetingRepository.findById(request.getEntityId())
> {code}
> {{request.getEntityId()}} is the group or center id from the URL, not the meeting id ({{{}request.getId(){}}}, set from \{meetingId}). So the update is applied to whichever meeting has the same id as the group. The legacy code loaded the meeting by the command's entity id, which was the meeting id.
> Steps to reproduce: group 2 has client 5 and three meetings: id 1 (14 Sep), id 2 (07 Sep, client 5 present), id 3 (21 Sep, no attendance). Mark client 5 absent on meeting 3:
> {code:json}
> POST /fineract-provider/api/v1/groups/2/meetings/3?command=saveOrUpdateAttendance
> { "meetingAttendance": [ { "clientId": 5, "attendanceType": { "id": 2 } } ] }
> {code}
> Actual result: HTTP 200 with "entityId": 2. In m_client_attendance, meeting 2 (07 Sep) now has client 5 absent; meeting 3 is unchanged. A meeting id that doesn't exist (e.g. /groups/2/meetings/999) is also accepted. When no meeting has the group's id, the error names the wrong id ("Meeting with identifier 10 does not exist" for a request to meeting 4 of group 10).
> Expected result: meeting 3 is updated; an unknown meeting id gives 404.
> *2. Newly added attendees are not saved*
> In updateAttendance(), clients who have no attendance on the meeting yet are collected in {{result}} and then added with {{{}clientsAttendance.addAll(result){}}}. That is the local set built from the request, not the meeting's own set ({{{}meeting.getClientsAttendance(){}}}), so they are never persisted. The legacy Meeting.updateAttendance() added them to the meeting's set.
> Steps to reproduce: meeting 3 above has no attendance. Because of problem 1, a URL whose entity id is 3 loads meeting 3:
> {code:json}
> POST /fineract-provider/api/v1/centers/3/meetings/999?command=saveOrUpdateAttendance
> { "meetingAttendance": [ { "clientId": 5, "attendanceType": { "id": 1 } } ] }
> {code}
> Actual result: HTTP 200, and the response reports the change (changes.clientsAttendance contains client 5), but m_client_attendance has no row for meeting 3.
> Expected result: the attendance row is saved.
> *3. The request field was renamed*
> The list in MeetingAttendanceUpdateRequest is called meetingAttendance (and is @Hidden in Swagger). The legacy API, the create request and the response all use clientsAttendance. A request with clientsAttendance gives HTTP 500 on develop.
> *Possible fix:* load the meeting with request.getId() (404 if not found, and check it belongs to the entity in the URL); add new attendees to meeting.getClientsAttendance(); accept clientsAttendance as the field name (or document meetingAttendance); add tests for updating attendance.
> Related: FINERACT-2911 (creating attendance; its fix lets center attendance updates reach problem 1, so these should be fixed together or close together).
> Found on: Fineract develop (7ac7801, local Docker). MeetingAttendanceWriteServiceImpl is unchanged on develop 8bdbff9 (2026-10-09); its last change is 912eaf1 (FINERACT-2548).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)