📄 vdocaction.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.grid.ed;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import javax.swing.*;
import org.compiere.apps.*;
import org.compiere.model.*;
import org.compiere.plaf.*;
import org.compiere.process.*;
import org.compiere.swing.*;
import org.compiere.util.*;
import org.compiere.wf.*;
/**
* Displays valid Document Action Options based on context
*
* @author Jorg Janke
* @version $Id: VDocAction.java,v 1.31 2005/12/27 06:18:36 jjanke Exp $
*/
public class VDocAction extends CDialog
implements ActionListener
{
/**
* Constructor.
* Started from APanel.
* getNumberOfOptions()is used to determine to show the dialog
* @param WindowNo window no
* @param mTab tab
* @param Record_ID record id
* @param button button
*/
public VDocAction (int WindowNo, MTab mTab, VButton button, int Record_ID)
{
super(Env.getWindow(WindowNo), Msg.translate(Env.getCtx(), "DocAction"), true);
log.config("");
m_WindowNo = WindowNo;
m_mTab = mTab;
//
try
{
jbInit();
}
catch(Exception ex)
{
log.log(Level.SEVERE, "", ex);
}
// dynamic init preparation
m_AD_Table_ID = Env.getContextAsInt(Env.getCtx(), WindowNo, "BaseTable_ID");
if (s_value == null)
readReference();
//
dynInit(Record_ID);
//
AEnv.positionCenterWindow(Env.getWindow(WindowNo), this);
} // VDocAction
//
private int m_WindowNo = 0;
private int m_AD_Table_ID;
private boolean m_OKpressed = false;
private MTab m_mTab;
//
private static String[] s_value = null;
private static String[] s_name;
private static String[] s_description;
/** Logger */
private static CLogger log = CLogger.getCLogger(VDocAction.class);
//
private CPanel mainPanel = new CPanel();
private BorderLayout mainLayout = new BorderLayout();
private CPanel northPanel = new CPanel();
private CComboBox actionCombo = new CComboBox();
private JLabel actionLabel = new JLabel();
private JScrollPane centerPane = new JScrollPane();
private JTextArea message = new JTextArea();
private FlowLayout northLayout = new FlowLayout();
private ConfirmPanel confirmPanel = new ConfirmPanel(true);
/**
* Static Init
* @throws Exception
*/
void jbInit() throws Exception
{
mainPanel.setLayout(mainLayout);
actionLabel.setText(Msg.translate(Env.getCtx(), "DocAction"));
actionCombo.addActionListener(this);
message.setLineWrap(true);
message.setPreferredSize(new Dimension(350, 35));
message.setWrapStyleWord(true);
message.setBackground(CompierePLAF.getFieldBackground_Inactive());
message.setEditable(false);
northPanel.setLayout(northLayout);
northLayout.setAlignment(FlowLayout.RIGHT);
getContentPane().add(mainPanel);
mainPanel.add(northPanel, BorderLayout.NORTH);
northPanel.add(actionLabel, null);
northPanel.add(actionCombo, null);
mainPanel.add(centerPane, BorderLayout.CENTER);
centerPane.getViewport().add(message, null);
//
mainPanel.add(confirmPanel, BorderLayout.SOUTH);
confirmPanel.addActionListener(this);
} // jbInit
/**
* Dynamic Init - determine valid DocActions based on DocStatus for the different documents.
* <pre>
* DocStatus (131)
?? Unknown
AP * Approved
CH Changed
CL * Closed
CO * Completed
DR Drafted
IN Inactive
NA Not Approved
PE Posting Error
PO * Posted
PR * Printed
RE Reversed
TE Transfer Error
TR * Transferred
VO * Voided
XX Being Processed
*
* DocAction (135)
-- <None>
AP * Approve
CL * Close
CO * Complete
PO * Post
PR * Print
RA Reverse - Accrual
RC Reverse - Correction
RE RE-activate
RJ Reject
TR * Transfer
VO * Void
XL Unlock
* </pre>
* @param Record_ID id
*/
private void dynInit(int Record_ID)
{
String DocStatus = (String)m_mTab.getValue("DocStatus");
String DocAction = (String)m_mTab.getValue("DocAction");
//
Object Processing = m_mTab.getValue("Processing");
String OrderType = Env.getContext(Env.getCtx(), m_WindowNo, "OrderType");
String IsSOTrx = Env.getContext(Env.getCtx(), m_WindowNo, "IsSOTrx");
if (DocStatus == null)
{
message.setText("*** ERROR ***");
return;
}
log.fine("DocStatus=" + DocStatus
+ ", DocAction=" + DocAction + ", OrderType=" + OrderType
+ ", IsSOTrx=" + IsSOTrx + ", Processing=" + Processing
+ ", AD_Table_ID=" + m_AD_Table_ID + ", Record_ID=" + Record_ID);
//
String[] options = new String[s_value.length];
int index = 0;
/**
* Check Existence of Workflow Acrivities
*/
String wfStatus = MWFActivity.getActiveInfo(Env.getCtx(), m_AD_Table_ID, Record_ID);
if (wfStatus != null)
{
ADialog.error(m_WindowNo, this, "WFActiveForRecord", wfStatus);
return;
}
// Status Change
if (!checkStatus(m_mTab.getTableName(), Record_ID, DocStatus))
{
ADialog.error(m_WindowNo, this, "DocumentStatusChanged");
return;
}
/*******************
* General Actions
*/
// Locked
if (Processing != null)
{
boolean locked = "Y".equals(Processing);
if (!locked && Processing instanceof Boolean)
locked = ((Boolean)Processing).booleanValue();
if (locked)
options[index++] = DocumentEngine.ACTION_Unlock;
}
// Approval required .. NA
if (DocStatus.equals(DocumentEngine.STATUS_NotApproved))
{
options[index++] = DocumentEngine.ACTION_Prepare;
options[index++] = DocumentEngine.ACTION_Void;
}
// Draft/Invalid .. DR/IN
else if (DocStatus.equals(DocumentEngine.STATUS_Drafted)
|| DocStatus.equals(DocumentEngine.STATUS_Invalid))
{
options[index++] = DocumentEngine.ACTION_Complete;
// options[index++] = DocumentEngine.ACTION_Prepare;
options[index++] = DocumentEngine.ACTION_Void;
}
// In Process .. IP
else if (DocStatus.equals(DocumentEngine.STATUS_InProgress)
|| DocStatus.equals(DocumentEngine.STATUS_Approved))
{
options[index++] = DocumentEngine.ACTION_Complete;
options[index++] = DocumentEngine.ACTION_Void;
}
// Complete .. CO
else if (DocStatus.equals(DocumentEngine.STATUS_Completed))
{
options[index++] = DocumentEngine.ACTION_Close;
}
// Waiting Payment
else if (DocStatus.equals(DocumentEngine.STATUS_WaitingPayment)
|| DocStatus.equals(DocumentEngine.STATUS_WaitingConfirmation))
{
options[index++] = DocumentEngine.ACTION_Void;
options[index++] = DocumentEngine.ACTION_Prepare;
}
// Closed, Voided, REversed .. CL/VO/RE
else if (DocStatus.equals(DocumentEngine.STATUS_Closed)
|| DocStatus.equals(DocumentEngine.STATUS_Voided)
|| DocStatus.equals(DocumentEngine.STATUS_Reversed))
return;
/********************
* Order
*/
if (m_AD_Table_ID == MOrder.Table_ID)
{
// Draft .. DR/IP/IN
if (DocStatus.equals(DocumentEngine.STATUS_Drafted)
|| DocStatus.equals(DocumentEngine.STATUS_InProgress)
|| DocStatus.equals(DocumentEngine.STATUS_Invalid))
{
options[index++] = DocumentEngine.ACTION_Prepare;
options[index++] = DocumentEngine.ACTION_Close;
// Draft Sales Order Quote/Proposal - Process
if ("Y".equals(IsSOTrx)
&& ("OB".equals(OrderType) || "ON".equals(OrderType)))
DocAction = DocumentEngine.ACTION_Prepare;
}
// Complete .. CO
else if (DocStatus.equals(DocumentEngine.STATUS_Completed))
{
options[index++] = DocumentEngine.ACTION_Void;
options[index++] = DocumentEngine.ACTION_ReActivate;
}
else if (DocStatus.equals(DocumentEngine.STATUS_WaitingPayment))
{
options[index++] = DocumentEngine.ACTION_ReActivate;
options[index++] = DocumentEngine.ACTION_Close;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -