Skip to content

Commit

Permalink
https://github.com/adempiere/adempiere/issues/94
Browse files Browse the repository at this point in the history
* Validation of columns created
* Validation of Process created
* Validation of Workflow created
* Validation of "M" Class created
  • Loading branch information
yamelsenih committed Nov 20, 2015
1 parent cf330e4 commit 3575f7d
Show file tree
Hide file tree
Showing 3 changed files with 213 additions and 135 deletions.
8 changes: 7 additions & 1 deletion base/src/org/adempiere/util/ModelClassGenerator.java
Expand Up @@ -99,7 +99,13 @@ public ModelClassGenerator (int AD_Table_ID, String directory, String packageNam
sb = new StringBuffer();
tableName = createHeaderDocument(table, tableName, sb, packageName);
// Write to file "M" class
writeToFile (sb, directory + tableName + ".java");
String fileName = directory + tableName + ".java";
// Validate if exists
File out = new File (fileName);
if(!out.exists()) {
// Create a File
writeToFile (sb, fileName);
}
}
}

Expand Down
313 changes: 180 additions & 133 deletions base/src/org/compiere/model/MTable.java
Expand Up @@ -726,13 +726,20 @@ protected boolean afterSave (boolean newRecord, boolean success)
if (newRecord)
{
createMandatoryColumns();
// Create Standard columns for Documents
createMandatoryDocumentColumns();

MSequence seq = MSequence.get(getCtx(), getTableName(), get_TrxName());
if (seq == null || seq.get_ID() == 0)
MSequence.createTableSequence(getCtx(), getTableName(), get_TrxName());
}
else
{
// Create Standard columns for Documents
if(is_ValueChanged(COLUMNNAME_IsDocument)) {
createMandatoryDocumentColumns();
}

MSequence seq = MSequence.get(getCtx(), getTableName(), get_TrxName());
if (seq == null || seq.get_ID() == 0)
MSequence.createTableSequence(getCtx(), getTableName(), get_TrxName());
Expand All @@ -741,7 +748,7 @@ else if (!seq.getName().equals(getTableName()))
seq.setName(getTableName());
seq.saveEx();
}
}
}

return success;
} // afterSave
Expand Down Expand Up @@ -871,55 +878,6 @@ public void createMandatoryColumns()
column = new MColumn(this, COLUMNNAME_UpdatedBy , 22 , DisplayType.Table, "");
column.setAD_Reference_Value_ID(110);
column.saveEx();
// Yamel Senih, 2015-11-14
// Add Default Columns for Document Tables
if(isDocument()) {
// Document Type
column = new MColumn(this, "C_DocType_ID", 22, DisplayType.TableDir, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
// Document No
column = new MColumn(this, "DocumentNo", 60, DisplayType.String, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
// Document Date
column = new MColumn(this, "DateDoc", 7, DisplayType.Date, "@#Date@");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
// Processed
column = new MColumn(this, "Processed", 1, DisplayType.YesNo, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
// Approved
column = new MColumn(this, "IsApproved", 1, DisplayType.YesNo, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
// Document Description
column = new MColumn(this, "Description", 1, DisplayType.Text, "");
column.setIsMandatory(false);
column.setUpdateable(true);
column.setIsAlwaysUpdateable(true);
column.saveEx();
// Document Status
column = new MColumn(this, "DocStatus", 1, DisplayType.List, "DR");
column.setIsMandatory(true);
column.setUpdateable(false);
column.setAD_Reference_Value_ID(131);
column.saveEx();
// Document Action
column = new MColumn(this, "DocAction", 1, DisplayType.Button, "CO");
column.setIsMandatory(true);
column.setUpdateable(false);
column.setAD_Reference_Value_ID(135);
column.setAD_Process_ID(getworkFlowProcess());
column.saveEx();
}
// End Yamel Senih
if(!isView())
{
if(getTableName().endsWith("_Trl") || getTableName().endsWith("_Access"))
Expand All @@ -944,96 +902,185 @@ public void createMandatoryColumns()
}
}

/**
* Create Standard columns for tables marks like Document
*/
private void createMandatoryDocumentColumns() {
// Yamel Senih, 2015-11-14
// Add Default Columns for Document Tables
if(isDocument()) {
// Document Type
MColumn column = null;
String columnName = "C_DocType_ID";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 22, DisplayType.TableDir, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
}
// Document No
columnName = "DocumentNo";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 60, DisplayType.String, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
}
// Document Date
columnName = "DateDoc";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 7, DisplayType.Date, "@#Date@");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
}
// Processed
columnName = "Processed";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 1, DisplayType.YesNo, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
}
// Approved
columnName = "IsApproved";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 1, DisplayType.YesNo, "");
column.setIsMandatory(true);
column.setUpdateable(false);
column.saveEx();
}
// Document Description
columnName = "Description";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 1, DisplayType.Text, "");
column.setIsMandatory(false);
column.setUpdateable(true);
column.setIsAlwaysUpdateable(true);
column.saveEx();
}
// Document Status
columnName = "DocStatus";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 1, DisplayType.List, "DR");
column.setIsMandatory(true);
column.setUpdateable(false);
column.setAD_Reference_Value_ID(131);
column.saveEx();
}
// Document Action
columnName = "DocAction";
if(MColumn.getColumn_ID(getTableName(), columnName) <= 0) {
column = new MColumn(this, columnName, 1, DisplayType.Button, "CO");
column.setIsMandatory(true);
column.setUpdateable(false);
column.setAD_Reference_Value_ID(135);
column.setAD_Process_ID(getworkFlowProcess());
column.saveEx();
}
}
// End Yamel Senih
}

