📄 mallocationhdr.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 Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.model;
import java.io.*;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.process.*;
import org.compiere.util.*;
/**
* Payment Allocation Model.
* Allocation Trigger update C_BPartner
*
* @author Jorg Janke
* @version $Id: MAllocationHdr.java,v 1.20 2005/12/01 01:55:21 jjanke Exp $
*/
public final class MAllocationHdr extends X_C_AllocationHdr implements DocAction
{
/**
* Get Allocations of Payment
* @param ctx context
* @param C_Payment_ID payment
* @return allocations of payment
*/
public static MAllocationHdr[] getOfPayment (Properties ctx, int C_Payment_ID, String trxName)
{
String sql = "SELECT * FROM C_AllocationHdr h "
+ "WHERE IsActive='Y'"
+ " AND EXISTS (SELECT * FROM C_AllocationLine l "
+ "WHERE h.C_AllocationHdr_ID=l.C_AllocationHdr_ID AND l.C_Payment_ID=?)";
ArrayList<MAllocationHdr> list = new ArrayList<MAllocationHdr>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, trxName);
pstmt.setInt(1, C_Payment_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add (new MAllocationHdr(ctx, rs, trxName));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MAllocationHdr[] retValue = new MAllocationHdr[list.size()];
list.toArray(retValue);
return retValue;
} // getOfPayment
/**
* Get Allocations of Invoice
* @param ctx context
* @param C_Invoice_ID payment
* @return allocations of payment
*/
public static MAllocationHdr[] getOfInvoice (Properties ctx, int C_Invoice_ID, String trxName)
{
String sql = "SELECT * FROM C_AllocationHdr h "
+ "WHERE IsActive='Y'"
+ " AND EXISTS (SELECT * FROM C_AllocationLine l "
+ "WHERE h.C_AllocationHdr_ID=l.C_AllocationHdr_ID AND l.C_Invoice_ID=?)";
ArrayList<MAllocationHdr> list = new ArrayList<MAllocationHdr>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, trxName);
pstmt.setInt(1, C_Invoice_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add (new MAllocationHdr(ctx, rs, trxName));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MAllocationHdr[] retValue = new MAllocationHdr[list.size()];
list.toArray(retValue);
return retValue;
} // getOfInvoice
/** Logger */
private static CLogger s_log = CLogger.getCLogger(MAllocationHdr.class);
/**************************************************************************
* Standard Constructor
* @param ctx context
* @param C_AllocationHdr_ID id
*/
public MAllocationHdr (Properties ctx, int C_AllocationHdr_ID, String trxName)
{
super (ctx, C_AllocationHdr_ID, trxName);
if (C_AllocationHdr_ID == 0)
{
// setDocumentNo (null);
setDateTrx (new Timestamp(System.currentTimeMillis()));
setDateAcct (getDateTrx());
setDocAction (DOCACTION_Complete); // CO
setDocStatus (DOCSTATUS_Drafted); // DR
// setC_Currency_ID (0);
setApprovalAmt (Env.ZERO);
setIsApproved (false);
setIsManual (false);
//
setPosted (false);
setProcessed (false);
setProcessing(false);
}
} // MAllocation
/**
* Mandatory New Constructor
* @param ctx context
* @param IsManual manual trx
* @param DateTrx date (if null today)
* @param C_Currency_ID currency
*/
public MAllocationHdr (Properties ctx, boolean IsManual, Timestamp DateTrx,
int C_Currency_ID, String description, String trxName)
{
this (ctx, 0, trxName);
setIsManual(IsManual);
if (DateTrx != null)
{
setDateTrx (DateTrx);
setDateAcct (DateTrx);
}
setC_Currency_ID (C_Currency_ID);
if (description != null)
setDescription(description);
} // create Allocation
/**
* Load Constructor
* @param ctx context
* @param rs result set
*/
public MAllocationHdr (Properties ctx, ResultSet rs, String trxName)
{
super(ctx, rs, trxName);
} // MAllocation
/** Lines */
private MAllocationLine[] m_lines = null;
/**
* Get Lines
* @param requery if true requery
* @return lines
*/
public MAllocationLine[] getLines (boolean requery)
{
if (m_lines != null && !requery)
return m_lines;
//
String sql = "SELECT * FROM C_AllocationLine WHERE C_AllocationHdr_ID=?";
ArrayList<MAllocationLine> list = new ArrayList<MAllocationLine>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getC_AllocationHdr_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
MAllocationLine line = new MAllocationLine(getCtx(), rs, get_TrxName());
line.setParent(this);
list.add (line);
}
rs.close ();
pstmt.close ();
pstmt = null;
} catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
} catch (Exception e)
{
pstmt = null;
}
//
m_lines = new MAllocationLine[list.size ()];
list.toArray (m_lines);
return m_lines;
} // getLines
/**
* Set Processed
* @param processed Processed
*/
public void setProcessed (boolean processed)
{
super.setProcessed (processed);
if (get_ID() == 0)
return;
String sql = "UPDATE C_AllocationHdr SET Processed='"
+ (processed ? "Y" : "N")
+ "' WHERE C_AllocationHdr_ID=" + getC_AllocationHdr_ID();
int no = DB.executeUpdate(sql, get_TrxName());
m_lines = null;
log.fine(processed + " - #" + no);
} // setProcessed
/**************************************************************************
* Before Save
* @param newRecord
* @return save
*/
protected boolean beforeSave (boolean newRecord)
{
// Changed from Not to Active
if (!newRecord && is_ValueChanged("IsActive") && isActive())
{
log.severe ("Cannot Re-Activate deactivated Allocations");
return false;
}
return true;
} // beforeSave
/**
* Before Delete.
* @return true if acct was deleted
*/
protected boolean beforeDelete ()
{
String trxName = get_TrxName();
if (trxName == null || trxName.length() == 0)
log.warning ("No transaction");
if (isPosted())
{
if (!MPeriod.isOpen(getCtx(), getDateTrx(), MDocType.DOCBASETYPE_PaymentAllocation))
{
log.warning ("Period Closed");
return false;
}
setPosted(false);
if (MFactAcct.delete (Table_ID, get_ID(), trxName) < 0)
return false;
}
// Mark as Inactive
setIsActive(false); // updated DB for line delete/process
String sql = "UPDATE C_AllocationHdr SET IsActive='N' WHERE C_AllocationHdr_ID=?";
DB.executeUpdate(sql, getC_AllocationHdr_ID(), trxName);
// Unlink
getLines(true);
HashSet<Integer> bps = new HashSet<Integer>();
for (int i = 0; i < m_lines.length; i++)
{
MAllocationLine line = m_lines[i];
bps.add(new Integer(line.getC_BPartner_ID()));
if (!line.delete(true, trxName))
return false;
}
updateBP(bps);
return true;
} // beforeDelete
/**
* After Save
* @param newRecord
* @param success
* @return success
*/
protected boolean afterSave (boolean newRecord, boolean success)
{
return success;
} // afterSave
/**************************************************************************
* Process document
* @param processAction document action
* @return true if performed
*/
public boolean processIt (String processAction)
{
m_processMsg = null;
DocumentEngine engine = new DocumentEngine (this, getDocStatus());
return engine.processIt (processAction, getDocAction());
} // processIt
/** Process Message */
private String m_processMsg = null;
/** Just Prepared Flag */
private boolean m_justPrepared = false;
/**
* Unlock Document.
* @return true if success
*/
public boolean unlockIt()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -