org.openbravo.erpCommon.ad_forms.DocLandedCost.java Source code

Java tutorial

Introduction

Here is the source code for org.openbravo.erpCommon.ad_forms.DocLandedCost.java

Source

/*
 *************************************************************************
 * The contents of this file are subject to the Openbravo  Public  License
 * Version  1.0  (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) 2014-2015 Openbravo SLU
 * All Rights Reserved.
 * Contributor(s):  ______________________________________.
 *************************************************************************
 */
package org.openbravo.erpCommon.ad_forms;

import java.math.BigDecimal;
import java.sql.Connection;
import java.util.ArrayList;

import javax.servlet.ServletException;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.openbravo.base.secureApp.VariablesSecureApp;
import org.openbravo.dal.service.OBDal;
import org.openbravo.data.FieldProvider;
import org.openbravo.database.ConnectionProvider;
import org.openbravo.erpCommon.utility.SequenceIdData;
import org.openbravo.model.materialmgmt.cost.LCReceiptLineAmt;
import org.openbravo.model.materialmgmt.transaction.MaterialTransaction;

public class DocLandedCost extends AcctServer {

    private static final long serialVersionUID = 1L;
    static Logger log4jDocLandedCost = Logger.getLogger(DocLandedCost.class);

    /** AD_Table_ID */
    private String SeqNo = "0";

    public DocLandedCost() {
    }

    /**
     * Constructor
     * 
     * @param AD_Client_ID
     *          AD_Client_ID
     */
    public DocLandedCost(String AD_Client_ID, String AD_Org_ID, ConnectionProvider connectionProvider) {
        super(AD_Client_ID, AD_Org_ID, connectionProvider);
    }

    public void loadObjectFieldProvider(ConnectionProvider conn, @SuppressWarnings("hiding") String AD_Client_ID,
            String Id) throws ServletException {
        setObjectFieldProvider(DocLandedCostData.selectRegistro(conn, AD_Client_ID, Id));
    }

    /**
     * Load Document Details
     * 
     * @return true if loadDocumentType was set
     */
    public boolean loadDocumentDetails(FieldProvider[] data, ConnectionProvider conn) {
        C_Currency_ID = NO_CURRENCY;

        DocumentType = AcctServer.DOCTYPE_LandedCost;
        log4jDocLandedCost.debug("loadDocumentDetails - C_Currency_ID : " + C_Currency_ID);
        DateDoc = data[0].getField("DateTrx");
        loadDocumentType(); // lines require doc type
        // Contained Objects
        p_lines = loadLines(conn);
        return true;
    } // loadDocumentDetails

    /**
     * Load Invoice Line
     * 
     * @return DocLine Array
     */
    private DocLine[] loadLines(ConnectionProvider conn) {
        ArrayList<Object> list = new ArrayList<Object>();

        DocLineLandedCostData[] data = null;
        try {
            data = DocLineLandedCostData.select(conn, Record_ID);
            for (int i = 0; i < data.length; i++) {
                String Line_ID = data[i].mLcReceiptlineAmtId;
                DocLine_LandedCost docLine = new DocLine_LandedCost(DocumentType, Record_ID, Line_ID);
                docLine.loadAttributes(data[i], this);
                docLine.m_C_Currency_ID = data[i].cCurrencyId;
                docLine.setWarehouseId(data[i].mWarehouseId);
                docLine.m_C_BPartner_ID = data[i].cBpartnerId;
                docLine.m_M_Product_ID = data[i].mProductId;
                docLine.m_DateAcct = DateDoc;
                docLine.setLandedCostTypeId(data[i].mLcTypeId);
                docLine.m_C_Project_ID = data[i].cProjectId;
                docLine.m_C_Costcenter_ID = data[i].cCostcenterId;
                docLine.m_User1_ID = data[i].user1id;
                docLine.m_User2_ID = data[i].user2id;
                docLine.m_C_Activity_ID = data[i].cActivityId;
                docLine.m_C_Campaign_ID = data[i].cCampaignId;
                docLine.m_A_Asset_ID = data[i].aAssetId;

                // -- Source Amounts
                String amt = data[i].amount;
                docLine.setAmount(amt);
                list.add(docLine);
            }
        } catch (ServletException e) {
            log4jDocLandedCost.warn(e);
        }
        // Return Array
        DocLine[] dl = new DocLine[list.size()];
        list.toArray(dl);
        return dl;
    } // loadLines

