org.openbravo.erpReports.RptC_Bpartner.java Source code

Java tutorial

Introduction

Here is the source code for org.openbravo.erpReports.RptC_Bpartner.java

Source

/*
 *************************************************************************
 * The contents of this file are subject to the Openbravo  Public  License
 * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
 * Version 1.1  with a permitted attribution clause; you may not  use this
 * file except in compliance with the License. You  may  obtain  a copy of
 * the License at http://www.openbravo.com/legal/license.html 
 * Software distributed under the License  is  distributed  on  an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific  language  governing  rights  and  limitations
 * under the License. 
 * The Original Code is Openbravo ERP. 
 * The Initial Developer of the Original Code is Openbravo SLU 
 * All portions are Copyright (C) 2001-2011 Openbravo SLU 
 * All Rights Reserved. 
 * Contributor(s):  ______________________________________.
 ************************************************************************
 */

package org.openbravo.erpReports;

import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

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

import org.hibernate.criterion.Restrictions;
import org.openbravo.base.model.Entity;
import org.openbravo.base.model.ModelProvider;
import org.openbravo.base.secureApp.HttpSecureAppServlet;
import org.openbravo.base.secureApp.VariablesSecureApp;
import org.openbravo.dal.core.DalUtil;
import org.openbravo.dal.core.OBContext;
import org.openbravo.dal.service.OBCriteria;
import org.openbravo.dal.service.OBDal;
import org.openbravo.data.Sqlc;
import org.openbravo.erpCommon.utility.DateTimeData;
import org.openbravo.erpCommon.utility.Utility;
import org.openbravo.model.ad.datamodel.Table;
import org.openbravo.model.ad.system.Client;
import org.openbravo.model.ad.ui.Tab;
import org.openbravo.model.ad.ui.Window;
import org.openbravo.model.ad.ui.WindowTrl;
import org.openbravo.model.common.businesspartner.BusinessPartner;
import org.openbravo.model.financialmgmt.payment.FIN_Payment;
import org.openbravo.xmlEngine.XmlDocument;

public class RptC_Bpartner extends HttpSecureAppServlet {
    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        VariablesSecureApp vars = new VariablesSecureApp(request);