/**
* Get / Create Process and Work Flow
* @return
*/
private int getworkFlowProcess() {
// Create Work Flow
MWorkflow workFlow = new MWorkflow(getCtx(), 0, get_TrxName());
workFlow.setValue("Process_" + getName());
workFlow.setName(workFlow.getValue());
workFlow.setDescription("(Standard Process_" + getName() + ")");
workFlow.setWorkflowType(X_AD_Workflow.WORKFLOWTYPE_DocumentProcess);
workFlow.setAD_Table_ID(getAD_Table_ID());
workFlow.setAccessLevel(getAccessLevel());
workFlow.setEntityType(getEntityType());
workFlow.setPublishStatus(X_AD_Workflow.PUBLISHSTATUS_Test);
workFlow.setAuthor("ADempiere");
workFlow.setDuration(1);
workFlow.saveEx();
// Create Work Flow Node for (Start)
MWFNode wfNode_Start = new MWFNode(workFlow, "(Start)", "(Start)");
wfNode_Start.setDescription(workFlow.getName());
wfNode_Start.setEntityType(getEntityType());
wfNode_Start.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Start.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Start.setAction(X_AD_WF_Node.ACTION_WaitSleep);
wfNode_Start.saveEx();
// Set Start node in Workflow
workFlow.setAD_WF_Node_ID(wfNode_Start.getAD_WF_Node_ID());
workFlow.saveEx();
// Create Work Flow Node for (DocAuto)
MWFNode wfNode_Auto = new MWFNode(workFlow, "(DocAuto)", "(DocAuto)");
wfNode_Auto.setDescription(workFlow.getName());
wfNode_Auto.setEntityType(getEntityType());
wfNode_Auto.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Auto.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Auto.setAction(X_AD_WF_Node.ACTION_DocumentAction);
wfNode_Auto.setDocAction(X_AD_WF_Node.DOCACTION_None);
wfNode_Auto.saveEx();
// Create Work Flow Node for (DocPrepare)
MWFNode wfNode_Prepare = new MWFNode(workFlow, "(DocPrepare)", "(DocPrepare)");
wfNode_Prepare.setDescription(workFlow.getName());
wfNode_Prepare.setEntityType(getEntityType());
wfNode_Prepare.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Prepare.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Prepare.setAction(X_AD_WF_Node.ACTION_DocumentAction);
wfNode_Prepare.setDocAction(X_AD_WF_Node.DOCACTION_Prepare);
wfNode_Prepare.saveEx();
// Create Work Flow Node for (DocComplete)
MWFNode wfNode_Complete = new MWFNode(workFlow, "(DocComplete)", "(DocComplete)");
wfNode_Complete.setDescription(workFlow.getName());
wfNode_Complete.setEntityType(getEntityType());
wfNode_Complete.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Complete.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Complete.setAction(X_AD_WF_Node.ACTION_DocumentAction);
wfNode_Complete.setDocAction(X_AD_WF_Node.DOCACTION_Complete);
wfNode_Complete.saveEx();
// Create Transition For Start Node
// For Start
MWFNodeNext wfNodeNext = new MWFNodeNext(wfNode_Start, wfNode_Prepare.getAD_WF_Node_ID());
wfNodeNext.setDescription("(Standard Approval)");
wfNodeNext.setEntityType(getEntityType());
wfNodeNext.setSeqNo(10);
wfNodeNext.setIsStdUserWorkflow(true);
wfNodeNext.saveEx();
// For DocAuto
wfNodeNext = new MWFNodeNext(wfNode_Start, wfNode_Auto.getAD_WF_Node_ID());
wfNodeNext.setDescription("(Standard Transition)");
wfNodeNext.setEntityType(getEntityType());
wfNodeNext.setSeqNo(100);
wfNodeNext.setIsStdUserWorkflow(false);
wfNodeNext.saveEx();
// Create Transition For Prepare Node
// For DocComplete
wfNodeNext = new MWFNodeNext(wfNode_Prepare, wfNode_Complete.getAD_WF_Node_ID());
wfNodeNext.setDescription("(Standard Transition)");
wfNodeNext.setEntityType(getEntityType());
wfNodeNext.setSeqNo(100);
wfNodeNext.setIsStdUserWorkflow(false);
wfNodeNext.saveEx();
// Search or create Work Flow
MWorkflow workFlow = MWorkflow
.getWorkFlowFromDocumentTable(getCtx(), getAD_Table_ID(), get_TrxName());
// validate null
if(workFlow == null) {
workFlow = new MWorkflow(getCtx(), 0, get_TrxName());
workFlow.setValue("Process_" + getName());
workFlow.setName(workFlow.getValue());
workFlow.setDescription("(Standard Process_" + getName() + ")");
workFlow.setWorkflowType(X_AD_Workflow.WORKFLOWTYPE_DocumentProcess);
workFlow.setAD_Table_ID(getAD_Table_ID());
workFlow.setAccessLevel(getAccessLevel());
workFlow.setEntityType(getEntityType());
workFlow.setPublishStatus(X_AD_Workflow.PUBLISHSTATUS_Test);
workFlow.setAuthor("ADempiere");
workFlow.setDuration(1);
workFlow.saveEx();
// Create Work Flow Node for (Start)
MWFNode wfNode_Start = new MWFNode(workFlow, "(Start)", "(Start)");
wfNode_Start.setDescription(workFlow.getName());
wfNode_Start.setEntityType(getEntityType());
wfNode_Start.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Start.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Start.setAction(X_AD_WF_Node.ACTION_WaitSleep);
wfNode_Start.saveEx();
// Set Start node in Workflow
workFlow.setAD_WF_Node_ID(wfNode_Start.getAD_WF_Node_ID());
workFlow.saveEx();
// Create Work Flow Node for (DocAuto)
MWFNode wfNode_Auto = new MWFNode(workFlow, "(DocAuto)", "(DocAuto)");
wfNode_Auto.setDescription(workFlow.getName());
wfNode_Auto.setEntityType(getEntityType());
wfNode_Auto.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Auto.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Auto.setAction(X_AD_WF_Node.ACTION_DocumentAction);
wfNode_Auto.setDocAction(X_AD_WF_Node.DOCACTION_None);
wfNode_Auto.saveEx();
// Create Work Flow Node for (DocPrepare)
MWFNode wfNode_Prepare = new MWFNode(workFlow, "(DocPrepare)", "(DocPrepare)");
wfNode_Prepare.setDescription(workFlow.getName());
wfNode_Prepare.setEntityType(getEntityType());
wfNode_Prepare.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Prepare.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Prepare.setAction(X_AD_WF_Node.ACTION_DocumentAction);
wfNode_Prepare.setDocAction(X_AD_WF_Node.DOCACTION_Prepare);
wfNode_Prepare.saveEx();
// Create Work Flow Node for (DocComplete)
MWFNode wfNode_Complete = new MWFNode(workFlow, "(DocComplete)", "(DocComplete)");
wfNode_Complete.setDescription(workFlow.getName());
wfNode_Complete.setEntityType(getEntityType());
wfNode_Complete.setJoinElement(X_AD_WF_Node.JOINELEMENT_XOR);
wfNode_Complete.setSplitElement(X_AD_WF_Node.SPLITELEMENT_XOR);
wfNode_Complete.setAction(X_AD_WF_Node.ACTION_DocumentAction);
wfNode_Complete.setDocAction(X_AD_WF_Node.DOCACTION_Complete);
wfNode_Complete.saveEx();
// Create Transition For Start Node
// For Start
MWFNodeNext wfNodeNext = new MWFNodeNext(wfNode_Start, wfNode_Prepare.getAD_WF_Node_ID());
wfNodeNext.setDescription("(Standard Approval)");
wfNodeNext.setEntityType(getEntityType());
wfNodeNext.setSeqNo(10);
wfNodeNext.setIsStdUserWorkflow(true);
wfNodeNext.saveEx();
// For DocAuto
wfNodeNext = new MWFNodeNext(wfNode_Start, wfNode_Auto.getAD_WF_Node_ID());
wfNodeNext.setDescription("(Standard Transition)");
wfNodeNext.setEntityType(getEntityType());
wfNodeNext.setSeqNo(100);
wfNodeNext.setIsStdUserWorkflow(false);
wfNodeNext.saveEx();
// Create Transition For Prepare Node
// For DocComplete
wfNodeNext = new MWFNodeNext(wfNode_Prepare, wfNode_Complete.getAD_WF_Node_ID());
wfNodeNext.setDescription("(Standard Transition)");
wfNodeNext.setEntityType(getEntityType());
wfNodeNext.setSeqNo(100);
wfNodeNext.setIsStdUserWorkflow(false);
wfNodeNext.saveEx();
}
// Create Standard Process for Document Action
MProcess workFlowProcess = new MProcess(getCtx(), 0, get_TrxName());
workFlowProcess.setValue(getTableName() + "_Process");
workFlowProcess.setName("Process " + getName());
workFlowProcess.setEntityType(getEntityType());
workFlowProcess.setAccessLevel(getAccessLevel());
workFlowProcess.setAD_Workflow_ID(workFlow.getAD_Workflow_ID());
workFlowProcess.saveEx();

int m_AD_Process_ID = MProcess.getProcess_ID(getTableName() + "_Process", get_TrxName());
if(m_AD_Process_ID <= 0) {
MProcess workFlowProcess = new MProcess(getCtx(), 0, get_TrxName());
workFlowProcess.setValue(getTableName() + "_Process");
workFlowProcess.setName("Process " + getName());
workFlowProcess.setEntityType(getEntityType());
workFlowProcess.setAccessLevel(getAccessLevel());
workFlowProcess.setAD_Workflow_ID(workFlow.getAD_Workflow_ID());
workFlowProcess.saveEx();
// Default Return
return workFlowProcess.getAD_Process_ID();
}
// Default Return
return workFlowProcess.getAD_Process_ID();
return m_AD_Process_ID;
}

/**
Expand Down

0 comments on commit 3575f7d

Please sign in to comment.