Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,31 @@ public class HouseholdCircumstances {
@CCD
private YesOrNo dependantChildren;

@CCD
private IncomeExpenseDetails householdBills;

@CCD
private IncomeExpenseDetails loanPayments;

@CCD
private IncomeExpenseDetails childSpousalMaintenance;

@CCD
private IncomeExpenseDetails mobilePhone;

@CCD
private IncomeExpenseDetails groceryShopping;

@CCD
private IncomeExpenseDetails fuelParkingTransport;

@CCD
private IncomeExpenseDetails schoolCosts;

@CCD
private IncomeExpenseDetails clothing;

@CCD
private IncomeExpenseDetails otherExpenses;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import uk.gov.hmcts.ccd.sdk.api.CCD;
import uk.gov.hmcts.ccd.sdk.type.FieldType;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.annotation.JacksonMoneyGBP;

import java.math.BigDecimal;

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IncomeExpenseDetails {

@CCD
private YesOrNo applies;

@CCD(typeOverride = FieldType.MoneyGBP)
@JacksonMoneyGBP
private BigDecimal amount;

@CCD
private RecurrenceFrequency frequency;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim;

import lombok.AllArgsConstructor;
import lombok.Getter;
import uk.gov.hmcts.ccd.sdk.api.HasLabel;

/**
* Enum representing the recurrence frequency of income, benefits, and expenses.
*/
@AllArgsConstructor
@Getter
public enum RecurrenceFrequency implements HasLabel {
WEEKLY("Weekly"),
MONTHLY("Monthly");

private final String label;

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.hibernate.type.SqlTypes;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.RecurrenceFrequency;

import java.math.BigDecimal;
import java.time.LocalDate;
Expand Down Expand Up @@ -101,9 +102,84 @@ public class HouseholdCircumstancesEntity {

private String debtContributionFrequency;

private String regularExpenses;
@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo householdBills;

private BigDecimal householdBillsAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency householdBillsFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo loanPayments;

private BigDecimal loanPaymentsAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency loanPaymentsFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo childSpousalMaintenance;

private BigDecimal childSpousalMaintenanceAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency childSpousalMaintenanceFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo mobilePhone;

private BigDecimal mobilePhoneAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency mobilePhoneFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo groceryShopping;

private BigDecimal expenseAmount;
private BigDecimal groceryShoppingAmount;

private String expenseFrequency;
@Enumerated(EnumType.STRING)
private RecurrenceFrequency groceryShoppingFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo fuelParkingTransport;

private BigDecimal fuelParkingTransportAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency fuelParkingTransportFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo schoolCosts;

private BigDecimal schoolCostsAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency schoolCostsFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo clothing;

private BigDecimal clothingAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency clothingFrequency;

@Enumerated(EnumType.STRING)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private YesOrNo otherExpenses;

private BigDecimal otherExpensesAmount;

@Enumerated(EnumType.STRING)
private RecurrenceFrequency otherExpensesFrequency;
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,63 @@
package uk.gov.hmcts.reform.pcs.ccd.service.respondpossessionclaim;

import org.springframework.stereotype.Service;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.IncomeExpenseDetails;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.RecurrenceFrequency;
import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity;

import java.math.BigDecimal;

@Service
public class HouseholdCircumstancesService {

public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(HouseholdCircumstances circumstances) {
public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(HouseholdCircumstances hc) {

if (circumstances == null) {
if (hc == null) {
return null;
}

HouseholdCircumstancesEntity householdCircumstancesEntity = HouseholdCircumstancesEntity.builder()
.dependantChildren(circumstances.getDependantChildren())
return HouseholdCircumstancesEntity.builder()
.dependantChildren(hc.getDependantChildren())
.householdBills(getApplies(hc.getHouseholdBills()))
.householdBillsAmount(getAmountIfYes(hc.getHouseholdBills()))
.householdBillsFrequency(getFrequencyIfYes(hc.getHouseholdBills()))
.loanPayments(getApplies(hc.getLoanPayments()))
.loanPaymentsAmount(getAmountIfYes(hc.getLoanPayments()))
.loanPaymentsFrequency(getFrequencyIfYes(hc.getLoanPayments()))
.childSpousalMaintenance(getApplies(hc.getChildSpousalMaintenance()))
.childSpousalMaintenanceAmount(getAmountIfYes(hc.getChildSpousalMaintenance()))
.childSpousalMaintenanceFrequency(getFrequencyIfYes(hc.getChildSpousalMaintenance()))
.mobilePhone(getApplies(hc.getMobilePhone()))
.mobilePhoneAmount(getAmountIfYes(hc.getMobilePhone()))
.mobilePhoneFrequency(getFrequencyIfYes(hc.getMobilePhone()))
.groceryShopping(getApplies(hc.getGroceryShopping()))
.groceryShoppingAmount(getAmountIfYes(hc.getGroceryShopping()))
.groceryShoppingFrequency(getFrequencyIfYes(hc.getGroceryShopping()))
.fuelParkingTransport(getApplies(hc.getFuelParkingTransport()))
.fuelParkingTransportAmount(getAmountIfYes(hc.getFuelParkingTransport()))
.fuelParkingTransportFrequency(getFrequencyIfYes(hc.getFuelParkingTransport()))
.schoolCosts(getApplies(hc.getSchoolCosts()))
.schoolCostsAmount(getAmountIfYes(hc.getSchoolCosts()))
.schoolCostsFrequency(getFrequencyIfYes(hc.getSchoolCosts()))
.clothing(getApplies(hc.getClothing()))
.clothingAmount(getAmountIfYes(hc.getClothing()))
.clothingFrequency(getFrequencyIfYes(hc.getClothing()))
.otherExpenses(getApplies(hc.getOtherExpenses()))
.otherExpensesAmount(getAmountIfYes(hc.getOtherExpenses()))
.otherExpensesFrequency(getFrequencyIfYes(hc.getOtherExpenses()))
.build();
}

private YesOrNo getApplies(IncomeExpenseDetails details) {
return details != null ? details.getApplies() : null;
}

private BigDecimal getAmountIfYes(IncomeExpenseDetails details) {
return details != null && YesOrNo.YES.equals(details.getApplies()) ? details.getAmount() : null;
}

return householdCircumstancesEntity;
private RecurrenceFrequency getFrequencyIfYes(IncomeExpenseDetails details) {
return details != null && YesOrNo.YES.equals(details.getApplies()) ? details.getFrequency() : null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
ALTER TABLE household_circumstances
ADD COLUMN household_bills YES_NO,
ADD COLUMN household_bills_amount DECIMAL(18,2),
ADD COLUMN household_bills_frequency VARCHAR(10),

ADD COLUMN loan_payments YES_NO,
ADD COLUMN loan_payments_amount DECIMAL(18,2),
ADD COLUMN loan_payments_frequency VARCHAR(10),

ADD COLUMN child_spousal_maintenance YES_NO,
ADD COLUMN child_spousal_maintenance_amount DECIMAL(18,2),
ADD COLUMN child_spousal_maintenance_frequency VARCHAR(10),

ADD COLUMN mobile_phone YES_NO,
ADD COLUMN mobile_phone_amount DECIMAL(18,2),
ADD COLUMN mobile_phone_frequency VARCHAR(10),

ADD COLUMN grocery_shopping YES_NO,
ADD COLUMN grocery_shopping_amount DECIMAL(18,2),
ADD COLUMN grocery_shopping_frequency VARCHAR(10),

ADD COLUMN fuel_parking_transport YES_NO,
ADD COLUMN fuel_parking_transport_amount DECIMAL(18,2),
ADD COLUMN fuel_parking_transport_frequency VARCHAR(10),

ADD COLUMN school_costs YES_NO,
ADD COLUMN school_costs_amount DECIMAL(18,2),
ADD COLUMN school_costs_frequency VARCHAR(10),

ADD COLUMN clothing YES_NO,
ADD COLUMN clothing_amount DECIMAL(18,2),
ADD COLUMN clothing_frequency VARCHAR(10),

ADD COLUMN other_expenses YES_NO,
ADD COLUMN other_expenses_amount DECIMAL(18,2),
ADD COLUMN other_expenses_frequency VARCHAR(10),

DROP COLUMN regular_expenses,
DROP COLUMN expense_amount,
DROP COLUMN expense_frequency;

Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,17 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.NullSource;
import org.mockito.junit.jupiter.MockitoExtension;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.IncomeExpenseDetails;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.RecurrenceFrequency;
import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity;

import java.math.BigDecimal;
import java.util.stream.Stream;

import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -58,5 +63,82 @@ void shouldReturnNullWhenHouseholdCircumstancesIsNull() {
assertThat(entity).isNull();
}

@Test
void shouldMapExpenseAmountsAndFrequenciesWhenAnswerIsYes() {
HouseholdCircumstances householdCircumstances = buildExpenseFields(YesOrNo.YES);

HouseholdCircumstancesEntity entity =
underTest.createHouseholdCircumstancesEntity(householdCircumstances);

assertThat(entity.getHouseholdBillsAmount()).isEqualByComparingTo(new BigDecimal("100.00"));
assertThat(entity.getHouseholdBillsFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY);
assertThat(entity.getLoanPaymentsAmount()).isEqualByComparingTo(new BigDecimal("200.00"));
assertThat(entity.getLoanPaymentsFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY);
assertThat(entity.getChildSpousalMaintenanceAmount()).isEqualByComparingTo(new BigDecimal("300.00"));
assertThat(entity.getChildSpousalMaintenanceFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY);
assertThat(entity.getMobilePhoneAmount()).isEqualByComparingTo(new BigDecimal("400.00"));
assertThat(entity.getMobilePhoneFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY);
assertThat(entity.getGroceryShoppingAmount()).isEqualByComparingTo(new BigDecimal("500.00"));
assertThat(entity.getGroceryShoppingFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY);
assertThat(entity.getFuelParkingTransportAmount()).isEqualByComparingTo(new BigDecimal("600.00"));
assertThat(entity.getFuelParkingTransportFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY);
assertThat(entity.getSchoolCostsAmount()).isEqualByComparingTo(new BigDecimal("700.00"));
assertThat(entity.getSchoolCostsFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY);
assertThat(entity.getClothingAmount()).isEqualByComparingTo(new BigDecimal("800.00"));
assertThat(entity.getClothingFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY);
assertThat(entity.getOtherExpensesAmount()).isEqualByComparingTo(new BigDecimal("900.00"));
assertThat(entity.getOtherExpensesFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY);
}

@ParameterizedTest
@NullSource
@EnumSource(value = YesOrNo.class, names = "NO")
void shouldNotMapExpenseAmountsAndFrequenciesWhenAnswerIsNotYes(YesOrNo answer) {
HouseholdCircumstances householdCircumstances = buildExpenseFields(answer);

HouseholdCircumstancesEntity entity =
underTest.createHouseholdCircumstancesEntity(householdCircumstances);

assertThat(entity.getHouseholdBillsAmount()).isNull();
assertThat(entity.getHouseholdBillsFrequency()).isNull();
assertThat(entity.getLoanPaymentsAmount()).isNull();
assertThat(entity.getLoanPaymentsFrequency()).isNull();
assertThat(entity.getChildSpousalMaintenanceAmount()).isNull();
assertThat(entity.getChildSpousalMaintenanceFrequency()).isNull();
assertThat(entity.getMobilePhoneAmount()).isNull();
assertThat(entity.getMobilePhoneFrequency()).isNull();
assertThat(entity.getGroceryShoppingAmount()).isNull();
assertThat(entity.getGroceryShoppingFrequency()).isNull();
assertThat(entity.getFuelParkingTransportAmount()).isNull();
assertThat(entity.getFuelParkingTransportFrequency()).isNull();
assertThat(entity.getSchoolCostsAmount()).isNull();
assertThat(entity.getSchoolCostsFrequency()).isNull();
assertThat(entity.getClothingAmount()).isNull();
assertThat(entity.getClothingFrequency()).isNull();
assertThat(entity.getOtherExpensesAmount()).isNull();
assertThat(entity.getOtherExpensesFrequency()).isNull();
}

private static HouseholdCircumstances buildExpenseFields(YesOrNo answer) {
return HouseholdCircumstances.builder()
.householdBills(buildExpense(answer, "100.00", RecurrenceFrequency.MONTHLY))
.loanPayments(buildExpense(answer, "200.00", RecurrenceFrequency.WEEKLY))
.childSpousalMaintenance(buildExpense(answer, "300.00", RecurrenceFrequency.MONTHLY))
.mobilePhone(buildExpense(answer, "400.00", RecurrenceFrequency.WEEKLY))
.groceryShopping(buildExpense(answer, "500.00", RecurrenceFrequency.MONTHLY))
.fuelParkingTransport(buildExpense(answer, "600.00", RecurrenceFrequency.WEEKLY))
.schoolCosts(buildExpense(answer, "700.00", RecurrenceFrequency.MONTHLY))
.clothing(buildExpense(answer, "800.00", RecurrenceFrequency.WEEKLY))
.otherExpenses(buildExpense(answer, "900.00", RecurrenceFrequency.MONTHLY))
.build();
}

private static IncomeExpenseDetails buildExpense(YesOrNo applies, String amount, RecurrenceFrequency frequency) {
return IncomeExpenseDetails.builder()
.applies(applies)
.amount(new BigDecimal(amount))
.frequency(frequency)
.build();
}
}

Loading