You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
8.8 KiB
211 lines
8.8 KiB
|
|
namespace CounsellorBL
|
|
{
|
|
using MonumentDefine;
|
|
using Newtonsoft.Json.Linq;
|
|
using OT.COM.ArsenalDB;
|
|
using OT.COM.SignalerMessage;
|
|
using SoldierData.EnterprizeV4;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
/// <summary>
|
|
/// For simple detail table, edit(create, update, delete) also update master's update column
|
|
/// </summary>
|
|
/// <typeparam name="TEntityDtl"></typeparam>
|
|
/// <typeparam name="TEntityMst"></typeparam>
|
|
public abstract class DetailDataTableTemplate<TEntityDtl, TEntityMst> : ModelDataTemplate<TEntityDtl>
|
|
where TEntityDtl : EntityBase, new()
|
|
where TEntityMst : EntityBase, new()
|
|
{
|
|
protected abstract string DetailColumnNameToMasterUID { get; }
|
|
/// <summary>
|
|
/// Key is detail column, value is mater column
|
|
/// </summary>
|
|
|
|
protected virtual Dictionary<string, string> generateMasterDetailJoinCondition()
|
|
{
|
|
return new Dictionary<string, string>() { { DetailColumnNameToMasterUID, BLWording.UID } };
|
|
}
|
|
|
|
protected virtual string fetchMasterUIDFromCommand(Dictionary<string, object> i_dicData)
|
|
{
|
|
string sRes = null;
|
|
|
|
if (i_dicData != null && i_dicData.ContainsKey(DetailColumnNameToMasterUID))
|
|
{
|
|
sRes = i_dicData[DetailColumnNameToMasterUID].ToString();
|
|
}
|
|
return sRes;
|
|
}
|
|
|
|
|
|
protected DetailDataTableTemplate()
|
|
{
|
|
dgCreateCommandGenerator = createDetailCommandGeneratorDefault;
|
|
|
|
dgReadCommandGenerator = readCommandGeneratorDefault;
|
|
|
|
dgUpdateCommandGenerator = updateDetailCommandGeneratorDefault;
|
|
|
|
dgDeleteCommandGenerator = deleteDetailCommandGeneratorDefault;
|
|
|
|
dgCopyCommandGenerator = copyCommandGeneratorDefault;
|
|
}
|
|
|
|
protected string getMasterUpdate(JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lcCmds)
|
|
{
|
|
string sMsg = null;
|
|
List<Command> lCmds = new List<Command>();
|
|
|
|
|
|
do
|
|
{
|
|
List<string> lsDetailColumnUID = new List<string>();
|
|
List<string> lsMasterColumnUID = new List<string>();
|
|
|
|
if(i_jaData == null)
|
|
{
|
|
sMsg = MessageWording.PARAM_NOT_EXPECTED;
|
|
break;
|
|
}
|
|
|
|
foreach (JToken jtkItem in i_jaData)
|
|
{
|
|
Dictionary<string, object> dicItem = jtkItem.ToObject<Dictionary<string, object>>();
|
|
if (dicItem.ContainsKey(BLWording.WHEREDATA))
|
|
{
|
|
Dictionary<string, object> dicWheredata = (dicItem[BLWording.WHEREDATA] as JToken).ToObject<Dictionary<string, object>>();
|
|
if (!dicWheredata.ContainsKey(BLWording.UID))
|
|
{
|
|
sMsg = MessageWording.PARAM_NOT_EXPECTED;
|
|
break;
|
|
}
|
|
lsDetailColumnUID.Add(dicWheredata[BLWording.UID].ToString());
|
|
}
|
|
else if (dicItem.ContainsKey(BLWording.DATA))
|
|
{
|
|
Dictionary<string, object> dicData = (dicItem[BLWording.DATA] as JToken).ToObject<Dictionary<string, object>>();
|
|
if (dicData != null)
|
|
{
|
|
string sMasterUID = fetchMasterUIDFromCommand(dicData);
|
|
if (sMasterUID != null)
|
|
{
|
|
lsMasterColumnUID.Add(sMasterUID);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (lsDetailColumnUID.Any())
|
|
{
|
|
WhereNode wnCond = new WhereNode(BLWording.UID, WhereNode.EColumnOperation.EOT_IN, typeof(TEntityDtl), lsDetailColumnUID.ToArray());
|
|
|
|
QueryJsonElementCollection qjecBlocks = new QueryJsonElementCollection();
|
|
|
|
QueryJsonElement qjeA = qjecBlocks.GetInst();
|
|
qjeA.table = typeof(TEntityMst).GetField("TABLENAME").GetValue(null).ToString();
|
|
qjeA.displaycols = new List<string>() { BLWording.UID };
|
|
qjeA.isdistinct = true;
|
|
qjecBlocks.Add(qjeA);
|
|
|
|
QueryJsonElement qjeB = qjecBlocks.GetInst();
|
|
qjeB.table = typeof(TEntityDtl).GetField("TABLENAME").GetValue(null).ToString();
|
|
qjeB.jointype = QueryJsonElement.RIGHT_JOIN;
|
|
qjeB.jointable = qjeA;
|
|
qjeB.joincols = generateMasterDetailJoinCondition();
|
|
qjeB.wherecols = wnCond;
|
|
|
|
qjecBlocks.Add(qjeB);
|
|
sMsg = MakeSelectJoinByBlocks(qjecBlocks, out Command cSelect);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect);
|
|
List<TEntityMst> laAPIs = ai.RunQueryList<TEntityMst>(cSelect);
|
|
|
|
laAPIs.ForEach(a => { lsMasterColumnUID.Add(a.GetValue(BLWording.UID).ToString()); });
|
|
}
|
|
|
|
DateTime dtNow = DateTime.Now;
|
|
lsMasterColumnUID.ForEach(sMstUID =>
|
|
{
|
|
TEntityMst aData = new TEntityMst();
|
|
aData.SetValue(BLWording.UPDATE_DATE, dtNow);
|
|
aData.SetValue(BLWording.UPDATE_USER_UID, i_sSessionUser.update_user_uid);
|
|
aData.SetValue(BLWording.UPDATE_ORG_UID, i_sSessionUser.update_org_uid);
|
|
TEntityMst aCond = new TEntityMst();
|
|
aCond.SetValue(BLWording.UID, sMstUID);
|
|
lCmds.Add(Command.SetupUpdateCmd(aData, aCond));
|
|
});
|
|
}
|
|
while (false);
|
|
|
|
|
|
o_lcCmds = lCmds;
|
|
return sMsg;
|
|
}
|
|
|
|
private string _EditDetailCommandGeneratorDefault(
|
|
DG_GenerateEditCommand i_dgEditor,
|
|
CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lcCmds, List<string> i_saQryContainKeys)
|
|
{
|
|
string sMsg;
|
|
List<Command> lCmds = new List<Command>();
|
|
|
|
do
|
|
{
|
|
sMsg = i_dgEditor(i_crmInput, i_jaData, i_sSessionUser, out List<Command> lCmds1, i_saQryContainKeys);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
sMsg = getMasterUpdate(i_jaData, i_sSessionUser, out List<Command> lCmds2);
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
lCmds.AddRange(lCmds1);
|
|
lCmds.AddRange(lCmds2);
|
|
|
|
}
|
|
while (false);
|
|
|
|
|
|
o_lcCmds = lCmds;
|
|
return sMsg;
|
|
}
|
|
|
|
protected string createDetailCommandGeneratorDefault(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lcCmds, List<string> i_saQryContainKeys,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
return _EditDetailCommandGeneratorDefault(createSingleCommandGeneratorDefault, i_crmInput, i_jaData, i_sSessionUser, out o_lcCmds, i_saQryContainKeys);
|
|
}
|
|
|
|
|
|
protected string updateDetailCommandGeneratorDefault(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lcCmds, List<string> i_saQryContainKeys,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
return _EditDetailCommandGeneratorDefault(updateSingleCommandGeneratorDefault, i_crmInput, i_jaData, i_sSessionUser, out o_lcCmds, i_saQryContainKeys);
|
|
}
|
|
|
|
protected string deleteDetailCommandGeneratorDefault(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lcCmds, List<string> i_saQryContainKeys,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
return _EditDetailCommandGeneratorDefault(deleteSingleCommandGeneratorDefault, i_crmInput, i_jaData, i_sSessionUser, out o_lcCmds, i_saQryContainKeys);
|
|
}
|
|
}
|
|
}
|