/******************************************************************************* * Product: Adempiere ERP & CRM Smart Business Solution * Copyright (C) * 1999-2006 Adempiere, Inc. All Rights Reserved. * This program is free * software; you can redistribute it and/or modify it * under the terms version * 2 of the GNU General Public License as published * by the Free Software * Foundation. This program is distributed in the hope * that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied * warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General * Public License for more details. * You should have received a copy of the GNU * General Public License along * with this program; if not, write to the Free * Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA. * * * Copyright (C) 2004 Marco LOMBARDO. lombardo@mayking.com * Contributor(s): Low Heng Sin hengsin@avantz.com * __________________________________________ ******************************************************************************/ // ---------------------------------------------------------------------- // Generic PO. package org.adempiere.model; import java.io.File; import java.math.BigDecimal; // import for GenericPO import java.sql.ResultSet; import java.util.Properties; import org.adempiere.util.ServerContextPropertiesWrapper; import org.compiere.model.MTable; import org.compiere.model.PO; import org.compiere.model.POInfo; import org.compiere.process.DocAction; /** * Generic PO implementation, this can be use together with ModelValidator as alternative to the classic * generated model class and extend ( X_ and M_ ) approach. *

* Originally for used to insert/update data from adempieredata.xml file in 2pack. * @author Marco LOMBARDO * @contributor Low Heng Sin */ public class GenericPO extends PO implements DocAction { /** * generated serial id */ private static final long serialVersionUID = 3180937588404433030L; private DocActionDelegate docActionDelegate = new DocActionDelegate<>(this); /** * @param tableName * @param ctx * @param ID */ public GenericPO(String tableName, Properties ctx, int ID) { super(new PropertiesWrapper(ctx, tableName), ID, null, (String[]) null); } /** * @param tableName * @param ctx * @param rs */ public GenericPO(String tableName, Properties ctx, ResultSet rs) { super(new PropertiesWrapper(ctx, tableName), 0, null, rs); } /** * @param tableName * @param ctx * @param ID * @param trxName */ public GenericPO(String tableName, Properties ctx, int ID, String trxName) { super(new PropertiesWrapper(ctx, tableName), ID, trxName, (String[]) null); } /** * @param tableName * @param ctx * @param rs * @param trxName */ public GenericPO(String tableName, Properties ctx, ResultSet rs, String trxName) { super(new PropertiesWrapper(ctx, tableName), 0, trxName, rs); } /** * We must not use variable initializer here since the 2 variable below will be initialize inside * the initPO method called by the parent constructor. */ private int tableID; private String tableName; /** Load Meta Data */ protected POInfo initPO(Properties ctx) { PropertiesWrapper wrapper = (PropertiesWrapper)ctx; p_ctx = wrapper.source; tableName = wrapper.tableName; tableID = MTable.getTable_ID(tableName, this.get_TrxName()); POInfo poi = POInfo.getPOInfo(ctx, tableID, this.get_TrxName()); return poi; } public String toString() { StringBuilder sb = new StringBuilder("GenericPO[Table=").append( "" + tableID + ",ID=").append(get_ID()).append("]"); return sb.toString(); } public static final int AD_ORGTRX_ID_AD_Reference_ID = 130; /** * Set Trx Organization. Performing or initiating organization */ public void setAD_OrgTrx_ID(int AD_OrgTrx_ID) { if (AD_OrgTrx_ID == 0) set_Value("AD_OrgTrx_ID", null); else set_Value("AD_OrgTrx_ID", Integer.valueOf(AD_OrgTrx_ID)); } /** * Get Trx Organization. Performing or initiating organization */ public int getAD_OrgTrx_ID() { Integer ii = (Integer) get_Value("AD_OrgTrx_ID"); if (ii == null) return 0; return ii.intValue(); } @Override protected int get_AccessLevel() { return Integer.parseInt(p_info.getAccessLevel()); } /* METHODS TO USE GenericPO in Documents */ /** * Set Document Status. * @param DocStatus The current status of the document */ @Override public void setDocStatus(String DocStatus) { docActionDelegate.setDocStatus(DocStatus); } /** * Get Document Status. * @return The current status of the document */ @Override public String getDocStatus() { return docActionDelegate.getDocStatus(); } /** * Process document * @param processAction document action * @return true if performed */ @Override public boolean processIt (String processAction) { return docActionDelegate.processIt(processAction); } // process /** * Unlock Document. * @return true if success */ @Override public boolean unlockIt() { return docActionDelegate.unlockIt(); } // unlockIt /** * Get Document Action. * @return The targeted status of the document */ @Override public String getDocAction() { return docActionDelegate.getDocAction(); } /** * Invalidate Document * @return true if success */ @Override public boolean invalidateIt() { return docActionDelegate.invalidateIt(); } // invalidateIt /** * Prepare Document * @return new status (In Progress or Invalid) */ @Override public String prepareIt() { return docActionDelegate.prepareIt(); } // prepareIt /** * Approve Document * @return true if success */ @Override public boolean approveIt() { return docActionDelegate.approveIt(); } // approveIt /** * Reject Approval * @return true if success */ @Override public boolean rejectIt() { return docActionDelegate.rejectIt(); } // rejectIt /** * Complete Document * @return new status (Complete, In Progress, Invalid, Waiting ..) */ @Override public String completeIt() { return docActionDelegate.completeIt(); } // completeIt /** * Void Document. * @return true if success */ @Override public boolean voidIt() { return docActionDelegate.voidIt(); } // voidIt /** * Close Document. * @return true if success */ @Override public boolean closeIt() { return docActionDelegate.closeIt(); } // closeIt /** * Reverse Correction - same date * @return true if success */ @Override public boolean reverseCorrectIt() { return docActionDelegate.reverseCorrectIt(); } // reverseCorrectIt /** * Reverse Accrual - none * @return false */ @Override public boolean reverseAccrualIt() { return docActionDelegate.reverseAccrualIt(); } // reverseAccrualIt /** * Re-activate. * @return true if success */ @Override public boolean reActivateIt() { return docActionDelegate.reActivateIt(); } // reActivateIt /** * Get Summary * @return Summary of Document */ @Override public String getSummary() { return docActionDelegate.getSummary(); } // getSummary @Override public String getDocumentNo() { return docActionDelegate.getDocumentNo(); } /** * Get Document Info * @return document info (untranslated) */ @Override public String getDocumentInfo() { return docActionDelegate.getDocumentInfo(); } // getDocumentInfo @Override public File createPDF() { return docActionDelegate.createPDF(); } /** * Get Process Message * @return clear text error message */ @Override public String getProcessMsg() { return docActionDelegate.getProcessMsg(); } // getProcessMsg @Override public int getDoc_User_ID() { return docActionDelegate.getDoc_User_ID(); } /** * Get Currency. * @return The Currency for this record */ @Override public int getC_Currency_ID() { return docActionDelegate.getC_Currency_ID(); } @Override public BigDecimal getApprovalAmt() { return docActionDelegate.getApprovalAmt(); } } // GenericPO /** * Wrapper class to workaround the limit of PO constructor that doesn't take a tableName or * tableID parameter. Note that in the generated class scenario ( X_ ), tableName and tableId * is generated as a static field. * @author Low Heng Sin * */ class PropertiesWrapper extends ServerContextPropertiesWrapper { /** * generated serial id */ private static final long serialVersionUID = 8887531951501323594L; protected Properties source; protected String tableName; PropertiesWrapper(Properties source, String tableName) { this.source = source; this.tableName = tableName; } }