⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expensesorder.java

📁 Java写的ERP系统
💻 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 + -