diff --git a/base/src/org/eevolution/process/BankTransfer.java b/base/src/org/eevolution/process/BankTransfer.java new file mode 100644 index 0000000000..4b8105ddd8 --- /dev/null +++ b/base/src/org/eevolution/process/BankTransfer.java @@ -0,0 +1,189 @@ +/****************************************************************************** + * Product: Adempiere ERP & CRM Smart Business Solution * + * 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. * + * For the text or an alternative of this public license, you may reach us * + * Copyright (C) 2003-2008 e-Evolution,SC. All Rights Reserved. * + * Contributor(s): Victor Perez www.e-evolution.com * + *****************************************************************************/ +package org.eevolution.process; + + +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.logging.Level; + +import org.compiere.model.MBankAccount; +import org.compiere.model.MPayment; +import org.compiere.process.ProcessInfoParameter; +import org.compiere.process.SvrProcess; +import org.compiere.util.AdempiereUserError; +import org.compiere.util.Env; + +/** + * Bank Transfer. Generate two Payments entry + * + * For Bank Transfer From Bank Account "A" + * + * @author victor.perez@e-evoltuion.com + * + **/ +public class BankTransfer extends SvrProcess +{ + private String p_DocumentNo= ""; // Document No + private String p_Description= ""; // Description + private int p_C_BPartner_ID = 0; // Business Partner to be used as bridge + private int p_C_Currency_ID = 0; // Payment Currency + private int p_C_ConversionType_ID = 0; // Payment Conversion Type + private int p_C_Charge_ID = 0; // Charge to be used as bridge + + private BigDecimal p_Amount = new BigDecimal(0); // Amount to be transfered between the accounts + private int p_From_C_BankAccount_ID = 0; // Bank Account From + private int p_To_C_BankAccount_ID= 0; // Bank Account To + private Timestamp p_StatementDate = null; // Date Statement + private Timestamp p_DateAcct = null; // Date Account + + /** + * Prepare - e.g., get Parameters. + */ + protected void prepare() + { + ProcessInfoParameter[] para = getParameter(); + for (int i = 0; i < para.length; i++) + { + String name = para[i].getParameterName(); + if (name.equals("From_C_BankAccount_ID")) + p_From_C_BankAccount_ID = para[i].getParameterAsInt(); + else if (name.equals("To_C_BankAccount_ID")) + p_To_C_BankAccount_ID = para[i].getParameterAsInt(); + else if (name.equals("C_BPartner_ID")) + p_C_BPartner_ID = para[i].getParameterAsInt(); + else if (name.equals("C_Currency_ID")) + p_C_Currency_ID = para[i].getParameterAsInt(); + else if (name.equals("C_ConversionType_ID")) + p_C_ConversionType_ID = para[i].getParameterAsInt(); + else if (name.equals("C_Charge_ID")) + p_C_Charge_ID = para[i].getParameterAsInt(); + else if (name.equals("DocumentNo")) + p_DocumentNo = (String)para[i].getParameter(); + else if (name.equals("Amount")) + p_Amount = ((BigDecimal)para[i].getParameter()); + else if (name.equals("Description")) + p_Description = (String)para[i].getParameter(); + else if (name.equals("StatementDate")) + p_StatementDate = (Timestamp)para[i].getParameter(); + else if (name.equals("DateAcct")) + p_DateAcct = (Timestamp)para[i].getParameter(); + else + log.log(Level.SEVERE, "prepare - Unknown Parameter: " + name); + } + } // prepare + + /** + * Perform process. + * @return Message (translated text) + * @throws Exception if not successful + */ + protected String doIt() throws Exception + { + log.info("From Bank="+p_From_C_BankAccount_ID+" - To Bank="+p_To_C_BankAccount_ID + + " - C_BPartner_ID="+p_C_BPartner_ID+"- C_Charge_ID= "+p_C_Charge_ID+" - Amount="+p_Amount+" - DocumentNo="+p_DocumentNo + + " - Description="+p_Description+ " - Statement Date="+p_StatementDate+ + " - Date Account="+p_DateAcct); + + if (p_To_C_BankAccount_ID == 0 || p_From_C_BankAccount_ID == 0) + throw new IllegalArgumentException("Banks required"); + + if (p_DocumentNo == null || p_DocumentNo.length() == 0) + throw new IllegalArgumentException("Document No required"); + + if (p_To_C_BankAccount_ID == p_From_C_BankAccount_ID) + throw new AdempiereUserError ("Banks From and To must be different"); + + if (p_C_BPartner_ID == 0) + throw new AdempiereUserError ("Business Partner required"); + + if (p_C_Currency_ID == 0) + throw new AdempiereUserError ("Currency required"); + + if (p_C_Charge_ID == 0) + throw new AdempiereUserError ("Business Partner required"); + + if (p_Amount.compareTo(new BigDecimal(0)) == 0) + throw new AdempiereUserError ("Amount required"); + + // Login Date + if (p_StatementDate == null) + p_StatementDate = Env.getContextAsDate(getCtx(), "#Date"); + if (p_StatementDate == null) + p_StatementDate = new Timestamp(System.currentTimeMillis()); + + if (p_DateAcct == null) + p_DateAcct = p_StatementDate; + + generateBankTransfer(); + + return "@OK@ "; + } // doIt + + + /** + * Generate BankTransfer() + * + */ + private void generateBankTransfer() + { + + MBankAccount mBankFrom = new MBankAccount(getCtx(),p_From_C_BankAccount_ID, get_TrxName()); + MBankAccount mBankTo = new MBankAccount(getCtx(),p_To_C_BankAccount_ID, get_TrxName()); + + MPayment paymentBankFrom = new MPayment(getCtx(), 0 , get_TrxName()); + paymentBankFrom.setC_BankAccount_ID(mBankFrom.getC_BankAccount_ID()); + paymentBankFrom.setDocumentNo(p_DocumentNo); + paymentBankFrom.setDateAcct(p_DateAcct); + paymentBankFrom.setDateTrx(p_StatementDate); + paymentBankFrom.setTenderType(MPayment.TENDERTYPE_DirectDeposit); + paymentBankFrom.setDescription(p_Description); + paymentBankFrom.setC_BPartner_ID (p_C_BPartner_ID); + paymentBankFrom.setC_Currency_ID(p_C_Currency_ID); + if (p_C_ConversionType_ID > 0) + paymentBankFrom.setC_ConversionType_ID(p_C_ConversionType_ID); + paymentBankFrom.setPayAmt(p_Amount); + paymentBankFrom.setOverUnderAmt(Env.ZERO); + paymentBankFrom.setC_DocType_ID(false); + paymentBankFrom.setC_Charge_ID(p_C_Charge_ID); + paymentBankFrom.save(); + paymentBankFrom.processIt(MPayment.DOCACTION_Complete); + paymentBankFrom.saveEx(); + + MPayment paymentBankTo = new MPayment(getCtx(), 0 , get_TrxName()); + paymentBankTo.setC_BankAccount_ID(mBankTo.getC_BankAccount_ID()); + paymentBankTo.setDocumentNo(p_DocumentNo); + paymentBankTo.setDateAcct(p_DateAcct); + paymentBankTo.setDateTrx(p_StatementDate); + paymentBankTo.setTenderType(MPayment.TENDERTYPE_DirectDeposit); + paymentBankTo.setDescription(p_Description); + paymentBankTo.setC_BPartner_ID (p_C_BPartner_ID); + paymentBankTo.setC_Currency_ID(p_C_Currency_ID); + if (p_C_ConversionType_ID > 0) + paymentBankFrom.setC_ConversionType_ID(p_C_ConversionType_ID); + paymentBankTo.setPayAmt(p_Amount); + paymentBankTo.setOverUnderAmt(Env.ZERO); + paymentBankTo.setC_DocType_ID(true); + paymentBankTo.setC_Charge_ID(p_C_Charge_ID); + paymentBankTo.save(); + paymentBankTo.processIt(MPayment.DOCACTION_Complete); + paymentBankTo.saveEx(); + + return; + + } // createCashLines + +} // ImmediateBankTransfer diff --git a/base/src/org/eevolution/process/EnableNativeSequence.java b/base/src/org/eevolution/process/EnableNativeSequence.java new file mode 100644 index 0000000000..5b1b7e23d4 --- /dev/null +++ b/base/src/org/eevolution/process/EnableNativeSequence.java @@ -0,0 +1,103 @@ +/****************************************************************************** + * Product: Adempiere ERP & CRM Smart Business Solution * + * 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. * + * For the text or an alternative of this public license, you may reach us * + * Copyright (C) 2003-2007 e-Evolution,SC. All Rights Reserved. * + * Contributor(s): Victor Perez www.e-evolution.com * + *****************************************************************************/ + +package org.eevolution.process; + + + +import java.util.List; +import java.util.logging.Level; + +import org.adempiere.exceptions.AdempiereException; +import org.compiere.Adempiere; +import org.compiere.model.MSequence; +import org.compiere.model.MSysConfig; +import org.compiere.model.MTable; +import org.compiere.model.Query; +import org.compiere.model.X_AD_Table; +import org.compiere.process.SvrProcess; +import org.compiere.util.CLogMgt; +import org.compiere.util.DB; + +/** + * Enable Native Sequence + * + * @author Victor Perez, e-Evolution, S.C. + */ +public class EnableNativeSequence extends SvrProcess +{ + + /** + * Prepare - e.g., get Parameters. + */ + protected void prepare() + { + } // prepare + + protected String doIt() + { + boolean SYSTEM_NATIVE_SEQUENCE = MSysConfig.getBooleanValue("SYSTEM_NATIVE_SEQUENCE",false); + + if(SYSTEM_NATIVE_SEQUENCE) + throw new AdempiereException("Native Sequence is Actived"); + else + { + DB.executeUpdateEx("UPDATE AD_SysConfig SET Value='Y' WHERE Name='SYSTEM_NATIVE_SEQUENCE'",null); + MSysConfig.resetCache(); + } + + List tables = new Query(getCtx(),X_AD_Table.Table_Name,"", get_TrxName()).list(); + for(MTable table : tables) + { + if(!table.isView()) + { + if(!MSequence.createTableSequence(getCtx(), table.getTableName(), get_TrxName())) + { + DB.executeUpdateEx("UPDATE AD_SysConfig SET Value='N' WHERE Name='SYSTEM_NATIVE_SEQUENCE'",null); + MSysConfig.resetCache(); + new AdempiereException("Can not create Native Sequence"); + } + else + { + this.addLog("Create Native Sequence for : "+table.getTableName()); + } + } + } + + + return "@OK@"; + } + + /** + * Main test + * @param args + * @throws Exception + */ + public static void main(String[] args) + { + + try { + Adempiere.startupEnvironment(true); + CLogMgt.setLevel(Level.ALL); + EnableNativeSequence seqs = new EnableNativeSequence(); + seqs.doIt(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } +} + diff --git a/base/src/org/eevolution/process/InvoiceCalculateTax.java b/base/src/org/eevolution/process/InvoiceCalculateTax.java new file mode 100644 index 0000000000..e73b627597 --- /dev/null +++ b/base/src/org/eevolution/process/InvoiceCalculateTax.java @@ -0,0 +1,91 @@ +/****************************************************************************** + * Product: Adempiere ERP & CRM Smart Business Solution * + * 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. * + * For the text or an alternative of this public license, you may reach us * + * Copyright (C) 2003-2007 e-Evolution,SC. All Rights Reserved. * + * Contributor(s): Victor Perez www.e-evolution.com * + *****************************************************************************/ +package org.eevolution.process; + + + +import org.adempiere.exceptions.FillMandatoryException; +import org.compiere.model.MBPartner; +import org.compiere.model.MFactAcct; +import org.compiere.model.MInvoice; +import org.compiere.model.MPeriod; +import org.compiere.process.ProcessInfoParameter; +import org.compiere.process.SvrProcess; + + +/** + * Re-calculate Invoice Tax (and unpost the document) + * @author victor.perez@e-evolution.com, e-Evolution http://www.e-evolution.com + *
  • FR [ 2520591 ] Support multiples calendar for Org + * @see http://sourceforge.net/tracker2/?func=detail&atid=879335&aid=2520591&group_id=176962 + * @author Teo Sarca, www.arhipac.ro + */ +public class InvoiceCalculateTax extends SvrProcess +{ + public static final String PARAM_C_Invoice_ID = "C_Invoice_ID"; + + private int p_C_Invoice_ID = 0; + + @Override + protected void prepare() + { + for (ProcessInfoParameter para : getParameter()) + { + String name = para.getParameterName(); + if (para.getParameter() == null) + { + ; + } + else if (name.equals(PARAM_C_Invoice_ID)) + { + p_C_Invoice_ID = para.getParameterAsInt(); + } + } + + if (p_C_Invoice_ID <= 0) + { + throw new FillMandatoryException(PARAM_C_Invoice_ID); + } + } + + @Override + protected String doIt() throws Exception + { + MInvoice invoice = new MInvoice(getCtx(), p_C_Invoice_ID, get_TrxName()); + recalculateTax(invoice); + // + return "@ProcessOK@"; + } + + public static void recalculateTax(MInvoice invoice) + { + // + // Delete accounting /UnPost + MPeriod.testPeriodOpen(invoice.getCtx(), invoice.getDateAcct(), invoice.getC_DocType_ID(), invoice.getAD_Org_ID()); + MFactAcct.deleteEx(MInvoice.Table_ID, invoice.get_ID(), invoice.get_TrxName()); + // + // Update Invoice + invoice.calculateTaxTotal(); + invoice.setPosted(false); + invoice.saveEx(); + // + // Update balance + MBPartner bp = new MBPartner (invoice.getCtx(), invoice.getC_BPartner_ID(), invoice.get_TrxName()); + bp.setTotalOpenBalance(); + bp.setSOCreditStatus(); + bp.saveEx(); + } +}