📄 expensesorder.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/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 Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2003 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.process;
import java.sql.*;
import java.math.*;
import java.net.*;
import org.compiere.model.*;
import org.compiere.util.*;
/**
* Create Sales Orders from Expense Reports
*
* @author Jorg Janke
* @version $Id: ExpenseSOrder.java,v 1.8 2003/04/15 05:03:17 jjanke Exp $
*/
public class ExpenseSOrder extends SvrProcess
{
/**
* Constructor
*/
public ExpenseSOrder()
{
super();
Log.trace(Log.l1_User, "ExpenseSOrder");
} // ExpenseSOrder
private int m_C_BPartner_ID = 0;
private Timestamp m_DateFrom = null;
private Timestamp m_DateTo = null;
private int m_noOrders = 0;
/**
* Prepare - e.g., get Parameters.
*/
protected void prepare()
{
Parameter[] para = getParameter();
for (int i = 0; i < para.length; i++)
{
String name = para[i].ParameterName;
if (para[i].Parameter == null)
;
else if (name.equals("C_BPartner_ID"))
m_C_BPartner_ID = ((BigDecimal)para[i].Parameter).intValue();
else if (name.equals("DateReport"))
{
m_DateFrom = (Timestamp)para[i].Parameter;
m_DateTo = (Timestamp)para[i].Parameter_To;
}
else
Log.error("ExpenseAPInvoice.prepare - Unknown Parameter: " + name);
}
} // prepare
/**
* Perform process.
* @return Message to be translated
* @throws Exception
*/
protected String doIt() throws java.lang.Exception
{
StringBuffer sql = new StringBuffer("SELECT e.AD_Client_ID, e.AD_Org_ID," // 1..2
+ "el.C_BPartner_ID, e.M_Warehouse_ID," // 3..4
+ "el.C_Project_ID, el.C_Activity_ID, el.C_Campaign_ID," // 5..7
+ "el.M_Product_ID, el.S_ResourceAssignment_ID, el.C_UOM_ID," // 8..10
+ "el.Qty, el.Description, el.Note, el.InvoicePrice," // 11..14
+ "COALESCE(bp.M_PriceList_ID, e.M_PriceList_ID), " // 15
+ "e.DocumentNo, el.S_TimeExpenseLine_ID " // 16..17
+ "FROM S_TimeExpense e"
+ " INNER JOIN S_TimeExpenseLine el ON (e.S_TimeExpense_ID=el.S_TimeExpense_ID)"
+ " INNER JOIN C_BPartner bp ON (el.C_BPartner_ID=bp.C_BPartner_ID)"
+ " LEFT OUTER JOIN S_ResourceAssignment ra ON (el.S_ResourceAssignment_ID=ra.S_ResourceAssignment_ID) "
+ "WHERE el.C_OrderLine_ID IS NULL AND el.IsInvoiced='Y' AND e.Processed='Y'");
if (m_C_BPartner_ID != 0)
sql.append(" AND el.C_BPartner_ID=?"); // #1
if (m_DateFrom != null)
sql.append(" AND e.DateReport >= ?"); // #2
if (m_DateTo != null)
sql.append(" AND e.DateReport <= ?"); // #3
sql.append(" ORDER BY el.C_BPartner_ID, el.C_Project_ID, e.S_TimeExpense_ID, el.Line");
//
int old_BPartner_ID = -1;
int old_Project_ID = -1;
MOrder order = null;
//
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql.toString());
int par = 1;
if (m_C_BPartner_ID != 0)
pstmt.setInt(par++, m_C_BPartner_ID);
if (m_DateFrom != null)
pstmt.setTimestamp(par++, m_DateFrom);
if (m_DateTo != null)
pstmt.setTimestamp(par++, m_DateTo);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) // ********* Expense Line Loop
{
// e.AD_Client_ID, e.AD_Org_ID, // 1..2
int AD_Client_ID = rs.getInt(1);
int AS_org_ID = rs.getInt(2);
// el.C_BPartner_ID, e.M_Warehouse_ID, // 3..4
int C_BPartner_ID = rs.getInt(3);
int M_Warehouse_ID = rs.getInt(4);
// el.C_Project_ID, el.C_Activity_ID, el.C_Campaign_ID, // 5..7
int C_Project_ID = rs.getInt(5);
int C_Activity_ID = rs.getInt(6);
int C_Campaign_ID = rs.getInt(7);
// el.M_Product_ID, el.S_ResourceAssignment_ID, el.C_UOM_ID, // 8..10
int M_Product_ID = rs.getInt(8);
int S_ResourceAssignment_ID = rs.getInt(9);
int C_UOM_ID = rs.getInt(10);
// el.Qty, el.Description, el.Note, el.InvoicePrice, // 11..14
BigDecimal Qty = rs.getBigDecimal(11);
String Description = rs.getString(12);
String Note = rs.getString(13);
BigDecimal InvoicePrice = rs.getBigDecimal(14);
// COALESCE(bp.M_PriceList_ID, e.M_PriceList_ID) // 15
int M_PriceList_ID = rs.getInt(15);
// e.DocumentNo, el.S_TimeExpenseLine_ID // 16..17
String DocumentNo = rs.getString(16);
int S_TimeExpenseLine_ID = rs.getInt(17);
// New BPartner or Project - New Order
if (C_BPartner_ID != old_BPartner_ID || C_Project_ID != old_Project_ID)
{
completeOrder (order);
MBPartner bp = new MBPartner (getCtx(), C_BPartner_ID);
//
Log.trace(Log.l4_Data, "ExpenseSOrder.doIt - New Order for", bp + ", Project=" + C_Project_ID);
order = new MOrder (getCtx(), 0);
order.setC_DocTypeTarget_ID(MOrder.DocSubTypeSO_OnCredit);
//
order.setBPartner(bp);
order.setM_Warehouse_ID(M_Warehouse_ID);
if (C_Activity_ID != 0)
order.setC_Activity_ID(C_Activity_ID);
if (C_Campaign_ID != 0)
order.setC_Campaign_ID(C_Campaign_ID);
if (C_Project_ID != 0)
order.setC_Project_ID(C_Project_ID);
//
order.setM_PriceList_ID (M_PriceList_ID);
//
if (!order.save())
{
Log.error("ExpenseSOrder.doIt - cannot save Order");
order = null;
break;
}
old_BPartner_ID = C_BPartner_ID;
old_Project_ID = C_Project_ID;
}
// OrderLine
MOrderLine ol = new MOrderLine (getCtx(), 0, order.getC_Order_ID());
ol.setOrder (order);
//
if (M_Product_ID != 0)
ol.setM_Product_ID(M_Product_ID);
if (S_ResourceAssignment_ID != 0)
ol.setS_ResourceAssignment_ID(S_ResourceAssignment_ID);
ol.setQtyOrdered(Qty);
ol.setDescription(Description);
//
if (InvoicePrice != null && InvoicePrice.compareTo(Env.ZERO) != 0)
ol.setPriceActual(InvoicePrice);
else
ol.setPrice();
if (C_UOM_ID != 0 && ol.getC_UOM_ID() == 0)
ol.setC_UOM_ID(C_UOM_ID);
ol.setTax();
if (!ol.save())
{
Log.error ("ExpenseSOrder.doIt - cannot save OrderLine");
order = null;
break;
}
// Update TimeExpense Line
sql = new StringBuffer ("UPDATE S_TimeExpenseLine SET C_OrderLine_ID=")
.append(ol.getID())
.append(" WHERE S_TimeExpenseLine_ID=").append(S_TimeExpenseLine_ID);
int no = DB.executeUpdate(sql.toString());
if (no == 1)
Log.trace(Log.l3_Util, "ExpenseSOrder.doIt Updated",
"S_TimeExpenseLine_ID=" + S_TimeExpenseLine_ID
+ " with C_OrderLine_ID=" + ol.getID());
else
Log.error("ExpenseSOrder.doIt Not Updated #" + no
+ " - S_TimeExpenseLine_ID=" + S_TimeExpenseLine_ID
+ " with C_OrderLine_ID=" + ol.getID());
} // ********* Expense Line Loop
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
Log.error("ExpenseSOrder.doIt", e);
}
finally
{
try
{
if (pstmt != null)
pstmt.close ();
}
catch (Exception e)
{}
pstmt = null;
}
completeOrder (order);
return "@Created@=" + m_noOrders;
} // doIt
/**
* Complete Order
* @param order Order
*/
private void completeOrder (MOrder order)
{
if (order == null)
return;
m_noOrders++;
addLog(order.getDateOrdered(), order.getID(), order.getGrandTotal(), order.getDocumentNo());
} // completeOrder
} // ExpenseSOrder
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -