1. 加新work user:
2. 用 broswer 開warehouse mobile
Warehouse management > Work > Work Process
3. Menu Setting
Menu Items :
4. Extension on menu item to create new layoyt:
PO Receive Demo:
[WHSWorkExecuteMode(WHSWorkExecuteMode::DEMO_POReceive)]
class DEMO_WHSWorkExecuteDisplayPOReceive extends WHSWorkExecuteDisplay
{
#DEMO_WHSRF_Extension
int qty;
/*
boolean addedMessage;
//boolean confirmation = true;
container displayForm(container _con, str _buttonClicked = '')
{
container ret = connull();
container con = _con;
int hasError = 0;
int hasInfo = 0;
pass = WHSRFPassthrough::create(conPeek(_con, #PassthroughInfo));
hasError = this.hasError(_con);
// Remove the error message in the next step
if (hasError)
{
con = conDel(con, #ControlsStart, 1);
}
hasInfo = this.DEMO_hasInformation(_con);
// Remove the info message in the next step
if (hasInfo)
{
con = conDel(con, #ControlsStart, 1);
}
// Return button
if (_buttonClicked == #RFReturn)
{
if (step == DEMO_WHSPOReceiveStep::SelectItemId)
{
step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;
pass.remove(#DEMO_InventJournalId);
pass.remove(#ItemId);
}
else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)
{
step = DEMO_WHSPOReceiveStep::SelectItemId;
pass.remove(#ItemId);
pass.remove(#SerialId);
}
else if (step == DEMO_WHSPOReceiveStep::InquireSN)
{
// When return back from inquire, clear all stored data
container conData = conPeek(con, 4);
conData = conPoke(conData, #data, "");
con = conPoke(con, 4, conData);
if (pass.exists(#InventTransRecId))
{
pass.remove(#SerialId);
step = DEMO_WHSPOReceiveStep::ScanSerialNum;
}
else
{
pass.remove(#ItemId);
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
}
//Changed by 9158 at 1415 on 20190114 - begin
else if (step == DEMO_WHSPOReceiveStep::Confirmation)
{
pass.remove(#ItemId);
//confirmation = false;
pass.remove(#confirmation);
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
//Changed by 9158 at 1415 on 20190114 - end
else
{
throw Error ("Invalid step.");
}
}
// Inquire mode
if (_buttonClicked == #RFInquireSN)
{
step = DEMO_WHSPOReceiveStep::InquireSN;
}
switch (step)
{
case DEMO_WHSPOReceiveStep::SelectItemArrivalJour:
ret = this.getItemArrivalJourStep(ret);
break;
case DEMO_WHSPOReceiveStep::SelectItemId:
if (!pass.exists(#DEMO_InventJournalId))
{
if (strLRTrim(conPeek(conPeek(con, 4), #data)) != "")
{
pass.insert(#DEMO_InventJournalId, conPeek(conPeek(con, 4), #data));
}
else
{
step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;
}
}
else
{
if (strLRTrim(conPeek(conPeek(con, 4), #data)) != "")
{
pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));
}
}
/*
if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
{
WMSJournalTrans wMSJournalTrans;
InventTransOrigin inventTransOrigin;
InventTrans inventTrans;
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
// Suggest the line by item ID
select firstonly wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.ItemId == itemId
join inventTransOrigin
where inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId
join inventTrans
where inventTrans.inventTransOrigin == inventTransOrigin.RecId
&& (inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
if (wMSJournalTrans)
{
ret = this.inventTransSplit(wMSJournalTrans, ret);
}
else
{
pass.remove(#ItemId);
ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
}
}
if (step == DEMO_WHSPOReceiveStep::SelectItemId)
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)
{
ret = this.getItemArrivalJourStep(ret);
}
//Changed by 9158 at 1415 on 20190114 - begin
else if (step == DEMO_WHSPOReceiveStep::Confirmation)
{
ret = this.getConfirmationStep(ret, pass.lookupStr(#DEMO_InventJournalId), #itemId);
}
break;
*/
if (!pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)
{
ret = this.getItemArrivalJourStep(ret);
}
else if (!pass.exists(#Confirmation))
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId) && pass.exists(#Confirmation))
{
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
ret = this.getConfirmationStep(ret, pass.lookupStr(#DEMO_InventJournalId), itemId);
}
//Changed by 9158 at 1415 on 20190114 - end
break;
case DEMO_WHSPOReceiveStep::ScanSerialNum:
pass.insert(#SerialId, conPeek(conPeek(con, 4), #data));
ret = this.inventTransUpdate(pass.lookupInt64(#InventTransRecId), pass.lookupStr(#SerialId), ret);
// Return to select item
step = DEMO_WHSPOReceiveStep::SelectItemId;
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
break;
//Changed by 9158 at 1415 on 20190114 - begin
case DEMO_WHSPOReceiveStep::Confirmation:
//pass.insert(#DEMO_InventJournalId, conPeek(conPeek(con, 4), #data));
// pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));
if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
{
WMSJournalTrans wMSJournalTrans;
InventTransOrigin inventTransOrigin;
InventTrans inventTrans;
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
// Suggest the line by item ID
select firstonly wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.ItemId == itemId
join inventTransOrigin
where inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId
join inventTrans
where inventTrans.inventTransOrigin == inventTransOrigin.RecId
&& (inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
if (wMSJournalTrans)
{
ret = this.inventTransSplit(wMSJournalTrans, ret);
}
else
{
pass.remove(#ItemId);
//ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
}
if (step == DEMO_WHSPOReceiveStep::SelectItemId)
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)
{
ret = this.getItemArrivalJourStep(ret);
}
break;
//Changed by 9158 at 1415 on 20190114 - end
case DEMO_WHSPOReceiveStep::InquireSN:
if (!pass.exists(#ItemId))
{
pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));
}
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
str SNInfo = this.getSerialNumberInfo(itemId);
ret += [this.buildControl(#RFLabel, #SNInfoHeader, 'Scanned serial number', 1, SNInfo, #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
ret += [this.buildControl(#RFLabel, #SNInfo, SNInfo, 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
break;
default:
break;
}
ret = this.updateModeStepPass(ret, WHSWorkExecuteMode::DEMO_POReceive, step, pass);
return ret;
}
protected str getSerialNumberInfo(ItemId _itemId)
{
str ret;
WMSJournalTrans wMSJournalTrans;
InventTransOrigin inventTransOrig;
InventTrans inventTrans;
InventDim inventDim;
int i;
while select wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.itemId == _itemId
join inventTransOrig
where inventTransOrig.InventTransId == wMSJournalTrans.inventTransId
join inventTrans
where inventTrans.InventTransOrigin == inventTransOrig.RecId
&& inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScanEnded
join inventDim
group by InventSerialId
where inventDim.inventDimId == inventTrans.inventDimId
&& inventDim.InventSerialId != ""
{
i++;
if (!ret)
{
ret = strFmt("%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);
}
else
{
ret += strFmt("\n%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);
}
}
return ret;
}
protected container getInventSerialIdStep(container _ret)
{
_ret = this.buildGetInventSerialId(_ret);
return _ret;
}
protected container buildGetInventSerialId(container _con)
{
container ret = _con;
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::ScanSerialNum), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFText, #SerialId, "Serial number", 1, '', extendedTypeNum(InventSerialId), '', 0)];
ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
return ret;
}
protected container getItemIdStep(container _ret, WMSJournalId _journalId)
{
_ret = this.buildGetItemIdList(_ret, _journalId);
pass.insert(#Confirmation, 'Confirmation');
return _ret;
}
protected container buildGetItemIdList(container _con, WMSJournalId _journalId)
{
container ret = _con;
str elements;
elements = this.buildItemIdList(_journalId);
if (pass.exists(#WorkComplete))
{
if (!addedMessage)
{
ret = this.addErrorLabel(ret, strFmt("The arrival journal '%1' is completed.", pass.lookupStr(#DEMO_InventJournalId)), WHSRFColorText::Success);
}
pass.remove(#WorkComplete);
pass.remove(#DEMO_InventJournalId);
step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;
}
else
{
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::SelectItemId), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFCombobox, #ItemId, "@SYS330532", 1, elements, #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
return ret;
}
protected str buildItemIdList(WMSJournalId _journalId)
{
WMSJournalTrans wMSJournalTrans;
InventTransOrigin inventTransOrigin;
InventTrans inventTrans;
InventDim inventDim;
boolean first = true;
boolean hasLine;
str elements;
while select wMSJournalTrans
where wMSJournalTrans.journalId == _journalId
{
select sum(Qty) from inventTrans
where inventTrans.StatusReceipt == StatusReceipt::Ordered
&& (inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan)
join inventDim
where inventDim.inventDimId == inventTrans.inventDimId
join inventTransOrigin
where inventTransOrigin.RecId == inventTrans.InventTransOrigin
&& inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId;
if (first)
{
first = false;
}
else
{
elements += '||';
}
//Changed by 9158 at 1415 on 20190114 - begin
//Original
//elements += strFmt("%1 %2 %3\nQTY %4 of %5", wMSJournalTrans.itemId, #InfoSeparator, InventTable::find(wMSJournalTrans.itemId).defaultProductName(), wMSJournalTrans.qty - inventTrans.qty, wMSJournalTrans.qty);
elements += strFmt("%1 %2 %3\nQTY %4 of %5", wMSJournalTrans.itemId, #InfoSeparator, InventTable::find(wMSJournalTrans.itemId).NameAlias, real2int(wMSJournalTrans.qty - inventTrans.qty), real2int(wMSJournalTrans.qty));
//Changed by 9158 at 1415 on 20190114 - end
if (inventTrans.qty > 0)
{
hasLine = true;
}
}
if (!hasLine)
{
pass.insert(#WorkComplete, "@SYS17748");
}
return elements;
}
// Added by 9158 -- begin
protected container getConfirmationStep(container _ret, WMSJournalId _journalId, ItemId _itemID)
{
_ret = this.buildGetConfirmationList(_ret, _journalId, _itemID);
return _ret;
}
protected container buildGetConfirmationList(container _con, WMSJournalId _journalId, ItemId _itemID)
{
container ret = _con;
str elements;
elements = this.buildConfirmationList(_journalId, _itemID);
{
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::Confirmation), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFLabel, #ItemId, elements, 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
step = DEMO_WHSPOReceiveStep::Confirmation;
}
return ret;
}
protected str buildConfirmationList(WMSJournalId _journalId, ItemId _itemID)
{
WMSJournalTrans wMSJournalTrans;
InventTransOrigin inventTransOrigin;
InventTrans inventTrans;
InventDim inventDim;
boolean first = true;
boolean hasLine;
str elements;
str productName;
str fullProductName;
Select wMSJournalTrans
where wMSJournalTrans.journalId == _journalId
&& wMSJournalTrans.itemId == _itemID;
{
select sum(Qty) from inventTrans
where inventTrans.StatusReceipt == StatusReceipt::Ordered
&& (inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| inventTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan)
join inventDim
where inventDim.inventDimId == inventTrans.inventDimId
join inventTransOrigin
where inventTransOrigin.RecId == inventTrans.InventTransOrigin
&& inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId;
if (first)
{
first = false;
}
else
{
elements += '||';
}
/*
productName = InventTable::find(wMSJournalTrans.itemId).defaultProductName();
if (strLen(productName) > 20)
{
productName = subStr(productName, 0, 20) + '\n' + subStr(productName, 21, 20)+ '\n' + subStr(productName, 41, 20);
}
*/
elements += strFmt("%1 \n%2\nQTY %3 of %4", wMSJournalTrans.itemId, InventTable::find(wMSJournalTrans.itemId).defaultProductName(), real2int(wMSJournalTrans.qty - inventTrans.qty), real2int(wMSJournalTrans.qty));
if (inventTrans.qty > 0)
{
hasLine = true;
}
}
return elements;
}
// Added by 9158 -- end
protected container inventTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)
{
int startInfologLine;
InventTransOrigin inventTransOrigin;
InventDim inventDim;
InventTable inventTable;
InventNumGroup inventNumGroup;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
InventTrans inventTransCopy, inventTransNew;
try
{
ttsbegin;
startInfologLine = infologLine() + 1;
select firstonly forupdate inventTransCopy
where inventTransCopy.Qty > 0
&& inventTransCopy.StatusReceipt == StatusReceipt::Ordered
&& (inventTransCopy.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| inventTransCopy.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan)
join inventTransOrigin
where inventTransOrigin.RecId == inventTransCopy.InventTransOrigin
&& inventTransOrigin.InventTransId == _wMSJournalTrans.InventTransId
join inventDim
where inventDim.inventDimId == inventTransCopy.inventDimId;
if (inventTransCopy.Qty > 1)
{
inventTransCopy.updateSplit(1, 0, true);
}
// Update the serial number
inventTransNew = inventTransCopy;
inventTransNew.selectForUpdate(true);
inventTable = InventTable::find(inventTransNew.ItemId);
ecoResTrackingDimensionGroup = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());
if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
{
if (inventTable.SerialNumGroupId)
{
inventNumGroup = InventNumGroup::find(inventTable.SerialNumGroupId);
if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)
{
inventTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNAuto;
inventDim = inventTransNew.inventDim();
inventDim.inventSerialId = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));
if (inventDim.inventSerialId)
{
InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);
}
else
{
throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));
}
inventDim = InventDim::findOrCreate(inventDim);
inventTransNew.inventDimId = inventDim.inventDimId;
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
else
{
inventTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScan;
step = DEMO_WHSPOReceiveStep::ScanSerialNum;
pass.insert(#InventTransRecId, inventTransNew.RecId);
}
}
else
{
throw error(strFmt("Serial number group has not been setup in item '%1'.", inventTransNew.ItemId));
}
}
else
{
inventTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::NotRequire;
step = DEMO_WHSPOReceiveStep::SelectItemId;
_con = this.addErrorLabel(_con, strFmt("Serial number is not required.", inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
}
inventTransNew.update();
if (inventTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto)
{
_con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
}
ttscommit;
}
catch
{
error ("Failed to assigne serial number.");
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
}
return _con;
}
protected container inventTransUpdate(RecId _inventTransRecId, InventSerialId _inventSerialId, container _con)
{
InventDim inventDim;
int startInfologLine;
try
{
ttsbegin;
startInfologLine = infologLine() + 1;
InventTrans inventTrans = InventTrans::findRecId(_inventTransRecId, true);
inventDim = inventTrans.inventDim();
inventDim.inventSerialId = _inventSerialId;
InventSerial::findOrCreate(inventDim.inventSerialId, inventTrans.ItemId);
inventTrans.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
inventTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;
inventTrans.update();
ttscommit;
pass.remove(#InventTransRecId);
pass.remove(#SerialId);
_con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
}
catch
{
error (strFmt("Failed to assigne serial number '%1'.", _inventSerialId));
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
addedMessage = true;
}
return _con;
}
protected container getItemArrivalJourStep(container _ret)
{
_ret = this.buildGetItemArrivalJourList(_ret);
step = DEMO_WHSPOReceiveStep::SelectItemId;
return _ret;
}
protected container buildGetItemArrivalJourList(container _con)
{
container ret = _con;
str elements;
elements = this.buildItemArrivalJourList(true);
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::SelectItemArrivalJour), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFCombobox, #DEMO_InventJournalId, DEMO_WHSFieldInventJournalId::getDisplayName(), 1, elements, #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
return ret;
}
protected str buildItemArrivalJourList(boolean _showBlank)
{
WMSJournalTable wMSJournalTable;
boolean first = true;
str elements;
if (_showBlank)
{
first = false;
}
while select wMSJournalTable
where wMSJournalTable.JournalType == WMSJournalType::Reception
&& wMSJournalTable.posted == NoYes::No
{
if (first)
{
first = false;
}
else
{
elements += '||';
}
elements += wMSJournalTable.journalId;
}
return elements;
}
*/boolean addedMessage;
protected container getItemIdStep(container _ret, WMSJournalId _journalId)
{
_ret = this.buildGetItemIdList(_ret, _journalId);
//step = DEMO_WHSPOReceiveStep::SelectItemId;
return _ret;
}
protected container buildGetItemIdList(container _con, WMSJournalId _journalId)
{
container ret = _con;
container IdList;
str elements;
IdList = this.buildItemIdList(_journalId);
if (pass.exists(#WorkComplete))
{
WMSJournalTable wmsJournalTable;
update_recordset wmsJournalTable setting DEMO_WHSWorkCompleted = NoYes::Yes
where wmsJournalTable.journalId == _journalId;
if (!addedMessage)
{
ret = this.addErrorLabel(ret, strFmt("The arrival journal '%1' is completed.", pass.lookupStr(#DEMO_InventJournalId)), WHSRFColorText::Success);
}
pass.remove(#WorkComplete);
pass.remove(#DEMO_InventJournalId);
// return back to main page
//ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;
}
else
{
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::SelectItemId), 1, '', #WHSRFUndefinedDataType, '', 0)];
//ret += this.buildItemIdList(_journalId);
ret += IdList;
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
return ret;
}
private container buildItemIdList(WMSJournalId _journalId)
{
WMSJournalTrans wMSJournalTrans;
boolean hasLine;
container ret;
str elements, scannedStr;
Qty availQty;
while select wMSJournalTrans
group by ItemId
where wMSJournalTrans.journalId == _journalId
{
InventTable inventTable = InventTable::find(wMSJournalTrans.itemId);
[scannedStr, availQty] = this.getScannedQtyCon(wMSJournalTrans.itemId, _journalId);
elements = strFmt("%1 %2 %3\nEAN: %4\n%5", wMSJournalTrans.itemId, #InfoSeparator , inventTable.NameAlias, inventTable.DEMO_EANCode, scannedStr);
ret += [this.buildControl(#RFButton, wMSJournalTrans.itemId, wMSJournalTrans.itemId, 1, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];
// ret += [this.buildControl(#RFButton, #RFPrintBN, strFmt("Print BN - %1", wMSJournalTrans.itemId), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFLabel, wMSJournalTrans.itemId , elements, 0, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];
if (availQty > 0)
{
hasLine = true;
}
}
if (!hasLine)
{
pass.insert(#WorkComplete, "@SYS17748");
}
return ret;
}
private container getItemArrivalJour(container _ret)
{
if (!WHSParameters::find().DEMO_DefaultPrinterName)
{
error ("Default printer has not been setup.");
_ret = this.addErrorLabelFromInfolog(_ret, infologLine() + 1, WHSRFColorText::Error);
}
_ret = this.buildGetItemArrivalJour(_ret);
step = DEMO_WHSPOReceiveStep::SelectItemId;
return _ret;
}
container buildGetItemArrivalJour(container _con)
{
container ret = _con;
//ret += [this.buildControl(#RFLabel, #Scan, 'Scan a Journal', 1, '', #WHSRFUndefinedDataType, '', 0)];
ret = this.buildItemArrivalJourList(ret);
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS50163", 1, '', #WHSRFUndefinedDataType, '', 0)];
return ret;
}
private container buildItemArrivalJourList(container _con)
{
WMSJournalTable wMSJournalTable;
container ret = _con;
ret += [this.buildControl(#RFLabel, #Scan, 'Select a Journal', 1, '', #WHSRFUndefinedDataType, '', 0)];
while select wMSJournalTable order by wMSJournalTable.journalId desc
where wMSJournalTable.JournalType == WMSJournalType::Reception
&& wMSJournalTable.posted == NoYes::No
&& wMSJournalTable.DEMO_WHSWorkCompleted == NoYes::No
{
ret += [this.buildControl(#RFButton, wMSJournalTable.journalId , wMSJournalTable.journalId, 1, '', #WHSRFUndefinedDatatype, '', 1)];
ret += [this.buildControl(#RFLabel, wMSJournalTable.journalId , '', 0, '', #WHSRFUndefinedDataType, '', 0)];
}
return ret;
}
container displayForm(container _con, str _buttonClicked = '')
{
container ret = connull();
container con = _con;
int hasError = 0;
int hasInfo = 0;
str btnclick = _buttonClicked;
pass = WHSRFPassthrough::create(conPeek(_con, #PassthroughInfo));
hasError = this.hasError(_con);
// Remove the error message in the next step
if (hasError)
{
con = conDel(con, #ControlsStart, 1);
}
hasInfo = this.DEMO_hasInformation(_con);
// Remove the info message in the next step
if (hasInfo)
{
con = conDel(con, #ControlsStart, 1);
}
// Return button
if (_buttonClicked == #RFReturn)
{
if (step == DEMO_WHSPOReceiveStep::SelectItemId)
{
step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;
pass.remove(#DEMO_InventJournalId);
pass.remove(#ItemId);
}
else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)
{
step = DEMO_WHSPOReceiveStep::SelectItemId;
pass.remove(#ItemId);
pass.remove(#SerialId);
}
else if (step == DEMO_WHSPOReceiveStep::InquireSN)
{
// When return back from inquire, clear all stored data
container conData = conPeek(con, 4);
conData = conPoke(conData, #data, "");
con = conPoke(con, 4, conData);
if (pass.exists(#WMSJournalRecId))
{
pass.remove(#SerialId);
step = DEMO_WHSPOReceiveStep::ScanSerialNum;
}
else
{
pass.remove(#ItemId);
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
}
}
// Print SN
//Added by 9158 on 20190418 -- begin
if (_buttonClicked == #RFPrintSN)
{
ret = this.printSN(ret);
}
//Added by 9158 on 20190418 -- end
// Print BN
//Added by 9158 on 20190418 -- begin
//if (_buttonClicked == #RFPrintBN)
//{
// // itemId
// pass.remove(#ItemId);
// for(int i = 0; i < conlen(con); i++)
// {
// str tmp = conPeek(conPeek(con, i), 3);
// if(match(strFmt("<%1",tmp),"Print BN"))
// {
// pass.insert(#ItemId, strDel(tmp,1,11));
// }
// }
// if(pass.exists(#ItemId))
// {
// ItemId _itemId = pass.lookupStr(#ItemId);
// ret = this.printBN(ret, _itemId);
// }
//}
//Added by 9158 on 20190418 -- end
/*
if (_buttonClicked == #RFPrintSN)
{
if (pass.exists(#DEMO_InventJournalId))
{
//Modified by 9158 on 20190417 for printing barcode -- begin
/*
InventJournalId curJournalId = pass.lookupStr(#DEMO_InventJournalId);
WMSJournalTable WMSJournalTable = WMSJournalTable::find(curJournalId);
#define.ReportName('WMSJournalTrans.Report')
WMSJournalTransController WMSJournalTransController = new WMSJournalTransController();
Args args = new Args();
args.record(WMSJournalTable);
args.menuItemType(MenuItemType::Output);
args.menuItemName(menuItemOutputStr(WMSJournalTrans));
WMSJournalTransController.parmReportName(#ReportName);
WMSJournalTransController.parmArgs(args);
WMSJournalTransController.parmShowDialog(false);
WMSJournalTransController.parmLoadFromSysLastValue(false);
WMSJournalTransController.DEMO_doPrePromptModifyContract();
// Set printer
SRSPrintDestinationSettings printerSettings = WMSJournalTransController.parmReportContract().parmPrintSettings();
printerSettings.printMediumType(SRSPrintMediumType::Printer);
printerSettings.printerName(WHSParameters::find().DEMO_DefaultPrinterName);
WMSJournalTransController.runOperation();
*/
/*
str finalStr = "^XA\n ^FX Left section\n ^CFA,30\n ^FO50,50^FDSKU^F \n ^CFA,40\n ^FO50,100^FD%THK001%^FS \n ^BY3,2,100\n ^FO50,170^BC^FD%1111111111%^FS\n ^CFA,50\n ^FO50,350^FD%THK001%^FS\n" +
"^FX Right section\n ^CFA,40\n ^FO450,100^FD%5%^FS ^CFA,20\n ^FO500,200^FD%2%^FS\n ^FO500,250^FD%PACK%^FS\n ^FO500,350^FD%04/17/2019%^FS\n ^XZ";
WhsDocumentRouting::printLabelToPrinter(WHSParameters::find().DEMO_DefaultPrinterName, finalStr);
*/
InventJournalId curJournalId = pass.lookupStr(#DEMO_InventJournalId);
WMSJournalTable WMSJournalTable = WMSJournalTable::find(curJournalId);
WMSJournalTrans wMSJournalTrans;
#define.ReportName('Print barcode')
DEMO_ZPLDocumentPrint zplPrint = new DEMO_ZPLDocumentPrint();
DEMO_ZPLDocumentLabel zplLabel;
;
//zplPrint.initMenuFields();
while select wMSJournalTrans
where wMSJournalTrans.JournalId==WMSJournalTable.JournalId
{
zplLabel.ItemId = wMSJournalTrans.itemId;
zplLabel.Barcode = '111111';
zplLabel.ItemName = 'Test';
zplLabel.Price =1;
zplLabel.PackQty =1;
zplLabel.Location ='TEST';
zplLabel.PrintDate =Today();
zplLabel.insert();
}
while select zplLabel
{
zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName,"1",zplLabel);
}
//Modified by 9158 on 20190417 for printing barcode -- end
ret = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);
addedMessage = true;
}
}
*/
switch (step)
{
case DEMO_WHSPOReceiveStep::SelectItemArrivalJour:
ret = this.getItemArrivalJour(ret);
break;
case DEMO_WHSPOReceiveStep::SelectItemId:
if (!pass.exists(#DEMO_InventJournalId))
{
for(int i = 0; i < conlen(con); i++)
{
if(conPeek(conPeek(con, i), 3) == _buttonClicked)
{
pass.insert(#DEMO_InventJournalId,_buttonClicked);
}
}
}
else
{
// itemId
for(int i = 0; i < conlen(con); i++)
{
if(conPeek(conPeek(con, i), 3) == _buttonClicked)
{
pass.insert(#ItemId, _buttonClicked);
}
}
}
if(!pass.exists(#DEMO_InventJournalId))
{
step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;
}
if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
{
// direct go to do somethings (getConfirmationStep)
WMSJournalTrans wMSJournalTrans;
InventTable inventTable;
InventNumGroup inventNumGroup;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
// Suggest the line by item ID
select firstonly wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.ItemId == itemId
&& (wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
//Added by 9158 on 20190228 -- begin
inventTable = InventTable::find(wMSJournalTrans.ItemId);
ecoResTrackingDimensionGroup = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());
if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
{
if (inventTable.SerialNumGroupId)
{
inventNumGroup = InventNumGroup::find(inventTable.SerialNumGroupId);
if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)
{
wMSJournalTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNAuto;
}
else
{
wMSJournalTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScan;
}
}
}
else
{
wMSJournalTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::NotRequire;
}
//Added by 9158 on 20190228 -- end
if (wMSJournalTrans)
{
//Changed by 9158 on 20190222 -- begin
if (wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto)
{
qty = real2int(wMSJournalTrans.Qty);
while(qty>0)
{
ret = this.wmsJournalTransSplit(wMSJournalTrans, ret);
qty--;
}
}
else
{
ret = this.wmsJournalTransSplit(wMSJournalTrans, ret);
}
//Changed by 9158 on 20190222 -- end
//WMSJournalTrans wmsJournalTransCheck;
//select firstonly RecId from wmsJournalTransCheck
// where wmsJournalTransCheck.journalId == wMSJournalTrans.journalId
// && wmsJournalTransCheck.itemId == wMSJournalTrans.itemId
// && (wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
// || wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
//if (!wmsJournalTransCheck)
//{
// _con = this.printSN(_con, wMSJournalTrans.itemId);
//}
// updated by Joanne changed from print SN to print BN
WMSJournalTrans wmsJournalTransCheck;
select firstonly RecId from wmsJournalTransCheck
where wmsJournalTransCheck.journalId == wMSJournalTrans.journalId
&& wmsJournalTransCheck.itemId == wMSJournalTrans.itemId
//&& (wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::NotRequire
//|| wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireBNScan);
;
if (wmsJournalTransCheck)
{
if(InventTable::find(wMSJournalTrans.ItemId).DGS_BigLabel)
{
// don't print if it is biglabel
ret += [this.buildControl(#RFLabel, #RFError, "Dont print big label item.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
}
else
{
// print label
_con = this.printBN(_con, wMSJournalTrans.itemId, wMSJournalTrans.journalId);
ret += [this.buildControl(#RFLabel, #RFError, "print label.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
}
}
else
{
ret += [this.buildControl(#RFLabel, #RFError, "No print records found.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
}
}
else
{
pass.remove(#ItemId);
//ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
//ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
}
if (step == DEMO_WHSPOReceiveStep::SelectItemId)
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
/*
if (!pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
*/
if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)
{
ret = this.getItemArrivalJour(ret);
}
break;
case DEMO_WHSPOReceiveStep::ScanSerialNum:
pass.insert(#SerialId, conPeek(conPeek(con, 4), #data));
if (pass.lookupStr(#SerialId))
{
ret = this.wmsJournalTransUpdate(pass.lookupInt64(#WMSJournalRecId), pass.lookupStr(#DEMO_InventJournalId), pass.lookupStr(#SerialId), ret);
}
//Added by 9158 on 20190314 -Stay in scan page while still have Qty- begin
// Return to select item
//step = DEMO_WHSPOReceiveStep::SelectItemId;
//ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
{
// direct go to do somethings (getConfirmationStep)
WMSJournalTrans wMSJournalTrans;
InventTable inventTable;
InventNumGroup inventNumGroup;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
// Suggest the line by item ID
select firstonly wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.ItemId == itemId
&& (wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
inventTable = InventTable::find(wMSJournalTrans.ItemId);
if (wMSJournalTrans)
{
ret = this.wmsJournalTransSplit(wMSJournalTrans, ret);
}
else
{
pass.remove(#ItemId);
//ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
//ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
}
if (step == DEMO_WHSPOReceiveStep::SelectItemId)
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
//Added by 9158 on 20190314 -Stay in scan page while still have Qty- end
//Added by 9158 on 20190301 -- begin
if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)
{
ret = this.getItemArrivalJour(ret);
}
//Added by 9158 on 20190301 -- end
break;
case DEMO_WHSPOReceiveStep::InquireSN:
if (!pass.exists(#ItemId))
{
pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));
}
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
str SNInfo = this.getSerialNumberInfo(itemId);
ret += [this.buildControl(#RFLabel, #SNInfoHeader, 'Scanned serial number', 1, SNInfo, #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
ret += [this.buildControl(#RFLabel, #SNInfo, SNInfo, 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
break;
default:
break;
}
ret = this.updateModeStepPass(ret, WHSWorkExecuteMode::DEMO_POReceive, step, pass);
return ret;
}
protected str getSerialNumberInfo(ItemId _itemId)
{
str ret;
WMSJournalTrans wMSJournalTrans;
InventDim inventDim;
int i;
while select wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.itemId == _itemId
&& wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScanEnded
join inventDim
group by InventSerialId
where inventDim.inventDimId == wMSJournalTrans.inventDimId
&& inventDim.InventSerialId != ""
{
i++;
if (!ret)
{
ret = strFmt("%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);
}
else
{
ret += strFmt("\n%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);
}
}
return ret;
}
protected container printSN(container _con, ItemId _itemId = "")
{
container ret = _con;
if (pass.exists(#DEMO_InventJournalId))
{
InventJournalId curJournalId = pass.lookupStr(#DEMO_InventJournalId);
WMSJournalTable WMSJournalTable = WMSJournalTable::find(curJournalId);
WMSJournalTrans wMSJournalTrans;
DEMO_ZPLDocumentPrint zplPrint = new DEMO_ZPLDocumentPrint();
DEMO_ZPLDocumentLabel zplLabel;
int i;
InventDim inventDim;
InventTable inventTable
;
//zplPrint.initMenuFields();
while select wMSJournalTrans
where wMSJournalTrans.JournalId == WMSJournalTable.JournalId
&& (_itemId == "" || wMSJournalTrans.itemId == _itemId)
join inventDim
where inventDim.inventDimId == wMSJournalTrans.inventDimId
&& inventDim.inventSerialId
{
//Qty journalTransQty = wMSJournalTrans.qty;
//for (i = 1; i <= journalTransQty; i++)
//{
zplLabel.ItemId = wMSJournalTrans.itemId;
zplLabel.Barcode = inventDim.inventSerialId;
zplLabel.ItemName = InventTable::find(wMSJournalTrans.ItemId).itemName();
zplLabel.Price =1;
zplLabel.PackQty =2;
zplLabel.Location =inventDim.wMSLocationId;
zplLabel.PrintDate =Today();
zplLabel.insert();
zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName,"1",zplLabel);
//}
}
//Modified by 9158 on 20190417 for printing barcode -- end
ret = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);
addedMessage = true;
if (_itemId == "")
{
step = DEMO_WHSSNInquireStep::SelectItemId;
}
}
return ret;
}
protected container wmsJournalTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)
{
int startInfologLine;
InventDim inventDim, inventDim_Update;
InventTable inventTable;
InventNumGroup inventNumGroup;
InventBatch inventBatch;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
WMSJournalTrans wMSJournalTransNew;
WMSJournalTable wMSJournalTable;
InventBatchExpDate expDate;
try
{
ttsbegin;
startInfologLine = infologLine() + 1;
if (_wMSJournalTrans.Qty > 1)
{
if (_wMSJournalTrans.DEMO_WHSPOReceiveStatus != DEMO_WHSPOReceiveStatus::NotRequire)
{
_wMSJournalTrans.selectForUpdate(true);
_wMSJournalTrans.qty -= 1;
_wMSJournalTrans.update();
buf2Buf(_wMSJournalTrans, wMSJournalTransNew);
wMSJournalTransNew.lineNum = 0;
wMSJournalTransNew.qty = 1;
wMSJournalTransNew.insert();
}
else
{
wMSJournalTransNew = _wMSJournalTrans;
}
}
else
{
wMSJournalTransNew = _wMSJournalTrans;
}
wMSJournalTransNew.selectForUpdate(true);
inventTable = InventTable::find(wMSJournalTransNew.ItemId);
ecoResTrackingDimensionGroup = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());
if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
{
if (inventTable.SerialNumGroupId)
{
inventNumGroup = InventNumGroup::find(inventTable.SerialNumGroupId);
if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)
{
wMSJournalTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNAuto;
inventDim = wMSJournalTransNew.inventDim();
inventDim.inventSerialId = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));
if (inventDim.inventSerialId)
{
InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);
}
else
{
throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));
}
inventDim = InventDim::findOrCreate(inventDim);
if (!inventDim.inventBatchId)
{
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if (expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
{
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
}
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
inventDim.inventBatchId = wMSJournalTable.inventTransRefId;
}
wMSJournalTransNew.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
else
{
wMSJournalTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScan;
inventDim = wMSJournalTransNew.inventDim();
if(!inventDim.inventBatchId)
{
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
inventDim.inventBatchId = wMSJournalTable.inventTransRefId;
wMSJournalTransNew.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
}
step = DEMO_WHSPOReceiveStep::ScanSerialNum;
pass.insert(#WMSJournalRecId, wMSJournalTransNew.RecId);
}
}
else
{
throw error(strFmt("Serial number group has not been setup in item '%1'.", wMSJournalTransNew.ItemId));
}
wMSJournalTransNew.update();
}
else
{
wMSJournalTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::NotRequire;
inventDim = wMSJournalTransNew.inventDim();
if (!inventDim.inventBatchId)
{
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
inventDim.inventBatchId = wMSJournalTable.inventTransRefId;
wMSJournalTransNew.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
}
step = DEMO_WHSPOReceiveStep::SelectItemId;
wMSJournalTransNew.update();
_con = this.addErrorLabel(_con, strFmt("%1. Serial number is not required.", conPeek(this.getScannedQtyCon(wMSJournalTransNew.itemId, wMSJournalTransNew.journalId), 1)), WHSRFColorText::Success);
addedMessage = true;
}
if (wMSJournalTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto && qty == 1)
{
_con = this.addErrorLabel(_con, strFmt("%1. Serial number assigned.", conPeek(this.getScannedQtyCon(wMSJournalTransNew.itemId, wMSJournalTransNew.journalId), 1)), WHSRFColorText::Success);
addedMessage = true;
}
ttscommit;
}
catch
{
error ("Failed to assigne serial number.");
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
}
return _con;
}
/* remove by 7899
protected container inventTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)
{
int startInfologLine;
InventTransOrigin inventTransOrigin;
InventDim inventDim, inventDim_Update;
InventTable inventTable;
InventNumGroup inventNumGroup;
InventBatch inventBatch;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
InventTrans inventTransCopy, inventTransNew;
WMSJournalTrans wMSJournalTrans;
WMSJournalTable wMSJournalTable;
InventBatchExpDate expDate;
try
{
ttsbegin;
startInfologLine = infologLine() + 1;
select firstonly forupdate inventTransCopy
where inventTransCopy.Qty > 0
&& inventTransCopy.StatusReceipt == StatusReceipt::Ordered
&& (inventTransCopy.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| inventTransCopy.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan)
join inventTransOrigin
where inventTransOrigin.RecId == inventTransCopy.InventTransOrigin
&& inventTransOrigin.InventTransId == _wMSJournalTrans.InventTransId
join inventDim
where inventDim.inventDimId == inventTransCopy.inventDimId;
select wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.ItemId == inventTransCopy.itemId;
select wMSJournalTable
where wMSJournalTable.journalId == wMSJournalTrans.journalId;
//Changed by 9158 on 20190228 -- begin
if (inventTransCopy.Qty > 1)
{
if(inventTransCompare.DEMO_WHSPOReceiveStatus!=DEMO_WHSPOReceiveStatus::NotRequire)
{
inventTransCopy.updateSplit(1, 0, true);
}
/* else
{
inventTransCopy.updateSplit(inventTransCopy.Qty, 0, true);
}
*/ }
//Changed by 9158 on 20190228 -- end
// Update the serial number
inventTransNew = inventTransCopy;
inventTransNew.selectForUpdate(true);
inventTable = InventTable::find(inventTransNew.ItemId);
ecoResTrackingDimensionGroup = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());
if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
{
if (inventTable.SerialNumGroupId)
{
inventNumGroup = InventNumGroup::find(inventTable.SerialNumGroupId);
if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)
{
inventTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNAuto;
inventDim = inventTransNew.inventDim();
inventDim.inventSerialId = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));
if (inventDim.inventSerialId)
{
InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);
}
else
{
throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));
}
inventDim = InventDim::findOrCreate(inventDim);
//Changed by 9158 on 20190313 -- begin
if(!inventDim.inventBatchId)
{
InventDim inventDimNew = inventTransNew.inventDim();
//Added by 9158 on 20190322 -Update location & License Plate & expDate- begin
select inventDim_Update
where inventDim_Update.inventDimId == _wMSJournalTrans.inventDimId;
inventDimNew.wMSLocationId = inventDim_Update.wMSLocationId;
inventDimNew.LicensePlateId = inventDim_Update.LicensePlateId;
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
//Added by 9158 on 20190322 -Update location & License Plate & expDate- end
inventDimNew.inventBatchId = wMSJournalTable.inventTransRefId;
inventTransNew.inventDimId = InventDim::findOrCreate(inventDimNew).inventDimId;
}
//Changed by 9158 on 20190313 -- end
inventTransNew.inventDimId = inventDim.inventDimId;
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
else
{
inventTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScan;
//Changed by 9158 on 20190313 -- begin
if(!inventDim.inventBatchId)
{
InventDim inventDimNew = inventTransNew.inventDim();
//Added by 9158 on 20190322 -Update location & License Plate & expDate- begin
select inventDim_Update
where inventDim_Update.inventDimId == _wMSJournalTrans.inventDimId;
inventDimNew.wMSLocationId = inventDim_Update.wMSLocationId;
inventDimNew.LicensePlateId = inventDim_Update.LicensePlateId;
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
//Added by 9158 on 20190322 -Update location & License Plate & expDate- end
inventDimNew.inventBatchId = wMSJournalTable.inventTransRefId;
inventTransNew.inventDimId = InventDim::findOrCreate(inventDimNew).inventDimId;
}
//Changed by 9158 on 20190313 -- end
step = DEMO_WHSPOReceiveStep::ScanSerialNum;
pass.insert(#InventTransRecId, inventTransNew.RecId);
}
}
else
{
throw error(strFmt("Serial number group has not been setup in item '%1'.", inventTransNew.ItemId));
}
}
else
{
inventTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::NotRequire;
//Changed by 9158 on 20190313 -- begin
if(!inventDim.inventBatchId)
{
InventDim inventDimNew = inventTransNew.inventDim();
//Added by 9158 on 20190322 -Update location & License Plate & expDate- begin
select inventDim_Update
where inventDim_Update.inventDimId == _wMSJournalTrans.inventDimId;
inventDimNew.wMSLocationId = inventDim_Update.wMSLocationId;
inventDimNew.LicensePlateId = inventDim_Update.LicensePlateId;
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
//Added by 9158 on 20190322 -Update location & License Plate & expDate- end
inventDimNew.inventBatchId = wMSJournalTable.inventTransRefId;
inventTransNew.inventDimId = InventDim::findOrCreate(inventDimNew).inventDimId;
}
//Changed by 9158 on 20190313 -- end
step = DEMO_WHSPOReceiveStep::SelectItemId;
//Modified by 9158 on 20190222 -- begin
_con = this.addErrorLabel(_con, strFmt("Serial number is not required.", inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
//Modified by 9158 on 20190222 -- end
}
inventTransNew.update();
//Modified by 9158 on 20190222 -- begin
if (inventTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto && qty==1)
{
_con = this.addErrorLabel(_con, strFmt("Serial number assigned."), WHSRFColorText::Success);
addedMessage = true;
}
ttscommit;
//Modified by 9158 on 20190222 -- end
}
catch
{
error ("Failed to assigne serial number.");
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
}
return _con;
}
protected container inventTransUpdate(RecId _inventTransRecId, InventSerialId _inventSerialId, container _con)
{
InventTransOrigin inventTransOrigin_checkSerialNo;
InventTrans inventTrans_checkSerialNo;
InventDim inventDim, inventDim_checkSerialNo;
int startInfologLine;
boolean invalid;
try
{
InventTrans inventTrans = InventTrans::findRecId(_inventTransRecId, true);
if (inventTrans.Qty > 0)
{
select sum(Qty) from inventTrans_checkSerialNo
where (inventTrans_checkSerialNo.Qty >=0
||
(inventTrans_checkSerialNo.Qty <0 && (inventTrans_checkSerialNo.StatusIssue == StatusIssue::Deducted ||
inventTrans_checkSerialNo.StatusIssue == StatusIssue::Picked)
)
)
join inventDim_checkSerialNo
where inventDim_checkSerialNo.inventSerialId == _inventSerialId
&& inventDim_checkSerialNo.inventDimId == inventTrans_checkSerialNo.inventDimId
join inventTransOrigin_checkSerialNo
where inventTransOrigin_checkSerialNo.RecId == inventTrans_checkSerialNo.InventTransOrigin
&& inventTransOrigin_checkSerialNo.ReferenceCategory == InventTransType::Purch;
if (inventTrans_checkSerialNo.Qty > 0)
{
invalid = true;
}
}
if (invalid)
{
error (strFmt("Serial number '%1' already exists.", _inventSerialId));
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
addedMessage = true;
}
else
{
ttsbegin;
startInfologLine = infologLine() + 1;
inventDim = inventTrans.inventDim();
inventDim.inventSerialId = _inventSerialId;
InventSerial::findOrCreate(inventDim.inventSerialId, inventTrans.ItemId);
inventTrans.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
inventTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;
inventTrans.update();
ttscommit;
pass.remove(#InventTransRecId);
pass.remove(#SerialId);
_con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
}
}
catch
{
error (strFmt("Failed to assigne serial number '%1'.", _inventSerialId));
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
addedMessage = true;
}
return _con;
}
*/
protected container wmsJournalTransUpdate(RecId _wmsJournalTransRecId, InventJournalId _journalId, InventSerialId _inventSerialId, container _con)
{
WMSJournalTrans wmsJournalTrans, wmsJournalTrans_checkSerialNo;
WMSJournalTable wmsJournalTable_checkSerialNo;
InventDim inventDim, inventDim_checkSerialNo;
InventTrans inventTrans_checkSerialNo;
InventTransOrigin inventTransOrigin_checkSerialNo;
int startInfologLine;
boolean invalid;
try
{
select firstonly forupdate wmsJournalTrans
where wmsJournalTrans.journalId == _journalId
&& wmsJournalTrans.RecId == _wmsJournalTransRecId;
if (wmsJournalTrans.Qty > 0)
{
// Posted qty with same serial number
select sum(Qty) from inventTrans_checkSerialNo
where (inventTrans_checkSerialNo.Qty >=0
||
(inventTrans_checkSerialNo.Qty <0 && (inventTrans_checkSerialNo.StatusIssue == StatusIssue::Deducted ||
inventTrans_checkSerialNo.StatusIssue == StatusIssue::Picked)
)
)
join inventDim_checkSerialNo
where inventDim_checkSerialNo.inventSerialId == _inventSerialId
&& inventDim_checkSerialNo.inventDimId == inventTrans_checkSerialNo.inventDimId
join inventTransOrigin_checkSerialNo
where inventTransOrigin_checkSerialNo.RecId == inventTrans_checkSerialNo.InventTransOrigin
&& inventTransOrigin_checkSerialNo.ReferenceCategory == InventTransType::Purch;
// non-posted qty with same serial number
select sum(Qty) from wmsJournalTrans_checkSerialNo
where wmsJournalTrans_checkSerialNo.journalId == wmsJournalTrans.journalId
&& wmsJournalTrans_checkSerialNo.itemId == wmsJournalTrans.itemId
join inventDim_checkSerialNo
where inventDim_checkSerialNo.inventSerialId == _inventSerialId
&& inventDim_checkSerialNo.inventDimId == wmsJournalTrans_checkSerialNo.inventDimId;
if (inventTrans_checkSerialNo.Qty + wmsJournalTrans_checkSerialNo.qty > 0)
{
invalid = true;
}
}
if (invalid)
{
error (strFmt("Serial number '%1' already exists.", _inventSerialId));
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
addedMessage = true;
}
else
{
ttsbegin;
startInfologLine = infologLine() + 1;
inventDim = wmsJournalTrans.inventDim();
inventDim.inventSerialId = _inventSerialId;
InventSerial::findOrCreate(inventDim.inventSerialId, wmsJournalTrans.ItemId);
wmsJournalTrans.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
wmsJournalTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;
wmsJournalTrans.update();
ttscommit;
pass.remove(#WMSJournalRecId);
pass.remove(#SerialId);
_con = this.addErrorLabel(_con, strFmt("%1. Serial number '%2' assigned.", conPeek(this.getScannedQtyCon(wmsJournalTrans.itemId, wmsJournalTrans.journalId), 1), inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
WMSJournalTrans wmsJournalTransCheck;
select firstonly RecId from wmsJournalTransCheck
where wmsJournalTransCheck.journalId == wmsJournalTrans.journalId
&& wmsJournalTransCheck.itemId == wmsJournalTrans.itemId
&& (wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
if (!wmsJournalTransCheck)
{
_con = this.printSN(_con, wmsJournalTrans.itemId);
}
}
}
catch
{
error (strFmt("Failed to assigne serial number '%1'.", _inventSerialId));
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
addedMessage = true;
}
return _con;
}
protected container getInventSerialIdStep(container _ret)
{
_ret = this.buildGetInventSerialId(_ret);
return _ret;
}
protected container buildGetInventSerialId(container _con)
{
container ret = _con;
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::ScanSerialNum), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFText, #SerialId, "Serial number", 1, '', extendedTypeNum(InventSerialId), '', 0)];
ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
return ret;
}
protected container getScannedQtyCon(ItemId _itemId, InventJournalId _journalId)
{
WMSJournalTrans wMSJournalTransAvail, wMSJournalTransSum;
select sum(Qty) from wMSJournalTransSum
where wMSJournalTransSum.journalId == _journalId
&& wMSJournalTransSum.itemId == _itemId;
select sum(Qty) from wMSJournalTransAvail
where wMSJournalTransAvail.journalId == _journalId
&& wMSJournalTransAvail.itemId == _itemId
&& (wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
return [strFmt("QTY %1 of %2", real2int(wMSJournalTransSum.qty - wMSJournalTransAvail.qty), real2int(wMSJournalTransSum.qty)), wMSJournalTransAvail.Qty];
}
// Added Print BN , joanne, 20200528
protected container printBN(container _con, ItemId _itemId, InventJournalId curJournalId)
{
container ret = _con;
//if (pass.exists(#DEMO_InventJournalId))
//{
// InventJournalId curJournalId = pass.lookupStr(#DEMO_InventJournalId);
WMSJournalTable WMSJournalTable = WMSJournalTable::find(curJournalId);
WMSJournalTrans wMSJournalTrans;
DEMO_ZPLDocumentPrint zplPrint = new DEMO_ZPLDocumentPrint();
DEMO_ZPLDocumentLabel zplLabel;
int i;
InventDim inventDim;
InventTable inventTable;
WHSLayoutId layoutId;
WHSParameters wHSParameters = WHSParameters::find();
;
//zplPrint.initMenuFields();
while select wMSJournalTrans
where wMSJournalTrans.JournalId == WMSJournalTable.JournalId
&& (_itemId == "" || wMSJournalTrans.itemId == _itemId)
join inventDim
where inventDim.inventDimId == wMSJournalTrans.inventDimId
&& inventDim.inventBatchId
{
Qty journalTransQty = wMSJournalTrans.qty;
for (i = 1; i <= journalTransQty; i++)
{
zplLabel.ItemId = wMSJournalTrans.itemId;
zplLabel.Barcode = inventDim.inventBatchId;
zplLabel.ItemName = InventTable::find(wMSJournalTrans.ItemId).itemName();
zplLabel.Price =1;
zplLabel.PackQty =2;
zplLabel.Location =inventDim.wMSLocationId;
zplLabel.PrintDate =Today();
zplLabel.insert();
if(wHSParameters.DEMO_POBatchLayoutId)
layoutId = wHSParameters.DEMO_POBatchLayoutId;
else
layoutId = "1";
zplPrint.printDocument(wHSParameters.DEMO_DefaultPrinterName,layoutId,zplLabel);
}
}
//Modified by 9158 on 20190417 for printing barcode -- end
ret = this.addErrorLabel(_con, strFmt("BN (item:%2) is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName, _itemId), WHSRFColorText::Success);
addedMessage = true;
//}
return ret;
}
// Added Print BN , joanne, 20200528 -end
}
//------------------------------------
Print Serial Number Demo:
[WHSWorkExecuteMode(WHSWorkExecuteMode::DEMO_SNInquire)]
class DEMO_WHSWorkExecuteDisplaySNInquire extends WHSWorkExecuteDisplay
{
#DEMO_WHSRF_Extension
int qty;
boolean addedMessage;
protected container getDeleteSNStep(container _ret)
{
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
str elements = this.getSerialNumberInfo(itemId, true);
_ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSSNInquireStep::DeleteSN), 1, '', #WHSRFUndefinedDataType, '', 0)];
_ret += [this.buildControl(#RFCombobox, #SerialId, "@SYS477", 1, elements, #WHSRFUndefinedDataType, '', 0)];
_ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
_ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
_ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
return _ret;
}
protected container getAddSNStep(container _ret)
{
// direct go to do somethings (getConfirmationStep)
WMSJournalTrans wMSJournalTrans;
InventTable inventTable;
InventNumGroup inventNumGroup;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
// Suggest the line by item ID
select firstonly wMSJournalTrans
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.ItemId == itemId
&& (wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
inventTable = InventTable::find(itemId);
ecoResTrackingDimensionGroup = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());
if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
{
if (inventTable.SerialNumGroupId)
{
inventNumGroup = InventNumGroup::find(inventTable.SerialNumGroupId);
if (!(inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1))
{
wMSJournalTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScan;
}
}
}
if (wMSJournalTrans)
{
if (wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan)
{
_ret = this.wmsJournalTransSplit(wMSJournalTrans, _ret);
}
else
{
_ret += [this.buildControl(#RFLabel, #RFError, "It is not necessary to scan SN.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
_ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
}
}
else
{
_ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
_ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
}
return _ret;
}
protected container getItemIdStep(container _ret, WMSJournalId _journalId)
{
_ret = this.buildGetItemIdList(_ret, _journalId);
return _ret;
}
protected container buildGetItemIdList(container _con, WMSJournalId _journalId)
{
container ret = _con;
container IdList;
str elements;
IdList = this.buildItemIdList(_journalId);
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSSNInquireStep::SelectItemId), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += IdList;
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
//Added by 9158 on 20190418 -- begin
//ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];
//step = DEMO_WHSSNInquireStep::SelectItemId;
//Added by 9158 on 20190418 -- end
return ret;
}
private container buildItemIdList(WMSJournalId _journalId)
{
WMSJournalTrans wMSJournalTrans, wMSJournalTransAvail, wMSJournalTransSum;
InventDim inventDim;
container ret;
str elements;
while select wMSJournalTrans
group by ItemId
where wMSJournalTrans.journalId == _journalId
{
select sum(Qty) from wMSJournalTransSum
where wMSJournalTransSum.journalId == _journalId
&& wMSJournalTransSum.itemId == wMSJournalTrans.itemId;
select sum(Qty) from wMSJournalTransAvail
where wMSJournalTransAvail.journalId == _journalId
&& wMSJournalTransAvail.itemId == wMSJournalTrans.itemId
&& (wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
|| wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);
InventTable inventTable = InventTable::find(wMSJournalTrans.itemId);
elements = strFmt("%1 %2 %3\nEAN: %4\nQTY %5 of %6", wMSJournalTrans.itemId, #InfoSeparator , inventTable.NameAlias, inventTable.DEMO_EANCode, real2int(wMSJournalTransSum.qty - wMSJournalTransAvail.qty), real2int(wMSJournalTransSum.qty));
ret += [this.buildControl(#RFButton, wMSJournalTrans.itemId, wMSJournalTrans.itemId, 1, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];
ret += [this.buildControl(#RFLabel, wMSJournalTrans.itemId , elements, 0, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];
}
return ret;
}
protected container getSNInquireStep(container _ret)
{
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
str SNInfo = this.getSerialNumberInfo(itemId);
_ret += [this.buildControl(#RFLabel, #SNInfoHeader, 'Scanned serial number', 1, SNInfo, #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
_ret += [this.buildControl(#RFLabel, #SNInfo, SNInfo, 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
_ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
_ret += [this.buildControl(#RFButton, "RFAdd", "@SYS2318", 1, '', #WHSRFUndefinedDataType, '', 0)];
_ret += [this.buildControl(#RFButton, "RFDelete", "@SYS10308", 1, '', #WHSRFUndefinedDataType, '', 0)];
//Added by 9158 on 20190426 -- begin
_ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];
_ret += [this.buildControl(#RFButton, #RFPrintBN, "Print BN", 1, '', #WHSRFUndefinedDataType, '', 0)];
//Added by 9158 on 20190426 -- end
_ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
return _ret;
}
private container getItemArrivalJourStep(container _ret)
{
_ret = this.buildGetItemArrivalJour(_ret);
step = DEMO_WHSSNInquireStep::SelectItemId;
return _ret;
}
container buildGetItemArrivalJour(container _con)
{
container ret = _con;
ret = this.buildItemArrivalJourList(ret);
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS50163", 1, '', #WHSRFUndefinedDataType, '', 0)];
return ret;
}
private container buildItemArrivalJourList(container _con)
{
WMSJournalTable wMSJournalTable;
container ret = _con;
ret += [this.buildControl(#RFLabel, #Scan, 'Scan a Journal', 1, '', #WHSRFUndefinedDataType, '', 0)];
while select wMSJournalTable order by wMSJournalTable.journalId desc
where wMSJournalTable.JournalType == WMSJournalType::Reception
&& wMSJournalTable.posted == NoYes::No
{
ret += [this.buildControl(#RFButton, wMSJournalTable.journalId , wMSJournalTable.journalId, 1, '', #WHSRFUndefinedDatatype, '', 1)];
ret += [this.buildControl(#RFLabel, wMSJournalTable.journalId , '', 0, '', #WHSRFUndefinedDataType, '', 0)];
}
return ret;
}
container displayForm(container _con, str _buttonClicked = '')
{
container ret = connull();
container con = _con;
int hasError = 0;
int hasInfo = 0;
str btnclick = _buttonClicked;
pass = WHSRFPassthrough::create(conPeek(_con, #PassthroughInfo));
hasError = this.hasError(_con);
// Remove the error message in the next step
if (hasError)
{
con = conDel(con, #ControlsStart, 1);
}
hasInfo = this.DEMO_hasInformation(_con);
// Remove the info message in the next step
if (hasInfo)
{
con = conDel(con, #ControlsStart, 1);
}
// Return button
if (_buttonClicked == #RFReturn)
{
if (step == DEMO_WHSSNInquireStep::SelectItemId)
{
step = DEMO_WHSSNInquireStep::SelectItemArrivalJour;
pass.remove(#DEMO_InventJournalId);
pass.remove(#ItemId);
}
else if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
{
step = DEMO_WHSSNInquireStep::InquireSN;
pass.remove(#SerialId);
pass.remove(#WMSJournalRecId);
}
else if (step == DEMO_WHSSNInquireStep::InquireSN)
{
// When return back from inquire, clear all stored data
container conData = conPeek(con, 4);
conData = conPoke(conData, #data, "");
con = conPoke(con, 4, conData);
if (pass.exists(#WMSJournalRecId))
{
pass.remove(#SerialId);
step = DEMO_WHSSNInquireStep::ScanSerialNum;
}
else
{
pass.remove(#ItemId);
step = DEMO_WHSSNInquireStep::SelectItemId;
}
}
else if (step == DEMO_WHSSNInquireStep::AddSN)
{
step = DEMO_WHSSNInquireStep::InquireSN;
pass.remove(#SerialId);
pass.remove(#WMSJournalRecId);
}
else if (step == DEMO_WHSSNInquireStep::DeleteSN)
{
step = DEMO_WHSSNInquireStep::InquireSN;
pass.remove(#SerialIdDel);
pass.remove(#WMSJournalRecId);
}
}
else if (_buttonClicked == "RFAdd")
{
step = DEMO_WHSSNInquireStep::AddSN;
}
else if (_buttonClicked == "RFDelete")
{
step = DEMO_WHSSNInquireStep::DeleteSN;
}
//Added by 9158 on 20190418 -- begin
if (_buttonClicked == #RFPrintSN)
{
if (pass.exists(#DEMO_InventJournalId))
{
InventJournalId curJournalId = pass.lookupStr(#DEMO_InventJournalId);
WMSJournalTable WMSJournalTable = WMSJournalTable::find(curJournalId);
WMSJournalTrans wMSJournalTrans;
DEMO_ZPLDocumentPrint zplPrint = new DEMO_ZPLDocumentPrint();
DEMO_ZPLDocumentLabel zplLabel;
int i;
InventDim inventDim;
InventTable inventTable;
WHSLayoutId layoutId;
EcoResTrackingDimensionGroupItem ecoResTrackingDimensionGroupItem;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
EcoResTrackingDimensionGroupFldSetup ecoResTrackingDimensionGroupFldSetup;
boolean batchEnabled;
boolean serialEnabled;
str fieldName;
//Added on 20191022 by 9158 - begin
WHSParameters wHSParameters = WHSParameters::find();
//Added on 20191022 by 9158 - end
;
//zplPrint.initMenuFields();
while select wMSJournalTrans
where wMSJournalTrans.JournalId == WMSJournalTable.JournalId
join inventDim
where inventDim.inventDimId == wMSJournalTrans.inventDimId
&& inventDim.inventSerialId
{
select ecoResTrackingDimensionGroupItem
where ecoResTrackingDimensionGroupItem.ItemId == wMSJournalTrans.itemId
join ecoResTrackingDimensionGroup
where ecoResTrackingDimensionGroup.recId == ecoResTrackingDimensionGroupItem.TrackingDimensionGroup;
while select ecoResTrackingDimensionGroupFldSetup
where ecoResTrackingDimensionGroupFldSetup.TrackingDimensionGroup == ecoResTrackingDimensionGroup.recId
{
fieldName = ecoResTrackingDimensionGroupFldSetup.fieldName();
if(fieldName == 'Serial number' && ecoResTrackingDimensionGroupFldSetup.IsActive==NoYes::Yes)
{
serialEnabled = true;
}
else if(fieldName == 'Batch number' && ecoResTrackingDimensionGroupFldSetup.IsActive==NoYes::Yes)
{
batchEnabled = true;
}
}
if(serialEnabled == true)
{
//Added by 9158 on 20191022 -- begin
//Original
//layoutId = "PO SN";
layoutId = wHSParameters.DEMO_POSNLayoutId;
//Added by 9158 on 20191022 -- end
}
else if(batchEnabled == true)
{
//Added by 9158 on 20191022 -- begin
//Original
//layoutId = "PO Batch";
// Added by Joanne on 20200304 - begin -add big label
if(InventTable::find(wMSJournalTrans.ItemId).DGS_BigLabel)
{
layoutId = wHSParameters.DEMO_POBigLabelLayoutId;
}
else
{
layoutId = wHSParameters.DEMO_POBatchLayoutId;
}
//Added by 9158 on 20191022 -- end
}
zplLabel.ItemId = wMSJournalTrans.itemId;
zplLabel.Barcode = inventDim.inventSerialId;
zplLabel.ItemName = InventTable::find(wMSJournalTrans.ItemId).itemName();
zplLabel.Price = 0;
zplLabel.PackQty = 0;
zplLabel.Location = inventDim.wMSLocationId;
zplLabel.PrintDate = DatetimeUtil::date(today());
//Added on 20190429 by 9158 for MOD066 -- begin
zplLabel.ProNum = wMSJournalTrans.InventTable().DEMO_ShortCode;
zplLabel.InventBatchId = inventDim.InventBatchId;
zplLabel.InventSerialId = inventDim.InventSerialId;
//Added on 20190429 by 9158 for MOD066 -- end
zplLabel.insert();
zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName, layoutId,zplLabel);
//}
}
_con = conNull();
//Modified by 9158 on 20190417 for printing barcode -- end
ret = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);
addedMessage = true;
step = DEMO_WHSSNInquireStep::SelectItemId;
}
}
//Added by 9158 on 20190418 -- end
if (_buttonClicked == #RFPrintBN)
{
if (pass.exists(#DEMO_InventJournalId))
{
InventJournalId curJournalId = pass.lookupStr(#DEMO_InventJournalId);
WMSJournalTable WMSJournalTable = WMSJournalTable::find(curJournalId);
WMSJournalTrans wMSJournalTrans;
DEMO_ZPLDocumentPrint zplPrint = new DEMO_ZPLDocumentPrint();
DEMO_ZPLDocumentLabel zplLabel;
int i;
InventDim inventDim;
InventTable inventTable;
WHSLayoutId layoutId;
EcoResTrackingDimensionGroupItem ecoResTrackingDimensionGroupItem;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
EcoResTrackingDimensionGroupFldSetup ecoResTrackingDimensionGroupFldSetup;
boolean batchEnabled;
boolean serialEnabled;
str fieldName;
//Added on 20191022 by 9158 - begin
WHSParameters wHSParameters = WHSParameters::find();
//Added on 20191022 by 9158 - end
;
//zplPrint.initMenuFields();
while select wMSJournalTrans
where wMSJournalTrans.JournalId == WMSJournalTable.JournalId
join inventDim
where inventDim.inventDimId == wMSJournalTrans.inventDimId
&& inventDim.inventBatchId
{
select ecoResTrackingDimensionGroupItem
where ecoResTrackingDimensionGroupItem.ItemId == wMSJournalTrans.itemId
join ecoResTrackingDimensionGroup
where ecoResTrackingDimensionGroup.recId == ecoResTrackingDimensionGroupItem.TrackingDimensionGroup;
while select ecoResTrackingDimensionGroupFldSetup
where ecoResTrackingDimensionGroupFldSetup.TrackingDimensionGroup == ecoResTrackingDimensionGroup.recId
{
fieldName = ecoResTrackingDimensionGroupFldSetup.fieldName();
if(fieldName == 'Batch number' && ecoResTrackingDimensionGroupFldSetup.IsActive==NoYes::Yes)
{
batchEnabled = true;
}
}
if(batchEnabled == true)
{
//Added by 9158 on 20191022 -- begin
//Original
//layoutId = "PO Batch";
// Added by Joanne on 20200304 - begin -add big label
if(InventTable::find(wMSJournalTrans.ItemId).DGS_BigLabel)
{
layoutId = wHSParameters.DEMO_POBigLabelLayoutId;
}
else
{
layoutId = wHSParameters.DEMO_POBatchLayoutId;
}
//Added by 9158 on 20191022 -- end
}
Qty journalTransQty = wMSJournalTrans.qty;
for (i = 1; i <= journalTransQty; i++)
{
zplLabel.ItemId = wMSJournalTrans.itemId;
zplLabel.Barcode = inventDim.InventBatchId;
zplLabel.ItemName = InventTable::find(wMSJournalTrans.ItemId).itemName();
zplLabel.Price = 0;
zplLabel.PackQty = 0;
zplLabel.Location = inventDim.wMSLocationId;
zplLabel.PrintDate = DatetimeUtil::date(today());
//Added on 20190429 by 9158 for MOD066 -- begin
zplLabel.ProNum = wMSJournalTrans.InventTable().DEMO_ShortCode;
zplLabel.InventBatchId = inventDim.InventBatchId;
//Added on 20190429 by 9158 for MOD066 -- end
zplLabel.insert();
zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName, layoutId,zplLabel);
}
}
_con = conNull();
//Modified by 9158 on 20190417 for printing barcode -- end
ret = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);
addedMessage = true;
step = DEMO_WHSSNInquireStep::SelectItemId;
}
}
switch (step)
{
case DEMO_WHSSNInquireStep::SelectItemArrivalJour:
ret = this.getItemArrivalJourStep(ret);
break;
case DEMO_WHSSNInquireStep::SelectItemId:
if (!pass.exists(#DEMO_InventJournalId))
{
for(int i = 0; i < conlen(con); i++)
{
if(conPeek(conPeek(con, i), 3) == _buttonClicked)
{
pass.insert(#DEMO_InventJournalId,_buttonClicked);
}
}
}
else
{
// itemId
for(int i = 0; i < conlen(con); i++)
{
if(conPeek(conPeek(con, i), 3) == _buttonClicked)
{
pass.insert(#ItemId, _buttonClicked);
}
}
}
if (!pass.exists(#DEMO_InventJournalId))
{
step = DEMO_WHSSNInquireStep::SelectItemArrivalJour;
}
if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
{
step = DEMO_WHSSNInquireStep::InquireSN;
}
if (step == DEMO_WHSSNInquireStep::SelectItemId)
{
ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
}
else if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
if (step == DEMO_WHSSNInquireStep::SelectItemArrivalJour)
{
ret = this.getItemArrivalJourStep(ret);
}
if (step == DEMO_WHSSNInquireStep::InquireSN)
{
ret = this.getSNInquireStep(ret);
}
break;
case DEMO_WHSSNInquireStep::ScanSerialNum:
if (conPeek(conPeek(con, 4), #data))
{
pass.insert(#SerialId, conPeek(conPeek(con, 4), #data));
}
if (pass.exists(#SerialId))
{
ret = this.wmsJournalTransUpdate(pass.lookupInt64(#WMSJournalRecId), pass.lookupStr(#DEMO_InventJournalId), pass.lookupStr(#SerialId), ret);
}
if (step == DEMO_WHSSNInquireStep::InquireSN)
{
ret = this.getSNInquireStep(ret);
}
else if (step == DEMO_WHSSNInquireStep::selectItemId)
{
ret = this.getItemIdStep(ret, pass.lookupstr(#DEMO_InventJournalId));
}
else if (step == DEMO_WHSSNInquireStep::scanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
if (step == DEMO_WHSSNInquireStep::selectItemArrivalJour)
{
ret = this.getItemArrivalJourStep(ret);
}
if (step == DEMO_WHSSNInquireStep::AddSN)
{
ret = this.getAddSNStep(ret);
if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
}
break;
case DEMO_WHSSNInquireStep::InquireSN:
ret = this.getSNInquireStep(ret);
break;
case DEMO_WHSSNInquireStep::AddSN:
ret = this.getAddSNStep(ret);
if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
{
ret = this.getInventSerialIdStep(ret);
}
break;
case DEMO_WHSSNInquireStep::DeleteSN:
if (!pass.exists(#SerialIdDel))
{
if (strLRTrim(conPeek(conPeek(con, 4), #data)) != "")
{
//Changed on 20191018 by 9158 - begin
//Original
//InventSerialId serialIdDel = conPeek(conPeek(con, 4), #data);
str serialIdDel = conPeek(conPeek(con, 4), #data);
//Changed on 20191018 by 9158 - end
serialIdDel = strLRTrim(conPeek(str2con(serialIdDel, #InfoSeparator, false), 2));
//Added on 20191018 by 9158 - begin
//Original
serialIdDel = subStr(serialIdDel,1,20);
//Added on 20191018 by 9158 - end
pass.insert(#SerialIdDel, serialIdDel);
}
}
if (pass.exists(#SerialIdDel))
{
str itemIdStr = pass.lookupStr(#ItemId);
container tempCon = str2con(itemIdStr, #InfoSeparator, false);
ItemId itemId = strLRTrim(conPeek(tempCon, 1));
ret = this.deleteSN(ret, pass.lookupStr(#DEMO_InventJournalId), itemId, pass.lookupStr(#SerialIdDel));
pass.remove(#SerialIdDel);
}
ret = this.getDeleteSNStep(ret);
break;
default:
break;
}
ret = this.updateModeStepPass(ret, WHSWorkExecuteMode::DEMO_SNInquire, step, pass);
return ret;
}
protected container deleteSN(container _ret, InventJournalId _journalId, ItemId _itemId, InventSerialId _serialId)
{
WMSJournalTrans wMSJournalTrans;
InventDim inventDim;
int i;
ttsbegin;
select firstOnly forupdate wMSJournalTrans
where wMSJournalTrans.journalId == _journalId
&& wMSJournalTrans.itemId == _itemId
&& wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScanEnded
join inventDim
where inventDim.inventDimId == wMSJournalTrans.inventDimId
&& inventDim.InventSerialId == _serialId;
if (wMSJournalTrans && inventDim)
{
inventDim.inventSerialId = "";
wMSJournalTrans.inventDimId = inventDim::findOrCreate(inventDim).inventDimId;
wMSJournalTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScan;
wMSJournalTrans.doUpdate();
InventSerial inventSerial;
delete_from inventSerial
where inventSerial.InventSerialId == _serialId
&& inventSerial.ItemId == _itemId;
_ret = this.addErrorLabel(_ret, strFmt("Serial number '%1' is deleted.", _serialId), WHSRFColorText::Success);
addedMessage = true;
}
ttscommit;
return _ret;
}
protected str getSerialNumberInfo(ItemId _itemId, boolean _lookup = false)
{
str ret;
WMSJournalTrans wMSJournalTrans;
InventDim inventDim;
int i;
if (_lookup)
{
ret = " ";
}
while select wMSJournalTrans
order by CreatedDateTime DESC
where wMSJournalTrans.journalId == pass.lookupStr(#DEMO_InventJournalId)
&& wMSJournalTrans.itemId == _itemId
&& (!_lookup || wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScanEnded)
join inventDim
where inventDim.inventDimId == wMSJournalTrans.inventDimId
&& inventDim.InventSerialId != ""
{
i++;
if (!ret)
{
ret = strFmt("%1 %2 %3", wMSJournalTrans.DEMO_WHSPOReceiveStatus, #InfoSeparator, inventDim.InventSerialId);
}
else
{
if (_lookup)
{
ret += strFmt("||%1 %2 %3", wMSJournalTrans.DEMO_WHSPOReceiveStatus, #InfoSeparator, inventDim.InventSerialId);
}
else
{
ret += strFmt("\n%1 %2 %3", wMSJournalTrans.DEMO_WHSPOReceiveStatus, #InfoSeparator, inventDim.InventSerialId);
}
}
}
return ret;
}
protected container wmsJournalTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)
{
int startInfologLine;
InventDim inventDim, inventDim_Update;
InventTable inventTable;
InventNumGroup inventNumGroup;
InventBatch inventBatch;
EcoResTrackingDimensionGroup ecoResTrackingDimensionGroup;
WMSJournalTrans wMSJournalTransNew;
WMSJournalTable wMSJournalTable;
InventBatchExpDate expDate;
try
{
ttsbegin;
startInfologLine = infologLine() + 1;
if (_wMSJournalTrans.Qty > 1)
{
if (_wMSJournalTrans.DEMO_WHSPOReceiveStatus != DEMO_WHSPOReceiveStatus::NotRequire)
{
_wMSJournalTrans.selectForUpdate(true);
_wMSJournalTrans.qty -= 1;
_wMSJournalTrans.update();
buf2Buf(_wMSJournalTrans, wMSJournalTransNew);
wMSJournalTransNew.lineNum = 0;
wMSJournalTransNew.qty = 1;
wMSJournalTransNew.insert();
}
}
else
{
wMSJournalTransNew = _wMSJournalTrans;
}
wMSJournalTransNew.selectForUpdate(true);
inventTable = InventTable::find(wMSJournalTransNew.ItemId);
ecoResTrackingDimensionGroup = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());
if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
{
if (inventTable.SerialNumGroupId)
{
inventNumGroup = InventNumGroup::find(inventTable.SerialNumGroupId);
if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)
{
wMSJournalTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNAuto;
inventDim = wMSJournalTransNew.inventDim();
inventDim.inventSerialId = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));
if (inventDim.inventSerialId)
{
InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);
}
else
{
throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));
}
inventDim = InventDim::findOrCreate(inventDim);
if (!inventDim.inventBatchId)
{
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if (expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
{
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
}
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
inventDim.inventBatchId = wMSJournalTable.inventTransRefId;
wMSJournalTransNew.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
}
step = DEMO_WHSPOReceiveStep::SelectItemId;
}
else
{
wMSJournalTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScan;
inventDim = wMSJournalTransNew.inventDim();
if(!inventDim.inventBatchId)
{
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
inventDim.inventBatchId = wMSJournalTable.inventTransRefId;
wMSJournalTransNew.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
}
step = DEMO_WHSPOReceiveStep::ScanSerialNum;
pass.insert(#WMSJournalRecId, wMSJournalTransNew.RecId);
}
}
else
{
throw error(strFmt("Serial number group has not been setup in item '%1'.", wMSJournalTransNew.ItemId));
}
}
else
{
wMSJournalTransNew.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::NotRequire;
inventDim = wMSJournalTransNew.inventDim();
if (!inventDim.inventBatchId)
{
expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
inventDim.inventBatchId = wMSJournalTable.inventTransRefId;
wMSJournalTransNew.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
}
step = DEMO_WHSPOReceiveStep::SelectItemId;
_con = this.addErrorLabel(_con, strFmt("Serial number is not required.", inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
}
wMSJournalTransNew.update();
if (wMSJournalTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto && qty == 1)
{
_con = this.addErrorLabel(_con, strFmt("Serial number assigned."), WHSRFColorText::Success);
addedMessage = true;
}
ttscommit;
}
catch
{
error ("Failed to assigne serial number.");
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
}
return _con;
}
protected container wmsJournalTransUpdate(RecId _wmsJournalTransRecId, InventJournalId _journalId, InventSerialId _inventSerialId, container _con)
{
WMSJournalTrans wmsJournalTrans, wmsJournalTrans_checkSerialNo;
WMSJournalTable wmsJournalTable_checkSerialNo;
InventTransOrigin inventTransOrigin_checkSerialNo;
InventTrans inventTrans_checkSerialNo;
InventDim inventDim, inventDim_checkSerialNo;
int startInfologLine;
boolean invalid;
try
{
select firstonly forupdate wmsJournalTrans
where wmsJournalTrans.journalId == _journalId
&& wmsJournalTrans.RecId == _wmsJournalTransRecId;
if (wmsJournalTrans.Qty > 0)
{
// Posted qty with same serial number
select sum(Qty) from inventTrans_checkSerialNo
where (inventTrans_checkSerialNo.Qty >=0
||
(inventTrans_checkSerialNo.Qty <0 && (inventTrans_checkSerialNo.StatusIssue == StatusIssue::Deducted ||
inventTrans_checkSerialNo.StatusIssue == StatusIssue::Picked)
)
)
join inventDim_checkSerialNo
where inventDim_checkSerialNo.inventSerialId == _inventSerialId
&& inventDim_checkSerialNo.inventDimId == inventTrans_checkSerialNo.inventDimId
join inventTransOrigin_checkSerialNo
where inventTransOrigin_checkSerialNo.RecId == inventTrans_checkSerialNo.InventTransOrigin
&& inventTransOrigin_checkSerialNo.ReferenceCategory == InventTransType::Purch;
// non-posted qty with same serial number
select sum(Qty) from wmsJournalTrans_checkSerialNo
where wmsJournalTrans_checkSerialNo.journalId == wmsJournalTrans.journalId
&& wmsJournalTrans_checkSerialNo.itemId == wmsJournalTrans.itemId
join inventDim_checkSerialNo
where inventDim_checkSerialNo.inventSerialId == _inventSerialId
&& inventDim_checkSerialNo.inventDimId == wmsJournalTrans_checkSerialNo.inventDimId;
if (inventTrans_checkSerialNo.Qty + wmsJournalTrans_checkSerialNo.qty > 0)
{
invalid = true;
}
}
if (invalid)
{
error (strFmt("Serial number '%1' already exists.", _inventSerialId));
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
addedMessage = true;
}
else
{
ttsbegin;
startInfologLine = infologLine() + 1;
inventDim = wmsJournalTrans.inventDim();
inventDim.inventSerialId = _inventSerialId;
InventSerial::findOrCreate(inventDim.inventSerialId, wmsJournalTrans.ItemId);
wmsJournalTrans.inventDimId = InventDim::findOrCreate(inventDim).inventDimId;
wmsJournalTrans.DEMO_WHSPOReceiveStatus = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;
wmsJournalTrans.update();
ttscommit;
pass.remove(#WMSJournalRecId);
pass.remove(#SerialId);
_con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);
addedMessage = true;
step = DEMO_WHSSNInquireStep::AddSN;
}
}
catch
{
error (strFmt("Failed to assign serial number '%1'.", _inventSerialId));
_con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
addedMessage = true;
}
return _con;
}
protected container getInventSerialIdStep(container _ret)
{
_ret = this.buildGetInventSerialId(_ret);
return _ret;
}
protected container buildGetInventSerialId(container _con)
{
container ret = _con;
ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSSNInquireStep::ScanSerialNum), 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFText, #SerialId, "Serial number", 1, '', extendedTypeNum(InventSerialId), '', 0)];
ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
return ret;
}
}
//------------------------