updates to finanacial activity to account mapping api's
This commit is contained in:
+23
-23
@@ -1371,19 +1371,19 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="#officeglaccount">Office GL Account Mappings</a></td>
|
<td><a href="#officeglaccount">Office GL Account Mappings</a></td>
|
||||||
<td>officeglaccounts</td>
|
<td>financialactivityaccounts</td>
|
||||||
<td><a href="#officeglaccounts_create">Create Office GL Account Mapping</a><br> </td>
|
<td><a href="#financialactivityaccounts_create">Create Office GL Account Mapping</a><br> </td>
|
||||||
<td><a href="#officeglaccounts_list">List Journal Entries</a></td>
|
<td><a href="#financialactivityaccounts_list">List Journal Entries</a></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>officeglaccounts/{entryId}</td>
|
<td>financialactivityaccounts/{entryId}</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td><a href="#officeglaccounts_retrieve">Retrieve a single Entry</a></td>
|
<td><a href="#financialactivityaccounts_retrieve">Retrieve a single Entry</a></td>
|
||||||
<td><a href="#officeglaccounts_update">Update Office GL Account Mapping</a></td>
|
<td><a href="#financialactivityaccounts_update">Update Office GL Account Mapping</a></td>
|
||||||
<td><a href="#officeglaccounts_delete">Delete Office GL Account Mapping</a></td>
|
<td><a href="#financialactivityaccounts_delete">Delete Office GL Account Mapping</a></td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -28608,7 +28608,7 @@ Content-Type: application/json
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="officeglaccounts_list" name="officeglaccounts_list" class="old-syle-anchor"> </a>
|
<a id="financialactivityaccounts_list" name="financialactivityaccounts_list" class="old-syle-anchor"> </a>
|
||||||
<div class="method-section">
|
<div class="method-section">
|
||||||
<div class="method-description">
|
<div class="method-description">
|
||||||
<h4>List Office Level GL Account Mappings</h4>
|
<h4>List Office Level GL Account Mappings</h4>
|
||||||
@@ -28648,13 +28648,13 @@ Content-Type: application/json
|
|||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
<p>Example Requests:</p>
|
<p>Example Requests:</p>
|
||||||
<div class=apiClick>officeglaccounts</div>
|
<div class=apiClick>financialactivityaccounts</div>
|
||||||
<br>
|
<br>
|
||||||
<div class=apiClick>officeglaccounts?orderBy=id&sortOrder=DESC</div>
|
<div class=apiClick>financialactivityaccounts?orderBy=id&sortOrder=DESC</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="method-example">
|
<div class="method-example">
|
||||||
<code class="method-declaration">
|
<code class="method-declaration">
|
||||||
GET https://DomainName/api/v1/officeglaccounts
|
GET https://DomainName/api/v1/financialactivityaccounts
|
||||||
</code>
|
</code>
|
||||||
<code class="method-response">
|
<code class="method-response">
|
||||||
|
|
||||||
@@ -28677,7 +28677,7 @@ GET https://DomainName/api/v1/officeglaccounts
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="officeglaccounts_create" name="officeglaccounts_create" class="old-syle-anchor"> </a>
|
<a id="financialactivityaccounts_create" name="financialactivityaccounts_create" class="old-syle-anchor"> </a>
|
||||||
<div class="method-section">
|
<div class="method-section">
|
||||||
<div class="method-description">
|
<div class="method-description">
|
||||||
<h4>Create Office GL Account</h4>
|
<h4>Create Office GL Account</h4>
|
||||||
@@ -28696,10 +28696,10 @@ GET https://DomainName/api/v1/officeglaccounts
|
|||||||
</div>
|
</div>
|
||||||
<div class="method-example">
|
<div class="method-example">
|
||||||
<code class="method-declaration">
|
<code class="method-declaration">
|
||||||
POST https://DomainName/api/v1/officeglaccounts
|
POST https://DomainName/api/v1/financialactivityaccounts
|
||||||
</code>
|
</code>
|
||||||
<code class="method-request">
|
<code class="method-request">
|
||||||
POST officeglaccounts
|
POST financialactivityaccounts
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
Request Body:
|
Request Body:
|
||||||
{
|
{
|
||||||
@@ -28715,7 +28715,7 @@ Request Body:
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="officeglaccounts_update" name="officeglaccounts_update" class="old-syle-anchor"> </a>
|
<a id="financialactivityaccounts_update" name="financialactivityaccounts_update" class="old-syle-anchor"> </a>
|
||||||
<div class="method-section">
|
<div class="method-section">
|
||||||
<div class="method-description">
|
<div class="method-description">
|
||||||
<h4>Update Office GL Account Mappings</h4>
|
<h4>Update Office GL Account Mappings</h4>
|
||||||
@@ -28727,10 +28727,10 @@ Request Body:
|
|||||||
</div>
|
</div>
|
||||||
<div class="method-example">
|
<div class="method-example">
|
||||||
<code class="method-declaration">
|
<code class="method-declaration">
|
||||||
POST https://DomainName/api/v1/officeglaccounts/1
|
POST https://DomainName/api/v1/financialactivityaccounts/1
|
||||||
</code>
|
</code>
|
||||||
<code class="method-request">
|
<code class="method-request">
|
||||||
POST officeglaccounts
|
POST financialactivityaccounts
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
Request Body:
|
Request Body:
|
||||||
{
|
{
|
||||||
@@ -28747,18 +28747,18 @@ Request Body:
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<a id="officeglaccounts_retrieve" name="officeglaccounts_retrieve"
|
<a id="financialactivityaccounts_retrieve" name="financialactivityaccounts_retrieve"
|
||||||
class="old-syle-anchor"> </a>
|
class="old-syle-anchor"> </a>
|
||||||
<div class="method-section">
|
<div class="method-section">
|
||||||
<div class="method-description">
|
<div class="method-description">
|
||||||
<h4>Retrieve a single Entry</h4>
|
<h4>Retrieve a single Entry</h4>
|
||||||
<p>Example Requests:</p>
|
<p>Example Requests:</p>
|
||||||
<div class=apiClick>officeglaccounts/1</div>
|
<div class=apiClick>financialactivityaccounts/1</div>
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
<div class="method-example">
|
<div class="method-example">
|
||||||
<code class="method-declaration">
|
<code class="method-declaration">
|
||||||
GET https://DomainName/api/v1/officeglaccounts/{entryId}
|
GET https://DomainName/api/v1/financialactivityaccounts/{entryId}
|
||||||
</code>
|
</code>
|
||||||
<code class="method-response">
|
<code class="method-response">
|
||||||
{
|
{
|
||||||
@@ -28777,7 +28777,7 @@ GET https://DomainName/api/v1/officeglaccounts/{entryId}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="officeglaccounts_delete" name="officeglaccounts_delete"
|
<a id="financialactivityaccounts_delete" name="financialactivityaccounts_delete"
|
||||||
class="old-syle-anchor"> </a>
|
class="old-syle-anchor"> </a>
|
||||||
<div class="method-section">
|
<div class="method-section">
|
||||||
<div class="method-description">
|
<div class="method-description">
|
||||||
@@ -28785,10 +28785,10 @@ GET https://DomainName/api/v1/officeglaccounts/{entryId}
|
|||||||
</div>
|
</div>
|
||||||
<div class="method-example">
|
<div class="method-example">
|
||||||
<code class="method-declaration">
|
<code class="method-declaration">
|
||||||
GET https://DomainName/api/v1/officeglaccounts/{mappingId}
|
GET https://DomainName/api/v1/financialactivityaccounts/{mappingId}
|
||||||
</code>
|
</code>
|
||||||
<code class="method-request">
|
<code class="method-request">
|
||||||
POST officeglaccounts/C1MAE935K0IAEYA?command=reverse
|
POST financialactivityaccounts/C1MAE935K0IAEYA?command=reverse
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
</code>
|
</code>
|
||||||
<code class="method-response">
|
<code class="method-response">
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
ALTER TABLE acc_gl_office_mapping DROP FOREIGN KEY `FK_office_mapping_office`;
|
||||||
|
|
||||||
|
ALTER TABLE acc_gl_office_mapping DROP column office_id;
|
||||||
|
|
||||||
|
ALTER TABLE `acc_gl_office_mapping`
|
||||||
|
ALTER `financial_account_type` DROP DEFAULT;
|
||||||
|
|
||||||
|
ALTER TABLE `acc_gl_office_mapping`
|
||||||
|
CHANGE COLUMN `financial_account_type` `financial_activity_type` SMALLINT(5) NOT NULL;
|
||||||
|
|
||||||
|
ALTER TABLE `acc_gl_office_mapping`
|
||||||
|
ADD UNIQUE INDEX `financial_activity_type` (`financial_activity_type`);
|
||||||
|
|
||||||
|
|
||||||
|
RENAME TABLE `acc_gl_office_mapping` TO `acc_gl_financial_activity_account`;
|
||||||
+20
-27
@@ -7,6 +7,7 @@ package org.mifosplatform.accounting.accountmapping.api;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
@@ -17,13 +18,12 @@ import javax.ws.rs.PUT;
|
|||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.QueryParam;
|
|
||||||
import javax.ws.rs.core.Context;
|
import javax.ws.rs.core.Context;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.UriInfo;
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
import org.mifosplatform.accounting.accountmapping.data.OfficeToGLAccountMappingData;
|
import org.mifosplatform.accounting.accountmapping.data.FinancialActivityAccountData;
|
||||||
import org.mifosplatform.accounting.accountmapping.service.OfficeToGLAccountMappingReadPlatformService;
|
import org.mifosplatform.accounting.accountmapping.service.FinancialActivityAccountReadPlatformService;
|
||||||
import org.mifosplatform.commands.domain.CommandWrapper;
|
import org.mifosplatform.commands.domain.CommandWrapper;
|
||||||
import org.mifosplatform.commands.service.CommandWrapperBuilder;
|
import org.mifosplatform.commands.service.CommandWrapperBuilder;
|
||||||
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService;
|
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService;
|
||||||
@@ -31,40 +31,38 @@ import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
|
|||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||||
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
|
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
|
||||||
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
||||||
import org.mifosplatform.infrastructure.core.service.Page;
|
|
||||||
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
||||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Path("/officeglaccounts")
|
@Path("/financialactivityaccounts")
|
||||||
@Component
|
@Component
|
||||||
@Scope("singleton")
|
@Scope("singleton")
|
||||||
public class OfficeGLAccountsApiResource {
|
public class FinancialActivityAccountsApiResource {
|
||||||
|
|
||||||
private static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "officeData", "glAccountData",
|
private static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "glAccountData",
|
||||||
"accountingMappingOptions", "officeOptions"));
|
"accountingMappingOptions"));
|
||||||
|
|
||||||
private final String resourceNameForPermission = "OFFICEGLACCOUNT";
|
private final String resourceNameForPermission = "OFFICEGLACCOUNT";
|
||||||
|
|
||||||
private final OfficeToGLAccountMappingReadPlatformService officeToGLAccountMappingReadPlatformService;
|
private final FinancialActivityAccountReadPlatformService financialActivityAccountReadPlatformService;
|
||||||
private final DefaultToApiJsonSerializer<OfficeToGLAccountMappingData> apiJsonSerializerService;
|
private final DefaultToApiJsonSerializer<FinancialActivityAccountData> apiJsonSerializerService;
|
||||||
private final ApiRequestParameterHelper apiRequestParameterHelper;
|
private final ApiRequestParameterHelper apiRequestParameterHelper;
|
||||||
private final PlatformSecurityContext context;
|
private final PlatformSecurityContext context;
|
||||||
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
|
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public OfficeGLAccountsApiResource(final PlatformSecurityContext context,
|
public FinancialActivityAccountsApiResource(final PlatformSecurityContext context,
|
||||||
final OfficeToGLAccountMappingReadPlatformService officeToGLAccountMappingReadPlatformService,
|
final FinancialActivityAccountReadPlatformService officeToGLAccountMappingReadPlatformService,
|
||||||
final DefaultToApiJsonSerializer<OfficeToGLAccountMappingData> toApiJsonSerializer,
|
final DefaultToApiJsonSerializer<FinancialActivityAccountData> toApiJsonSerializer,
|
||||||
final ApiRequestParameterHelper apiRequestParameterHelper,
|
final ApiRequestParameterHelper apiRequestParameterHelper,
|
||||||
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
|
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.apiRequestParameterHelper = apiRequestParameterHelper;
|
this.apiRequestParameterHelper = apiRequestParameterHelper;
|
||||||
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
|
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
|
||||||
this.apiJsonSerializerService = toApiJsonSerializer;
|
this.apiJsonSerializerService = toApiJsonSerializer;
|
||||||
this.officeToGLAccountMappingReadPlatformService = officeToGLAccountMappingReadPlatformService;
|
this.financialActivityAccountReadPlatformService = officeToGLAccountMappingReadPlatformService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@@ -75,7 +73,7 @@ public class OfficeGLAccountsApiResource {
|
|||||||
|
|
||||||
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
||||||
|
|
||||||
OfficeToGLAccountMappingData officeToGLAccountMappingData = this.officeToGLAccountMappingReadPlatformService.retrieveTemplate();
|
FinancialActivityAccountData officeToGLAccountMappingData = this.financialActivityAccountReadPlatformService.retrieveTemplate();
|
||||||
|
|
||||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
return this.apiJsonSerializerService.serialize(settings, officeToGLAccountMappingData, RESPONSE_DATA_PARAMETERS);
|
return this.apiJsonSerializerService.serialize(settings, officeToGLAccountMappingData, RESPONSE_DATA_PARAMETERS);
|
||||||
@@ -84,18 +82,13 @@ public class OfficeGLAccountsApiResource {
|
|||||||
@GET
|
@GET
|
||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
public String retrieveAll(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch,
|
public String retrieveAll(@Context final UriInfo uriInfo) {
|
||||||
@QueryParam("externalId") final String externalId, @QueryParam("offset") final Integer offset,
|
|
||||||
@QueryParam("limit") final Integer limit, @QueryParam("orderBy") final String orderBy,
|
|
||||||
@QueryParam("sortOrder") final String sortOrder) {
|
|
||||||
|
|
||||||
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
||||||
final SearchParameters searchParameters = SearchParameters.forAccountTransfer(sqlSearch, externalId, offset, limit, orderBy,
|
final List<FinancialActivityAccountData> financialActivityAccounts = this.financialActivityAccountReadPlatformService.retrieveAll();
|
||||||
sortOrder);
|
|
||||||
final Page<OfficeToGLAccountMappingData> mappings = this.officeToGLAccountMappingReadPlatformService.retrieveAll(searchParameters);
|
|
||||||
|
|
||||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
return this.apiJsonSerializerService.serialize(settings, mappings, RESPONSE_DATA_PARAMETERS);
|
return this.apiJsonSerializerService.serialize(settings, financialActivityAccounts, RESPONSE_DATA_PARAMETERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@@ -107,10 +100,10 @@ public class OfficeGLAccountsApiResource {
|
|||||||
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
||||||
|
|
||||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
OfficeToGLAccountMappingData officeToGLAccountMappingData = this.officeToGLAccountMappingReadPlatformService.retrieve(mappingId);
|
FinancialActivityAccountData officeToGLAccountMappingData = this.financialActivityAccountReadPlatformService.retrieve(mappingId);
|
||||||
if (settings.isTemplate()) {
|
if (settings.isTemplate()) {
|
||||||
OfficeToGLAccountMappingData templateData = this.officeToGLAccountMappingReadPlatformService.retrieveTemplate();
|
FinancialActivityAccountData templateData = this.financialActivityAccountReadPlatformService.retrieveTemplate();
|
||||||
officeToGLAccountMappingData = OfficeToGLAccountMappingData.associateTemplateData(templateData, officeToGLAccountMappingData);
|
officeToGLAccountMappingData = FinancialActivityAccountData.associateTemplateData(templateData, officeToGLAccountMappingData);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.apiJsonSerializerService.serialize(settings, officeToGLAccountMappingData, RESPONSE_DATA_PARAMETERS);
|
return this.apiJsonSerializerService.serialize(settings, officeToGLAccountMappingData, RESPONSE_DATA_PARAMETERS);
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
package org.mifosplatform.accounting.accountmapping.data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.mifosplatform.accounting.glaccount.data.GLAccountData;
|
||||||
|
|
||||||
|
public class FinancialActivityAccountData {
|
||||||
|
|
||||||
|
private final Long id;
|
||||||
|
private final GLAccountData glAccountData;
|
||||||
|
private final Map<String, List<GLAccountData>> accountingMappingOptions;
|
||||||
|
|
||||||
|
public static FinancialActivityAccountData instance(final Long id, final GLAccountData glAccountData) {
|
||||||
|
final Map<String, List<GLAccountData>> accountingMappingOptions = null;
|
||||||
|
return new FinancialActivityAccountData(id, glAccountData, accountingMappingOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FinancialActivityAccountData template(final Map<String, List<GLAccountData>> accountingMappingOptions) {
|
||||||
|
final Long id = null;
|
||||||
|
final GLAccountData glAccountData = null;
|
||||||
|
return new FinancialActivityAccountData(id, glAccountData, accountingMappingOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FinancialActivityAccountData associateTemplateData(final FinancialActivityAccountData templateData,
|
||||||
|
final FinancialActivityAccountData accountMappingData) {
|
||||||
|
return new FinancialActivityAccountData(accountMappingData.id, accountMappingData.glAccountData,
|
||||||
|
templateData.accountingMappingOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FinancialActivityAccountData(final Long id, final GLAccountData glAccountData,
|
||||||
|
final Map<String, List<GLAccountData>> accountingMappingOptions) {
|
||||||
|
this.id = id;
|
||||||
|
this.glAccountData = glAccountData;
|
||||||
|
this.accountingMappingOptions = accountingMappingOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
-47
@@ -1,47 +0,0 @@
|
|||||||
package org.mifosplatform.accounting.accountmapping.data;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.mifosplatform.accounting.glaccount.data.GLAccountData;
|
|
||||||
import org.mifosplatform.organisation.office.data.OfficeData;
|
|
||||||
|
|
||||||
public class OfficeToGLAccountMappingData {
|
|
||||||
|
|
||||||
private final Long id;
|
|
||||||
private final OfficeData officeData;
|
|
||||||
private final GLAccountData glAccountData;
|
|
||||||
private final Map<String, List<GLAccountData>> accountingMappingOptions;
|
|
||||||
private final Collection<OfficeData> officeOptions;
|
|
||||||
|
|
||||||
public static OfficeToGLAccountMappingData instance(final Long id, final OfficeData officeData, final GLAccountData glAccountData) {
|
|
||||||
final Map<String, List<GLAccountData>> accountingMappingOptions = null;
|
|
||||||
final Collection<OfficeData> officeOptions = null;
|
|
||||||
return new OfficeToGLAccountMappingData(id, officeData, glAccountData, accountingMappingOptions, officeOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static OfficeToGLAccountMappingData template(final Map<String, List<GLAccountData>> accountingMappingOptions,
|
|
||||||
final Collection<OfficeData> officeOptions) {
|
|
||||||
final Long id = null;
|
|
||||||
final OfficeData officeData = null;
|
|
||||||
final GLAccountData glAccountData = null;
|
|
||||||
return new OfficeToGLAccountMappingData(id, officeData, glAccountData, accountingMappingOptions, officeOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static OfficeToGLAccountMappingData associateTemplateData(final OfficeToGLAccountMappingData templateData,
|
|
||||||
final OfficeToGLAccountMappingData accountMappingData) {
|
|
||||||
return new OfficeToGLAccountMappingData(accountMappingData.id, accountMappingData.officeData, accountMappingData.glAccountData,
|
|
||||||
templateData.accountingMappingOptions, templateData.officeOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
private OfficeToGLAccountMappingData(final Long id, final OfficeData officeData, final GLAccountData glAccountData,
|
|
||||||
final Map<String, List<GLAccountData>> accountingMappingOptions, final Collection<OfficeData> officeOptions) {
|
|
||||||
this.id = id;
|
|
||||||
this.officeData = officeData;
|
|
||||||
this.glAccountData = glAccountData;
|
|
||||||
this.accountingMappingOptions = accountingMappingOptions;
|
|
||||||
this.officeOptions = officeOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
+54
@@ -0,0 +1,54 @@
|
|||||||
|
/**
|
||||||
|
* 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.accounting.accountmapping.domain;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.FetchType;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
import org.mifosplatform.accounting.glaccount.domain.GLAccount;
|
||||||
|
import org.springframework.data.jpa.domain.AbstractPersistable;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "acc_gl_financial_activity_account")
|
||||||
|
public class FinancialActivityAccount extends AbstractPersistable<Long> {
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "gl_account_id")
|
||||||
|
private GLAccount glAccount;
|
||||||
|
|
||||||
|
@Column(name = "financial_activity_type", nullable = false)
|
||||||
|
private int financialActivityType;
|
||||||
|
|
||||||
|
public static FinancialActivityAccount createNew(final GLAccount glAccount, final int financialAccountType) {
|
||||||
|
return new FinancialActivityAccount(glAccount, financialAccountType);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected FinancialActivityAccount() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
private FinancialActivityAccount(final GLAccount glAccount, final int financialAccountType) {
|
||||||
|
this.glAccount = glAccount;
|
||||||
|
this.financialActivityType = financialAccountType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GLAccount glAccount() {
|
||||||
|
return this.glAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateGlAccount(final GLAccount glAccount) {
|
||||||
|
this.glAccount = glAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFinancialActivityType() {
|
||||||
|
return this.financialActivityType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* 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.accounting.accountmapping.domain;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
|
public interface FinancialActivityAccountRepository extends JpaRepository<FinancialActivityAccount, Long>,
|
||||||
|
JpaSpecificationExecutor<FinancialActivityAccount> {
|
||||||
|
|
||||||
|
@Query("from FinancialActivityAccount faa where faa.financialActivityType = :financialActivityType")
|
||||||
|
FinancialActivityAccount findByFinancialActivityType(@Param("financialActivityType") int financialAccountType);
|
||||||
|
|
||||||
|
}
|
||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* 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.accounting.accountmapping.domain;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.mifosplatform.accounting.accountmapping.exception.FinancialActivityAccountNotFoundException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Wrapper for {@link FinancialActivityAccountRepository} that adds NULL
|
||||||
|
* checking and Error handling capabilities
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class FinancialActivityAccountRepositoryWrapper {
|
||||||
|
|
||||||
|
private final FinancialActivityAccountRepository repository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public FinancialActivityAccountRepositoryWrapper(final FinancialActivityAccountRepository repository) {
|
||||||
|
this.repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FinancialActivityAccount findOneWithNotFoundDetection(final Long id) {
|
||||||
|
final FinancialActivityAccount financialActivityAccount = this.repository.findOne(id);
|
||||||
|
if (financialActivityAccount == null) { throw new FinancialActivityAccountNotFoundException(id); }
|
||||||
|
return financialActivityAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FinancialActivityAccount findByFinancialActivityType(final int financialActivityType) {
|
||||||
|
return this.repository.findByFinancialActivityType(financialActivityType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FinancialActivityAccount> findAll() {
|
||||||
|
return this.repository.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save(final FinancialActivityAccount entity) {
|
||||||
|
this.repository.save(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveAndFlush(final FinancialActivityAccount entity) {
|
||||||
|
this.repository.saveAndFlush(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(final FinancialActivityAccount entity) {
|
||||||
|
this.repository.delete(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
-69
@@ -1,69 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.accounting.accountmapping.domain;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.FetchType;
|
|
||||||
import javax.persistence.JoinColumn;
|
|
||||||
import javax.persistence.ManyToOne;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
|
|
||||||
import org.mifosplatform.accounting.glaccount.domain.GLAccount;
|
|
||||||
import org.mifosplatform.organisation.office.domain.Office;
|
|
||||||
import org.springframework.data.jpa.domain.AbstractPersistable;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "acc_gl_office_mapping")
|
|
||||||
public class OfficeToGLAccountMapping extends AbstractPersistable<Long> {
|
|
||||||
|
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
|
||||||
@JoinColumn(name = "gl_account_id")
|
|
||||||
private GLAccount glAccount;
|
|
||||||
|
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
|
||||||
@JoinColumn(name = "office_id")
|
|
||||||
private Office office;
|
|
||||||
|
|
||||||
@Column(name = "financial_account_type", nullable = false)
|
|
||||||
private int financialAccountType;
|
|
||||||
|
|
||||||
public static OfficeToGLAccountMapping createNew(final GLAccount glAccount, final Office office, final int financialAccountType) {
|
|
||||||
return new OfficeToGLAccountMapping(glAccount, office, financialAccountType);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected OfficeToGLAccountMapping() {
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
private OfficeToGLAccountMapping(final GLAccount glAccount, final Office office, final int financialAccountType) {
|
|
||||||
this.glAccount = glAccount;
|
|
||||||
this.office = office;
|
|
||||||
this.financialAccountType = financialAccountType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GLAccount glAccount() {
|
|
||||||
return this.glAccount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateGlAccount(final GLAccount glAccount) {
|
|
||||||
this.glAccount = glAccount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Office office() {
|
|
||||||
return this.office;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateOffice(Office office) {
|
|
||||||
this.office = office;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getFinancialAccountType() {
|
|
||||||
return this.financialAccountType;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.accounting.accountmapping.domain;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
|
||||||
import org.springframework.data.repository.query.Param;
|
|
||||||
|
|
||||||
public interface OfficeToGLAccountMappingRepository extends JpaRepository<OfficeToGLAccountMapping, Long>,
|
|
||||||
JpaSpecificationExecutor<OfficeToGLAccountMapping> {
|
|
||||||
|
|
||||||
@Query("from OfficeToGLAccountMapping otga where otga.office.id = :officeId and otga.financialAccountType = :financialAccountType")
|
|
||||||
OfficeToGLAccountMapping findByOfficeAndFinancialAccountType(@Param("officeId")Long officeId,@Param("financialAccountType") int financialAccountType);
|
|
||||||
|
|
||||||
@Query("from OfficeToGLAccountMapping otga where otga.office.id =:officeId")
|
|
||||||
List<OfficeToGLAccountMapping> findByOffice(@Param("officeId")Long officeId);
|
|
||||||
}
|
|
||||||
-55
@@ -1,55 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.accounting.accountmapping.domain;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.mifosplatform.accounting.accountmapping.exception.OfficeToGLAccountMappingNotFoundException;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Wrapper for {@link OfficeToGLAccountMappingRepository} that adds NULL
|
|
||||||
* checking and Error handling capabilities
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class OfficeToGLAccountMappingRepositoryWrapper {
|
|
||||||
|
|
||||||
private final OfficeToGLAccountMappingRepository repository;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public OfficeToGLAccountMappingRepositoryWrapper(final OfficeToGLAccountMappingRepository repository) {
|
|
||||||
this.repository = repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OfficeToGLAccountMapping findOneWithNotFoundDetection(final Long id) {
|
|
||||||
final OfficeToGLAccountMapping officeToGLAccountMapping = this.repository.findOne(id);
|
|
||||||
if (officeToGLAccountMapping == null) { throw new OfficeToGLAccountMappingNotFoundException(id); }
|
|
||||||
return officeToGLAccountMapping;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OfficeToGLAccountMapping findByOfficeAndFinancialAccountType(final Long officeId, final int financialAccountType) {
|
|
||||||
return this.repository.findByOfficeAndFinancialAccountType(officeId, financialAccountType);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<OfficeToGLAccountMapping> findByOffice(final Long officeId) {
|
|
||||||
return this.repository.findByOffice(officeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save(final OfficeToGLAccountMapping entity) {
|
|
||||||
this.repository.save(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveAndFlush(final OfficeToGLAccountMapping entity) {
|
|
||||||
this.repository.saveAndFlush(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void delete(final OfficeToGLAccountMapping entity) {
|
|
||||||
this.repository.delete(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+4
-4
@@ -11,11 +11,11 @@ import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRul
|
|||||||
* A {@link RuntimeException} thrown when product to GL account mapping are not
|
* A {@link RuntimeException} thrown when product to GL account mapping are not
|
||||||
* found.
|
* found.
|
||||||
*/
|
*/
|
||||||
public class DuplicateOfficeToGLAccountMappingFoundException extends AbstractPlatformDomainRuleException {
|
public class DuplicateFinancialActivityAccountFoundException extends AbstractPlatformDomainRuleException {
|
||||||
|
|
||||||
public DuplicateOfficeToGLAccountMappingFoundException(final Long officeId, final Integer accountType) {
|
public DuplicateFinancialActivityAccountFoundException(final Integer financialActivityType) {
|
||||||
super("error.msg.officeToAccountMapping.exists.for.office", "Mapping for office with Id " + officeId
|
super("error.msg.officeToAccountMapping.exists.for.office", "Mapping for activity already exists " + financialActivityType,
|
||||||
+ " exist for an account of type " + accountType, officeId, accountType);
|
financialActivityType);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+3
-3
@@ -11,14 +11,14 @@ import org.mifosplatform.infrastructure.core.exception.AbstractPlatformResourceN
|
|||||||
* A {@link RuntimeException} thrown when product to GL account mapping are not
|
* A {@link RuntimeException} thrown when product to GL account mapping are not
|
||||||
* found.
|
* found.
|
||||||
*/
|
*/
|
||||||
public class OfficeToGLAccountMappingNotFoundException extends AbstractPlatformResourceNotFoundException {
|
public class FinancialActivityAccountNotFoundException extends AbstractPlatformResourceNotFoundException {
|
||||||
|
|
||||||
public OfficeToGLAccountMappingNotFoundException(final Long officeId, final String accountType) {
|
public FinancialActivityAccountNotFoundException(final Long officeId, final String accountType) {
|
||||||
super("error.msg.officeToAccountMapping.not.found", "Mapping for office with Id " + officeId
|
super("error.msg.officeToAccountMapping.not.found", "Mapping for office with Id " + officeId
|
||||||
+ " does not exist for an account of type " + accountType, officeId, accountType);
|
+ " does not exist for an account of type " + accountType, officeId, accountType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OfficeToGLAccountMappingNotFoundException(final Long id) {
|
public FinancialActivityAccountNotFoundException(final Long id) {
|
||||||
super("error.msg.officeToAccountMapping.not.found", "Mapping for GL Account with Id " + id + " does not exist", id);
|
super("error.msg.officeToAccountMapping.not.found", "Mapping for GL Account with Id " + id + " does not exist", id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+5
-5
@@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.mifosplatform.accounting.accountmapping.handler;
|
package org.mifosplatform.accounting.accountmapping.handler;
|
||||||
|
|
||||||
import org.mifosplatform.accounting.accountmapping.service.OfficeToGLAccountMappingWritePlatformService;
|
import org.mifosplatform.accounting.accountmapping.service.FinancialActivityAccountWritePlatformService;
|
||||||
import org.mifosplatform.commands.handler.NewCommandSourceHandler;
|
import org.mifosplatform.commands.handler.NewCommandSourceHandler;
|
||||||
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||||
@@ -14,12 +14,12 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class CreateOfficeToGLAccountMappingHandler implements NewCommandSourceHandler {
|
public class CreateFinancialActivityAccountHandler implements NewCommandSourceHandler {
|
||||||
|
|
||||||
private final OfficeToGLAccountMappingWritePlatformService writePlatformService;
|
private final FinancialActivityAccountWritePlatformService writePlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public CreateOfficeToGLAccountMappingHandler(final OfficeToGLAccountMappingWritePlatformService writePlatformService) {
|
public CreateFinancialActivityAccountHandler(final FinancialActivityAccountWritePlatformService writePlatformService) {
|
||||||
this.writePlatformService = writePlatformService;
|
this.writePlatformService = writePlatformService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,6 +27,6 @@ public class CreateOfficeToGLAccountMappingHandler implements NewCommandSourceHa
|
|||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult processCommand(final JsonCommand command) {
|
public CommandProcessingResult processCommand(final JsonCommand command) {
|
||||||
|
|
||||||
return this.writePlatformService.createGLAccountMapping(command);
|
return this.writePlatformService.createGLAccountActivityMapping(command);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+5
-5
@@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.mifosplatform.accounting.accountmapping.handler;
|
package org.mifosplatform.accounting.accountmapping.handler;
|
||||||
|
|
||||||
import org.mifosplatform.accounting.accountmapping.service.OfficeToGLAccountMappingWritePlatformService;
|
import org.mifosplatform.accounting.accountmapping.service.FinancialActivityAccountWritePlatformService;
|
||||||
import org.mifosplatform.commands.handler.NewCommandSourceHandler;
|
import org.mifosplatform.commands.handler.NewCommandSourceHandler;
|
||||||
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||||
@@ -14,18 +14,18 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class DeleteOfficeToGLAccountMappingCommandHandler implements NewCommandSourceHandler {
|
public class DeleteFinancialActivityAccountCommandHandler implements NewCommandSourceHandler {
|
||||||
|
|
||||||
private final OfficeToGLAccountMappingWritePlatformService writePlatformService;
|
private final FinancialActivityAccountWritePlatformService writePlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DeleteOfficeToGLAccountMappingCommandHandler(final OfficeToGLAccountMappingWritePlatformService writePlatformService) {
|
public DeleteFinancialActivityAccountCommandHandler(final FinancialActivityAccountWritePlatformService writePlatformService) {
|
||||||
this.writePlatformService = writePlatformService;
|
this.writePlatformService = writePlatformService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult processCommand(final JsonCommand command) {
|
public CommandProcessingResult processCommand(final JsonCommand command) {
|
||||||
return this.writePlatformService.deleteGLAccountMapping(command.entityId(), command);
|
return this.writePlatformService.deleteGLAccountActivityMapping(command.entityId(), command);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+5
-5
@@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.mifosplatform.accounting.accountmapping.handler;
|
package org.mifosplatform.accounting.accountmapping.handler;
|
||||||
|
|
||||||
import org.mifosplatform.accounting.accountmapping.service.OfficeToGLAccountMappingWritePlatformService;
|
import org.mifosplatform.accounting.accountmapping.service.FinancialActivityAccountWritePlatformService;
|
||||||
import org.mifosplatform.commands.handler.NewCommandSourceHandler;
|
import org.mifosplatform.commands.handler.NewCommandSourceHandler;
|
||||||
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||||
@@ -14,18 +14,18 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class UpdateOfficeToGLAccountMappingCommandHandler implements NewCommandSourceHandler {
|
public class UpdateFinancialActivityAccountCommandHandler implements NewCommandSourceHandler {
|
||||||
|
|
||||||
private final OfficeToGLAccountMappingWritePlatformService writePlatformService;
|
private final FinancialActivityAccountWritePlatformService writePlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public UpdateOfficeToGLAccountMappingCommandHandler(final OfficeToGLAccountMappingWritePlatformService writePlatformService) {
|
public UpdateFinancialActivityAccountCommandHandler(final FinancialActivityAccountWritePlatformService writePlatformService) {
|
||||||
this.writePlatformService = writePlatformService;
|
this.writePlatformService = writePlatformService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult processCommand(final JsonCommand command) {
|
public CommandProcessingResult processCommand(final JsonCommand command) {
|
||||||
return this.writePlatformService.updateGLAccountMapping(command.entityId(), command);
|
return this.writePlatformService.updateGLAccountActivityMapping(command.entityId(), command);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-11
@@ -27,18 +27,18 @@ import com.google.gson.JsonElement;
|
|||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public final class OfficeToGLAccountMappingDataValidator {
|
public final class FinancialActivityAccountDataValidator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The parameters supported for this command.
|
* The parameters supported for this command.
|
||||||
*/
|
*/
|
||||||
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("locale",
|
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("locale",
|
||||||
ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue(), "officeId"));
|
ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue()));
|
||||||
|
|
||||||
private final FromJsonHelper fromApiJsonHelper;
|
private final FromJsonHelper fromApiJsonHelper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public OfficeToGLAccountMappingDataValidator(final FromJsonHelper fromApiJsonHelper) {
|
public FinancialActivityAccountDataValidator(final FromJsonHelper fromApiJsonHelper) {
|
||||||
this.fromApiJsonHelper = fromApiJsonHelper;
|
this.fromApiJsonHelper = fromApiJsonHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,9 +58,6 @@ public final class OfficeToGLAccountMappingDataValidator {
|
|||||||
baseDataValidator.reset().parameter(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue())
|
baseDataValidator.reset().parameter(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue())
|
||||||
.value(liabilityTransferInSuspenseAccountId).notNull().integerGreaterThanZero();
|
.value(liabilityTransferInSuspenseAccountId).notNull().integerGreaterThanZero();
|
||||||
|
|
||||||
final Long officeID = this.fromApiJsonHelper.extractLongNamed("officeId", element);
|
|
||||||
baseDataValidator.reset().parameter("officeId").value(officeID).notNull().integerGreaterThanZero();
|
|
||||||
|
|
||||||
throwExceptionIfValidationWarningsExist(dataValidationErrors);
|
throwExceptionIfValidationWarningsExist(dataValidationErrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,11 +79,6 @@ public final class OfficeToGLAccountMappingDataValidator {
|
|||||||
.value(liabilityTransferInSuspenseAccountId).notNull().integerGreaterThanZero();
|
.value(liabilityTransferInSuspenseAccountId).notNull().integerGreaterThanZero();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.fromApiJsonHelper.parameterExists("officeId", element)) {
|
|
||||||
final Long officeID = this.fromApiJsonHelper.extractLongNamed("officeId", element);
|
|
||||||
baseDataValidator.reset().parameter("officeId").value(officeID).notNull().integerGreaterThanZero();
|
|
||||||
}
|
|
||||||
|
|
||||||
throwExceptionIfValidationWarningsExist(dataValidationErrors);
|
throwExceptionIfValidationWarningsExist(dataValidationErrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* 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.accounting.accountmapping.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.mifosplatform.accounting.accountmapping.data.FinancialActivityAccountData;
|
||||||
|
|
||||||
|
public interface FinancialActivityAccountReadPlatformService {
|
||||||
|
|
||||||
|
List<FinancialActivityAccountData> retrieveAll();
|
||||||
|
|
||||||
|
FinancialActivityAccountData retrieve(Long mappingId);
|
||||||
|
|
||||||
|
FinancialActivityAccountData retrieveTemplate();
|
||||||
|
|
||||||
|
}
|
||||||
+91
@@ -0,0 +1,91 @@
|
|||||||
|
package org.mifosplatform.accounting.accountmapping.service;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.mifosplatform.accounting.accountmapping.data.FinancialActivityAccountData;
|
||||||
|
import org.mifosplatform.accounting.accountmapping.exception.FinancialActivityAccountNotFoundException;
|
||||||
|
import org.mifosplatform.accounting.common.AccountingDropdownReadPlatformService;
|
||||||
|
import org.mifosplatform.accounting.glaccount.data.GLAccountData;
|
||||||
|
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
|
||||||
|
import org.mifosplatform.infrastructure.core.service.RoutingDataSource;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class FinancialActivityAccountReadPlatformServiceImpl implements FinancialActivityAccountReadPlatformService {
|
||||||
|
|
||||||
|
private final JdbcTemplate jdbcTemplate;
|
||||||
|
private final FinancialActivityAccountMapper financialActivityAccountMapper;
|
||||||
|
private final AccountingDropdownReadPlatformService accountingDropdownReadPlatformService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public FinancialActivityAccountReadPlatformServiceImpl(final RoutingDataSource dataSource,
|
||||||
|
final AccountingDropdownReadPlatformService accountingDropdownReadPlatformService) {
|
||||||
|
financialActivityAccountMapper = new FinancialActivityAccountMapper();
|
||||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
||||||
|
this.accountingDropdownReadPlatformService = accountingDropdownReadPlatformService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FinancialActivityAccountData> retrieveAll() {
|
||||||
|
String sql = "select " + financialActivityAccountMapper.schema();
|
||||||
|
return this.jdbcTemplate.query(sql, financialActivityAccountMapper, new Object[] {});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FinancialActivityAccountData retrieve(Long mappingId) {
|
||||||
|
try {
|
||||||
|
StringBuilder sqlBuilder = new StringBuilder(200);
|
||||||
|
sqlBuilder.append("select ");
|
||||||
|
sqlBuilder.append(this.financialActivityAccountMapper.schema());
|
||||||
|
sqlBuilder.append(" where faa.id=?");
|
||||||
|
return this.jdbcTemplate.queryForObject(sqlBuilder.toString(), this.financialActivityAccountMapper, new Object[] { mappingId });
|
||||||
|
} catch (final EmptyResultDataAccessException e) {
|
||||||
|
throw new FinancialActivityAccountNotFoundException(mappingId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FinancialActivityAccountData retrieveTemplate() {
|
||||||
|
final Map<String, List<GLAccountData>> accountOptions = this.accountingDropdownReadPlatformService.retrieveAccountMappingOptions();
|
||||||
|
return FinancialActivityAccountData.template(accountOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class FinancialActivityAccountMapper implements RowMapper<FinancialActivityAccountData> {
|
||||||
|
|
||||||
|
private final String sql;
|
||||||
|
|
||||||
|
public FinancialActivityAccountMapper() {
|
||||||
|
StringBuilder sb = new StringBuilder(300);
|
||||||
|
sb.append(" faa.id , glaccount.id as glAccountId,glaccount.name as glAccountName,glaccount.gl_code as glCode ");
|
||||||
|
sb.append(" from acc_gl_financial_activity_account faa ");
|
||||||
|
sb.append(" join acc_gl_account glaccount on glaccount.id = faa.gl_account_id");
|
||||||
|
sql = sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String schema() {
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FinancialActivityAccountData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||||
|
final Long id = JdbcSupport.getLong(rs, "id");
|
||||||
|
final Long glAccountId = JdbcSupport.getLong(rs, "glAccountId");
|
||||||
|
final String glAccountName = rs.getString("glAccountName");
|
||||||
|
final String glCode = rs.getString("glCode");
|
||||||
|
|
||||||
|
final GLAccountData gLAccountData = new GLAccountData(glAccountId, glAccountName, glCode);
|
||||||
|
|
||||||
|
final FinancialActivityAccountData accountMappingData = FinancialActivityAccountData.instance(id, gLAccountData);
|
||||||
|
return accountMappingData;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+4
-4
@@ -8,12 +8,12 @@ package org.mifosplatform.accounting.accountmapping.service;
|
|||||||
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||||
|
|
||||||
public interface OfficeToGLAccountMappingWritePlatformService {
|
public interface FinancialActivityAccountWritePlatformService {
|
||||||
|
|
||||||
CommandProcessingResult createGLAccountMapping(JsonCommand command);
|
CommandProcessingResult createGLAccountActivityMapping(JsonCommand command);
|
||||||
|
|
||||||
CommandProcessingResult updateGLAccountMapping(Long mappingId, JsonCommand command);
|
CommandProcessingResult updateGLAccountActivityMapping(Long mappingId, JsonCommand command);
|
||||||
|
|
||||||
CommandProcessingResult deleteGLAccountMapping(Long mappingId, JsonCommand command);
|
CommandProcessingResult deleteGLAccountActivityMapping(Long mappingId, JsonCommand command);
|
||||||
|
|
||||||
}
|
}
|
||||||
+36
-52
@@ -3,11 +3,10 @@ package org.mifosplatform.accounting.accountmapping.service;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.mifosplatform.accounting.accountmapping.domain.OfficeToGLAccountMapping;
|
import org.mifosplatform.accounting.accountmapping.domain.FinancialActivityAccount;
|
||||||
import org.mifosplatform.accounting.accountmapping.domain.OfficeToGLAccountMappingRepositoryWrapper;
|
import org.mifosplatform.accounting.accountmapping.domain.FinancialActivityAccountRepositoryWrapper;
|
||||||
import org.mifosplatform.accounting.accountmapping.exception.DuplicateOfficeToGLAccountMappingFoundException;
|
import org.mifosplatform.accounting.accountmapping.exception.DuplicateFinancialActivityAccountFoundException;
|
||||||
import org.mifosplatform.accounting.accountmapping.exception.MappingUpdateNotSupportedException;
|
import org.mifosplatform.accounting.accountmapping.serialization.FinancialActivityAccountDataValidator;
|
||||||
import org.mifosplatform.accounting.accountmapping.serialization.OfficeToGLAccountMappingDataValidator;
|
|
||||||
import org.mifosplatform.accounting.common.AccountingConstants.ORGANIZATION_ACCOUNTING_PARAMS;
|
import org.mifosplatform.accounting.common.AccountingConstants.ORGANIZATION_ACCOUNTING_PARAMS;
|
||||||
import org.mifosplatform.accounting.common.AccountingConstants.ORGANIZATION_ACCOUNTS;
|
import org.mifosplatform.accounting.common.AccountingConstants.ORGANIZATION_ACCOUNTS;
|
||||||
import org.mifosplatform.accounting.glaccount.domain.GLAccount;
|
import org.mifosplatform.accounting.glaccount.domain.GLAccount;
|
||||||
@@ -18,72 +17,64 @@ import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
|||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder;
|
||||||
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
|
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
|
||||||
import org.mifosplatform.organisation.office.domain.Office;
|
|
||||||
import org.mifosplatform.organisation.office.domain.OfficeRepositoryWrapper;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class OfficeToGLAccountMappingWritePlatformServiceImpl implements OfficeToGLAccountMappingWritePlatformService {
|
public class FinancialActivityAccountWritePlatformServiceImpl implements FinancialActivityAccountWritePlatformService {
|
||||||
|
|
||||||
private final OfficeToGLAccountMappingRepositoryWrapper accountMappingRepository;
|
private final FinancialActivityAccountRepositoryWrapper financialActivityAccountRepository;
|
||||||
private final OfficeToGLAccountMappingDataValidator fromApiJsonDeserializer;
|
private final FinancialActivityAccountDataValidator fromApiJsonDeserializer;
|
||||||
private final FromJsonHelper fromApiJsonHelper;
|
private final FromJsonHelper fromApiJsonHelper;
|
||||||
private final GLAccountRepositoryWrapper glAccountRepositoryWrapper;
|
private final GLAccountRepositoryWrapper glAccountRepositoryWrapper;
|
||||||
private final OfficeRepositoryWrapper officeRepositoryWrapper;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public OfficeToGLAccountMappingWritePlatformServiceImpl(final OfficeToGLAccountMappingRepositoryWrapper accountMappingRepository,
|
public FinancialActivityAccountWritePlatformServiceImpl(
|
||||||
final OfficeToGLAccountMappingDataValidator fromApiJsonDeserializer, final FromJsonHelper fromApiJsonHelper,
|
final FinancialActivityAccountRepositoryWrapper financialActivityAccountRepository,
|
||||||
final GLAccountRepositoryWrapper glAccountRepositoryWrapper, final OfficeRepositoryWrapper officeRepositoryWrapper) {
|
final FinancialActivityAccountDataValidator fromApiJsonDeserializer, final FromJsonHelper fromApiJsonHelper,
|
||||||
this.accountMappingRepository = accountMappingRepository;
|
final GLAccountRepositoryWrapper glAccountRepositoryWrapper) {
|
||||||
|
this.financialActivityAccountRepository = financialActivityAccountRepository;
|
||||||
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
|
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
|
||||||
this.fromApiJsonHelper = fromApiJsonHelper;
|
this.fromApiJsonHelper = fromApiJsonHelper;
|
||||||
this.glAccountRepositoryWrapper = glAccountRepositoryWrapper;
|
this.glAccountRepositoryWrapper = glAccountRepositoryWrapper;
|
||||||
this.officeRepositoryWrapper = officeRepositoryWrapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult createGLAccountMapping(JsonCommand command) {
|
public CommandProcessingResult createGLAccountActivityMapping(JsonCommand command) {
|
||||||
|
|
||||||
this.fromApiJsonDeserializer.validateForCreate(command.json());
|
this.fromApiJsonDeserializer.validateForCreate(command.json());
|
||||||
final JsonElement element = this.fromApiJsonHelper.parse(command.json());
|
final JsonElement element = this.fromApiJsonHelper.parse(command.json());
|
||||||
final Long officeId = this.fromApiJsonHelper.extractLongNamed("officeId", element);
|
FinancialActivityAccount financialActivityAccount = createLiabilityTrasferSuspenceMapping(element);
|
||||||
final Office office = this.officeRepositoryWrapper.findOneWithNotFoundDetection(officeId);
|
checkForExistingMapping(financialActivityAccount);
|
||||||
OfficeToGLAccountMapping accountMapping = createLiabilityTrasferSuspenceMapping(office, element);
|
this.financialActivityAccountRepository.save(financialActivityAccount);
|
||||||
checkForExistingMapping(accountMapping);
|
|
||||||
this.accountMappingRepository.save(accountMapping);
|
|
||||||
return new CommandProcessingResultBuilder() //
|
return new CommandProcessingResultBuilder() //
|
||||||
.withCommandId(command.commandId()) //
|
.withCommandId(command.commandId()) //
|
||||||
.withEntityId(accountMapping.getId()) //
|
.withEntityId(financialActivityAccount.getId()) //
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkForExistingMapping(final OfficeToGLAccountMapping accountMapping) {
|
private void checkForExistingMapping(final FinancialActivityAccount financialActivityAccount) {
|
||||||
OfficeToGLAccountMapping existingMapping = this.accountMappingRepository.findByOfficeAndFinancialAccountType(accountMapping
|
FinancialActivityAccount existingMapping = this.financialActivityAccountRepository
|
||||||
.office().getId(), accountMapping.getFinancialAccountType());
|
.findByFinancialActivityType(financialActivityAccount.getFinancialActivityType());
|
||||||
if (existingMapping != null && !existingMapping.getId().equals(accountMapping.getId())) { throw new DuplicateOfficeToGLAccountMappingFoundException(
|
if (existingMapping != null) { throw new DuplicateFinancialActivityAccountFoundException(
|
||||||
accountMapping.office().getId(), accountMapping.getFinancialAccountType()); }
|
financialActivityAccount.getFinancialActivityType()); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult updateGLAccountMapping(Long mappingId, JsonCommand command) {
|
public CommandProcessingResult updateGLAccountActivityMapping(Long mappingId, JsonCommand command) {
|
||||||
this.fromApiJsonDeserializer.validateForUpdate(command.json());
|
this.fromApiJsonDeserializer.validateForUpdate(command.json());
|
||||||
final OfficeToGLAccountMapping officeToGLAccountMapping = this.accountMappingRepository.findOneWithNotFoundDetection(mappingId);
|
final FinancialActivityAccount financialActivityAccount = this.financialActivityAccountRepository
|
||||||
Map<String, Object> changes = findChanges(command, officeToGLAccountMapping);
|
.findOneWithNotFoundDetection(mappingId);
|
||||||
|
Map<String, Object> changes = findChanges(command, financialActivityAccount);
|
||||||
final JsonElement element = this.fromApiJsonHelper.parse(command.json());
|
final JsonElement element = this.fromApiJsonHelper.parse(command.json());
|
||||||
|
|
||||||
if (changes.containsKey(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue())) {
|
if (changes.containsKey(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue())) {
|
||||||
final GLAccount glAccount = fetchGLAccount(element, ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue(),
|
final GLAccount glAccount = fetchGLAccount(element, ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue(),
|
||||||
GLAccountType.LIABILITY);
|
GLAccountType.LIABILITY);
|
||||||
officeToGLAccountMapping.updateGlAccount(glAccount);
|
financialActivityAccount.updateGlAccount(glAccount);
|
||||||
}
|
this.financialActivityAccountRepository.save(financialActivityAccount);
|
||||||
|
|
||||||
if (!changes.isEmpty()) {
|
|
||||||
checkForExistingMapping(officeToGLAccountMapping);
|
|
||||||
this.accountMappingRepository.save(officeToGLAccountMapping);
|
|
||||||
}
|
}
|
||||||
return new CommandProcessingResultBuilder() //
|
return new CommandProcessingResultBuilder() //
|
||||||
.withCommandId(command.commandId()) //
|
.withCommandId(command.commandId()) //
|
||||||
@@ -93,20 +84,21 @@ public class OfficeToGLAccountMappingWritePlatformServiceImpl implements OfficeT
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult deleteGLAccountMapping(Long mappingId, JsonCommand command) {
|
public CommandProcessingResult deleteGLAccountActivityMapping(Long mappingId, JsonCommand command) {
|
||||||
final OfficeToGLAccountMapping officeToGLAccountMapping = this.accountMappingRepository.findOneWithNotFoundDetection(mappingId);
|
final FinancialActivityAccount officeToGLAccountMapping = this.financialActivityAccountRepository
|
||||||
this.accountMappingRepository.delete(officeToGLAccountMapping);
|
.findOneWithNotFoundDetection(mappingId);
|
||||||
|
this.financialActivityAccountRepository.delete(officeToGLAccountMapping);
|
||||||
return new CommandProcessingResultBuilder() //
|
return new CommandProcessingResultBuilder() //
|
||||||
.withCommandId(command.commandId()) //
|
.withCommandId(command.commandId()) //
|
||||||
.withEntityId(mappingId) //
|
.withEntityId(mappingId) //
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private OfficeToGLAccountMapping createLiabilityTrasferSuspenceMapping(final Office office, final JsonElement element) {
|
private FinancialActivityAccount createLiabilityTrasferSuspenceMapping(final JsonElement element) {
|
||||||
final GLAccount glAccount = fetchGLAccount(element, ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue(),
|
final GLAccount glAccount = fetchGLAccount(element, ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue(),
|
||||||
GLAccountType.LIABILITY);
|
GLAccountType.LIABILITY);
|
||||||
final Integer financialAccountType = ORGANIZATION_ACCOUNTS.LIABILITY_TRANSFER_SUSPENSE.getValue();
|
final Integer financialAccountType = ORGANIZATION_ACCOUNTS.LIABILITY_TRANSFER_SUSPENSE.getValue();
|
||||||
return OfficeToGLAccountMapping.createNew(glAccount, office, financialAccountType);
|
return FinancialActivityAccount.createNew(glAccount, financialAccountType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GLAccount fetchGLAccount(final JsonElement element, final String paramName, final GLAccountType expectedAccountType) {
|
private GLAccount fetchGLAccount(final JsonElement element, final String paramName, final GLAccountType expectedAccountType) {
|
||||||
@@ -133,19 +125,11 @@ public class OfficeToGLAccountMappingWritePlatformServiceImpl implements OfficeT
|
|||||||
return glAccount;
|
return glAccount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Object> findChanges(JsonCommand command, OfficeToGLAccountMapping accountMapping) {
|
public Map<String, Object> findChanges(JsonCommand command, FinancialActivityAccount financialActivityAccount) {
|
||||||
|
|
||||||
Map<String, Object> changes = new HashMap<String, Object>();
|
Map<String, Object> changes = new HashMap<String, Object>();
|
||||||
|
|
||||||
final String officeParamName = "officeId";
|
Long existingGLAccountId = financialActivityAccount.glAccount().getId();
|
||||||
Long existingOfficeId = accountMapping.office().getId();
|
|
||||||
if (command.isChangeInLongParameterNamed(officeParamName, existingOfficeId)) {
|
|
||||||
final Long newValue = command.longValueOfParameterNamed(officeParamName);
|
|
||||||
String defaultMsg = "Office updating not allowed ";
|
|
||||||
throw new MappingUpdateNotSupportedException("officeId", defaultMsg, newValue,existingOfficeId,accountMapping.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
Long existingGLAccountId = accountMapping.glAccount().getId();
|
|
||||||
if (command
|
if (command
|
||||||
.isChangeInLongParameterNamed(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue(), existingGLAccountId)) {
|
.isChangeInLongParameterNamed(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue(), existingGLAccountId)) {
|
||||||
final Long newValue = command.longValueOfParameterNamed(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue());
|
final Long newValue = command.longValueOfParameterNamed(ORGANIZATION_ACCOUNTING_PARAMS.LIABILITY_TRANSFER_SUSPENSE.getValue());
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.accounting.accountmapping.service;
|
|
||||||
|
|
||||||
|
|
||||||
import org.mifosplatform.accounting.accountmapping.data.OfficeToGLAccountMappingData;
|
|
||||||
import org.mifosplatform.infrastructure.core.service.Page;
|
|
||||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
|
||||||
|
|
||||||
public interface OfficeToGLAccountMappingReadPlatformService {
|
|
||||||
|
|
||||||
Page<OfficeToGLAccountMappingData> retrieveAll(final SearchParameters searchParameters);
|
|
||||||
|
|
||||||
OfficeToGLAccountMappingData retrieve(Long mappingId);
|
|
||||||
|
|
||||||
OfficeToGLAccountMappingData retrieveTemplate();
|
|
||||||
|
|
||||||
}
|
|
||||||
-136
@@ -1,136 +0,0 @@
|
|||||||
package org.mifosplatform.accounting.accountmapping.service;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.joda.time.LocalDate;
|
|
||||||
import org.mifosplatform.accounting.accountmapping.data.OfficeToGLAccountMappingData;
|
|
||||||
import org.mifosplatform.accounting.accountmapping.exception.OfficeToGLAccountMappingNotFoundException;
|
|
||||||
import org.mifosplatform.accounting.common.AccountingDropdownReadPlatformService;
|
|
||||||
import org.mifosplatform.accounting.glaccount.data.GLAccountData;
|
|
||||||
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
|
|
||||||
import org.mifosplatform.infrastructure.core.service.Page;
|
|
||||||
import org.mifosplatform.infrastructure.core.service.PaginationHelper;
|
|
||||||
import org.mifosplatform.infrastructure.core.service.RoutingDataSource;
|
|
||||||
import org.mifosplatform.organisation.office.data.OfficeData;
|
|
||||||
import org.mifosplatform.organisation.office.service.OfficeReadPlatformService;
|
|
||||||
import org.mifosplatform.portfolio.group.service.SearchParameters;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.dao.EmptyResultDataAccessException;
|
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
|
||||||
import org.springframework.jdbc.core.RowMapper;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class OfficeToGLAccountMappingReadPlatformServiceImpl implements OfficeToGLAccountMappingReadPlatformService {
|
|
||||||
|
|
||||||
private final JdbcTemplate jdbcTemplate;
|
|
||||||
private final OfficeToGLAccountMappingMapper accountMappingMapper;
|
|
||||||
private final PaginationHelper<OfficeToGLAccountMappingData> paginationHelper = new PaginationHelper<OfficeToGLAccountMappingData>();
|
|
||||||
private final OfficeReadPlatformService officeReadPlatformService;
|
|
||||||
private final AccountingDropdownReadPlatformService accountingDropdownReadPlatformService;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public OfficeToGLAccountMappingReadPlatformServiceImpl(final RoutingDataSource dataSource,
|
|
||||||
final OfficeReadPlatformService officeReadPlatformService,
|
|
||||||
final AccountingDropdownReadPlatformService accountingDropdownReadPlatformService) {
|
|
||||||
accountMappingMapper = new OfficeToGLAccountMappingMapper();
|
|
||||||
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
|
||||||
this.officeReadPlatformService = officeReadPlatformService;
|
|
||||||
this.accountingDropdownReadPlatformService = accountingDropdownReadPlatformService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Page<OfficeToGLAccountMappingData> retrieveAll(final SearchParameters searchParameters) {
|
|
||||||
StringBuilder sqlBuilder = new StringBuilder(300);
|
|
||||||
sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
|
|
||||||
sqlBuilder.append(this.accountMappingMapper.schema());
|
|
||||||
Object[] finalObjectArray = {};
|
|
||||||
if (searchParameters.isOrderByRequested()) {
|
|
||||||
sqlBuilder.append(" order by ").append(searchParameters.getOrderBy());
|
|
||||||
|
|
||||||
if (searchParameters.isSortOrderProvided()) {
|
|
||||||
sqlBuilder.append(' ').append(searchParameters.getSortOrder());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchParameters.isLimited()) {
|
|
||||||
sqlBuilder.append(" limit ").append(searchParameters.getLimit());
|
|
||||||
if (searchParameters.isOffset()) {
|
|
||||||
sqlBuilder.append(" offset ").append(searchParameters.getOffset());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final String sqlCountRows = "SELECT FOUND_ROWS()";
|
|
||||||
return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sqlBuilder.toString(), finalObjectArray,
|
|
||||||
this.accountMappingMapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OfficeToGLAccountMappingData retrieve(Long mappingId) {
|
|
||||||
try {
|
|
||||||
StringBuilder sqlBuilder = new StringBuilder(200);
|
|
||||||
sqlBuilder.append("select ");
|
|
||||||
sqlBuilder.append(this.accountMappingMapper.schema());
|
|
||||||
sqlBuilder.append(" where om.id=?");
|
|
||||||
return this.jdbcTemplate.queryForObject(sqlBuilder.toString(), this.accountMappingMapper, new Object[] { mappingId });
|
|
||||||
} catch (final EmptyResultDataAccessException e) {
|
|
||||||
throw new OfficeToGLAccountMappingNotFoundException(mappingId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OfficeToGLAccountMappingData retrieveTemplate() {
|
|
||||||
Collection<OfficeData> officeOptions = this.officeReadPlatformService.retrieveAllOfficesForDropdown();
|
|
||||||
final Map<String, List<GLAccountData>> accountOptions = this.accountingDropdownReadPlatformService.retrieveAccountMappingOptions();
|
|
||||||
return OfficeToGLAccountMappingData.template(accountOptions, officeOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class OfficeToGLAccountMappingMapper implements RowMapper<OfficeToGLAccountMappingData> {
|
|
||||||
|
|
||||||
private final String sql;
|
|
||||||
|
|
||||||
public OfficeToGLAccountMappingMapper() {
|
|
||||||
StringBuilder sb = new StringBuilder(300);
|
|
||||||
sb.append("om.id , office.id as officeId, office.name as officeName, ");
|
|
||||||
sb.append(" glaccount.id as glAccountId,glaccount.name as glAccountName,glaccount.gl_code as glCode ");
|
|
||||||
sb.append(" from acc_gl_office_mapping om ");
|
|
||||||
sb.append("inner join m_office office on office.id = om.office_id ");
|
|
||||||
sb.append("inner join acc_gl_account glaccount on glaccount.id = om.gl_account_id");
|
|
||||||
sql = sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String schema() {
|
|
||||||
return sql;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OfficeToGLAccountMappingData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
|
||||||
final Long id = JdbcSupport.getLong(rs, "id");
|
|
||||||
final Long officeId = JdbcSupport.getLong(rs, "officeId");
|
|
||||||
final String officeName = rs.getString("officeName");
|
|
||||||
final String nameDecorated = null;
|
|
||||||
final String externalId = null;
|
|
||||||
final LocalDate openingDate = null;
|
|
||||||
final String hierarchy = null;
|
|
||||||
final Long parentId = null;
|
|
||||||
final String parentName = null;
|
|
||||||
final Collection<OfficeData> allowedParents = null;
|
|
||||||
final OfficeData officeData = new OfficeData(officeId, officeName, nameDecorated, externalId, openingDate, hierarchy, parentId,
|
|
||||||
parentName, allowedParents);
|
|
||||||
|
|
||||||
final Long glAccountId = JdbcSupport.getLong(rs, "glAccountId");
|
|
||||||
final String glAccountName = rs.getString("glAccountName");
|
|
||||||
final String glCode = rs.getString("glCode");
|
|
||||||
|
|
||||||
final GLAccountData gLAccountData = new GLAccountData(glAccountId, glAccountName, glCode);
|
|
||||||
|
|
||||||
final OfficeToGLAccountMappingData accountMappingData = OfficeToGLAccountMappingData.instance(id, officeData, gLAccountData);
|
|
||||||
return accountMappingData;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
+13
-13
@@ -14,9 +14,9 @@ import java.util.Map;
|
|||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
import org.mifosplatform.accounting.accountmapping.domain.OfficeToGLAccountMapping;
|
import org.mifosplatform.accounting.accountmapping.domain.FinancialActivityAccount;
|
||||||
import org.mifosplatform.accounting.accountmapping.domain.OfficeToGLAccountMappingRepository;
|
import org.mifosplatform.accounting.accountmapping.domain.FinancialActivityAccountRepository;
|
||||||
import org.mifosplatform.accounting.accountmapping.exception.OfficeToGLAccountMappingNotFoundException;
|
import org.mifosplatform.accounting.accountmapping.exception.FinancialActivityAccountNotFoundException;
|
||||||
import org.mifosplatform.accounting.closure.domain.GLClosure;
|
import org.mifosplatform.accounting.closure.domain.GLClosure;
|
||||||
import org.mifosplatform.accounting.closure.domain.GLClosureRepository;
|
import org.mifosplatform.accounting.closure.domain.GLClosureRepository;
|
||||||
import org.mifosplatform.accounting.common.AccountingConstants.ACCRUAL_ACCOUNTS_FOR_LOAN;
|
import org.mifosplatform.accounting.common.AccountingConstants.ACCRUAL_ACCOUNTS_FOR_LOAN;
|
||||||
@@ -61,7 +61,7 @@ public class AccountingProcessorHelper {
|
|||||||
public static final String SAVINGS_TRANSACTION_IDENTIFIER = "S";
|
public static final String SAVINGS_TRANSACTION_IDENTIFIER = "S";
|
||||||
private final JournalEntryRepository glJournalEntryRepository;
|
private final JournalEntryRepository glJournalEntryRepository;
|
||||||
private final ProductToGLAccountMappingRepository accountMappingRepository;
|
private final ProductToGLAccountMappingRepository accountMappingRepository;
|
||||||
private final OfficeToGLAccountMappingRepository officeToGLAccountMappingRepository;
|
private final FinancialActivityAccountRepository officeToGLAccountMappingRepository;
|
||||||
private final GLClosureRepository closureRepository;
|
private final GLClosureRepository closureRepository;
|
||||||
private final OfficeRepository officeRepository;
|
private final OfficeRepository officeRepository;
|
||||||
private final LoanTransactionRepository loanTransactionRepository;
|
private final LoanTransactionRepository loanTransactionRepository;
|
||||||
@@ -73,7 +73,7 @@ public class AccountingProcessorHelper {
|
|||||||
final ProductToGLAccountMappingRepository accountMappingRepository, final GLClosureRepository closureRepository,
|
final ProductToGLAccountMappingRepository accountMappingRepository, final GLClosureRepository closureRepository,
|
||||||
final OfficeRepository officeRepository, final LoanTransactionRepository loanTransactionRepository,
|
final OfficeRepository officeRepository, final LoanTransactionRepository loanTransactionRepository,
|
||||||
final SavingsAccountTransactionRepository savingsAccountTransactionRepository,
|
final SavingsAccountTransactionRepository savingsAccountTransactionRepository,
|
||||||
final OfficeToGLAccountMappingRepository officeToGLAccountMappingRepository,
|
final FinancialActivityAccountRepository officeToGLAccountMappingRepository,
|
||||||
final AccountTransfersReadPlatformService accountTransfersReadPlatformService) {
|
final AccountTransfersReadPlatformService accountTransfersReadPlatformService) {
|
||||||
this.glJournalEntryRepository = glJournalEntryRepository;
|
this.glJournalEntryRepository = glJournalEntryRepository;
|
||||||
this.accountMappingRepository = accountMappingRepository;
|
this.accountMappingRepository = accountMappingRepository;
|
||||||
@@ -572,11 +572,11 @@ public class AccountingProcessorHelper {
|
|||||||
Long officeId) {
|
Long officeId) {
|
||||||
GLAccount glAccount = null;
|
GLAccount glAccount = null;
|
||||||
if (isOrganizationAccount(accountMappingTypeId)) {
|
if (isOrganizationAccount(accountMappingTypeId)) {
|
||||||
OfficeToGLAccountMapping accountMapping = this.officeToGLAccountMappingRepository.findByOfficeAndFinancialAccountType(officeId,
|
FinancialActivityAccount financialActivityAccount = this.officeToGLAccountMappingRepository
|
||||||
accountMappingTypeId);
|
.findByFinancialActivityType(accountMappingTypeId);
|
||||||
if (accountMapping == null) { throw new OfficeToGLAccountMappingNotFoundException(officeId,
|
if (financialActivityAccount == null) { throw new FinancialActivityAccountNotFoundException(officeId,
|
||||||
String.valueOf(accountMappingTypeId)); }
|
String.valueOf(accountMappingTypeId)); }
|
||||||
glAccount = accountMapping.glAccount();
|
glAccount = financialActivityAccount.glAccount();
|
||||||
} else {
|
} else {
|
||||||
ProductToGLAccountMapping accountMapping = this.accountMappingRepository.findCoreProductToFinAccountMapping(loanProductId,
|
ProductToGLAccountMapping accountMapping = this.accountMappingRepository.findCoreProductToFinAccountMapping(loanProductId,
|
||||||
PortfolioProductType.LOAN.getValue(), accountMappingTypeId);
|
PortfolioProductType.LOAN.getValue(), accountMappingTypeId);
|
||||||
@@ -652,11 +652,11 @@ public class AccountingProcessorHelper {
|
|||||||
final Long paymentTypeId, Long officeId) {
|
final Long paymentTypeId, Long officeId) {
|
||||||
GLAccount glAccount = null;
|
GLAccount glAccount = null;
|
||||||
if (isOrganizationAccount(accountMappingTypeId)) {
|
if (isOrganizationAccount(accountMappingTypeId)) {
|
||||||
OfficeToGLAccountMapping accountMapping = this.officeToGLAccountMappingRepository.findByOfficeAndFinancialAccountType(officeId,
|
FinancialActivityAccount financialActivityAccount = this.officeToGLAccountMappingRepository
|
||||||
accountMappingTypeId);
|
.findByFinancialActivityType(accountMappingTypeId);
|
||||||
if (accountMapping == null) { throw new OfficeToGLAccountMappingNotFoundException(officeId,
|
if (financialActivityAccount == null) { throw new FinancialActivityAccountNotFoundException(officeId,
|
||||||
String.valueOf(accountMappingTypeId)); }
|
String.valueOf(accountMappingTypeId)); }
|
||||||
glAccount = accountMapping.glAccount();
|
glAccount = financialActivityAccount.glAccount();
|
||||||
} else {
|
} else {
|
||||||
ProductToGLAccountMapping accountMapping = this.accountMappingRepository.findCoreProductToFinAccountMapping(savingsProductId,
|
ProductToGLAccountMapping accountMapping = this.accountMappingRepository.findCoreProductToFinAccountMapping(savingsProductId,
|
||||||
PortfolioProductType.SAVING.getValue(), accountMappingTypeId);
|
PortfolioProductType.SAVING.getValue(), accountMappingTypeId);
|
||||||
|
|||||||
+3
-3
@@ -790,11 +790,11 @@ public class SynchronousCommandProcessingService implements CommandProcessingSer
|
|||||||
|
|
||||||
} else if (wrapper.isOfficeToGLAccountMapping()) {
|
} else if (wrapper.isOfficeToGLAccountMapping()) {
|
||||||
if (wrapper.isCreate()) {
|
if (wrapper.isCreate()) {
|
||||||
handler = this.applicationContext.getBean("createOfficeToGLAccountMappingHandler", NewCommandSourceHandler.class);
|
handler = this.applicationContext.getBean("createFinancialActivityAccountHandler", NewCommandSourceHandler.class);
|
||||||
} else if (wrapper.isUpdate()) {
|
} else if (wrapper.isUpdate()) {
|
||||||
handler = this.applicationContext.getBean("updateOfficeToGLAccountMappingCommandHandler", NewCommandSourceHandler.class);
|
handler = this.applicationContext.getBean("updateFinancialActivityAccountCommandHandler", NewCommandSourceHandler.class);
|
||||||
} else if (wrapper.isDelete()) {
|
} else if (wrapper.isDelete()) {
|
||||||
handler = this.applicationContext.getBean("deleteOfficeToGLAccountMappingCommandHandler", NewCommandSourceHandler.class);
|
handler = this.applicationContext.getBean("deleteFinancialActivityAccountCommandHandler", NewCommandSourceHandler.class);
|
||||||
} else {
|
} else {
|
||||||
throw new UnsupportedCommandException(wrapper.commandName());
|
throw new UnsupportedCommandException(wrapper.commandName());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user