        if (vars.commandIn("DEFAULT")) {
            String strcBpartnerId = vars.getSessionValue("RptC_Bpartner.inpcBpartnerId_R");
            if (strcBpartnerId.equals(""))
                strcBpartnerId = vars.getSessionValue("RptC_Bpartner.inpcBpartnerId");
            printPageDataSheet(response, vars, strcBpartnerId);
        } else if (vars.commandIn("OPEN")) {
            String strcBpartnerId = vars.getRequiredStringParameter("inpcBpartnerId");
            String strmProductTemplate = vars.getRequiredStringParameter("inpProductTemplate");
            printPageAjaxResponse(response, vars, strcBpartnerId, strmProductTemplate);
        } else if (vars.commandIn("OPENDOCUMENT")) {
            String strcBpartnerId = vars.getRequiredStringParameter("inpcBpartnerId");
            String strmTypeDocument = vars.getRequiredStringParameter("inpTypeDocument");
            printPageAjaxDocumentResponse(response, vars, strcBpartnerId, strmTypeDocument);
        } else
            pageError(response);
    }

    private void printPageDataSheet(HttpServletResponse response, VariablesSecureApp vars, String strcBpartnerId)
            throws IOException, ServletException {
        if (log4j.isDebugEnabled())
            log4j.debug("Output: dataSheet");
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        String discard[] = { "", "", "", "", "", "", "", "", "", "", "", "", "" };
        XmlDocument xmlDocument = null;

        try {
            OBContext.setAdminMode(true);
            RptCBpartnerData[] dataPartner = RptCBpartnerData.select(this, vars.getLanguage(), strcBpartnerId);
            RptCBpartnerData[] dataAccount = RptCBpartnerData.selectAccount(this, strcBpartnerId);
            RptCBpartnerData[] dataShipper = RptCBpartnerData.selectShipper(this, strcBpartnerId);
            RptCBpartnerData[] dataTemplate = RptCBpartnerData.selectTemplate(this, vars.getLanguage(),
                    strcBpartnerId);
            RptCBpartnerData[] dataDiscount = RptCBpartnerData.selectDiscount(this, strcBpartnerId);

            Client c = OBDal.getInstance().get(Client.class, OBContext.getOBContext().getCurrentClient().getId());
            BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class,
                    strcBpartnerId.substring(strcBpartnerId.indexOf("'") + 1, strcBpartnerId.lastIndexOf("'")));

            RptCBpartnerSalesData[] dataPaymentsIn = RptCBpartnerSalesData.selectPayments(this, "PAYMENTIN",
                    c.getCurrency().getId(), c.getId(), bp.getOrganization().getId(), "Y", strcBpartnerId);
            RptCBpartnerSalesData[] dataPaymentsOut = RptCBpartnerSalesData.selectPayments(this, "PAYMENTOUT",
                    c.getCurrency().getId(), c.getId(), bp.getOrganization().getId(), "N", strcBpartnerId);

            RptCBpartnerCustomerData[] dataCustomer = RptCBpartnerCustomerData.select(this, vars.getLanguage(),
                    strcBpartnerId);
            RptCBpartnerVendorData[] dataVendor = RptCBpartnerVendorData.select(this, vars.getLanguage(),
                    strcBpartnerId);
            RptCBpartnerlocationData[] dataLocation = RptCBpartnerlocationData.select(this, strcBpartnerId);
            RptCBpartnercontactData[] dataContact = RptCBpartnercontactData.select(this, strcBpartnerId);
            RptCBpartnerSalesData[] dataSales = RptCBpartnerSalesData.selectOrder(this, strcBpartnerId);
            RptCBpartnerSalesData[] dataInvoice = RptCBpartnerSalesData.select(this, strcBpartnerId);
            RptCBpartnerSalesData[] dataInout = RptCBpartnerSalesData.selectinout(this, strcBpartnerId);
            RptCBpartnerSalesData[] dataABC = RptCBpartnerSalesData.selectABC(this, DateTimeData.sysdateYear(this),
                    DateTimeData.lastYear(this), strcBpartnerId);

            if (dataAccount == null || dataAccount.length == 0) {
                dataAccount = RptCBpartnerData.set();
                discard[0] = "selDelete1";
            }
            if (dataShipper == null || dataShipper.length == 0) {
                dataShipper = RptCBpartnerData.set();
                discard[1] = "selDelete2";
            }
            if (dataTemplate == null || dataTemplate.length == 0) {
                dataTemplate = RptCBpartnerData.set();
                discard[2] = "selDelete4";
            }
            if (dataDiscount == null || dataDiscount.length == 0) {
                dataDiscount = RptCBpartnerData.set();
                discard[3] = "selDelete3";
            }
            if (dataCustomer == null || dataCustomer.length == 0) {
                dataCustomer = RptCBpartnerCustomerData.set();
                discard[4] = "selDelete5";
            } else {
                dataCustomer[0].availablecredit = getCustomerCredit(bp, true).toString();
            }
            if (dataVendor == null || dataVendor.length == 0) {
                dataVendor = RptCBpartnerVendorData.set();
                discard[5] = "selDelete6";
            }
            if (dataLocation == null || dataLocation.length == 0) {
                dataLocation = RptCBpartnerlocationData.set();
                discard[6] = "selDelete7";
            }
            if (dataContact == null || dataContact.length == 0) {
                dataContact = RptCBpartnercontactData.set();
                discard[7] = "selDelete8";
            }
            if (dataSales == null || dataSales.length == 0) {
                dataSales = RptCBpartnerSalesData.set();
                discard[8] = "selDelete9";
            }
            if (dataSales == null || dataSales.length == 0) {
                dataInvoice = RptCBpartnerSalesData.set();
                discard[9] = "selDelete10";
            }
            if (dataSales == null || dataSales.length == 0) {
                dataInout = RptCBpartnerSalesData.set();
                discard[10] = "selDelete11";
            }
            if ((dataPaymentsIn == null || dataPaymentsIn.length == 0)
                    && (dataPaymentsOut == null || dataPaymentsOut.length == 0)) {
                discard[11] = "selDeleteOpenItems";
            } else if (dataPaymentsIn == null || dataPaymentsIn.length == 0) {
                dataPaymentsIn = RptCBpartnerSalesData.set();
                discard[11] = "sectionPaymentin";
            } else if (dataPaymentsOut == null || dataPaymentsOut.length == 0) {
                dataPaymentsOut = RptCBpartnerSalesData.set();
                discard[11] = "sectionPaymentout";
            }

            xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_Bpartner", discard)
                    .createXmlDocument();
            xmlDocument.setParameter("directory", "var baseDirectory = \"" + strReplaceWith + "/\";\n");
            xmlDocument.setParameter("paramLanguage", "defaultLang=\"" + vars.getLanguage() + "\";");
            xmlDocument.setParameter("theme", vars.getTheme());
            xmlDocument.setParameter("paramBpartner", dataPartner[0].cBpartnerId);
            xmlDocument.setParameter("paramSysdate", DateTimeData.today(this));

            xmlDocument.setData("structureAccount", dataAccount);
            xmlDocument.setData("structureShipper", dataShipper);
            xmlDocument.setData("structureTemplate", dataTemplate);
            xmlDocument.setData("structureDiscount", dataDiscount);
            xmlDocument.setData("structureCustomer", dataCustomer);
            xmlDocument.setData("structureVendor", dataVendor);
            xmlDocument.setData("structureLocation", dataLocation);
            xmlDocument.setData("structureContact", dataContact);
            xmlDocument.setData("structureSalesorder", dataSales);
            xmlDocument.setData("structureSalesinvoice", dataInvoice);
            xmlDocument.setData("structureSalesinout", dataInout);
            xmlDocument.setData("structureABC", dataABC);
            xmlDocument.setData("structure1", dataPartner);
            xmlDocument.setData("structurePaymentsin", dataPaymentsIn);
            xmlDocument.setData("structurePaymentsout", dataPaymentsOut);

            out.println(xmlDocument.print());
            out.close();
        } finally {
            OBContext.restorePreviousMode();
        }
    }

    private void printPageAjaxResponse(HttpServletResponse response, VariablesSecureApp vars, String strcBpartnerId,
            String strmProductTemplate) throws IOException, ServletException {
        if (log4j.isDebugEnabled())
            log4j.debug("Output: ajaxreponse");
        XmlDocument xmlDocument = null;

        RptCBpartnerData[] data = RptCBpartnerData.selectTemplateDetail(this, strcBpartnerId, strmProductTemplate);

        if (data == null || data.length == 0)
            data = RptCBpartnerData.set();

        xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerTemplateLines")
                .createXmlDocument();

        response.setContentType("text/plain; charset=UTF-8");
        response.setHeader("Cache-Control", "no-cache");
        PrintWriter out = response.getWriter();

        xmlDocument.setData("structure", data);
        out.println(xmlDocument.print());
        out.close();
    }

    private void printPageAjaxDocumentResponse(HttpServletResponse response, VariablesSecureApp vars,
            String strcBpartnerId, String strmTypeDocument) throws IOException, ServletException {
        if (log4j.isDebugEnabled())
            log4j.debug("Output: ajaxreponse");

        try {
            OBContext.setAdminMode(true);
            XmlDocument xmlDocument = null;

            RptCBpartnerSalesData[] data = null;
            RptCBpartnerSalesData[] dataPeriod = RptCBpartnerSalesData.selectperiod(this);

            HashMap<String, String> orderHM = new HashMap<String, String>();
            HashMap<String, String> invoiceHM = new HashMap<String, String>();

            if (strmTypeDocument.equals("INVOICE")) {
                data = RptCBpartnerSalesData.selectInvoiceperiod(this, strcBpartnerId);
                xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerPeriodInvoice")
                        .createXmlDocument();
                xmlDocument.setData("structurePeriod", dataPeriod);
                if (data == null || data.length == 0)
                    data = RptCBpartnerSalesData.set();
            }
            if (strmTypeDocument.equals("ORDER")) {
                data = RptCBpartnerSalesData.selectOrderperiod(this, strcBpartnerId);
                xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerPeriodSales")
                        .createXmlDocument();
                xmlDocument.setData("structurePeriod", dataPeriod);
                if (data == null || data.length == 0)
                    data = RptCBpartnerSalesData.set();
            }
            if (strmTypeDocument.equals("INOUT")) {
                data = RptCBpartnerSalesData.selectInoutperiod(this, strcBpartnerId);
                xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerPeriodInout")
                        .createXmlDocument();
                xmlDocument.setData("structurePeriod", dataPeriod);
                if (data == null || data.length == 0)
                    data = RptCBpartnerSalesData.set();
            }
            if (strmTypeDocument.equals("ABC")) {
                data = RptCBpartnerSalesData.selectABCactualdetail(this, DateTimeData.sysdateYear(this),
                        strcBpartnerId);
                xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerABC")
                        .createXmlDocument();
            }
            if (strmTypeDocument.equals("ABCREF")) {
                data = RptCBpartnerSalesData.selectABCrefdetail(this, DateTimeData.lastYear(this), strcBpartnerId);
                xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerABCref")
                        .createXmlDocument();
            }

            Client c = OBDal.getInstance().get(Client.class, OBContext.getOBContext().getCurrentClient().getId());

            if (strmTypeDocument.equals("PAYMENTIN")) {
                data = RptCBpartnerSalesData.selectPaymentsdetail(this, vars.getLanguage(), c.getCurrency().getId(),
                        "Y", strcBpartnerId);
                xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerPaymentsIn")
                        .createXmlDocument();
                orderHM = getLinkParameters("70E57DEA195843729FF303C9A71EBCA3", "Y");
                xmlDocument.setParameter("tabIdSO", orderHM.get("tabId"));
                xmlDocument.setParameter("windowIdSO", orderHM.get("windowId"));
                xmlDocument.setParameter("tabTitleSO", orderHM.get("tabTitle"));
                xmlDocument.setParameter("mappingNameSO", orderHM.get("mappingName"));
                xmlDocument.setParameter("keyParameterSO", orderHM.get("keyParameter"));
                invoiceHM = getLinkParameters("77182DC88AA842D499C01FB0BAE39561", "Y");
                xmlDocument.setParameter("tabIdSI", invoiceHM.get("tabId"));
                xmlDocument.setParameter("windowIdSI", invoiceHM.get("windowId"));
                xmlDocument.setParameter("tabTitleSI", invoiceHM.get("tabTitle"));
                xmlDocument.setParameter("mappingNameSI", invoiceHM.get("mappingName"));
                xmlDocument.setParameter("keyParameterSI", invoiceHM.get("keyParameter"));
            }
            if (strmTypeDocument.equals("PAYMENTOUT")) {
                data = RptCBpartnerSalesData.selectPaymentsdetail(this, vars.getLanguage(), c.getCurrency().getId(),
                        "N", strcBpartnerId);
                xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpReports/RptC_BpartnerPaymentsOut")
                        .createXmlDocument();
                orderHM = getLinkParameters("70E57DEA195843729FF303C9A71EBCA3", "N");
                xmlDocument.setParameter("tabIdPO", orderHM.get("tabId"));
                xmlDocument.setParameter("windowIdPO", orderHM.get("windowId"));
                xmlDocument.setParameter("tabTitlePO", orderHM.get("tabTitle"));
                xmlDocument.setParameter("mappingNamePO", orderHM.get("mappingName"));
                xmlDocument.setParameter("keyParameterPO", orderHM.get("keyParameter"));
                invoiceHM = getLinkParameters("77182DC88AA842D499C01FB0BAE39561", "N");
                xmlDocument.setParameter("tabIdPI", invoiceHM.get("tabId"));
                xmlDocument.setParameter("windowIdPI", invoiceHM.get("windowId"));
                xmlDocument.setParameter("tabTitlePI", invoiceHM.get("tabTitle"));
                xmlDocument.setParameter("mappingNamePI", invoiceHM.get("mappingName"));
                xmlDocument.setParameter("keyParameterPI", invoiceHM.get("keyParameter"));
            }

            response.setContentType("text/plain; charset=UTF-8");
            response.setHeader("Cache-Control", "no-cache");
            PrintWriter out = response.getWriter();
            xmlDocument.setData("structure", data);
            out.println(xmlDocument.print());
            out.close();
        } finally {
            OBContext.restorePreviousMode();
        }
    }

    public BigDecimal getCustomerCredit(BusinessPartner bp, boolean isReceipt) {
        BigDecimal creditAmount = BigDecimal.ZERO;
        for (FIN_Payment payment : getCustomerPaymentsWithCredit(bp, isReceipt))
            creditAmount = creditAmount.add(payment.getGeneratedCredit()).subtract(payment.getUsedCredit());
        return creditAmount;
    }

    public List<FIN_Payment> getCustomerPaymentsWithCredit(BusinessPartner bp, boolean isReceipt) {
        OBCriteria<FIN_Payment> obcPayment = OBDal.getInstance().createCriteria(FIN_Payment.class);
        obcPayment.add(Restrictions.eq(FIN_Payment.PROPERTY_BUSINESSPARTNER, bp));
        obcPayment.add(Restrictions.eq(FIN_Payment.PROPERTY_RECEIPT, isReceipt));
        obcPayment.add(Restrictions.ne(FIN_Payment.PROPERTY_GENERATEDCREDIT, BigDecimal.ZERO));
        obcPayment.add(Restrictions.ne(FIN_Payment.PROPERTY_STATUS, "RPAP"));
        obcPayment.add(
                Restrictions.neProperty(FIN_Payment.PROPERTY_GENERATEDCREDIT, FIN_Payment.PROPERTY_USEDCREDIT));
        obcPayment.addOrderBy(FIN_Payment.PROPERTY_PAYMENTDATE, true);
        obcPayment.addOrderBy(FIN_Payment.PROPERTY_DOCUMENTNO, true);
        return obcPayment.list();
    }

    public static HashMap<String, String> getLinkParameters(String adTableId, String isSOtrx) {
        HashMap<String, String> hmValues = new HashMap<String, String>();

        OBContext.setAdminMode();
        try {
            Table adTable = OBDal.getInstance().get(Table.class, adTableId);

            Window adWindow = null;
            if (isSOtrx.equalsIgnoreCase("Y")) {
                adWindow = adTable.getWindow();
            } else {
                adWindow = adTable.getPOWindow();
            }
            hmValues.put("windowId", adWindow.getId());

            java.util.List<Tab> adTabList = adWindow.getADTabList();
            Tab tab = null;
            for (int i = 0; i < adTabList.size(); i++) {
                if (adTabList.get(i).getTable().getId().equalsIgnoreCase(adTableId)) {
                    hmValues.put("tabId", adTabList.get(i).getId());
                    tab = adTabList.get(i);
                }
            }

            String mappingName = Utility.getTabURL(tab.getId(), "E", false);
            hmValues.put("mappingName", mappingName);

            final String userLanguageId = OBContext.getOBContext().getLanguage().getId();
            String tabTitle = null;
            for (WindowTrl windowTrl : tab.getWindow().getADWindowTrlList()) {
                final String trlLanguageId = (String) DalUtil.getId(windowTrl.getLanguage());
                if (trlLanguageId.equals(userLanguageId)) {
                    tabTitle = windowTrl.getName();
                }
            }
            if (tabTitle == null) {
                tabTitle = tab.getWindow().getName();
            }

            hmValues.put("tabTitle", tabTitle);

            final Entity entity = ModelProvider.getInstance().getEntity(tab.getTable().getName());
            hmValues.put("keyParameter",
                    "inp" + Sqlc.TransformaNombreColumna(entity.getIdProperties().get(0).getColumnName()));

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            OBContext.restorePreviousMode();
        }
        return hmValues;
    }

    public String getServletInfo() {
        return "Servlet RptC_Bpartner. This Servlet was made by Pablo Sarobe";
    } // End of getServletInfo() method
}