    /**
     * Get Balance
     * 
     * @return Zero (always balanced)
     */
    public BigDecimal getBalance() {
        BigDecimal retValue = ZERO;
        return retValue;
    } // getBalance

    /**
     * Create Facts (the accounting logic) for MMS, MMR.
     * 
     * <pre>
     *  Shipment
     *      CoGS            DR
     *      Inventory               CR
     *  Shipment of Project Issue
     *      CoGS            DR
     *      Project                 CR
     *  Receipt
     *      Inventory       DR
     *      NotInvoicedReceipt      CR
     * </pre>
     * 
     * @param as
     *          accounting schema
     * @return Fact
     */
    public Fact createFact(AcctSchema as, ConnectionProvider conn, Connection con, VariablesSecureApp vars)
            throws ServletException {
        // Select specific definition
        String strClassname = AcctServerData.selectTemplateDoc(conn, as.m_C_AcctSchema_ID, DocumentType);
        if (strClassname.equals(""))
            strClassname = AcctServerData.selectTemplate(conn, as.m_C_AcctSchema_ID, AD_Table_ID);
        if (!strClassname.equals("")) {
            try {
                DocLandedCostTemplate newTemplate = (DocLandedCostTemplate) Class.forName(strClassname)
                        .newInstance();
                return newTemplate.createFact(this, as, conn, con, vars);
            } catch (Exception e) {
                log4j.error("Error while creating new instance for DocLandedCostTemplate - " + e);
            }
        }
        C_Currency_ID = as.getC_Currency_ID();
        // create Fact Header
        Fact fact = new Fact(this, as, Fact.POST_Actual);
        String fact_Acct_Group_ID = SequenceIdData.getUUID();
        String amtDebit = "0";
        String amtCredit = "0";
        // Lines
        for (int i = 0; p_lines != null && i < p_lines.length; i++) {
            DocLine_LandedCost line = (DocLine_LandedCost) p_lines[i];

            BigDecimal amount = new BigDecimal(line.getAmount());
            ProductInfo p = new ProductInfo(line.m_M_Product_ID, conn);

            log4jDocLandedCost.debug("previous to creteline, line.getAmount(): " + line.getAmount());

            amtDebit = "";
            amtCredit = amount.toString();

            // If transaction uses Standard Algorithm IPD account will be used, else Asset account
            LCReceiptLineAmt landedCostReceiptLine = OBDal.getInstance().get(LCReceiptLineAmt.class,
                    line.m_TrxLine_ID);
            MaterialTransaction transaction = landedCostReceiptLine.getGoodsShipmentLine()
                    .getMaterialMgmtMaterialTransactionList().get(0);
            Account account = null;
            if (StringUtils.equals(transaction.getCostingAlgorithm().getJavaClassName(),
                    "org.openbravo.costing.StandardAlgorithm")) {
                account = p.getAccount(ProductInfo.ACCTTYPE_P_IPV, as, conn);
            } else {
                account = p.getAccount(ProductInfo.ACCTTYPE_P_Asset, as, conn);
            }

            fact.createLine(line, account, line.m_C_Currency_ID, amtCredit, amtDebit, fact_Acct_Group_ID,
                    nextSeqNo(SeqNo), DocumentType, line.m_DateAcct, null, conn);

            DocLine line2 = new DocLine(DocumentType, Record_ID, line.m_TrxLine_ID);
            line2.copyInfo(line);

            line2.m_C_BPartner_ID = "";
            line2.m_M_Product_ID = "";
            line2.m_C_Project_ID = "";
            line2.m_C_Costcenter_ID = "";
            line2.m_User1_ID = "";
            line2.m_User2_ID = "";
            line2.m_C_Activity_ID = "";
            line2.m_C_Campaign_ID = "";
            line2.m_A_Asset_ID = "";

            fact.createLine(line2, getLandedCostAccount(line.getLandedCostTypeId(), amount, as, conn),
                    line.m_C_Currency_ID, amtDebit, amtCredit, fact_Acct_Group_ID, nextSeqNo(SeqNo), DocumentType,
                    line.m_DateAcct, null, conn);

        }

        SeqNo = "0";
        return fact;
    } // createFact

