📄 documentengine.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.process;
import java.io.*;
import java.math.*;
import java.util.*;
import javax.naming.*;
import org.compiere.db.*;
import org.compiere.interfaces.*;
import org.compiere.model.*;
import org.compiere.util.*;
/**
* Document Action Engine
*
* @author Jorg Janke
* @version $Id: DocumentEngine.java,v 1.26 2005/12/20 04:22:38 jjanke Exp $
*/
public class DocumentEngine implements DocAction
{
/**
* Doc Engine (Drafted)
* @param po document
*/
public DocumentEngine (DocAction po)
{
this (po, STATUS_Drafted);
} // DocActionEngine
/**
* Doc Engine
* @param po document
* @param docStatus initial document status
*/
public DocumentEngine (DocAction po, String docStatus)
{
m_document = po;
if (docStatus != null)
m_status = docStatus;
} // DocActionEngine
/** Persistent Document */
private DocAction m_document;
/** Document Status */
private String m_status = STATUS_Drafted;
/** Process Message */
private String m_message = null;
/** Actual Doc Action */
private String m_action = null;
/**
* Get Doc Status
* @return document status
*/
public String getDocStatus()
{
return m_status;
} // getDocStatus
/**
* Set Doc Status - Ignored
* @param ignored Status is not set directly
* @see org.compiere.process.DocAction#setDocStatus(String)
*/
public void setDocStatus(String ignored)
{
} // setDocStatus
/**
* Document is Drafted
* @return true if drafted
*/
public boolean isDrafted()
{
return STATUS_Drafted.equals(m_status);
} // isDrafted
/**
* Document is Invalid
* @return true if Invalid
*/
public boolean isInvalid()
{
return STATUS_Invalid.equals(m_status);
} // isInvalid
/**
* Document is In Progress
* @return true if In Progress
*/
public boolean isInProgress()
{
return STATUS_InProgress.equals(m_status);
} // isInProgress
/**
* Document is Approved
* @return true if Approved
*/
public boolean isApproved()
{
return STATUS_Approved.equals(m_status);
} // isApproved
/**
* Document is Not Approved
* @return true if Not Approved
*/
public boolean isNotApproved()
{
return STATUS_NotApproved.equals(m_status);
} // isNotApproved
/**
* Document is Waiting Payment or Confirmation
* @return true if Waiting Payment
*/
public boolean isWaiting()
{
return STATUS_WaitingPayment.equals(m_status)
|| STATUS_WaitingConfirmation.equals(m_status);
} // isWaitingPayment
/**
* Document is Completed
* @return true if Completed
*/
public boolean isCompleted()
{
return STATUS_Completed.equals(m_status);
} // isCompleted
/**
* Document is Reversed
* @return true if Reversed
*/
public boolean isReversed()
{
return STATUS_Reversed.equals(m_status);
} // isReversed
/**
* Document is Closed
* @return true if Closed
*/
public boolean isClosed()
{
return STATUS_Closed.equals(m_status);
} // isClosed
/**
* Document is Voided
* @return true if Voided
*/
public boolean isVoided()
{
return STATUS_Voided.equals(m_status);
} // isVoided
/**
* Document Status is Unknown
* @return true if unknown
*/
public boolean isUnknown()
{
return STATUS_Unknown.equals(m_status) ||
!(isDrafted() || isInvalid() || isInProgress() || isNotApproved()
|| isApproved() || isWaiting() || isCompleted()
|| isReversed() || isClosed() || isVoided() );
} // isUnknown
/**
* Process actual document.
* Checks if user (document) action is valid and then process action
* Calls the individual actions which call the document action
* @param processAction document action based on workflow
* @param docAction document action based on document
* @return true if performed
*/
public boolean processIt (String processAction, String docAction)
{
m_message = null;
m_action = null;
// Std User Workflows - see MWFNodeNext.isValidFor
if (isValidAction(processAction)) // WF Selection first
m_action = processAction;
//
else if (isValidAction(docAction)) // User Selection second
m_action = docAction;
// Nothing to do
else if (processAction.equals(ACTION_None)
|| docAction.equals(ACTION_None))
{
if (m_document != null)
m_document.get_Logger().info ("**** No Action (Prc=" + processAction + "/Doc=" + docAction + ") " + m_document);
return true;
}
else
{
throw new IllegalStateException("Status=" + getDocStatus()
+ " - Invalid Actions: Process=" + processAction + ", Doc=" + docAction);
}
if (m_document != null)
m_document.get_Logger().info ("**** Action=" + m_action + " (Prc=" + processAction + "/Doc=" + docAction + ") " + m_document);
boolean success = processIt (m_action);
if (m_document != null)
m_document.get_Logger().fine("**** Action=" + m_action + " - Success=" + success);
return success;
} // process
/**
* Process actual document - do not call directly.
* Calls the individual actions which call the document action
* @param action document action
* @return true if performed
*/
public boolean processIt (String action)
{
m_message = null;
m_action = action;
//
if (ACTION_Unlock.equals(m_action))
return unlockIt();
if (ACTION_Invalidate.equals(m_action))
return invalidateIt();
if (ACTION_Prepare.equals(m_action))
return STATUS_InProgress.equals(prepareIt());
if (ACTION_Approve.equals(m_action))
return approveIt();
if (ACTION_Reject.equals(m_action))
return rejectIt();
if (ACTION_Complete.equals(m_action) || ACTION_WaitComplete.equals(m_action))
{
String status = null;
if (isDrafted() || isInvalid()) // prepare if not prepared yet
{
status = prepareIt();
if (!STATUS_InProgress.equals(status))
return false;
}
status = completeIt();
if (m_document != null
&& !Ini.isClient()) // Post Immediate if on Server
{
MClient client = MClient.get(m_document.getCtx(), m_document.getAD_Client_ID());
if (STATUS_Completed.equals(status) && client.isPostImmediate())
{
m_document.save();
postIt();
}
}
return STATUS_Completed.equals(status)
|| STATUS_InProgress.equals(status)
|| STATUS_WaitingPayment.equals(status)
|| STATUS_WaitingConfirmation.equals(status);
}
if (ACTION_ReActivate.equals(m_action))
return reActivateIt();
if (ACTION_Reverse_Accrual.equals(m_action))
return reverseAccrualIt();
if (ACTION_Reverse_Correct.equals(m_action))
return reverseCorrectIt();
if (ACTION_Close.equals(m_action))
return closeIt();
if (ACTION_Void.equals(m_action))
return voidIt();
if (ACTION_Post.equals(m_action))
return postIt();
//
return false;
} // processDocument
/**
* Unlock Document.
* Status: Drafted
* @return true if success
* @see org.compiere.process.DocAction#unlockIt()
*/
public boolean unlockIt()
{
if (!isValidAction(ACTION_Unlock))
return false;
if (m_document != null)
{
if (m_document.unlockIt())
{
m_status = STATUS_Drafted;
m_document.setDocStatus(m_status);
return true;
}
return false;
}
m_status = STATUS_Drafted;
return true;
} // unlockIt
/**
* Invalidate Document.
* Status: Invalid
* @return true if success
* @see org.compiere.process.DocAction#invalidateIt()
*/
public boolean invalidateIt()
{
if (!isValidAction(ACTION_Invalidate))
return false;
if (m_document != null)
{
if (m_document.invalidateIt())
{
m_status = STATUS_Invalid;
m_document.setDocStatus(m_status);
return true;
}
return false;
}
m_status = STATUS_Invalid;
return true;
} // invalidateIt
/**
* Process Document.
* Status is set by process
* @return new status (In Progress or Invalid)
* @see org.compiere.process.DocAction#prepareIt()
*/
public String prepareIt()
{
if (!isValidAction(ACTION_Prepare))
return m_status;
if (m_document != null)
{
m_status = m_document.prepareIt();
m_document.setDocStatus(m_status);
}
return m_status;
} // processIt
/**
* Approve Document.
* Status: Approved
* @return true if success
* @see org.compiere.process.DocAction#approveIt()
*/
public boolean approveIt()
{
if (!isValidAction(ACTION_Approve))
return false;
if (m_document != null)
{
if (m_document.approveIt())
{
m_status = STATUS_Approved;
m_document.setDocStatus(m_status);
return true;
}
return false;
}
m_status = STATUS_Approved;
return true;
} // approveIt
/**
* Reject Approval.
* Status: Not Approved
* @return true if success
* @see org.compiere.process.DocAction#rejectIt()
*/
public boolean rejectIt()
{
if (!isValidAction(ACTION_Reject))
return false;
if (m_document != null)
{
if (m_document.rejectIt())
{
m_status = STATUS_NotApproved;
m_document.setDocStatus(m_status);
return true;
}
return false;
}
m_status = STATUS_NotApproved;
return true;
} // rejectIt
/**
* Complete Document.
* Status is set by process
* @return new document status (Complete, In Progress, Invalid, Waiting ..)
* @see org.compiere.process.DocAction#completeIt()
*/
public String completeIt()
{
if (!isValidAction(ACTION_Complete))
return m_status;
if (m_document != null)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -