ActualExposurePositionSearchResult.java

package com.tradecloud.dto.treasury;

import com.tradecloud.domain.model.ForexGroup;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.treasury.TreasuryBank;
import com.tradecloud.domain.wrapper.CurrencyXmlAdapter;
import com.tradecloud.domain.wrapper.TreasuryBankXmlAdapter;
import org.apache.commons.lang3.builder.CompareToBuilder;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.math.BigDecimal;
import java.util.Currency;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ActualExposurePositionSearchResult")
public class ActualExposurePositionSearchResult implements Comparable<ActualExposurePositionSearchResult> {

    @XmlJavaTypeAdapter(CurrencyXmlAdapter.class)
    private Currency currency;

    private OrganisationalUnit orgUnit;

    private ForexGroup forexGroup;

    private String formattedPeriodStart;

    private String formattedPeriodEnd;

    private String periodDescription;

    private BigDecimal dealImports = BigDecimal.ZERO;

    private BigDecimal dealExports = BigDecimal.ZERO;

    private BigDecimal forecast = BigDecimal.ZERO;

    private BigDecimal dealImportsSettled = BigDecimal.ZERO;

    private BigDecimal dealImportsNotSettled = BigDecimal.ZERO;

    private BigDecimal fec = BigDecimal.ZERO;

    private BigDecimal fecEstablished = BigDecimal.ZERO;

    private BigDecimal fecConfirmed = BigDecimal.ZERO;

    private BigDecimal fecMatured = BigDecimal.ZERO;

    private BigDecimal nettPosition = BigDecimal.ZERO;

    private BigDecimal cumulativePosition = BigDecimal.ZERO;

    private BigDecimal quotedImportDealAmount = BigDecimal.ZERO;

    private BigDecimal acceptedImportDealAmount = BigDecimal.ZERO;

    private BigDecimal invoicedImportDealAmount = BigDecimal.ZERO;

    private BigDecimal settledImportDealAmount = BigDecimal.ZERO;

    //the spot and forward Rand value is used to calculate the average spot and forward rate
    private BigDecimal fecSpotRandValue = BigDecimal.ZERO;

    private BigDecimal fecForwardRandValue = BigDecimal.ZERO;

    private BigDecimal fecCostingRateRandValue = BigDecimal.ZERO;

    private BigDecimal fecAverageSpotRoe = BigDecimal.ZERO;

    private BigDecimal fecAverageForwardRoe = BigDecimal.ZERO;

    private BigDecimal fecAverageCostingRate = BigDecimal.ZERO;

    private BigDecimal fecCostingForeignAmount = BigDecimal.ZERO;
    private BigDecimal priorYearImport = BigDecimal.ZERO;
    private BigDecimal earlyOrder = BigDecimal.ZERO;
    private BigDecimal linkOrderToFecInPeriod = BigDecimal.ZERO;
    private BigDecimal linkOrderToFecOutPeriod = BigDecimal.ZERO;
    private BigDecimal netUnlinkedPosition = BigDecimal.ZERO;

    private boolean selected = false;
    private String key;
    @XmlJavaTypeAdapter(TreasuryBankXmlAdapter.class)
    private TreasuryBank bank;

    public ActualExposurePositionSearchResult() {
    }

    public ActualExposurePositionSearchResult(Currency currency, OrganisationalUnit orgUnit, ForexGroup forexGroup, String period,
                                              TreasuryBank bank) {
        this.currency = currency;
        this.orgUnit = orgUnit;
        this.forexGroup = forexGroup;
        this.periodDescription = period;
        this.bank = bank;
    }

    public Currency getCurrency() {
        return currency;
    }

    public void setCurrency(Currency currency) {
        this.currency = currency;
    }

    public String getPeriodDescription() {
        return periodDescription;
    }

    public void setPeriodDescription(String periodDescription) {
        this.periodDescription = periodDescription;
    }

    public BigDecimal getDealImports() {
        return dealImports;
    }

    public void setDealImports(BigDecimal dealImports) {
        this.dealImports = dealImports;
    }

    public BigDecimal getDealExports() {
        return dealExports;
    }

    public void setDealExports(BigDecimal dealExports) {
        this.dealExports = dealExports;
    }

    public BigDecimal getFec() {
        return fec;
    }

    public void setFec(BigDecimal fec) {
        this.fec = fec;
    }

    public BigDecimal getNettPosition() {
        return nettPosition;
    }

    public void setNettPosition(BigDecimal nettPosition) {
        this.nettPosition = nettPosition;
    }

    public BigDecimal getCumulativePosition() {
        return cumulativePosition;
    }

    public void setCumulativePosition(BigDecimal cumulativePosition) {
        this.cumulativePosition = cumulativePosition;
    }

    public BigDecimal getAcceptedImportDealAmount() {
        return acceptedImportDealAmount;
    }

    public BigDecimal getInvoicedImportDealAmount() {
        return invoicedImportDealAmount;
    }

    public BigDecimal getQuotedImportDealAmount() {
        return quotedImportDealAmount;
    }

    public BigDecimal getSettledImportDealAmount() {
        return settledImportDealAmount;
    }

    public void setAcceptedImportDealAmount(BigDecimal acceptedImportDealAmount) {
        this.acceptedImportDealAmount = acceptedImportDealAmount;
    }

    public void setInvoicedImportDealAmount(BigDecimal invoicedImportDealAmount) {
        this.invoicedImportDealAmount = invoicedImportDealAmount;
    }

    public void setQuotedImportDealAmount(BigDecimal quotedImportDealAmount) {
        this.quotedImportDealAmount = quotedImportDealAmount;
    }

    public void setSettledImportDealAmount(BigDecimal settledImportDealAmount) {
        this.settledImportDealAmount = settledImportDealAmount;
    }

    public BigDecimal getFecForwardRandValue() {
        return fecForwardRandValue;
    }

    public void setFecForwardRandValue(BigDecimal fecForwardRandValue) {
        this.fecForwardRandValue = fecForwardRandValue;
    }

    public BigDecimal getFecSpotRandValue() {
        return fecSpotRandValue;
    }

    public void updateAverageFecSpotForwardCostingRoe() {
        BigDecimal fecValuesTotal = getFecForeignValuesTotal();

        if (fecValuesTotal.compareTo(BigDecimal.ZERO) == 0) {
            return;
        }


        fecAverageSpotRoe = fecSpotRandValue.divide(fecValuesTotal, 4);
        fecAverageForwardRoe = fecForwardRandValue.divide(fecValuesTotal, 4);
        fecAverageCostingRate = fecCostingRateRandValue.divide(getFecCostingForeignAmount(), 4);
    }

    public BigDecimal getFecForeignValuesTotal() {
        return fecMatured.add(fecConfirmed.add(fecEstablished));
    }

    public void setFecSpotRandValue(BigDecimal fecSpotRandValue) {
        this.fecSpotRandValue = fecSpotRandValue;
    }

    public BigDecimal getFecAverageForwardRoe() {
        return fecAverageForwardRoe;
    }

    public BigDecimal getFecAverageSpotRoe() {
        return fecAverageSpotRoe;
    }

    public ForexGroup getForexGroup() {
        return forexGroup;
    }

    public void setForexGroup(ForexGroup forexGroup) {
        this.forexGroup = forexGroup;
    }

    @Override
    public String toString() {
        return "Currency '" + currency + "'. Forex Group '" + forexGroup + "'. Period '" + getPeriodDescription() + "'. Imports " + dealImports
                + "'. Exports '" + dealExports + "'. FECs '" + fec + "'. Established FECs '" + fecEstablished + "'. Confirmed FECs '" + fecConfirmed
                + "'. Matured FECs '" + fecMatured + "'. Nett Position '" + nettPosition + "'. Cumulative Position '" + cumulativePosition
                + "'. Org Unit: '" + orgUnit + "' .bank: '" + bank + " .fecForwardRandValue: " + fecForwardRandValue;
    }

    public OrganisationalUnit getOrgUnit() {
        return orgUnit;
    }

    public void setOrgUnit(OrganisationalUnit orgUnit) {
        this.orgUnit = orgUnit;
    }

    public BigDecimal getForecast() {
        return forecast;
    }

    public void setForecast(BigDecimal forecast) {
        this.forecast = forecast;
    }

    public BigDecimal getFecEstablished() {
        return fecEstablished;
    }

    public void setFecEstablished(BigDecimal fecEstablished) {
        this.fecEstablished = fecEstablished;
    }

    public BigDecimal getFecConfirmed() {
        return fecConfirmed;
    }

    public void setFecConfirmed(BigDecimal fecConfirmed) {
        this.fecConfirmed = fecConfirmed;
    }

    public BigDecimal getFecMatured() {
        return fecMatured;
    }

    public void setFecMatured(BigDecimal fecMatured) {
        this.fecMatured = fecMatured;
    }

    public BigDecimal getDealImportsSettled() {
        return dealImportsSettled;
    }

    public void setDealImportsSettled(BigDecimal dealImportsSettled) {
        this.dealImportsSettled = dealImportsSettled;
    }

    public BigDecimal getDealImportsNotSettled() {
        return dealImportsNotSettled;
    }

    public void setDealImportsNotSettled(BigDecimal dealImportsNotSettled) {
        this.dealImportsNotSettled = dealImportsNotSettled;
    }

    public String getFormattedPeriodStart() {
        return formattedPeriodStart;
    }

    public void setFormattedPeriodStart(String formattedPeriodStart) {
        this.formattedPeriodStart = formattedPeriodStart;
    }

    public String getFormattedPeriodEnd() {
        return formattedPeriodEnd;
    }

    public void setFormattedPeriodEnd(String formattedPeriodEnd) {
        this.formattedPeriodEnd = formattedPeriodEnd;
    }

    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public BigDecimal getFecAverageCostingRate() {
        return fecAverageCostingRate;
    }

    public void setFecAverageCostingRate(BigDecimal fecAverageCostingRate) {
        this.fecAverageCostingRate = fecAverageCostingRate;
    }

    public BigDecimal getFecCostingRateRandValue() {
        return fecCostingRateRandValue;
    }

    public void setFecCostingRateRandValue(BigDecimal fecCostingRateRandValue) {
        this.fecCostingRateRandValue = fecCostingRateRandValue;
    }

    public BigDecimal getFecCostingForeignAmount() {
        return fecCostingForeignAmount;
    }

    public void setFecCostingForeignAmount(BigDecimal fecCostingForeignAmount) {
        this.fecCostingForeignAmount = fecCostingForeignAmount;
    }

    public TreasuryBank getBank() {
        return bank;
    }

    public void setBank(TreasuryBank bank) {
        this.bank = bank;
    }

    public BigDecimal getPriorYearImport() {
        return priorYearImport;
    }

    public void setPriorYearImport(BigDecimal priorYearImport) {
        this.priorYearImport = priorYearImport;
    }

    @Override
    public int compareTo(ActualExposurePositionSearchResult o) {
        int currency = this.getCurrency().getCurrencyCode().compareTo(o.getCurrency().getCurrencyCode());
        if (currency == 0) {
            return new CompareToBuilder().append(this.getBank(), o.getBank()).toComparison();
        }
        return currency;
    }

    public BigDecimal getEarlyOrder() {
        return earlyOrder;
    }

    public void setEarlyOrder(BigDecimal earlyOrder) {
        this.earlyOrder = earlyOrder;
    }

    public BigDecimal getNetUnlinkedPosition() {
        return netUnlinkedPosition;
    }

    public void setNetUnlinkedPosition(BigDecimal netUnlinkedPosition) {
        this.netUnlinkedPosition = netUnlinkedPosition;
    }

    public BigDecimal getLinkOrderToFecOutPeriod() {
        return linkOrderToFecOutPeriod;
    }

    public void setLinkOrderToFecOutPeriod(BigDecimal linkOrderToFecOutPeriod) {
        this.linkOrderToFecOutPeriod = linkOrderToFecOutPeriod;
    }

    public BigDecimal getLinkOrderToFecInPeriod() {
        return linkOrderToFecInPeriod;
    }

    public void setLinkOrderToFecInPeriod(BigDecimal linkOrderToFecInPeriod) {
        this.linkOrderToFecInPeriod = linkOrderToFecInPeriod;
    }
}