    /**
     * @return the log4jDocLandedCost
     */
    public static Logger getlog4jDocLandedCost() {
        return log4jDocLandedCost;
    }

    /**
     * @param log4jDocLandedCost
     *          the log4jDocLandedCost to set
     */
    public static void setlog4jDocLandedCost(Logger log4jDocLandedCost) {
        DocLandedCost.log4jDocLandedCost = log4jDocLandedCost;
    }

    /**
     * @return the seqNo
     */
    public String getSeqNo() {
        return SeqNo;
    }

    /**
     * @param seqNo
     *          the seqNo to set
     */
    public void setSeqNo(String seqNo) {
        SeqNo = seqNo;
    }

    /**
     * @return the serialVersionUID
     */
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String nextSeqNo(String oldSeqNo) {
        log4jDocLandedCost.debug("DocLandedCost - oldSeqNo = " + oldSeqNo);
        BigDecimal seqNo = new BigDecimal(oldSeqNo);
        SeqNo = (seqNo.add(new BigDecimal("10"))).toString();
        log4jDocLandedCost.debug("DocLandedCost - nextSeqNo = " + SeqNo);
        return SeqNo;
    }

    /**
     * Get the account for Accounting Schema
     * 
     * @param as
     *          accounting schema
     * @return Account
     */
    public final Account getLandedCostAccount(String lcTypeId, BigDecimal amount, AcctSchema as,
            ConnectionProvider conn) {
        String Account_ID = "";
        DocLineLandedCostData[] data = null;
        Account acct = null;
        try {
            DocLineLandedCostData[] dataAcctType = DocLineLandedCostData.selectLCAccount(conn, lcTypeId);
            if (!"".equals(dataAcctType[0].accountId)) {
                data = DocLineLandedCostData.selectGlitem(conn, dataAcctType[0].accountId, as.getC_AcctSchema_ID());
                if (data.length > 0) {
                    Account_ID = data[0].glitemDebitAcct;
                    if (amount != null && amount.signum() < 0) {
                        Account_ID = data[0].glitemCreditAcct;
                    }
                }
            } else if (!"".equals(dataAcctType[0].mProductId)) {
                data = DocLineLandedCostData.selectLCProduct(conn, dataAcctType[0].mProductId,
                        as.getC_AcctSchema_ID());
                if (data.length > 0) {
                    Account_ID = data[0].accountId;
                }
            } else {
                log4jDocLandedCost
                        .warn("getLandedCostAccount - NO account for landed cost type " + dataAcctType[0].name);
                return null;
            }

            // No account
            if (Account_ID.equals("")) {
                log4jDocLandedCost
                        .warn("getLandedCostAccount - NO account for landed cost type =" + dataAcctType[0].name);
                return null;
            }
            // Return Account
            acct = Account.getAccount(conn, Account_ID);
        } catch (ServletException e) {
            log4jDocLandedCost.warn(e);
        }
        return acct;
    } // getAccount

    /**
     * Get Document Confirmation
     * 
     * not used
     */
    public boolean getDocumentConfirmation(ConnectionProvider conn, String strRecordId) {
        return true;
    }

    public String getServletInfo() {
        return "Servlet for the accounting";
    } // end of getServletInfo() method
}