Farooq Ayoade created FINERACT-2653:
---------------------------------------

             Summary: DELETE /provisioningcategory/{id} fails with "The 
parameter categoryname is mandatory" and never deletes the category
                 Key: FINERACT-2653
                 URL: https://issues.apache.org/jira/browse/FINERACT-2653
             Project: Apache Fineract
          Issue Type: Bug
          Components: Accounting
            Reporter: Farooq Ayoade


h3. Observed behavior

Deleting a loan-loss provisioning category always returns HTTP 400, regardless 
of input:
The parameter `categoryname` is mandatory.
 
The category is never deleted.
h3. Expected behavior
 * Deleting an unused category succeeds.
 * Deleting a category referenced by a loan product returns the proper domain 
error 
({{{}error.msg.provisioningcategory.cannot.be.deleted.it.is.already.used.in.loanproduct{}}}
 — "This provisioning category cannot be deleted; it is already used in a loan 
product"), *not* the misleading {{categoryname}} validation error.
 * Deleting a non-existent ID returns *404 Not Found* 
({{{}ProvisioningCategoryNotFoundException{}}}).

h3. Steps to reproduce
 # Create a category: {{POST /fineract-provider/api/v1/provisioningcategory}} 
with body {{{}{"categoryname":"Test","description":"x"}{}}}.
 # Delete it: {{DELETE 
/fineract-provider/api/v1/provisioningcategory/\{categoryId}}} (no body).
 # Observe HTTP 400: {{{}The parameter \{}}}categoryname` is mandatory.` The 
row remains in the database.
h3. Root cause

{{{}ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.deleteProvisioningCateogry(JsonCommand){}}}:

 

 

public CommandProcessingResult deleteProvisioningCateogry(JsonCommand command) {
    this.fromApiJsonDeserializer.validateForCreate(command.json());             
     // BUG 1
    final ProvisioningCategory provisioningCategory = 
ProvisioningCategory.fromJson(command); // BUG 2
    boolean isProvisioningCategoryInUse =
        
isAnyLoanProductsAssociateWithThisProvisioningCategory(provisioningCategory.getId());
    ...
    this.provisioningCategoryRepository.delete(provisioningCategory);
    return new 
CommandProcessingResultBuilder().withEntityId(provisioningCategory.getId()).build();
}

{{}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to