| /** |
| * This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this file, |
| * You can obtain one at http://mozilla.org/MPL/2.0/. |
| */ |
| package org.mifosplatform.portfolio.client.data; |
| |
| import java.util.Collection; |
| import java.util.List; |
| |
| import org.apache.commons.lang.StringUtils; |
| import org.apache.commons.lang.builder.CompareToBuilder; |
| import org.apache.commons.lang.builder.EqualsBuilder; |
| import org.apache.commons.lang.builder.HashCodeBuilder; |
| import org.joda.time.LocalDate; |
| import org.mifosplatform.infrastructure.codes.data.CodeValueData; |
| import org.mifosplatform.infrastructure.core.data.EnumOptionData; |
| import org.mifosplatform.organisation.office.data.OfficeData; |
| import org.mifosplatform.organisation.staff.data.StaffData; |
| import org.mifosplatform.portfolio.group.data.GroupGeneralData; |
| import org.mifosplatform.portfolio.savings.data.SavingsAccountData; |
| import org.mifosplatform.portfolio.savings.data.SavingsProductData; |
| |
| /** |
| * Immutable data object representing client data. |
| */ |
| final public class ClientData implements Comparable<ClientData> { |
| |
| private final Long id; |
| private final String accountNo; |
| private final String externalId; |
| |
| private final EnumOptionData status; |
| private final CodeValueData subStatus; |
| |
| @SuppressWarnings("unused") |
| private final Boolean active; |
| private final LocalDate activationDate; |
| |
| private final String firstname; |
| private final String middlename; |
| private final String lastname; |
| private final String fullname; |
| private final String displayName; |
| private final String mobileNo; |
| private final LocalDate dateOfBirth; |
| private final CodeValueData gender; |
| private final CodeValueData clientType; |
| private final CodeValueData clientClassification; |
| |
| private final Long officeId; |
| private final String officeName; |
| private final Long transferToOfficeId; |
| private final String transferToOfficeName; |
| |
| private final Long imageId; |
| private final Boolean imagePresent; |
| private final Long staffId; |
| private final String staffName; |
| private final ClientTimelineData timeline; |
| |
| private final Long savingsProductId; |
| private final String savingsProductName; |
| |
| private final Long savingsAccountId; |
| private final EnumOptionData legalForm; |
| |
| // associations |
| private final Collection<GroupGeneralData> groups; |
| |
| // template |
| private final Collection<OfficeData> officeOptions; |
| private final Collection<StaffData> staffOptions; |
| private final Collection<CodeValueData> narrations; |
| private final Collection<SavingsProductData> savingProductOptions; |
| private final Collection<SavingsAccountData> savingAccountOptions; |
| private final Collection<CodeValueData> genderOptions; |
| private final Collection<CodeValueData> clientTypeOptions; |
| private final Collection<CodeValueData> clientClassificationOptions; |
| private final Collection<CodeValueData> clientNonPersonConstitutionOptions; |
| private final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions; |
| private final List<EnumOptionData> clientLegalFormOptions; |
| |
| private final ClientNonPersonData clientNonPersonDetails; |
| |
| public static ClientData template(final Long officeId, final LocalDate joinedDate, final Collection<OfficeData> officeOptions, |
| final Collection<StaffData> staffOptions, final Collection<CodeValueData> narrations, |
| final Collection<CodeValueData> genderOptions, final Collection<SavingsProductData> savingProductOptions, |
| final Collection<CodeValueData> clientTypeOptions, final Collection<CodeValueData> clientClassificationOptions, |
| final Collection<CodeValueData> clientNonPersonConstitutionOptions, final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions, |
| final List<EnumOptionData> clientLegalFormOptions) { |
| final String accountNo = null; |
| final EnumOptionData status = null; |
| final CodeValueData subStatus = null; |
| final String officeName = null; |
| final Long transferToOfficeId = null; |
| final String transferToOfficeName = null; |
| final Long id = null; |
| final String firstname = null; |
| final String middlename = null; |
| final String lastname = null; |
| final String fullname = null; |
| final String displayName = null; |
| final String externalId = null; |
| final String mobileNo = null; |
| final LocalDate dateOfBirth = null; |
| final CodeValueData gender = null; |
| final Long imageId = null; |
| final Long staffId = null; |
| final String staffName = null; |
| final Collection<GroupGeneralData> groups = null; |
| final ClientTimelineData timeline = null; |
| final Long savingsProductId = null; |
| final String savingsProductName = null; |
| final Long savingsAccountId = null; |
| final Collection<SavingsAccountData> savingAccountOptions = null; |
| final CodeValueData clientType = null; |
| final CodeValueData clientClassification = null; |
| final EnumOptionData legalForm = null; |
| final ClientNonPersonData clientNonPersonDetails = null; |
| return new ClientData(accountNo, status, subStatus, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, |
| middlename, lastname, fullname, displayName, externalId, mobileNo, dateOfBirth, gender, joinedDate, imageId, staffId, |
| staffName, officeOptions, groups, staffOptions, narrations, genderOptions, timeline, savingProductOptions, |
| savingsProductId, savingsProductName, savingsAccountId, savingAccountOptions, clientType, clientClassification, |
| clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions, |
| clientNonPersonDetails, clientLegalFormOptions, legalForm); |
| |
| } |
| |
| public static ClientData templateOnTop(final ClientData clientData, final ClientData templateData) { |
| |
| return new ClientData(clientData.accountNo, clientData.status, clientData.subStatus, clientData.officeId, clientData.officeName, |
| clientData.transferToOfficeId, clientData.transferToOfficeName, clientData.id, clientData.firstname, clientData.middlename, |
| clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, clientData.mobileNo, |
| clientData.dateOfBirth, clientData.gender, clientData.activationDate, clientData.imageId, clientData.staffId, |
| clientData.staffName, templateData.officeOptions, clientData.groups, templateData.staffOptions, templateData.narrations, |
| templateData.genderOptions, clientData.timeline, templateData.savingProductOptions, clientData.savingsProductId, |
| clientData.savingsProductName, clientData.savingsAccountId, clientData.savingAccountOptions, clientData.clientType, |
| clientData.clientClassification, templateData.clientTypeOptions, templateData.clientClassificationOptions, |
| templateData.clientNonPersonConstitutionOptions, templateData.clientNonPersonMainBusinessLineOptions, clientData.clientNonPersonDetails, |
| templateData.clientLegalFormOptions, clientData.legalForm); |
| |
| } |
| |
| public static ClientData templateWithSavingAccountOptions(final ClientData clientData, |
| final Collection<SavingsAccountData> savingAccountOptions) { |
| |
| return new ClientData(clientData.accountNo, clientData.status, clientData.subStatus, clientData.officeId, clientData.officeName, |
| clientData.transferToOfficeId, clientData.transferToOfficeName, clientData.id, clientData.firstname, clientData.middlename, |
| clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, clientData.mobileNo, |
| clientData.dateOfBirth, clientData.gender, clientData.activationDate, clientData.imageId, clientData.staffId, |
| clientData.staffName, clientData.officeOptions, clientData.groups, clientData.staffOptions, clientData.narrations, |
| clientData.genderOptions, clientData.timeline, clientData.savingProductOptions, clientData.savingsProductId, |
| clientData.savingsProductName, clientData.savingsAccountId, savingAccountOptions, clientData.clientType, |
| clientData.clientClassification, clientData.clientTypeOptions, clientData.clientClassificationOptions, |
| clientData.clientNonPersonConstitutionOptions, clientData.clientNonPersonMainBusinessLineOptions, clientData.clientNonPersonDetails, |
| clientData.clientLegalFormOptions, clientData.legalForm); |
| |
| } |
| |
| public static ClientData setParentGroups(final ClientData clientData, final Collection<GroupGeneralData> parentGroups) { |
| return new ClientData(clientData.accountNo, clientData.status, clientData.subStatus, clientData.officeId, clientData.officeName, |
| clientData.transferToOfficeId, clientData.transferToOfficeName, clientData.id, clientData.firstname, clientData.middlename, |
| clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, clientData.mobileNo, |
| clientData.dateOfBirth, clientData.gender, clientData.activationDate, clientData.imageId, clientData.staffId, |
| clientData.staffName, clientData.officeOptions, parentGroups, clientData.staffOptions, null, null, clientData.timeline, |
| clientData.savingProductOptions, clientData.savingsProductId, clientData.savingsProductName, clientData.savingsAccountId, |
| clientData.savingAccountOptions, clientData.clientType, clientData.clientClassification, clientData.clientTypeOptions, |
| clientData.clientClassificationOptions, clientData.clientNonPersonConstitutionOptions, clientData.clientNonPersonMainBusinessLineOptions, |
| clientData.clientNonPersonDetails, clientData.clientLegalFormOptions, clientData.legalForm); |
| |
| } |
| |
| public static ClientData clientIdentifier(final Long id, final String accountNo, final String firstname, final String middlename, |
| final String lastname, final String fullname, final String displayName, final Long officeId, final String officeName) { |
| |
| final Long transferToOfficeId = null; |
| final String transferToOfficeName = null; |
| final String externalId = null; |
| final String mobileNo = null; |
| final LocalDate dateOfBirth = null; |
| final CodeValueData gender = null; |
| final LocalDate activationDate = null; |
| final Long imageId = null; |
| final Long staffId = null; |
| final String staffName = null; |
| final Collection<OfficeData> allowedOffices = null; |
| final Collection<GroupGeneralData> groups = null; |
| final Collection<StaffData> staffOptions = null; |
| final Collection<CodeValueData> closureReasons = null; |
| final Collection<CodeValueData> genderOptions = null; |
| final ClientTimelineData timeline = null; |
| final Collection<SavingsProductData> savingProductOptions = null; |
| final Long savingsProductId = null; |
| final String savingsProductName = null; |
| final Long savingsAccountId = null; |
| final Collection<SavingsAccountData> savingAccountOptions = null; |
| final CodeValueData clientType = null; |
| final CodeValueData clientClassification = null; |
| final Collection<CodeValueData> clientTypeOptions = null; |
| final Collection<CodeValueData> clientClassificationOptions = null; |
| final Collection<CodeValueData> clientNonPersonConstitutionOptions = null; |
| final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions = null; |
| final List<EnumOptionData> clientLegalFormOptions = null; |
| final EnumOptionData status = null; |
| final CodeValueData subStatus = null; |
| final EnumOptionData legalForm = null; |
| final ClientNonPersonData clientNonPerson = null; |
| return new ClientData(accountNo, status, subStatus, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, |
| middlename, lastname, fullname, displayName, externalId, mobileNo, dateOfBirth, gender, activationDate, imageId, staffId, |
| staffName, allowedOffices, groups, staffOptions, closureReasons, genderOptions, timeline, savingProductOptions, |
| savingsProductId, savingsProductName, savingsAccountId, savingAccountOptions, clientType, clientClassification, |
| clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions, |
| clientNonPerson, clientLegalFormOptions, legalForm); |
| } |
| |
| public static ClientData lookup(final Long id, final String displayName, final Long officeId, final String officeName) { |
| final String accountNo = null; |
| final EnumOptionData status = null; |
| final CodeValueData subStatus = null; |
| final Long transferToOfficeId = null; |
| final String transferToOfficeName = null; |
| final String firstname = null; |
| final String middlename = null; |
| final String lastname = null; |
| final String fullname = null; |
| final String externalId = null; |
| final String mobileNo = null; |
| final LocalDate dateOfBirth = null; |
| final CodeValueData gender = null; |
| final LocalDate activationDate = null; |
| final Long imageId = null; |
| final Long staffId = null; |
| final String staffName = null; |
| final Collection<OfficeData> allowedOffices = null; |
| final Collection<GroupGeneralData> groups = null; |
| final Collection<StaffData> staffOptions = null; |
| final Collection<CodeValueData> closureReasons = null; |
| final Collection<CodeValueData> genderOptions = null; |
| final ClientTimelineData timeline = null; |
| final Collection<SavingsProductData> savingProductOptions = null; |
| final Long savingsProductId = null; |
| final String savingsProductName = null; |
| final Long savingsAccountId = null; |
| final Collection<SavingsAccountData> savingAccountOptions = null; |
| final CodeValueData clientType = null; |
| final CodeValueData clientClassification = null; |
| final Collection<CodeValueData> clientTypeOptions = null; |
| final Collection<CodeValueData> clientClassificationOptions = null; |
| final Collection<CodeValueData> clientNonPersonConstitutionOptions = null; |
| final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions = null; |
| final List<EnumOptionData> clientLegalFormOptions = null; |
| final EnumOptionData legalForm = null; |
| final ClientNonPersonData clientNonPerson = null; |
| return new ClientData(accountNo, status, subStatus, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, |
| middlename, lastname, fullname, displayName, externalId, mobileNo, dateOfBirth, gender, activationDate, imageId, staffId, |
| staffName, allowedOffices, groups, staffOptions, closureReasons, genderOptions, timeline, savingProductOptions, |
| savingsProductId, savingsProductName, savingsAccountId, savingAccountOptions, clientType, clientClassification, |
| clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions, |
| clientNonPerson, clientLegalFormOptions, legalForm); |
| |
| } |
| |
| public static ClientData instance(final String accountNo, final EnumOptionData status, final CodeValueData subStatus, |
| final Long officeId, final String officeName, final Long transferToOfficeId, final String transferToOfficeName, final Long id, |
| final String firstname, final String middlename, final String lastname, final String fullname, final String displayName, |
| final String externalId, final String mobileNo, final LocalDate dateOfBirth, final CodeValueData gender, |
| final LocalDate activationDate, final Long imageId, final Long staffId, final String staffName, |
| final ClientTimelineData timeline, final Long savingsProductId, final String savingsProductName, final Long savingsAccountId, |
| final CodeValueData clientType, final CodeValueData clientClassification, final EnumOptionData legalForm, final ClientNonPersonData clientNonPerson) { |
| |
| final Collection<OfficeData> allowedOffices = null; |
| final Collection<GroupGeneralData> groups = null; |
| final Collection<StaffData> staffOptions = null; |
| final Collection<CodeValueData> closureReasons = null; |
| final Collection<CodeValueData> genderOptions = null; |
| final Collection<SavingsProductData> savingProductOptions = null; |
| final Collection<CodeValueData> clientTypeOptions = null; |
| final Collection<CodeValueData> clientClassificationOptions = null; |
| final Collection<CodeValueData> clientNonPersonConstitutionOptions = null; |
| final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions = null; |
| final List<EnumOptionData> clientLegalFormOptions = null; |
| return new ClientData(accountNo, status, subStatus, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, |
| middlename, lastname, fullname, displayName, externalId, mobileNo, dateOfBirth, gender, activationDate, imageId, staffId, |
| staffName, allowedOffices, groups, staffOptions, closureReasons, genderOptions, timeline, savingProductOptions, |
| savingsProductId, savingsProductName, savingsAccountId, null, clientType, clientClassification, clientTypeOptions, |
| clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions, clientNonPerson, |
| clientLegalFormOptions, legalForm); |
| |
| } |
| |
| private ClientData(final String accountNo, final EnumOptionData status, final CodeValueData subStatus, final Long officeId, |
| final String officeName, final Long transferToOfficeId, final String transferToOfficeName, final Long id, |
| final String firstname, final String middlename, final String lastname, final String fullname, final String displayName, |
| final String externalId, final String mobileNo, final LocalDate dateOfBirth, final CodeValueData gender, |
| final LocalDate activationDate, final Long imageId, final Long staffId, final String staffName, |
| final Collection<OfficeData> allowedOffices, final Collection<GroupGeneralData> groups, |
| final Collection<StaffData> staffOptions, final Collection<CodeValueData> narrations, |
| final Collection<CodeValueData> genderOptions, final ClientTimelineData timeline, |
| final Collection<SavingsProductData> savingProductOptions, final Long savingsProductId, final String savingsProductName, |
| final Long savingsAccountId, final Collection<SavingsAccountData> savingAccountOptions, final CodeValueData clientType, |
| final CodeValueData clientClassification, final Collection<CodeValueData> clientTypeOptions, |
| final Collection<CodeValueData> clientClassificationOptions, final Collection<CodeValueData> clientNonPersonConstitutionOptions, |
| final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions, final ClientNonPersonData clientNonPerson, |
| final List<EnumOptionData> clientLegalFormOptions, final EnumOptionData legalForm) { |
| this.accountNo = accountNo; |
| this.status = status; |
| if (status != null) { |
| this.active = status.getId().equals(300L); |
| } else { |
| this.active = null; |
| } |
| this.subStatus = subStatus; |
| this.officeId = officeId; |
| this.officeName = officeName; |
| this.transferToOfficeId = transferToOfficeId; |
| this.transferToOfficeName = transferToOfficeName; |
| this.id = id; |
| this.firstname = StringUtils.defaultIfEmpty(firstname, null); |
| this.middlename = StringUtils.defaultIfEmpty(middlename, null); |
| this.lastname = StringUtils.defaultIfEmpty(lastname, null); |
| this.fullname = StringUtils.defaultIfEmpty(fullname, null); |
| this.displayName = StringUtils.defaultIfEmpty(displayName, null); |
| this.externalId = StringUtils.defaultIfEmpty(externalId, null); |
| this.mobileNo = StringUtils.defaultIfEmpty(mobileNo, null); |
| this.activationDate = activationDate; |
| this.dateOfBirth = dateOfBirth; |
| this.gender = gender; |
| this.clientClassification = clientClassification; |
| this.clientType = clientType; |
| this.imageId = imageId; |
| if (imageId != null) { |
| this.imagePresent = Boolean.TRUE; |
| } else { |
| this.imagePresent = null; |
| } |
| this.staffId = staffId; |
| this.staffName = staffName; |
| |
| // associations |
| this.groups = groups; |
| |
| // template |
| this.officeOptions = allowedOffices; |
| this.staffOptions = staffOptions; |
| this.narrations = narrations; |
| |
| this.genderOptions = genderOptions; |
| this.clientClassificationOptions = clientClassificationOptions; |
| this.clientTypeOptions = clientTypeOptions; |
| |
| this.clientNonPersonConstitutionOptions = clientNonPersonConstitutionOptions; |
| this.clientNonPersonMainBusinessLineOptions = clientNonPersonMainBusinessLineOptions; |
| this.clientLegalFormOptions = clientLegalFormOptions; |
| |
| this.timeline = timeline; |
| this.savingProductOptions = savingProductOptions; |
| this.savingsProductId = savingsProductId; |
| this.savingsProductName = savingsProductName; |
| this.savingsAccountId = savingsAccountId; |
| this.savingAccountOptions = savingAccountOptions; |
| this.legalForm = legalForm; |
| this.clientNonPersonDetails = clientNonPerson; |
| |
| } |
| |
| public Long id() { |
| return this.id; |
| } |
| |
| public String displayName() { |
| return this.displayName; |
| } |
| |
| public String accountNo() { |
| return this.accountNo; |
| } |
| |
| public Long officeId() { |
| return this.officeId; |
| } |
| |
| public String officeName() { |
| return this.officeName; |
| } |
| |
| public Long getImageId() { |
| return this.imageId; |
| } |
| |
| public Boolean getImagePresent() { |
| return this.imagePresent; |
| } |
| |
| public ClientTimelineData getTimeline() { |
| return this.timeline; |
| } |
| |
| @Override |
| public int compareTo(final ClientData obj) { |
| if (obj == null) { return -1; } |
| return new CompareToBuilder() // |
| .append(this.id, obj.id) // |
| .append(this.displayName, obj.displayName) // |
| .append(this.mobileNo, obj.mobileNo) // |
| .toComparison(); |
| } |
| |
| @Override |
| public boolean equals(final Object obj) { |
| if (obj == null) { return false; } |
| if (obj == this) { return true; } |
| if (obj.getClass() != getClass()) { return false; } |
| final ClientData rhs = (ClientData) obj; |
| return new EqualsBuilder() // |
| .append(this.id, rhs.id) // |
| .append(this.displayName, rhs.displayName) // |
| .append(this.mobileNo, rhs.mobileNo) // |
| .isEquals(); |
| } |
| |
| @Override |
| public int hashCode() { |
| return new HashCodeBuilder(17, 37) // |
| .append(this.id) // |
| .append(this.displayName) // |
| .toHashCode(); |
| } |
| |
| public String getExternalId() { |
| return this.externalId; |
| } |
| |
| public String getFirstname() { |
| return this.firstname; |
| } |
| |
| public String getLastname() { |
| return this.lastname; |
| } |
| |
| public LocalDate getActivationDate() { |
| return this.activationDate; |
| } |
| } |