support updating single pieces of information about an office.
This commit is contained in:
@@ -19,7 +19,7 @@ public class OfficeCommand {
|
||||
private LocalDate openingDate;
|
||||
|
||||
private Long parentId;
|
||||
private boolean rootOffice = false;
|
||||
private Boolean rootOffice = false;
|
||||
|
||||
protected OfficeCommand() {
|
||||
//
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
|
||||
eventLocalDate = DateTimeFormat.forPattern(dateFormat).withLocale(locale).parseLocalDate(dateAsString.toLowerCase(locale));
|
||||
} catch (IllegalArgumentException e) {
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.invalid.date.format", "The parameter " + parameterName + " is invalid.", parameterName, dateAsString);
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.invalid.date.format", "The parameter " + parameterName + " is invalid based on the dateFormat provided:" + dateFormat, parameterName, dateAsString, dateFormat);
|
||||
dataValidationErrors.add(error);
|
||||
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
|
||||
+17
-6
@@ -17,6 +17,7 @@ import javax.persistence.UniqueConstraint;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.mifosng.data.command.OfficeCommand;
|
||||
import org.mifosng.platform.infrastructure.AbstractAuditableCustom;
|
||||
import org.mifosng.platform.user.domain.AppUser;
|
||||
|
||||
@@ -102,15 +103,25 @@ public class Office extends AbstractAuditableCustom<AppUser, Long> {
|
||||
return this.parent == null;
|
||||
}
|
||||
|
||||
public void update(final String newNname, final String newExternalId,
|
||||
final LocalDate newOpeningDate) {
|
||||
this.name = newNname;
|
||||
this.externalId = newExternalId;
|
||||
this.openingDate = newOpeningDate.toDateMidnight().toDate();
|
||||
}
|
||||
|
||||
public void update(OfficeCommand command) {
|
||||
// ignore nulls when updating
|
||||
if (command.getName() != null) {
|
||||
this.name = command.getName().trim();
|
||||
}
|
||||
|
||||
if (command.getExternalId() != null) {
|
||||
this.externalId = command.getExternalId().trim();
|
||||
}
|
||||
|
||||
if (command.getOpeningDate() != null) {
|
||||
this.openingDate = command.getOpeningDate().toDate();
|
||||
}
|
||||
}
|
||||
|
||||
public void update(Office newParent) {
|
||||
this.parent = newParent;
|
||||
generateHierarchy();
|
||||
}
|
||||
|
||||
public boolean identifiedBy(String identifier) {
|
||||
|
||||
+63
-2
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.mifosng.data.ApiParameterError;
|
||||
import org.mifosng.data.command.OfficeCommand;
|
||||
import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
|
||||
@@ -15,8 +16,8 @@ public class OfficeCommandValidator {
|
||||
public OfficeCommandValidator(OfficeCommand command) {
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public void validate() {
|
||||
|
||||
public void validateForCreate() {
|
||||
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
|
||||
@@ -46,4 +47,64 @@ public class OfficeCommandValidator {
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
}
|
||||
|
||||
public void validateForUpdate() {
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
|
||||
if (command.getId() == null) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.office.id.cannot.be.blank", "A valid id must be provided.", "id");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
boolean ignoreNulls = true;
|
||||
|
||||
// NOTE: remember for updates that values that are null are ignored from validation and update.
|
||||
boolean nameHasData = validateParameterNotEmpty(this.command.getName(), "office", "name", ignoreNulls, dataValidationErrors);
|
||||
boolean openingDateHasData = validateParameterNotEmpty(this.command.getOpeningDateFormatted(), "office", "openingDateFormatted", ignoreNulls, dataValidationErrors);
|
||||
boolean externalIdHasData = validateParameterNotGreaterThan(100, this.command.getExternalId(), "office", "externalId", ignoreNulls, dataValidationErrors);
|
||||
boolean parentidHasData = validateParameterNotNull(this.command.getParentId(), "office", "parentid", ignoreNulls, dataValidationErrors);
|
||||
|
||||
if (!anyOfTrue(nameHasData, openingDateHasData, externalIdHasData, parentidHasData)) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.office.no.parameters.for.update", "No parameters passed for update.", "id");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (!dataValidationErrors.isEmpty()) {
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean anyOfTrue(boolean nameHasData, boolean openingDateHasData, boolean externalIdHasData, boolean parentidHasData) {
|
||||
return nameHasData || openingDateHasData || externalIdHasData || parentidHasData;
|
||||
}
|
||||
|
||||
private boolean validateParameterNotNull(Long value, String resourceName, String parameterName, boolean ignoreNulls, List<ApiParameterError> dataValidationErrors) {
|
||||
if (value == null && ignoreNulls) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean validateParameterNotGreaterThan(Integer maxLength, String value, String resourceName, String parameterName, boolean ignoreNulls, List<ApiParameterError> dataValidationErrors) {
|
||||
if (value == null && ignoreNulls) return false;
|
||||
|
||||
if (this.command.getExternalId().trim().length() > maxLength) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg." + resourceName + "." + parameterName + ".exceeds.max.length", "The parameter " + parameterName + " exceeds max length of " + maxLength + ".", parameterName, maxLength);
|
||||
dataValidationErrors.add(error);
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean validateParameterNotEmpty(String value, String resourceName, String parameterName, boolean ignoreNulls, List<ApiParameterError> dataValidationErrors) {
|
||||
|
||||
if (value == null && ignoreNulls) return false;
|
||||
|
||||
if (StringUtils.isBlank(value)) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg." + resourceName + "." + parameterName + ".cannot.be.blank", "The parameter " + parameterName + " cannot be blank.", parameterName);
|
||||
dataValidationErrors.add(error);
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -39,7 +39,7 @@ public class OfficeWritePlatformServiceJpaRepositoryImpl implements OfficeWriteP
|
||||
AppUser currentUser = context.authenticatedUser();
|
||||
|
||||
OfficeCommandValidator validator = new OfficeCommandValidator(command);
|
||||
validator.validate();
|
||||
validator.validateForCreate();
|
||||
|
||||
Office parent = validateUserPriviledgeOnOfficeAndRetrieve(currentUser, command.getParentId());
|
||||
|
||||
@@ -67,13 +67,13 @@ public class OfficeWritePlatformServiceJpaRepositoryImpl implements OfficeWriteP
|
||||
AppUser currentUser = context.authenticatedUser();
|
||||
|
||||
OfficeCommandValidator validator = new OfficeCommandValidator(command);
|
||||
validator.validate();
|
||||
validator.validateForUpdate();
|
||||
|
||||
Office office = validateUserPriviledgeOnOfficeAndRetrieve(currentUser, command.getId());
|
||||
|
||||
office.update(command.getName(), command.getExternalId(), command.getOpeningDate());
|
||||
office.update(command);
|
||||
|
||||
if (!command.isRootOffice()) {
|
||||
if (!command.isRootOffice() && command.getParentId() != null) {
|
||||
Office parent = validateUserPriviledgeOnOfficeAndRetrieve(currentUser, command.getParentId());
|
||||
office.update(parent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user