IDEMPIERE-4727 Movement Window: a new line can be created for a movement that is completed. (#634)
* IDEMPIERE-4727 Movement Window: a new line can be created for a movement that is completed. * IDEMPIERE-4727 Movement Window: a new line can be created for a movement that is completed. Fix the problem also in model, to cover case when trying to add/modify lines for example via webservices * IDEMPIERE-4727 Movement Window: a new line can be created for a movement that is completed. Fix the problem also in model, change approach to use isProcessed instead of isComplete
This commit is contained in:
parent
b22ceeabdf
commit
932ed8f498
|
@ -0,0 +1,37 @@
|
||||||
|
SET SQLBLANKLINES ON
|
||||||
|
SET DEFINE OFF
|
||||||
|
|
||||||
|
-- IDEMPIERE-4727 Movement Window: a new line can be created for a movement that is completed.
|
||||||
|
-- Mar 16, 2021, 2:59:48 PM CET
|
||||||
|
UPDATE AD_Tab SET ReadOnlyLogic='@Processed@=Y',Updated=TO_DATE('2021-03-16 14:59:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID IN (
|
||||||
|
329 /* Bank/Cash Statement > Statement Line*/ ,
|
||||||
|
200103 /* Cost Adjustment > Cost Adjustment Line*/ ,
|
||||||
|
200138 /* Customer Return > Attributes*/ ,
|
||||||
|
629 /* Customer RMA > RMA Line*/ ,
|
||||||
|
200008 /* GL Journal > Line*/ ,
|
||||||
|
160 /* GL Journal Batch > Journal*/ ,
|
||||||
|
161 /* GL Journal Batch > Line*/ ,
|
||||||
|
683 /* Internal Use Inventory > Internal Use Line*/ ,
|
||||||
|
53134 /* Internal Use Inventory > Attributes*/ ,
|
||||||
|
260 /* Inventory Move > Move Line*/ ,
|
||||||
|
750 /* Inventory Move > Attributes*/ ,
|
||||||
|
200137 /* Material Receipt > Attributes*/ ,
|
||||||
|
667 /* Move Confirmation > Line*/ ,
|
||||||
|
353 /* Payment Selection > Payment Selection Line*/ ,
|
||||||
|
256 /* Physical Inventory > Inventory Count Line*/ ,
|
||||||
|
749 /* Physical Inventory > Attributes*/ ,
|
||||||
|
320 /* Production > Production Plan*/ ,
|
||||||
|
321 /* Production > Production Line*/ ,
|
||||||
|
53345 /* Production (Single Product) > Production Line*/ ,
|
||||||
|
200224 /* Production (Single Product) > Attributes*/ ,
|
||||||
|
200016 /* Sales Order > POS Payment*/ ,
|
||||||
|
751 /* Shipment (Customer) > Attributes*/ ,
|
||||||
|
659 /* Ship/Receipt Confirm > Line*/ ,
|
||||||
|
53281 /* Vendor RMA > RMA Line*/ ,
|
||||||
|
200068 /* Payments into Batch > Lines*/
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('202103161500_IDEMPIERE-4727.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
-- IDEMPIERE-4727 Movement Window: a new line can be created for a movement that is completed.
|
||||||
|
-- Mar 16, 2021, 2:59:48 PM CET
|
||||||
|
UPDATE AD_Tab SET ReadOnlyLogic='@Processed@=Y',Updated=TO_TIMESTAMP('2021-03-16 14:59:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID IN (
|
||||||
|
329 /* Bank/Cash Statement > Statement Line*/ ,
|
||||||
|
200103 /* Cost Adjustment > Cost Adjustment Line*/ ,
|
||||||
|
200138 /* Customer Return > Attributes*/ ,
|
||||||
|
629 /* Customer RMA > RMA Line*/ ,
|
||||||
|
200008 /* GL Journal > Line*/ ,
|
||||||
|
160 /* GL Journal Batch > Journal*/ ,
|
||||||
|
161 /* GL Journal Batch > Line*/ ,
|
||||||
|
683 /* Internal Use Inventory > Internal Use Line*/ ,
|
||||||
|
53134 /* Internal Use Inventory > Attributes*/ ,
|
||||||
|
260 /* Inventory Move > Move Line*/ ,
|
||||||
|
750 /* Inventory Move > Attributes*/ ,
|
||||||
|
200137 /* Material Receipt > Attributes*/ ,
|
||||||
|
667 /* Move Confirmation > Line*/ ,
|
||||||
|
353 /* Payment Selection > Payment Selection Line*/ ,
|
||||||
|
256 /* Physical Inventory > Inventory Count Line*/ ,
|
||||||
|
749 /* Physical Inventory > Attributes*/ ,
|
||||||
|
320 /* Production > Production Plan*/ ,
|
||||||
|
321 /* Production > Production Line*/ ,
|
||||||
|
53345 /* Production (Single Product) > Production Line*/ ,
|
||||||
|
200224 /* Production (Single Product) > Attributes*/ ,
|
||||||
|
200016 /* Sales Order > POS Payment*/ ,
|
||||||
|
751 /* Shipment (Customer) > Attributes*/ ,
|
||||||
|
659 /* Ship/Receipt Confirm > Line*/ ,
|
||||||
|
53281 /* Vendor RMA > RMA Line*/ ,
|
||||||
|
200068 /* Payments into Batch > Lines*/
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('202103161500_IDEMPIERE-4727.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -184,8 +184,8 @@ public class MAllocationLine extends X_C_AllocationLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_AllocationLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_AllocationHdr_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!newRecord
|
if (!newRecord
|
||||||
|
|
|
@ -162,8 +162,8 @@ import org.compiere.util.Msg;
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_BankStatementLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_BankStatement_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Calculate Charge = Statement - trx - Interest
|
// Calculate Charge = Statement - trx - Interest
|
||||||
|
|
|
@ -302,8 +302,8 @@ public class MCashLine extends X_C_CashLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_CashLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_Cash_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Cannot change generated Invoices
|
// Cannot change generated Invoices
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class MDepositBatch extends X_C_DepositBatch
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -977397802747749777L;
|
private static final long serialVersionUID = 7691820074981291939L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create & Load existing Persistent Object
|
* Create & Load existing Persistent Object
|
||||||
|
@ -310,4 +310,16 @@ public class MDepositBatch extends X_C_DepositBatch
|
||||||
return retValue;
|
return retValue;
|
||||||
} // getLines
|
} // getLines
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document Status is Complete or Closed
|
||||||
|
* @return true if CO, CL or RE
|
||||||
|
*/
|
||||||
|
public boolean isComplete()
|
||||||
|
{
|
||||||
|
String ds = getDocStatus();
|
||||||
|
return DOCSTATUS_Completed.equals(ds)
|
||||||
|
|| DOCSTATUS_Closed.equals(ds)
|
||||||
|
|| DOCSTATUS_Reversed.equals(ds);
|
||||||
|
} // isComplete
|
||||||
|
|
||||||
} // MDepositBatch
|
} // MDepositBatch
|
|
@ -36,6 +36,7 @@ import java.util.Properties;
|
||||||
|
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bank Statement Line Model
|
* Bank Statement Line Model
|
||||||
|
@ -122,6 +123,11 @@ import org.compiere.util.Env;
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
MDepositBatch parent = new MDepositBatch(getCtx(), getC_DepositBatch_ID(), get_TrxName());
|
||||||
|
if (newRecord && parent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_DepositBatch_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Set Line No
|
// Set Line No
|
||||||
if (getLine() == 0)
|
if (getLine() == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class MInOutConfirm extends X_M_InOutConfirm implements DocAction
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 5270365186462536874L;
|
private static final long serialVersionUID = -1998947558580855224L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create Confirmation or return existing one
|
* Create Confirmation or return existing one
|
||||||
|
@ -842,4 +842,16 @@ public class MInOutConfirm extends X_M_InOutConfirm implements DocAction
|
||||||
return 0;
|
return 0;
|
||||||
} // getC_Currency_ID
|
} // getC_Currency_ID
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document Status is Complete or Closed
|
||||||
|
* @return true if CO, CL or RE
|
||||||
|
*/
|
||||||
|
public boolean isComplete()
|
||||||
|
{
|
||||||
|
String ds = getDocStatus();
|
||||||
|
return DOCSTATUS_Completed.equals(ds)
|
||||||
|
|| DOCSTATUS_Closed.equals(ds)
|
||||||
|
|| DOCSTATUS_Reversed.equals(ds);
|
||||||
|
} // isComplete
|
||||||
|
|
||||||
} // MInOutConfirm
|
} // MInOutConfirm
|
||||||
|
|
|
@ -505,8 +505,8 @@ public class MInOutLine extends X_M_InOutLine
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
log.fine("");
|
log.fine("");
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_InOutLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_InOut_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getParent().pendingConfirmations()) {
|
if (getParent().pendingConfirmations()) {
|
||||||
|
|
|
@ -182,6 +182,11 @@ public class MInOutLineConfirm extends X_M_InOutLineConfirm
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
MInOutConfirm parent = new MInOutConfirm(getCtx(), getM_InOutConfirm_ID(), get_TrxName());
|
||||||
|
if (newRecord && parent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_InOutConfirm_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Calculate Difference = Target - Confirmed - Scrapped
|
// Calculate Difference = Target - Confirmed - Scrapped
|
||||||
BigDecimal difference = getTargetQty();
|
BigDecimal difference = getTargetQty();
|
||||||
difference = difference.subtract(getConfirmedQty());
|
difference = difference.subtract(getConfirmedQty());
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Util;
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -254,6 +255,11 @@ public class MInOutLineMA extends X_M_InOutLineMA
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
MInOutLine parentline = new MInOutLine(getCtx(), getM_InOutLine_ID(), get_TrxName());
|
||||||
|
if (newRecord && parentline.getParent().isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_InOut_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
//Set DateMaterialPolicy
|
//Set DateMaterialPolicy
|
||||||
if(!newRecord && is_ValueChanged(COLUMNNAME_M_AttributeSetInstance_ID)){
|
if(!newRecord && is_ValueChanged(COLUMNNAME_M_AttributeSetInstance_ID)){
|
||||||
//TODO Require testing for all scenario
|
//TODO Require testing for all scenario
|
||||||
|
|
|
@ -286,8 +286,8 @@ public class MInventoryLine extends X_M_InventoryLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_InventoryLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Inventory_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import java.util.logging.Level;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Util;
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
|
|
||||||
|
@ -236,6 +237,11 @@ public class MInventoryLineMA extends X_M_InventoryLineMA
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
MInventoryLine parentline = new MInventoryLine(getCtx(), getM_InventoryLine_ID(), get_TrxName());
|
||||||
|
if (newRecord && parentline.getParent().isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Inventory_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
//Set DateMaterialPolicy
|
//Set DateMaterialPolicy
|
||||||
if(!newRecord && is_ValueChanged(COLUMNNAME_M_AttributeSetInstance_ID)){
|
if(!newRecord && is_ValueChanged(COLUMNNAME_M_AttributeSetInstance_ID)){
|
||||||
I_M_InventoryLine line = getM_InventoryLine();
|
I_M_InventoryLine line = getM_InventoryLine();
|
||||||
|
|
|
@ -840,10 +840,10 @@ public class MInvoiceLine extends X_C_InvoiceLine
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (log.isLoggable(Level.FINE)) log.fine("New=" + newRecord);
|
if (log.isLoggable(Level.FINE)) log.fine("New=" + newRecord);
|
||||||
boolean parentComplete = getParent().isComplete();
|
boolean parentComplete = getParent().isProcessed();
|
||||||
boolean isReversal = getParent().isReversal();
|
boolean isReversal = getParent().isReversal();
|
||||||
if (newRecord && parentComplete) {
|
if (newRecord && parentComplete) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_InvoiceLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_Invoice_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Re-set invoice header (need to update m_IsSOTrx flag) - phib [ 1686773 ]
|
// Re-set invoice header (need to update m_IsSOTrx flag) - phib [ 1686773 ]
|
||||||
|
|
|
@ -283,6 +283,13 @@ public class MJournal extends X_GL_Journal implements DocAction
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
if (getGL_JournalBatch_ID() > 0) {
|
||||||
|
MJournalBatch parent = new MJournalBatch(getCtx(), getGL_JournalBatch_ID(), get_TrxName());
|
||||||
|
if (newRecord && parent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "GL_JournalBatch_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
// Imported Journals may not have date
|
// Imported Journals may not have date
|
||||||
if (getDateDoc() == null)
|
if (getDateDoc() == null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class MJournalBatch extends X_GL_JournalBatch implements DocAction
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 5920767495976301905L;
|
private static final long serialVersionUID = 4447134860127309777L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new Journal Batch by copying
|
* Create new Journal Batch by copying
|
||||||
|
@ -947,4 +947,17 @@ public class MJournalBatch extends X_GL_JournalBatch implements DocAction
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document Status is Complete or Closed
|
||||||
|
* @return true if CO, CL or RE
|
||||||
|
*/
|
||||||
|
public boolean isComplete()
|
||||||
|
{
|
||||||
|
String ds = getDocStatus();
|
||||||
|
return DOCSTATUS_Completed.equals(ds)
|
||||||
|
|| DOCSTATUS_Closed.equals(ds)
|
||||||
|
|| DOCSTATUS_Reversed.equals(ds);
|
||||||
|
} // isComplete
|
||||||
|
|
||||||
} // MJournalBatch
|
} // MJournalBatch
|
||||||
|
|
|
@ -285,8 +285,8 @@ public class MJournalLine extends X_GL_JournalLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "GL_JournalLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "GL_Journal_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class MMovementConfirm extends X_M_MovementConfirm implements DocAction
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -399427235334348654L;
|
private static final long serialVersionUID = -3617284116557414217L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create Confirmation or return existing one
|
* Create Confirmation or return existing one
|
||||||
|
@ -770,5 +770,16 @@ public class MMovementConfirm extends X_M_MovementConfirm implements DocAction
|
||||||
return 0;
|
return 0;
|
||||||
} // getC_Currency_ID
|
} // getC_Currency_ID
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document Status is Complete or Closed
|
||||||
|
* @return true if CO, CL or RE
|
||||||
|
*/
|
||||||
|
public boolean isComplete()
|
||||||
|
{
|
||||||
|
String ds = getDocStatus();
|
||||||
|
return DOCSTATUS_Completed.equals(ds)
|
||||||
|
|| DOCSTATUS_Closed.equals(ds)
|
||||||
|
|| DOCSTATUS_Reversed.equals(ds);
|
||||||
|
} // isComplete
|
||||||
|
|
||||||
} // MMovementConfirm
|
} // MMovementConfirm
|
||||||
|
|
|
@ -167,8 +167,8 @@ public class MMovementLine extends X_M_MovementLine
|
||||||
@Override
|
@Override
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_MovementLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Movement_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getParent().pendingConfirmations()) {
|
if (getParent().pendingConfirmations()) {
|
||||||
|
|
|
@ -21,6 +21,7 @@ import java.sql.ResultSet;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inventory Movement Confirmation Line
|
* Inventory Movement Confirmation Line
|
||||||
|
@ -148,6 +149,11 @@ public class MMovementLineConfirm extends X_M_MovementLineConfirm
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
MMovementConfirm parent = new MMovementConfirm(getCtx(), getM_MovementConfirm_ID(), get_TrxName());
|
||||||
|
if (newRecord && parent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_MovementConfirm_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Calculate Difference = Target - Confirmed
|
// Calculate Difference = Target - Confirmed
|
||||||
BigDecimal difference = getTargetQty();
|
BigDecimal difference = getTargetQty();
|
||||||
difference = difference.subtract(getConfirmedQty());
|
difference = difference.subtract(getConfirmedQty());
|
||||||
|
|
|
@ -27,6 +27,7 @@ import java.util.logging.Level;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Util;
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
|
|
||||||
|
@ -241,6 +242,11 @@ public class MMovementLineMA extends X_M_MovementLineMA
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
MMovementLine parentline = new MMovementLine(getCtx(), getM_MovementLine_ID(), get_TrxName());
|
||||||
|
if (newRecord && parentline.getParent().isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Movement_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
//Set DateMaterialPolicy
|
//Set DateMaterialPolicy
|
||||||
if(!newRecord && is_ValueChanged(COLUMNNAME_M_AttributeSetInstance_ID)){
|
if(!newRecord && is_ValueChanged(COLUMNNAME_M_AttributeSetInstance_ID)){
|
||||||
I_M_MovementLine line = getM_MovementLine();
|
I_M_MovementLine line = getM_MovementLine();
|
||||||
|
|
|
@ -2026,12 +2026,12 @@ public class MOrder extends X_C_Order implements DocAction
|
||||||
MInvoice lastInvoice = invoices[0];
|
MInvoice lastInvoice = invoices[0];
|
||||||
BigDecimal grandTotal = lastInvoice.getGrandTotal();
|
BigDecimal grandTotal = lastInvoice.getGrandTotal();
|
||||||
|
|
||||||
List<X_C_POSPayment> pps = new Query(this.getCtx(), X_C_POSPayment.Table_Name, "C_Order_ID=?", this.get_TrxName())
|
List<MPOSPayment> pps = new Query(this.getCtx(), MPOSPayment.Table_Name, "C_Order_ID=?", this.get_TrxName())
|
||||||
.setParameters(this.getC_Order_ID())
|
.setParameters(this.getC_Order_ID())
|
||||||
.setOnlyActiveRecords(true)
|
.setOnlyActiveRecords(true)
|
||||||
.list();
|
.list();
|
||||||
BigDecimal totalPOSPayments = Env.ZERO;
|
BigDecimal totalPOSPayments = Env.ZERO;
|
||||||
for (X_C_POSPayment pp : pps) {
|
for (MPOSPayment pp : pps) {
|
||||||
totalPOSPayments = totalPOSPayments.add(pp.getPayAmt());
|
totalPOSPayments = totalPOSPayments.add(pp.getPayAmt());
|
||||||
}
|
}
|
||||||
if (totalPOSPayments.compareTo(grandTotal) != 0)
|
if (totalPOSPayments.compareTo(grandTotal) != 0)
|
||||||
|
@ -2060,7 +2060,7 @@ public class MOrder extends X_C_Order implements DocAction
|
||||||
|
|
||||||
// Create a payment for each non-guarantee record
|
// Create a payment for each non-guarantee record
|
||||||
// associate the payment id and mark the record as processed
|
// associate the payment id and mark the record as processed
|
||||||
for (X_C_POSPayment pp : pps) {
|
for (MPOSPayment pp : pps) {
|
||||||
X_C_POSTenderType tt = new X_C_POSTenderType (getCtx(),pp.getC_POSTenderType_ID(), get_TrxName());
|
X_C_POSTenderType tt = new X_C_POSTenderType (getCtx(),pp.getC_POSTenderType_ID(), get_TrxName());
|
||||||
if (tt.isGuarantee())
|
if (tt.isGuarantee())
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -775,8 +775,8 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_OrderLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_Order_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Get Defaults from Parent
|
// Get Defaults from Parent
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* 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: *
|
||||||
|
* - Carlos Ruiz - globalqss - bxservice *
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
package org.compiere.model;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.compiere.util.CLogger;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Carlos Ruiz - globalqss - bxservice
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MPOSPayment extends X_C_POSPayment
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -4889347016616915128L;
|
||||||
|
|
||||||
|
/** Logger */
|
||||||
|
protected static CLogger s_log = CLogger.getCLogger (MPOSPayment.class);
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* Default Constructor
|
||||||
|
* @param ctx context
|
||||||
|
* @param C_POSPayment_ID order line to load
|
||||||
|
* @param trxName trx name
|
||||||
|
*/
|
||||||
|
public MPOSPayment (Properties ctx, int C_POSPayment_ID, String trxName)
|
||||||
|
{
|
||||||
|
super (ctx, C_POSPayment_ID, trxName);
|
||||||
|
} // MPOSPayment
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load Constructor
|
||||||
|
* @param ctx context
|
||||||
|
* @param rs result set record
|
||||||
|
* @param trxName transaction
|
||||||
|
*/
|
||||||
|
public MPOSPayment (Properties ctx, ResultSet rs, String trxName)
|
||||||
|
{
|
||||||
|
super(ctx, rs, trxName);
|
||||||
|
} // MPOSPayment
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* Before Save
|
||||||
|
* @param newRecord
|
||||||
|
* @return true if it can be saved
|
||||||
|
*/
|
||||||
|
protected boolean beforeSave (boolean newRecord)
|
||||||
|
{
|
||||||
|
MOrder parent = new MOrder(getCtx(), getC_Order_ID(), get_TrxName());
|
||||||
|
if (newRecord && parent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_Order_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} // beforeSave
|
||||||
|
|
||||||
|
} // MPOSPayment
|
|
@ -22,6 +22,7 @@ import java.util.Properties;
|
||||||
|
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Payment Selection Line Model
|
* Payment Selection Line Model
|
||||||
|
@ -143,6 +144,11 @@ public class MPaySelectionLine extends X_C_PaySelectionLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
|
MPaySelection parent = new MPaySelection(getCtx(), getC_PaySelection_ID(), get_TrxName());
|
||||||
|
if (newRecord && parent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_PaySelection_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
setDifferenceAmt(getOpenAmt().subtract(getPayAmt()).subtract(getDiscountAmt()).subtract(getWriteOffAmt()));
|
setDifferenceAmt(getOpenAmt().subtract(getPayAmt()).subtract(getDiscountAmt()).subtract(getWriteOffAmt()));
|
||||||
return true;
|
return true;
|
||||||
} // beforeSave
|
} // beforeSave
|
||||||
|
|
|
@ -663,7 +663,7 @@ public class MPayment extends X_C_Payment
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (isComplete() &&
|
if (isProcessed() &&
|
||||||
! is_ValueChanged(COLUMNNAME_Processed) &&
|
! is_ValueChanged(COLUMNNAME_Processed) &&
|
||||||
( is_ValueChanged(COLUMNNAME_C_BankAccount_ID)
|
( is_ValueChanged(COLUMNNAME_C_BankAccount_ID)
|
||||||
|| is_ValueChanged(COLUMNNAME_C_BPartner_ID)
|
|| is_ValueChanged(COLUMNNAME_C_BPartner_ID)
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class MProduction extends X_M_Production implements DocAction {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -4650232602150964606L;
|
private static final long serialVersionUID = 6714776372370644208L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -907,4 +907,17 @@ public class MProduction extends X_M_Production implements DocAction {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document Status is Complete or Closed
|
||||||
|
* @return true if CO, CL or RE
|
||||||
|
*/
|
||||||
|
public boolean isStatusComplete()
|
||||||
|
{
|
||||||
|
String ds = getDocStatus();
|
||||||
|
return DOCSTATUS_Completed.equals(ds)
|
||||||
|
|| DOCSTATUS_Closed.equals(ds)
|
||||||
|
|| DOCSTATUS_Reversed.equals(ds);
|
||||||
|
} // isStatusComplete
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import java.util.logging.Level;
|
||||||
import org.adempiere.exceptions.AdempiereException;
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Util;
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
|
|
||||||
|
@ -354,6 +355,10 @@ public class MProductionLine extends X_M_ProductionLine {
|
||||||
|
|
||||||
if (getM_Production_ID() > 0)
|
if (getM_Production_ID() > 0)
|
||||||
{
|
{
|
||||||
|
if (newRecord && productionParent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Production_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if ( productionParent.getM_Product_ID() == getM_Product_ID() && productionParent.getProductionQty().signum() == getMovementQty().signum())
|
if ( productionParent.getM_Product_ID() == getM_Product_ID() && productionParent.getProductionQty().signum() == getMovementQty().signum())
|
||||||
setIsEndProduct(true);
|
setIsEndProduct(true);
|
||||||
else
|
else
|
||||||
|
@ -362,6 +367,11 @@ public class MProductionLine extends X_M_ProductionLine {
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
I_M_ProductionPlan plan = getM_ProductionPlan();
|
I_M_ProductionPlan plan = getM_ProductionPlan();
|
||||||
|
MProduction prod = new MProduction(getCtx(), plan.getM_Production_ID(), get_TrxName());
|
||||||
|
if (newRecord && prod.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Production_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (plan.getM_Product_ID() == getM_Product_ID() && plan.getProductionQty().signum() == getMovementQty().signum())
|
if (plan.getM_Product_ID() == getM_Product_ID() && plan.getProductionQty().signum() == getMovementQty().signum())
|
||||||
setIsEndProduct(true);
|
setIsEndProduct(true);
|
||||||
else
|
else
|
||||||
|
|
|
@ -8,13 +8,14 @@ import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Util;
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
public class MProductionLineMA extends X_M_ProductionLineMA {
|
public class MProductionLineMA extends X_M_ProductionLineMA {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -3935841562652510880L;
|
private static final long serialVersionUID = -2633782218494352620L;
|
||||||
|
|
||||||
public MProductionLineMA(Properties ctx, int M_ProductionLineMA_ID,
|
public MProductionLineMA(Properties ctx, int M_ProductionLineMA_ID,
|
||||||
String trxName) {
|
String trxName) {
|
||||||
|
@ -95,5 +96,22 @@ public class MProductionLineMA extends X_M_ProductionLineMA {
|
||||||
return retValue;
|
return retValue;
|
||||||
} // get
|
} // get
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean beforeSave(boolean newRecord)
|
||||||
|
{
|
||||||
|
MProductionLine parentLine = new MProductionLine(getCtx(), getM_ProductionLine_ID(), get_TrxName());
|
||||||
|
MProduction prodParent;
|
||||||
|
if (parentLine.getM_Production_ID() > 0) {
|
||||||
|
prodParent = new MProduction(getCtx(), parentLine.getM_Production_ID(), get_TrxName());
|
||||||
|
} else {
|
||||||
|
MProductionPlan plan = new MProductionPlan(getCtx(), parentLine.getM_ProductionPlan_ID(), get_TrxName());
|
||||||
|
prodParent = new MProduction(getCtx(), plan.getM_Production_ID(), get_TrxName());
|
||||||
|
}
|
||||||
|
if (newRecord && prodParent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Production_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,17 +14,17 @@ import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.compiere.util.AdempiereUserError;
|
import org.compiere.util.AdempiereUserError;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author hengsin
|
* @author hengsin
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class MProductionPlan extends X_M_ProductionPlan {
|
public class MProductionPlan extends X_M_ProductionPlan {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generated serial id
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -8189507724698695756L;
|
private static final long serialVersionUID = 1830027775110768396L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ctx
|
* @param ctx
|
||||||
|
@ -303,4 +303,16 @@ public class MProductionPlan extends X_M_ProductionPlan {
|
||||||
deleteLines(get_TrxName());
|
deleteLines(get_TrxName());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean beforeSave(boolean newRecord)
|
||||||
|
{
|
||||||
|
MProduction parent = new MProduction(getCtx(), getM_Production_ID(), get_TrxName());
|
||||||
|
if (newRecord && parent.isProcessed()) {
|
||||||
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Production_ID"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,9 +267,9 @@ public class MRMALine extends X_M_RMALine
|
||||||
@Override
|
@Override
|
||||||
protected boolean beforeSave(boolean newRecord)
|
protected boolean beforeSave(boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete())
|
if (newRecord && getParent().isProcessed())
|
||||||
{
|
{
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_RMA"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_RMA_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getM_InOutLine_ID() == 0 && getC_Charge_ID() == 0 && getM_Product_ID() == 0)
|
if (getM_InOutLine_ID() == 0 && getC_Charge_ID() == 0 && getM_Product_ID() == 0)
|
||||||
|
|
|
@ -259,8 +259,8 @@ public class MRequisitionLine extends X_M_RequisitionLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_RequisitionLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "M_Requisition_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getLine() == 0)
|
if (getLine() == 0)
|
||||||
|
|
|
@ -190,8 +190,8 @@ public class MTimeExpenseLine extends X_S_TimeExpenseLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "S_TimeExpenseLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "S_TimeExpense_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Calculate Converted Amount
|
// Calculate Converted Amount
|
||||||
|
|
|
@ -515,8 +515,8 @@ public class MDDOrderLine extends X_DD_OrderLine
|
||||||
*/
|
*/
|
||||||
protected boolean beforeSave (boolean newRecord)
|
protected boolean beforeSave (boolean newRecord)
|
||||||
{
|
{
|
||||||
if (newRecord && getParent().isComplete()) {
|
if (newRecord && getParent().isProcessed()) {
|
||||||
log.saveError("ParentComplete", Msg.translate(getCtx(), "DD_OrderLine"));
|
log.saveError("ParentComplete", Msg.translate(getCtx(), "DD_Order_ID"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Get Defaults from Parent
|
// Get Defaults from Parent
|
||||||
|
|
Loading…
Reference in New Issue