IDEMPIERE-5440 Add unit test for Matching form (#1510)
This commit is contained in:
parent
a6a80b7a8c
commit
13d26966b6
|
@ -81,11 +81,6 @@ import org.zkoss.zul.Vlayout;
|
||||||
public class WMatch extends Match
|
public class WMatch extends Match
|
||||||
implements IFormController, EventListener<Event>, WTableModelListener
|
implements IFormController, EventListener<Event>, WTableModelListener
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private static final long serialVersionUID = -6383121932802974801L;
|
|
||||||
private CustomForm form = new CustomForm();
|
private CustomForm form = new CustomForm();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -94,8 +89,9 @@ public class WMatch extends Match
|
||||||
public WMatch()
|
public WMatch()
|
||||||
{
|
{
|
||||||
m_WindowNo = form.getWindowNo();
|
m_WindowNo = form.getWindowNo();
|
||||||
log.info("WinNo=" + m_WindowNo
|
if (log.isLoggable(Level.INFO))
|
||||||
+ " - AD_Client_ID=" + m_AD_Client_ID + ", AD_Org_ID=" + m_AD_Org_ID + ", By=" + m_by);
|
log.info("WinNo=" + m_WindowNo
|
||||||
|
+ " - AD_Client_ID=" + m_AD_Client_ID + ", AD_Org_ID=" + m_AD_Org_ID + ", By=" + m_by);
|
||||||
Env.setContext(Env.getCtx(), m_WindowNo, "IsSOTrx", "N");
|
Env.setContext(Env.getCtx(), m_WindowNo, "IsSOTrx", "N");
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -122,7 +118,7 @@ public class WMatch extends Match
|
||||||
{
|
{
|
||||||
ClientInfo.onClientInfo(form, this::onClientInfo);
|
ClientInfo.onClientInfo(form, this::onClientInfo);
|
||||||
}
|
}
|
||||||
} // init
|
}
|
||||||
|
|
||||||
/** Window No */
|
/** Window No */
|
||||||
private int m_WindowNo = 0;
|
private int m_WindowNo = 0;
|
||||||
|
@ -146,11 +142,6 @@ public class WMatch extends Match
|
||||||
private static final int MODE_NOTMATCHED = 0;
|
private static final int MODE_NOTMATCHED = 0;
|
||||||
private static final int MODE_MATCHED = 1;
|
private static final int MODE_MATCHED = 1;
|
||||||
|
|
||||||
/** Indexes in Table */
|
|
||||||
private static final int I_QTY = 6;
|
|
||||||
private static final int I_MATCHED = 7;
|
|
||||||
|
|
||||||
|
|
||||||
private BigDecimal m_xMatched = Env.ZERO;
|
private BigDecimal m_xMatched = Env.ZERO;
|
||||||
private BigDecimal m_xMatchedTo = Env.ZERO;
|
private BigDecimal m_xMatchedTo = Env.ZERO;
|
||||||
|
|
||||||
|
@ -293,7 +284,7 @@ public class WMatch extends Match
|
||||||
ZKUpdateUtil.setVflex(xMatchedTable, true);
|
ZKUpdateUtil.setVflex(xMatchedTable, true);
|
||||||
|
|
||||||
centerPanel.setStyle("min-height: 300px;");
|
centerPanel.setStyle("min-height: 300px;");
|
||||||
} // jbInit
|
}
|
||||||
|
|
||||||
protected void layoutParameterAndSummary() {
|
protected void layoutParameterAndSummary() {
|
||||||
setupParameterColumns();
|
setupParameterColumns();
|
||||||
|
@ -391,16 +382,7 @@ public class WMatch extends Match
|
||||||
*/
|
*/
|
||||||
private void dynInit()
|
private void dynInit()
|
||||||
{
|
{
|
||||||
ColumnInfo[] layout = new ColumnInfo[] {
|
ColumnInfo[] layout = getColumnLayout();
|
||||||
new ColumnInfo(" ", ".", IDColumn.class, false, false, ""),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "DocumentNo"), ".", String.class), // 1
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Date"), ".", Timestamp.class),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "C_BPartner_ID"),".", KeyNamePair.class, "."), // 3
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Line"), ".", KeyNamePair.class, "."),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "M_Product_ID"), ".", KeyNamePair.class, "."), // 5
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Qty"), ".", Double.class),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Matched"), ".", Double.class)
|
|
||||||
};
|
|
||||||
|
|
||||||
xMatchedTable.prepareTable(layout, "", "", false, "");
|
xMatchedTable.prepareTable(layout, "", "", false, "");
|
||||||
xMatchedToTable.prepareTable(layout, "", "", true, "");
|
xMatchedToTable.prepareTable(layout, "", "", true, "");
|
||||||
|
@ -417,7 +399,6 @@ public class WMatch extends Match
|
||||||
sameProduct.addActionListener(this);
|
sameProduct.addActionListener(this);
|
||||||
sameQty.addActionListener(this);
|
sameQty.addActionListener(this);
|
||||||
|
|
||||||
// Init Yvonne
|
|
||||||
String selection = (String)matchFrom.getSelectedItem().getValue();
|
String selection = (String)matchFrom.getSelectedItem().getValue();
|
||||||
SimpleListModel model = new SimpleListModel(cmd_matchFrom((String)matchFrom.getSelectedItem().getLabel()));
|
SimpleListModel model = new SimpleListModel(cmd_matchFrom((String)matchFrom.getSelectedItem().getLabel()));
|
||||||
matchTo.setItemRenderer(model);
|
matchTo.setItemRenderer(model);
|
||||||
|
@ -477,6 +458,7 @@ public class WMatch extends Match
|
||||||
* Action Listener
|
* Action Listener
|
||||||
* @param e event
|
* @param e event
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void onEvent (Event e)
|
public void onEvent (Event e)
|
||||||
{
|
{
|
||||||
Integer product = onlyProduct.getValue()!=null?(Integer)onlyProduct.getValue():null;
|
Integer product = onlyProduct.getValue()!=null?(Integer)onlyProduct.getValue():null;
|
||||||
|
@ -485,7 +467,6 @@ public class WMatch extends Match
|
||||||
Timestamp to = dateTo.getValue()!=null?(Timestamp)dateTo.getValue():null;
|
Timestamp to = dateTo.getValue()!=null?(Timestamp)dateTo.getValue():null;
|
||||||
|
|
||||||
if (e.getTarget() == matchFrom) {
|
if (e.getTarget() == matchFrom) {
|
||||||
//cmd_matchFrom((String)matchFrom.getSelectedItem().getLabel());
|
|
||||||
String selection = (String)matchFrom.getSelectedItem().getValue();
|
String selection = (String)matchFrom.getSelectedItem().getValue();
|
||||||
SimpleListModel model = new SimpleListModel(cmd_matchFrom((String)matchFrom.getSelectedItem().getLabel()));
|
SimpleListModel model = new SimpleListModel(cmd_matchFrom((String)matchFrom.getSelectedItem().getLabel()));
|
||||||
matchTo.setItemRenderer(model);
|
matchTo.setItemRenderer(model);
|
||||||
|
@ -503,7 +484,6 @@ public class WMatch extends Match
|
||||||
cmd_matchTo();
|
cmd_matchTo();
|
||||||
else if (e.getTarget() == bSearch)
|
else if (e.getTarget() == bSearch)
|
||||||
{
|
{
|
||||||
//cmd_search();
|
|
||||||
xMatchedTable = (WListbox)cmd_search(xMatchedTable, matchFrom.getSelectedIndex(), (String)matchTo.getSelectedItem().getLabel(), product, vendor, from, to, matchMode.getSelectedIndex() == MODE_MATCHED);
|
xMatchedTable = (WListbox)cmd_search(xMatchedTable, matchFrom.getSelectedIndex(), (String)matchTo.getSelectedItem().getLabel(), product, vendor, from, to, matchMode.getSelectedIndex() == MODE_MATCHED);
|
||||||
|
|
||||||
xMatched.setValue(Env.ZERO);
|
xMatched.setValue(Env.ZERO);
|
||||||
|
@ -516,7 +496,6 @@ public class WMatch extends Match
|
||||||
}
|
}
|
||||||
else if (e.getTarget() == bProcess)
|
else if (e.getTarget() == bProcess)
|
||||||
{
|
{
|
||||||
//cmd_process();
|
|
||||||
cmd_process(xMatchedTable, xMatchedToTable, matchMode.getSelectedIndex(), matchFrom.getSelectedIndex(), matchTo.getSelectedItem().getLabel(), m_xMatched);
|
cmd_process(xMatchedTable, xMatchedToTable, matchMode.getSelectedIndex(), matchFrom.getSelectedIndex(), matchTo.getSelectedItem().getLabel(), m_xMatched);
|
||||||
xMatchedTable = (WListbox) cmd_search(xMatchedTable, matchFrom.getSelectedIndex(), (String)matchTo.getSelectedItem().getLabel(), product, vendor, from, to, matchMode.getSelectedIndex() == MODE_MATCHED);
|
xMatchedTable = (WListbox) cmd_search(xMatchedTable, matchFrom.getSelectedIndex(), (String)matchTo.getSelectedItem().getLabel(), product, vendor, from, to, matchMode.getSelectedIndex() == MODE_MATCHED);
|
||||||
xMatched.setValue(Env.ZERO);
|
xMatched.setValue(Env.ZERO);
|
||||||
|
@ -533,7 +512,7 @@ public class WMatch extends Match
|
||||||
cmd_searchTo();
|
cmd_searchTo();
|
||||||
else if (AEnv.contains(xMatchedTable, e.getTarget()))
|
else if (AEnv.contains(xMatchedTable, e.getTarget()))
|
||||||
cmd_searchTo();
|
cmd_searchTo();
|
||||||
} // actionPerformed
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -541,7 +520,6 @@ public class WMatch extends Match
|
||||||
*/
|
*/
|
||||||
private void cmd_matchTo()
|
private void cmd_matchTo()
|
||||||
{
|
{
|
||||||
// log.fine( "VMatch.cmd_matchTo");
|
|
||||||
int index = matchTo.getSelectedIndex();
|
int index = matchTo.getSelectedIndex();
|
||||||
String selection = (String)matchTo.getModel().getElementAt(index);
|
String selection = (String)matchTo.getModel().getElementAt(index);
|
||||||
xMatchedToBorder.setValue(selection);
|
xMatchedToBorder.setValue(selection);
|
||||||
|
@ -596,6 +574,7 @@ public class WMatch extends Match
|
||||||
* Table Model Listener - calculate matchd Qty
|
* Table Model Listener - calculate matchd Qty
|
||||||
* @param e event
|
* @param e event
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void tableChanged (WTableModelEvent e)
|
public void tableChanged (WTableModelEvent e)
|
||||||
{
|
{
|
||||||
if (e.getColumn() != 0)
|
if (e.getColumn() != 0)
|
||||||
|
@ -638,7 +617,7 @@ public class WMatch extends Match
|
||||||
statusBar.setStatusDB(noRows + "");
|
statusBar.setStatusDB(noRows + "");
|
||||||
} // tableChanged
|
} // tableChanged
|
||||||
|
|
||||||
|
@Override
|
||||||
public ADForm getForm() {
|
public ADForm getForm() {
|
||||||
return form;
|
return form;
|
||||||
}
|
}
|
||||||
|
|
|
@ -349,7 +349,6 @@ public class WPayPrint extends PayPrint implements IFormController, EventListene
|
||||||
return;
|
return;
|
||||||
String PaymentRule = pp.getValue();
|
String PaymentRule = pp.getValue();
|
||||||
|
|
||||||
log.info("PaymentRule=" + PaymentRule);
|
|
||||||
fNoPayments.setText(" ");
|
fNoPayments.setText(" ");
|
||||||
|
|
||||||
String msg = loadPaymentRuleInfo(m_C_PaySelection_ID, PaymentRule);
|
String msg = loadPaymentRuleInfo(m_C_PaySelection_ID, PaymentRule);
|
||||||
|
@ -414,7 +413,6 @@ public class WPayPrint extends PayPrint implements IFormController, EventListene
|
||||||
if (fPaymentRule.getSelectedItem() == null)
|
if (fPaymentRule.getSelectedItem() == null)
|
||||||
return;
|
return;
|
||||||
String PaymentRule = fPaymentRule.getSelectedItem().toValueNamePair().getValue();
|
String PaymentRule = fPaymentRule.getSelectedItem().toValueNamePair().getValue();
|
||||||
log.info(PaymentRule);
|
|
||||||
if (!getChecks(PaymentRule))
|
if (!getChecks(PaymentRule))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.adempiere.util.IReservationTracer;
|
import org.adempiere.util.IReservationTracer;
|
||||||
import org.adempiere.util.IReservationTracerFactory;
|
import org.adempiere.util.IReservationTracerFactory;
|
||||||
import org.compiere.acct.Doc;
|
import org.compiere.acct.Doc;
|
||||||
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
import org.compiere.minigrid.IMiniTable;
|
import org.compiere.minigrid.IMiniTable;
|
||||||
import org.compiere.model.MClient;
|
import org.compiere.model.MClient;
|
||||||
|
@ -66,6 +67,9 @@ public class Match
|
||||||
//private static final int MODE_MATCHED = 1;
|
//private static final int MODE_MATCHED = 1;
|
||||||
|
|
||||||
/** Indexes in Table */
|
/** Indexes in Table */
|
||||||
|
public static final int I_ID = 0;
|
||||||
|
public static final int I_DocumentNo = 1;
|
||||||
|
public static final int I_DocumentDate = 2;
|
||||||
public static final int I_BPartner = 3;
|
public static final int I_BPartner = 3;
|
||||||
public static final int I_Line = 4;
|
public static final int I_Line = 4;
|
||||||
public static final int I_Product = 5;
|
public static final int I_Product = 5;
|
||||||
|
@ -146,7 +150,6 @@ public class Match
|
||||||
*/
|
*/
|
||||||
public void cmd_process(IMiniTable xMatchedTable, IMiniTable xMatchedToTable, int matchMode, int matchFrom, String matchTo, BigDecimal m_xMatched)
|
public void cmd_process(IMiniTable xMatchedTable, IMiniTable xMatchedToTable, int matchMode, int matchFrom, String matchTo, BigDecimal m_xMatched)
|
||||||
{
|
{
|
||||||
log.config("");
|
|
||||||
// Matched From
|
// Matched From
|
||||||
int matchedRow = xMatchedTable.getSelectedRow();
|
int matchedRow = xMatchedTable.getSelectedRow();
|
||||||
if (matchedRow < 0)
|
if (matchedRow < 0)
|
||||||
|
@ -608,4 +611,22 @@ public class Match
|
||||||
return m_matchOptions[matchType];
|
return m_matchOptions[matchType];
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return {@link ColumnInfo} array
|
||||||
|
*/
|
||||||
|
public ColumnInfo[] getColumnLayout() {
|
||||||
|
ColumnInfo[] layout = new ColumnInfo[] {
|
||||||
|
new ColumnInfo(" ", ".", IDColumn.class, false, false, ""),
|
||||||
|
new ColumnInfo(Msg.translate(Env.getCtx(), "DocumentNo"), ".", String.class), // 1
|
||||||
|
new ColumnInfo(Msg.translate(Env.getCtx(), "Date"), ".", Timestamp.class),
|
||||||
|
new ColumnInfo(Msg.translate(Env.getCtx(), "C_BPartner_ID"),".", KeyNamePair.class, "."), // 3
|
||||||
|
new ColumnInfo(Msg.translate(Env.getCtx(), "Line"), ".", KeyNamePair.class, "."),
|
||||||
|
new ColumnInfo(Msg.translate(Env.getCtx(), "M_Product_ID"), ".", KeyNamePair.class, "."), // 5
|
||||||
|
new ColumnInfo(Msg.translate(Env.getCtx(), "Qty"), ".", Double.class),
|
||||||
|
new ColumnInfo(Msg.translate(Env.getCtx(), "Matched"), ".", Double.class)
|
||||||
|
};
|
||||||
|
return layout;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.Timestamp;
|
|
||||||
|
|
||||||
import org.compiere.apps.form.Match;
|
import org.compiere.apps.form.Match;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
|
@ -53,8 +52,6 @@ import org.compiere.process.DocAction;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.process.ServerProcessCtl;
|
import org.compiere.process.ServerProcessCtl;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.KeyNamePair;
|
|
||||||
import org.compiere.util.Msg;
|
|
||||||
import org.compiere.wf.MWorkflow;
|
import org.compiere.wf.MWorkflow;
|
||||||
import org.idempiere.test.AbstractTestCase;
|
import org.idempiere.test.AbstractTestCase;
|
||||||
import org.idempiere.test.DictionaryIDs;
|
import org.idempiere.test.DictionaryIDs;
|
||||||
|
@ -572,31 +569,22 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
newOnHand = MStorageOnHand.getQtyOnHand(product.get_ID(), getM_Warehouse_ID(), 0, getTrxName()).intValue();
|
newOnHand = MStorageOnHand.getQtyOnHand(product.get_ID(), getM_Warehouse_ID(), 0, getTrxName()).intValue();
|
||||||
assertEquals(initialOnHand+1, newOnHand, "Unexpected qty on hand value");
|
assertEquals(initialOnHand+1, newOnHand, "Unexpected qty on hand value");
|
||||||
|
|
||||||
MiniTableImpl fromTable = new MiniTableImpl();
|
|
||||||
MiniTableImpl toTable = new MiniTableImpl();
|
|
||||||
ColumnInfo[] layout = new ColumnInfo[] {
|
|
||||||
new ColumnInfo(" ", ".", IDColumn.class, false, false, ""),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "DocumentNo"), ".", String.class), // 1
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Date"), ".", Timestamp.class),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "C_BPartner_ID"),".", KeyNamePair.class, "."), // 3
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Line"), ".", KeyNamePair.class, "."),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "M_Product_ID"), ".", KeyNamePair.class, "."), // 5
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Qty"), ".", Double.class),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Matched"), ".", Double.class)
|
|
||||||
};
|
|
||||||
fromTable.prepareTable(layout, null, null, false, null);
|
|
||||||
toTable.prepareTable(layout, null, null, false, null);
|
|
||||||
Match match = new Match();
|
Match match = new Match();
|
||||||
match.setTrxName(getTrxName());
|
match.setTrxName(getTrxName());
|
||||||
|
MiniTableImpl fromTable = new MiniTableImpl();
|
||||||
|
MiniTableImpl toTable = new MiniTableImpl();
|
||||||
|
ColumnInfo[] layout = match.getColumnLayout();
|
||||||
|
fromTable.prepareTable(layout, null, null, false, null);
|
||||||
|
toTable.prepareTable(layout, null, null, false, null);
|
||||||
match.cmd_search(fromTable, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), product.get_ID(), bpartner.get_ID(), null, null, false);
|
match.cmd_search(fromTable, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), product.get_ID(), bpartner.get_ID(), null, null, false);
|
||||||
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
||||||
int selectedRow = -1;
|
int selectedRow = -1;
|
||||||
for(int i = 0; i < fromTable.getRowCount(); i++) {
|
for(int i = 0; i < fromTable.getRowCount(); i++) {
|
||||||
String docNo = (String)fromTable.getValueAt(i, 1);
|
String docNo = (String)fromTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
if (receipt.getDocumentNo().equals(docNo)) {
|
if (receipt.getDocumentNo().equals(docNo)) {
|
||||||
int matched = ((Number)fromTable.getValueAt(i, 7)).intValue();
|
int matched = ((Number)fromTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
assertEquals(0, matched, "Unexpected matched qty for Material Receipt line");
|
assertEquals(0, matched, "Unexpected matched qty for Material Receipt line");
|
||||||
int qty = ((Number)fromTable.getValueAt(i, 6)).intValue();
|
int qty = ((Number)fromTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
assertEquals(receiptLine.getMovementQty().intValue(), qty, "Unexpected qty for Material Receipt line");
|
assertEquals(receiptLine.getMovementQty().intValue(), qty, "Unexpected qty for Material Receipt line");
|
||||||
selectedRow = i;
|
selectedRow = i;
|
||||||
break;
|
break;
|
||||||
|
@ -608,11 +596,11 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
assertTrue(toTable.getRowCount()>0, "Unexpected number of records for not matched Order Line: " + fromTable.getRowCount());
|
assertTrue(toTable.getRowCount()>0, "Unexpected number of records for not matched Order Line: " + fromTable.getRowCount());
|
||||||
int selectedOrderRow = -1;
|
int selectedOrderRow = -1;
|
||||||
for(int i = 0; i < toTable.getRowCount(); i++) {
|
for(int i = 0; i < toTable.getRowCount(); i++) {
|
||||||
String docNo = (String)toTable.getValueAt(i, 1);
|
String docNo = (String)toTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
if (order.getDocumentNo().equals(docNo)) {
|
if (order.getDocumentNo().equals(docNo)) {
|
||||||
int matched = ((Number)toTable.getValueAt(i, 7)).intValue();
|
int matched = ((Number)toTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
assertEquals(0, matched, "Unexpected matched qty for PO line");
|
assertEquals(0, matched, "Unexpected matched qty for PO line");
|
||||||
int qty = ((Number)toTable.getValueAt(i, 6)).intValue();
|
int qty = ((Number)toTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
assertEquals(orderLine.getQtyOrdered().intValue(), qty, "Unexpected qty for PO line");
|
assertEquals(orderLine.getQtyOrdered().intValue(), qty, "Unexpected qty for PO line");
|
||||||
selectedOrderRow = i;
|
selectedOrderRow = i;
|
||||||
break;
|
break;
|
||||||
|
@ -648,11 +636,11 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
||||||
selectedRow = -1;
|
selectedRow = -1;
|
||||||
for(int i = 0; i < fromTable.getRowCount(); i++) {
|
for(int i = 0; i < fromTable.getRowCount(); i++) {
|
||||||
String docNo = (String)fromTable.getValueAt(i, 1);
|
String docNo = (String)fromTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
if (receipt.getDocumentNo().equals(docNo)) {
|
if (receipt.getDocumentNo().equals(docNo)) {
|
||||||
int matched = ((Number)fromTable.getValueAt(i, 7)).intValue();
|
int matched = ((Number)fromTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
assertEquals(0, matched, "Unexpected matched qty for Material Receipt line");
|
assertEquals(0, matched, "Unexpected matched qty for Material Receipt line");
|
||||||
int qty = ((Number)fromTable.getValueAt(i, 6)).intValue();
|
int qty = ((Number)fromTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
assertEquals(receiptLine.getMovementQty().intValue(), qty, "Unexpected qty for Material Receipt line");
|
assertEquals(receiptLine.getMovementQty().intValue(), qty, "Unexpected qty for Material Receipt line");
|
||||||
selectedRow = i;
|
selectedRow = i;
|
||||||
break;
|
break;
|
||||||
|
@ -664,11 +652,11 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
assertTrue(toTable.getRowCount()>0, "Unexpected number of records for not matched Order Line: " + fromTable.getRowCount());
|
assertTrue(toTable.getRowCount()>0, "Unexpected number of records for not matched Order Line: " + fromTable.getRowCount());
|
||||||
selectedOrderRow = -1;
|
selectedOrderRow = -1;
|
||||||
for(int i = 0; i < toTable.getRowCount(); i++) {
|
for(int i = 0; i < toTable.getRowCount(); i++) {
|
||||||
String docNo = (String)toTable.getValueAt(i, 1);
|
String docNo = (String)toTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
if (order.getDocumentNo().equals(docNo)) {
|
if (order.getDocumentNo().equals(docNo)) {
|
||||||
int matched = ((Number)toTable.getValueAt(i, 7)).intValue();
|
int matched = ((Number)toTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
assertEquals(0, matched, "Unexpected matched qty for PO line");
|
assertEquals(0, matched, "Unexpected matched qty for PO line");
|
||||||
int qty = ((Number)toTable.getValueAt(i, 6)).intValue();
|
int qty = ((Number)toTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
assertEquals(orderLine.getQtyOrdered().intValue(), qty, "Unexpected qty for PO line");
|
assertEquals(orderLine.getQtyOrdered().intValue(), qty, "Unexpected qty for PO line");
|
||||||
selectedOrderRow = i;
|
selectedOrderRow = i;
|
||||||
break;
|
break;
|
||||||
|
@ -676,7 +664,7 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
}
|
}
|
||||||
assertTrue(selectedOrderRow >= 0, "Can't find not matched PO line");
|
assertTrue(selectedOrderRow >= 0, "Can't find not matched PO line");
|
||||||
|
|
||||||
IDColumn idColumn = (IDColumn)toTable.getValueAt(selectedOrderRow, 0);
|
IDColumn idColumn = (IDColumn)toTable.getValueAt(selectedOrderRow, Match.I_ID);
|
||||||
idColumn.setSelected(true);
|
idColumn.setSelected(true);
|
||||||
match.cmd_process(fromTable, toTable, Match.MODE_NOTMATCHED, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), new BigDecimal(1));
|
match.cmd_process(fromTable, toTable, Match.MODE_NOTMATCHED, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), new BigDecimal(1));
|
||||||
|
|
||||||
|
@ -769,22 +757,13 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
newOnHand = MStorageOnHand.getQtyOnHand(product.get_ID(), getM_Warehouse_ID(), 0, getTrxName()).intValue();
|
newOnHand = MStorageOnHand.getQtyOnHand(product.get_ID(), getM_Warehouse_ID(), 0, getTrxName()).intValue();
|
||||||
assertEquals(initialOnHand+1, newOnHand, "Unexpected qty on hand value");
|
assertEquals(initialOnHand+1, newOnHand, "Unexpected qty on hand value");
|
||||||
|
|
||||||
|
Match match = new Match();
|
||||||
|
match.setTrxName(getTrxName());
|
||||||
MiniTableImpl fromTable = new MiniTableImpl();
|
MiniTableImpl fromTable = new MiniTableImpl();
|
||||||
MiniTableImpl toTable = new MiniTableImpl();
|
MiniTableImpl toTable = new MiniTableImpl();
|
||||||
ColumnInfo[] layout = new ColumnInfo[] {
|
ColumnInfo[] layout = match.getColumnLayout();
|
||||||
new ColumnInfo(" ", ".", IDColumn.class, false, false, ""),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "DocumentNo"), ".", String.class), // 1
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Date"), ".", Timestamp.class),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "C_BPartner_ID"),".", KeyNamePair.class, "."), // 3
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Line"), ".", KeyNamePair.class, "."),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "M_Product_ID"), ".", KeyNamePair.class, "."), // 5
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Qty"), ".", Double.class),
|
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "Matched"), ".", Double.class)
|
|
||||||
};
|
|
||||||
fromTable.prepareTable(layout, null, null, false, null);
|
fromTable.prepareTable(layout, null, null, false, null);
|
||||||
toTable.prepareTable(layout, null, null, false, null);
|
toTable.prepareTable(layout, null, null, false, null);
|
||||||
Match match = new Match();
|
|
||||||
match.setTrxName(getTrxName());
|
|
||||||
match.cmd_search(fromTable, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), product.get_ID(), bpartner.get_ID(), null, null, false);
|
match.cmd_search(fromTable, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), product.get_ID(), bpartner.get_ID(), null, null, false);
|
||||||
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
||||||
int selectedRow = -1;
|
int selectedRow = -1;
|
||||||
|
@ -843,11 +822,11 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
||||||
selectedRow = -1;
|
selectedRow = -1;
|
||||||
for(int i = 0; i < fromTable.getRowCount(); i++) {
|
for(int i = 0; i < fromTable.getRowCount(); i++) {
|
||||||
String docNo = (String)fromTable.getValueAt(i, 1);
|
String docNo = (String)fromTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
if (receipt.getDocumentNo().equals(docNo)) {
|
if (receipt.getDocumentNo().equals(docNo)) {
|
||||||
int matched = ((Number)fromTable.getValueAt(i, 7)).intValue();
|
int matched = ((Number)fromTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
assertEquals(0, matched, "Unexpected matched qty for Material Receipt line");
|
assertEquals(0, matched, "Unexpected matched qty for Material Receipt line");
|
||||||
int qty = ((Number)fromTable.getValueAt(i, 6)).intValue();
|
int qty = ((Number)fromTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
assertEquals(receiptLine.getMovementQty().intValue(), qty, "Unexpected qty for Material Receipt line");
|
assertEquals(receiptLine.getMovementQty().intValue(), qty, "Unexpected qty for Material Receipt line");
|
||||||
selectedRow = i;
|
selectedRow = i;
|
||||||
break;
|
break;
|
||||||
|
@ -859,11 +838,11 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
assertTrue(toTable.getRowCount()>0, "Unexpected number of records for not matched Order Line: " + fromTable.getRowCount());
|
assertTrue(toTable.getRowCount()>0, "Unexpected number of records for not matched Order Line: " + fromTable.getRowCount());
|
||||||
selectedOrderRow = -1;
|
selectedOrderRow = -1;
|
||||||
for(int i = 0; i < toTable.getRowCount(); i++) {
|
for(int i = 0; i < toTable.getRowCount(); i++) {
|
||||||
String docNo = (String)toTable.getValueAt(i, 1);
|
String docNo = (String)toTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
if (order.getDocumentNo().equals(docNo)) {
|
if (order.getDocumentNo().equals(docNo)) {
|
||||||
int matched = ((Number)toTable.getValueAt(i, 7)).intValue();
|
int matched = ((Number)toTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
assertEquals(0, matched, "Unexpected matched qty for PO line");
|
assertEquals(0, matched, "Unexpected matched qty for PO line");
|
||||||
int qty = ((Number)toTable.getValueAt(i, 6)).intValue();
|
int qty = ((Number)toTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
assertEquals(orderLine.getQtyOrdered().intValue(), qty, "Unexpected qty for PO line");
|
assertEquals(orderLine.getQtyOrdered().intValue(), qty, "Unexpected qty for PO line");
|
||||||
selectedOrderRow = i;
|
selectedOrderRow = i;
|
||||||
break;
|
break;
|
||||||
|
@ -871,7 +850,7 @@ public class MatchPOTest extends AbstractTestCase {
|
||||||
}
|
}
|
||||||
assertTrue(selectedOrderRow >= 0, "Can't find not matched PO line");
|
assertTrue(selectedOrderRow >= 0, "Can't find not matched PO line");
|
||||||
|
|
||||||
IDColumn idColumn = (IDColumn)toTable.getValueAt(selectedOrderRow, 0);
|
IDColumn idColumn = (IDColumn)toTable.getValueAt(selectedOrderRow, Match.I_ID);
|
||||||
idColumn.setSelected(true);
|
idColumn.setSelected(true);
|
||||||
match.cmd_process(fromTable, toTable, Match.MODE_NOTMATCHED, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), new BigDecimal(1));
|
match.cmd_process(fromTable, toTable, Match.MODE_NOTMATCHED, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), new BigDecimal(1));
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,166 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the Free Software *
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
|
||||||
|
* MA 02110-1301, USA. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - hengsin *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.idempiere.test.form;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import org.compiere.apps.form.Match;
|
||||||
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
|
import org.compiere.minigrid.IDColumn;
|
||||||
|
import org.compiere.model.MBPartner;
|
||||||
|
import org.compiere.model.MInOut;
|
||||||
|
import org.compiere.model.MInOutLine;
|
||||||
|
import org.compiere.model.MMatchPO;
|
||||||
|
import org.compiere.model.MOrder;
|
||||||
|
import org.compiere.model.MOrderLine;
|
||||||
|
import org.compiere.model.MProduct;
|
||||||
|
import org.compiere.model.MWarehouse;
|
||||||
|
import org.compiere.process.DocAction;
|
||||||
|
import org.compiere.process.ProcessInfo;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.wf.MWorkflow;
|
||||||
|
import org.idempiere.test.AbstractTestCase;
|
||||||
|
import org.idempiere.test.DictionaryIDs;
|
||||||
|
import org.idempiere.test.ui.MiniTableImpl;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class MatchFormTest extends AbstractTestCase {
|
||||||
|
|
||||||
|
public MatchFormTest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMatchReceiptToPO() {
|
||||||
|
MBPartner bpartner = MBPartner.get(Env.getCtx(), DictionaryIDs.C_BPartner.TREE_FARM.id);
|
||||||
|
MProduct product = MProduct.get(Env.getCtx(), DictionaryIDs.M_Product.AZALEA_BUSH.id);
|
||||||
|
|
||||||
|
MOrder order = new MOrder(Env.getCtx(), 0, getTrxName());
|
||||||
|
order.setBPartner(bpartner);
|
||||||
|
order.setIsSOTrx(false);
|
||||||
|
order.setC_DocTypeTarget_ID();
|
||||||
|
order.setDocStatus(DocAction.STATUS_Drafted);
|
||||||
|
order.setDocAction(DocAction.ACTION_Complete);
|
||||||
|
order.saveEx();
|
||||||
|
|
||||||
|
BigDecimal orderQty = new BigDecimal("1");
|
||||||
|
MOrderLine orderLine = new MOrderLine(order);
|
||||||
|
orderLine.setLine(10);
|
||||||
|
orderLine.setProduct(product);
|
||||||
|
orderLine.setQty(orderQty);
|
||||||
|
orderLine.saveEx();
|
||||||
|
|
||||||
|
ProcessInfo info = MWorkflow.runDocumentActionWorkflow(order, DocAction.ACTION_Complete);
|
||||||
|
assertFalse(info.isError(), info.getSummary());
|
||||||
|
order.load(getTrxName());
|
||||||
|
assertEquals(DocAction.STATUS_Completed, order.getDocStatus());
|
||||||
|
orderLine.load(getTrxName());
|
||||||
|
assertEquals(1, orderLine.getQtyReserved().intValue(), "Unexpected order line qty ordered value");
|
||||||
|
assertEquals(0, orderLine.getQtyDelivered().intValue(), "Unexpected order line qty delivered value");
|
||||||
|
|
||||||
|
MInOut receipt = new MInOut(Env.getCtx(), 0, getTrxName());
|
||||||
|
receipt.setBPartner(bpartner);
|
||||||
|
receipt.setIsSOTrx(false);
|
||||||
|
receipt.setC_DocType_ID(DictionaryIDs.C_DocType.MM_RECEIPT.id);
|
||||||
|
receipt.setM_Warehouse_ID(getM_Warehouse_ID());
|
||||||
|
receipt.saveEx();
|
||||||
|
MWarehouse wh = MWarehouse.get(Env.getCtx(), receipt.getM_Warehouse_ID());
|
||||||
|
int M_Locator_ID = wh.getDefaultLocator().getM_Locator_ID();
|
||||||
|
BigDecimal receiptQty = new BigDecimal("1");
|
||||||
|
MInOutLine receiptLine = new MInOutLine(receipt);
|
||||||
|
receiptLine.setProduct(product);
|
||||||
|
receiptLine.setM_Locator_ID(M_Locator_ID);
|
||||||
|
receiptLine.setLine(10);
|
||||||
|
receiptLine.setQty(receiptQty);
|
||||||
|
receiptLine.saveEx();
|
||||||
|
|
||||||
|
info = MWorkflow.runDocumentActionWorkflow(receipt, DocAction.ACTION_Complete);
|
||||||
|
assertFalse(info.isError(), info.getSummary());
|
||||||
|
receipt.load(getTrxName());
|
||||||
|
assertEquals(DocAction.STATUS_Completed, receipt.getDocStatus());
|
||||||
|
orderLine.load(getTrxName());
|
||||||
|
assertEquals(1, orderLine.getQtyReserved().intValue(), "Unexpected order line qty ordered value");
|
||||||
|
assertEquals(0, orderLine.getQtyDelivered().intValue(), "Unexpected order line qty delivered value");
|
||||||
|
|
||||||
|
Match match = new Match();
|
||||||
|
match.setTrxName(getTrxName());
|
||||||
|
ColumnInfo[] columnLayout = match.getColumnLayout();
|
||||||
|
MiniTableImpl fromTable = new MiniTableImpl();
|
||||||
|
MiniTableImpl toTable = new MiniTableImpl();
|
||||||
|
fromTable.prepareTable(columnLayout, null, null, false, null);
|
||||||
|
toTable.prepareTable(columnLayout, null, null, false, null);
|
||||||
|
|
||||||
|
//load not matched shipments
|
||||||
|
match.cmd_search(fromTable, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), product.get_ID(), bpartner.get_ID(), null, null, false);
|
||||||
|
assertTrue(fromTable.getRowCount()>0, "Unexpected number of records for not matched Material Receipt: " + fromTable.getRowCount());
|
||||||
|
int selectedRow = -1;
|
||||||
|
for(int i = 0; i < fromTable.getRowCount(); i++) {
|
||||||
|
String docNo = (String)fromTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
|
if (receipt.getDocumentNo().equals(docNo)) {
|
||||||
|
int matched = ((Number)fromTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
|
assertEquals(0, matched, "Unexpected matched qty for Material Receipt line");
|
||||||
|
int qty = ((Number)fromTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
|
assertEquals(receiptLine.getMovementQty().intValue(), qty, "Unexpected qty for Material Receipt line");
|
||||||
|
selectedRow = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue(selectedRow >= 0, "Can't find not matched Material Receipt line");
|
||||||
|
fromTable.setSelectedRow(selectedRow);
|
||||||
|
|
||||||
|
//load not matched orders
|
||||||
|
match.cmd_searchTo(fromTable, toTable, match.getMatchTypeText(Match.MATCH_ORDER), Match.MATCH_SHIPMENT, true, true, true, false);
|
||||||
|
assertTrue(toTable.getRowCount()>0, "Unexpected number of records for not matched Order Line: " + fromTable.getRowCount());
|
||||||
|
int selectedOrderRow = -1;
|
||||||
|
for(int i = 0; i < toTable.getRowCount(); i++) {
|
||||||
|
String docNo = (String)toTable.getValueAt(i, Match.I_DocumentNo);
|
||||||
|
if (order.getDocumentNo().equals(docNo)) {
|
||||||
|
int matched = ((Number)toTable.getValueAt(i, Match.I_MATCHED)).intValue();
|
||||||
|
assertEquals(0, matched, "Unexpected matched qty for PO line");
|
||||||
|
int qty = ((Number)toTable.getValueAt(i, Match.I_QTY)).intValue();
|
||||||
|
assertEquals(orderLine.getQtyOrdered().intValue(), qty, "Unexpected qty for PO line");
|
||||||
|
selectedOrderRow = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue(selectedOrderRow >= 0, "Can't find not matched PO line");
|
||||||
|
|
||||||
|
//select and process matching
|
||||||
|
IDColumn idColumn = (IDColumn)toTable.getValueAt(selectedOrderRow, Match.I_ID);
|
||||||
|
idColumn.setSelected(true);
|
||||||
|
match.cmd_process(fromTable, toTable, Match.MODE_NOTMATCHED, Match.MATCH_SHIPMENT, match.getMatchTypeText(Match.MATCH_ORDER), new BigDecimal(1));
|
||||||
|
|
||||||
|
orderLine.load(getTrxName());
|
||||||
|
assertEquals(0, orderLine.getQtyReserved().intValue(), "Unexpected order line qty ordered value");
|
||||||
|
assertEquals(1, orderLine.getQtyDelivered().intValue(), "Unexpected order line qty delivered value");
|
||||||
|
receiptLine.load(getTrxName());
|
||||||
|
assertEquals(orderLine.getC_OrderLine_ID(), receiptLine.getC_OrderLine_ID(), "Unexpected order line ID value for receipt line");
|
||||||
|
MMatchPO[] matchPOs = MMatchPO.getOrderLine(Env.getCtx(), orderLine.get_ID(), getTrxName());
|
||||||
|
assertEquals(1, matchPOs.length, "Unexpected number of MatchPO for order line");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue