com.etcc.csc.presentation.action.payment.DisplayPaymentDetailAction.java Source code

Java tutorial

Introduction

Here is the source code for com.etcc.csc.presentation.action.payment.DisplayPaymentDetailAction.java

Source

package com.etcc.csc.presentation.action.payment;

import com.etcc.csc.common.Constants;
import com.etcc.csc.common.DelegateEnum;
import com.etcc.csc.common.DelegateFactory;
import com.etcc.csc.common.Logger;
import com.etcc.csc.datatype.Invoice;
import com.etcc.csc.datatype.Violation;
import com.etcc.csc.dto.AccountLoginDTO;
import com.etcc.csc.dto.LicensePlateDTO;
import com.etcc.csc.dto.TagDTO;
import com.etcc.csc.presentation.datatype.PaymentContext;
import com.etcc.csc.service.AccountInterface;
import com.etcc.csc.service.AppInterface;
import com.etcc.csc.service.PaymentInterface;
import com.etcc.csc.util.SessionUtil;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.Collection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.ArrayUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
/*
 * 
 * DisplayPaymentDetailAction:: Action to get All Open Invoices :: No Monthly Statement
 * 
 */

public class DisplayPaymentDetailAction extends Action {
    private static Logger logger = Logger.getLogger(DisplayPaymentDetailAction.class);

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        DynaActionForm dynaForm = (DynaActionForm) form;
        HttpSession session = request.getSession();
        AccountLoginDTO accountLoginDTO = SessionUtil.getSessionAccountLogin(session);

        PaymentContext paymentContext = SessionUtil.getPaymentContext(session);
        if (!ArrayUtils.isEmpty(paymentContext.getAuthorizedStatementInvoices())) {
            dynaForm.set("licensePlate", accountLoginDTO.getLicPlate() + "~" + accountLoginDTO.getLicState());
            dynaForm.set("tagAmount", paymentContext.getTagAmount().toPlainString());
            return mapping.findForward("monthlyStatement.success");
        }

        BigDecimal minGoodBalance = getGoodBalanceMinPayment();
        if (paymentContext.getOriginalTagAmount() != null && paymentContext.getTagAmount() != null
                && paymentContext.getOriginalTagAmount().compareTo(minGoodBalance) == 0
                && paymentContext.getTagAmount().compareTo(minGoodBalance) >= 0) {
            if (SessionUtil.getRetailTransId(session) == 0) {
                request.setAttribute("SuggestedPaymentMessage", true);
            }
        }
        //rtalreja 02/02/2015
        boolean hasViolInvoices = processPopulate(paymentContext, form, session);
        logger.info("Has viol Invoices ::" + hasViolInvoices);

        PaymentInterface payment = (PaymentInterface) DelegateFactory.create(DelegateEnum.PAYMENT_DELEGATE);

        AccountInterface account = (AccountInterface) DelegateFactory.create(DelegateEnum.ACCOUNT);

        Collection<TagDTO> dtos = account.getAccountTags(accountLoginDTO);

        boolean hasVbInvoice = false;
        long invoice_id = 0;
        if (dtos != null && Constants.LOGIN_TYPE_ACCOUNT.equals(accountLoginDTO.getLoginType())) {
            for (TagDTO dto : dtos) {
                invoice_id = payment.hasVBInvoices(dto.getLicPlate(), dto.getLicState(), null, null);

                if (invoice_id > 0) {
                    hasVbInvoice = true;
                    break;
                }

            }
        } else {
            BigDecimal invoiceId = null;
            if (Constants.LOGIN_TYPE_ZIPCASH_INVOICE.equals(accountLoginDTO.getLoginType())
                    || Constants.LOGIN_TYPE_INVOICE.equals(accountLoginDTO.getLoginType())) {
                invoiceId = new BigDecimal(accountLoginDTO.getInvoiceId());
            }

            BigDecimal violatorId = null;
            if (accountLoginDTO.getViolatorId() != 0) {
                violatorId = new BigDecimal(accountLoginDTO.getViolatorId());
            } else if (accountLoginDTO.getAcctId() != 0
                    && Constants.LOGIN_TYPE_ZIPCASH_ACCOUNT.equals(accountLoginDTO.getLoginType())) {
                violatorId = new BigDecimal(accountLoginDTO.getAcctId());
            }
            invoice_id = payment.hasVBInvoices(accountLoginDTO.getLicPlate(), accountLoginDTO.getLicState(),
                    invoiceId, violatorId);
            hasVbInvoice = (invoice_id > 0);
        }
        if (hasVbInvoice) {
            request.setAttribute("hasVbViolation", "Y");
            request.setAttribute("vBviolationInvoiceId", invoice_id);
            //rtalreja :: Added logger info :: Issue ZipCash invoices not displayed on Success Forwards
            logger.error("Account has ZipCash Invoices :: These can be paid through ZipCash Links");
        }
        //rtalreja - 02/02/2015 to handle cases where no invoices are there
        //In such Scenarios with accounts we have to move to receipt without making payments

        if ((!hasViolInvoices) && (paymentContext.getOriginalTagAmount() == null
                || paymentContext.getOriginalTagAmount().compareTo(new BigDecimal(0)) == 0)) {
            return mapping.findForward("successTag");
        }
        return mapping.findForward("success");
    }

    /*
     * processPopulate :: Get All Open Viol-invoices:: No Monthly Statement
     */
    private boolean processPopulate(PaymentContext paymentContext, ActionForm form, HttpSession session) {
        DynaActionForm dynaForm = (DynaActionForm) form;

        Invoice[] invoices = paymentContext.getInvoices();
        ArrayList invoicesSelected = new ArrayList();
        //rtalreja 02/02/2015
        boolean hasViolInvoices = false;
        if (invoices != null) {
            if (invoices.length > 0) {
                hasViolInvoices = true;
            }
        }
        //rtalreja 02/02/2015
        for (int i = 0; invoices != null && i < invoices.length; i++) {
            if ((invoices[i]).isAuthorized()) {
                invoicesSelected.add((invoices[i]).getId());
            }
        }
        dynaForm.set("payInvoice", (String[]) invoicesSelected.toArray(new String[0]));

        Violation[] violations = paymentContext.getViolations();
        ArrayList violationsSelected = new ArrayList();
        for (int i = 0; violations != null && i < violations.length; i++) {
            if (violations[i].isAuthorized()) {
                violationsSelected.add(violations[i].getId());
            }
        }
        dynaForm.set("payViolation", (String[]) violationsSelected.toArray(new String[0]));
        dynaForm.set("acceptVea", paymentContext.isVeaAccepted() ? "Y" : "");
        dynaForm.set("tagAmount", paymentContext.getTagAmount().toPlainString());
        return hasViolInvoices;
    }

    /*
     * getGoodBalanceMinPayment:: Get Minimum TS Payment Amount for Good Balance Account
     */
    private BigDecimal getGoodBalanceMinPayment() {
        try {
            AppInterface ai = (AppInterface) DelegateFactory.create(DelegateEnum.APP_DELEGATE);
            String value = ai.getSysParam("OLC_TS_MIN_PMT_AMT_GOOD_BAL");
            return new BigDecimal(value);
        } catch (Exception e) {
            System.out.println(e);
        }
        return new BigDecimal(10.0);
    }
}