From 55095f47ba8c70d61fd5ea20f8fabe6f0e9bf4f0 Mon Sep 17 00:00:00 2001 From: madhukar Date: Mon, 6 Aug 2012 12:21:20 +0530 Subject: [PATCH] delete a saving product --- .../platform/api/SavingProductsApiResource.java | 12 ++++++++++++ .../exceptions/ProductNotFoundException.java | 9 +++++++++ .../platform/saving/domain/SavingProduct.java | 11 +++++++++++ .../SavingProductReadPlatformServiceImpl.java | 2 +- .../SavingProductWritePlatformService.java | 3 +++ ...ductWritePlatformServiceJpaRepositoryImpl.java | 15 +++++++++++++++ .../src/test/resources/META-INF/context.xml | 2 +- 7 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/exceptions/ProductNotFoundException.java diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/SavingProductsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/SavingProductsApiResource.java index cfd88aed4..83bd37fb2 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/SavingProductsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/SavingProductsApiResource.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.Set; import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; @@ -127,4 +128,15 @@ public class SavingProductsApiResource { return this.apiDataConversionService.convertSavingProductDataToJson(prettyPrint, responseParameters, savingProduct); } + + @DELETE + @Path("{productId}") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response deleteProduct(@PathParam("productId") final Long productId) { + + this.savingProductWritePlatformService.deleteSavingProduct(productId); + + return Response.ok(new EntityIdentifier(productId)).build(); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/ProductNotFoundException.java b/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/ProductNotFoundException.java new file mode 100644 index 000000000..c985ca485 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/ProductNotFoundException.java @@ -0,0 +1,9 @@ +package org.mifosng.platform.exceptions; + +public class ProductNotFoundException extends AbstractPlatformResourceNotFoundException{ + + public ProductNotFoundException(Long id) { + super("error.msg.product.id.invalid", "Product with identifier " + id + " does not exist", id); + } + +} diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/saving/domain/SavingProduct.java b/mifosng-provider/src/main/java/org/mifosng/platform/saving/domain/SavingProduct.java index 966ca2977..a1be4d14f 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/saving/domain/SavingProduct.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/saving/domain/SavingProduct.java @@ -23,6 +23,9 @@ public class SavingProduct extends AbstractAuditableCustom { @Column(name = "description") private String description; + @Column(name = "is_deleted", nullable=false) + private boolean deleted = false; + @Embedded SavingProductRelatedDetail savingProductRelatedDetail; @@ -57,6 +60,14 @@ public class SavingProduct extends AbstractAuditableCustom { public BigDecimal getInterestRate(){ return this.savingProductRelatedDetail.getInterestRate(); } + + public boolean isDeleted() { + return deleted; + } + + public void delete() { + this.deleted = true; + } public void update(final SavingProductCommand command) { diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductReadPlatformServiceImpl.java index c3f68579a..ca861fdea 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductReadPlatformServiceImpl.java @@ -95,7 +95,7 @@ public class SavingProductReadPlatformServiceImpl implements } public String savingProductSchema(){ - return "sp.id as id,sp.name as name, sp.description as description,sp.currency_code as currencyCode, sp.currency_digits as currencyDigits,sp.interest_rate as interestRate,sp.created_date as createdon, sp.lastmodified_date as modifiedon," + return "sp.id as id,sp.name as name, sp.description as description,sp.currency_code as currencyCode, sp.currency_digits as currencyDigits,sp.interest_rate as interestRate,sp.created_date as createdon, sp.lastmodified_date as modifiedon, sp.is_deleted as isdeleted, " + "curr.name as currencyName, curr.internationalized_name_code as currencyNameCode, curr.display_symbol as currencyDisplaySymbol" + " from portfolio_product_savings sp join ref_currency curr on curr.code = sp.currency_code"; } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformService.java b/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformService.java index 46d369137..9e05a91a1 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformService.java @@ -10,4 +10,7 @@ public interface SavingProductWritePlatformService { @PreAuthorize(value = "hasRole('ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE')") EntityIdentifier updateSavingProduct(SavingProductCommand command); + + @PreAuthorize(value = "hasRole('ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE')") + EntityIdentifier deleteSavingProduct(Long productId); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformServiceJpaRepositoryImpl.java index df72caa91..317a9d3ef 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/savingproduct/service/SavingProductWritePlatformServiceJpaRepositoryImpl.java @@ -3,6 +3,7 @@ package org.mifosng.platform.savingproduct.service; import org.mifosng.platform.api.commands.SavingProductCommand; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.currency.domain.MonetaryCurrency; +import org.mifosng.platform.exceptions.ProductNotFoundException; import org.mifosng.platform.exceptions.SavingProductNotFoundException; import org.mifosng.platform.saving.domain.SavingProduct; import org.mifosng.platform.saving.domain.SavingProductRepository; @@ -54,4 +55,18 @@ public class SavingProductWritePlatformServiceJpaRepositoryImpl implements Savin this.savingProductRepository.save(product); return new EntityIdentifier(Long.valueOf(product.getId())); } + + @Transactional + @Override + public EntityIdentifier deleteSavingProduct(Long productId) { + SavingProduct product=this.savingProductRepository.findOne(productId); + if (product==null || product.isDeleted()) { + throw new ProductNotFoundException(productId); + } + product.delete(); + this.savingProductRepository.save(product); + return new EntityIdentifier(Long.valueOf(product.getId())); + } + + } \ No newline at end of file diff --git a/mifosng-provider/src/test/resources/META-INF/context.xml b/mifosng-provider/src/test/resources/META-INF/context.xml index d9556190e..7c0a42100 100644 --- a/mifosng-provider/src/test/resources/META-INF/context.xml +++ b/mifosng-provider/src/test/resources/META-INF/context.xml @@ -5,7 +5,7 @@ driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mifosplatform-tenants" username="root" - password="mysql" + password="mifos" validationQuery="select 1" maxActive="10" maxIdle="4"