blob: 942e655d29bec4043e4604dfd5f3924344f0b514 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.portfolio.group.data;
import java.util.Collection;
import org.apache.fineract.infrastructure.codes.data.CodeValueData;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.organisation.office.data.OfficeData;
import org.apache.fineract.organisation.staff.data.StaffData;
import org.apache.fineract.portfolio.calendar.data.CalendarData;
import org.apache.fineract.portfolio.client.data.ClientData;
import org.joda.time.LocalDate;
/**
* Immutable data object representing a general group (so may or may not have a
* parent).
*/
public class GroupGeneralData {
private final Long id;
private final String accountNo;
private final String name;
private final String externalId;
private final EnumOptionData status;
@SuppressWarnings("unused")
private final Boolean active;
private final LocalDate activationDate;
private final Long officeId;
private final String officeName;
private final Long centerId;
private final String centerName;
private final Long staffId;
private final String staffName;
private final String hierarchy;
private final String groupLevel;
// associations
private final Collection<ClientData> clientMembers;
private final Collection<ClientData> activeClientMembers;
private final Collection<GroupRoleData> groupRoles;
private final Collection<CalendarData> calendarsData;
private final CalendarData collectionMeetingCalendar;
// template
private final Collection<CenterData> centerOptions;
private final Collection<OfficeData> officeOptions;
private final Collection<StaffData> staffOptions;
private final Collection<ClientData> clientOptions;
private final Collection<CodeValueData> availableRoles;
private final GroupRoleData selectedRole;
private final Collection<CodeValueData> closureReasons;
private final GroupTimelineData timeline;
public static GroupGeneralData lookup(final Long groupId, final String accountNo, final String groupName) {
final Collection<ClientData> clientMembers = null;
final Collection<GroupRoleData> groupRoles = null;
final Collection<CodeValueData> closureReasons = null;
return new GroupGeneralData(groupId, accountNo, groupName, null, null, null, null, null, null, null, null, null, null, null, clientMembers, null, null,
null, null, null, groupRoles, null, null, null, null, closureReasons, null);
}
public static GroupGeneralData template(final Long officeId, final Long centerId, final String accountNo, final String centerName, final Long staffId,
final String staffName, final Collection<CenterData> centerOptions, final Collection<OfficeData> officeOptions,
final Collection<StaffData> staffOptions, final Collection<ClientData> clientOptions,
final Collection<CodeValueData> availableRoles) {
final Collection<ClientData> clientMembers = null;
final Collection<GroupRoleData> groupRoles = null;
final Collection<CodeValueData> closureReasons = null;
return new GroupGeneralData(null, accountNo , null, null, null, null, officeId, null, centerId, centerName, staffId, staffName, null, null,
clientMembers, null, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles, availableRoles, null, null, null,
closureReasons, null);
}
public static GroupGeneralData withTemplate(final GroupGeneralData templatedGrouping, final GroupGeneralData grouping) {
return new GroupGeneralData(grouping.id, grouping.accountNo, grouping.name, grouping.externalId, grouping.status, grouping.activationDate,
grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName,
grouping.hierarchy, grouping.groupLevel, grouping.clientMembers, grouping.activeClientMembers, templatedGrouping.centerOptions, templatedGrouping.officeOptions,
templatedGrouping.staffOptions, templatedGrouping.clientOptions, grouping.groupRoles, templatedGrouping.availableRoles,
grouping.selectedRole, grouping.calendarsData, grouping.collectionMeetingCalendar, grouping.closureReasons,
templatedGrouping.timeline);
}
public static GroupGeneralData withAssocations(final GroupGeneralData grouping, final Collection<ClientData> membersOfGroup,
final Collection<ClientData> activeClientMembers, final Collection<GroupRoleData> groupRoles, final Collection<CalendarData> calendarsData,
final CalendarData collectionMeetingCalendar) {
return new GroupGeneralData(grouping.id, grouping.accountNo, grouping.name, grouping.externalId, grouping.status, grouping.activationDate,
grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName,
grouping.hierarchy, grouping.groupLevel, membersOfGroup, activeClientMembers, grouping.centerOptions, grouping.officeOptions, grouping.staffOptions,
grouping.clientOptions, groupRoles, grouping.availableRoles, grouping.selectedRole, calendarsData,
collectionMeetingCalendar, grouping.closureReasons, grouping.timeline);
}
public static GroupGeneralData instance(final Long id, final String accountNo, final String name, final String externalId, final EnumOptionData status,
final LocalDate activationDate, final Long officeId, final String officeName, final Long centerId, final String centerName,
final Long staffId, final String staffName, final String hierarchy, final String groupLevel, final GroupTimelineData timeline) {
final Collection<ClientData> clientMembers = null;
final Collection<ClientData> activeClientMembers = null;
final Collection<CenterData> centerOptions = null;
final Collection<OfficeData> officeOptions = null;
final Collection<StaffData> staffOptions = null;
final Collection<ClientData> clientOptions = null;
final Collection<GroupRoleData> groupRoles = null;
final Collection<CodeValueData> availableRoles = null;
final GroupRoleData role = null;
final Collection<CalendarData> calendarsData = null;
final CalendarData collectionMeetingCalendar = null;
final Collection<CodeValueData> closureReasons = null;
return new GroupGeneralData(id, accountNo, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId,
staffName, hierarchy, groupLevel, clientMembers, activeClientMembers, centerOptions, officeOptions, staffOptions,
clientOptions, groupRoles, availableRoles, role, calendarsData, collectionMeetingCalendar, closureReasons, timeline);
}
private GroupGeneralData(final Long id, final String accountNo, final String name, final String externalId, final EnumOptionData status,
final LocalDate activationDate, final Long officeId, final String officeName, final Long centerId, final String centerName,
final Long staffId, final String staffName, final String hierarchy, final String groupLevel, final Collection<ClientData> clientMembers,
final Collection<ClientData> activeClientMembers, final Collection<CenterData> centerOptions,
final Collection<OfficeData> officeOptions, final Collection<StaffData> staffOptions,
final Collection<ClientData> clientOptions, final Collection<GroupRoleData> groupRoles,
final Collection<CodeValueData> availableRoles, final GroupRoleData role,
final Collection<CalendarData> calendarsData, final CalendarData collectionMeetingCalendar,
final Collection<CodeValueData> closureReasons, final GroupTimelineData timeline) {
this.id = id;
this.accountNo = accountNo;
this.name = name;
this.externalId = externalId;
this.status = status;
if (status != null) {
this.active = status.getId().equals(300l);
} else {
this.active = null;
}
this.activationDate = activationDate;
this.officeId = officeId;
this.officeName = officeName;
this.centerId = centerId;
this.centerName = centerName;
this.staffId = staffId;
this.staffName = staffName;
this.hierarchy = hierarchy;
this.groupLevel = groupLevel;
// associations
this.clientMembers = clientMembers;
this.activeClientMembers = activeClientMembers;
// template
this.centerOptions = centerOptions;
this.officeOptions = officeOptions;
this.staffOptions = staffOptions;
if (clientMembers != null && clientOptions != null) {
clientOptions.removeAll(clientMembers);
}
this.clientOptions = clientOptions;
this.groupRoles = groupRoles;
this.availableRoles = availableRoles;
this.selectedRole = role;
this.calendarsData = calendarsData;
this.collectionMeetingCalendar = collectionMeetingCalendar;
this.closureReasons = closureReasons;
this.timeline = timeline;
}
public Long getId() {
return this.id;
}
public String getAccountNo(){
return this.accountNo;
}
public String getName() {
return this.name;
}
public Long officeId() {
return this.officeId;
}
public String getHierarchy() {
return this.hierarchy;
}
public boolean isChildGroup() {
return this.centerId == null ? false : true;
}
public Long getParentId() {
return this.centerId;
}
public static GroupGeneralData updateSelectedRole(final GroupGeneralData grouping, final GroupRoleData selectedRole) {
return new GroupGeneralData(grouping.id, grouping.accountNo, grouping.name, grouping.externalId, grouping.status, grouping.activationDate,
grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName,
grouping.hierarchy, grouping.groupLevel, grouping.clientMembers, grouping.activeClientMembers, grouping.centerOptions,
grouping.officeOptions, grouping.staffOptions, grouping.clientOptions, grouping.groupRoles, grouping.availableRoles,
selectedRole, grouping.calendarsData, grouping.collectionMeetingCalendar, grouping.closureReasons, null);
}
public static GroupGeneralData withClosureReasons(final Collection<CodeValueData> closureReasons) {
final Long id = null;
final String accountNo = null;
final String name = null;
final String externalId = null;
final EnumOptionData status = null;
final LocalDate activationDate = null;
final Long officeId = null;
final String officeName = null;
final Long centerId = null;
final String centerName = null;
final Long staffId = null;
final String staffName = null;
final String hierarchy = null;
final String groupLevel = null;
final Collection<ClientData> clientMembers = null;
final Collection<ClientData> activeClientMembers = null;
final Collection<CenterData> centerOptions = null;
final Collection<OfficeData> officeOptions = null;
final Collection<StaffData> staffOptions = null;
final Collection<ClientData> clientOptions = null;
final Collection<GroupRoleData> groupRoles = null;
final Collection<CodeValueData> availableRoles = null;
final GroupRoleData role = null;
final Collection<CalendarData> calendarsData = null;
final CalendarData collectionMeetingCalendar = null;
return new GroupGeneralData(id, accountNo, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId,
staffName, hierarchy, groupLevel, clientMembers, activeClientMembers, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles,
availableRoles, role, calendarsData, collectionMeetingCalendar, closureReasons, null);
}
public Collection<ClientData> clientMembers() {
return this.clientMembers;
}
}