Class
SAN_PickingQtyOrder
{
public static
void DoPickQtyForOrderLine(SalesLine _SalesLine, Qty _qtyPicked)
{
InventTransWMS_Pick inventTransWMS_Pick;
TmpInventTransWMS tmpInventTransWMS;
InventDim
inventDim;
InventTrans
inventTrans;
Query
query;
inventTrans = SAN_PickingQtyOrder::locateSalesLineAndInventTrans(_SalesLine.SalesId,
_SalesLine.LineNum);
if(inventTrans)
{
query = SAN_PickingQtyOrder::initInventTransQuery(_SalesLine);
inventTransWMS_Pick =
InventTransWMS_Pick::newStandard(tmpInventTransWMS, query
inventTrans.Qty = 0 - _qtyPicked; // Quantity needs to be
negative.
inventTransWMS_Pick.createFromInventTrans(inventTrans);
boolean ret = inventTransWMS_Pick.updateInvent();
if (!ret)
{
throw error("An error occurred when marking IC
sales order lines as picked");
}
}
else
{
throw error("@Retail:InventTransRecordNotFound");
}
}
private static
InventTrans locateSalesLineAndInventTrans(SalesId salesId, LineNum
salesLineNumber)
{
InventTransOrigin inventTransOrigin;
InventTrans inventTrans;
SalesLine salesLine;
select firstonly inventTrans
join RecId from inventTransOrigin where inventTransOrigin.RecId
== inventTrans.InventTransOrigin && InventTrans.StatusIssue ==
StatusIssue::ReservPhysical
join salesLine where salesLine.InventTransId ==
inventTransOrigin.InventTransId && salesLine.SalesId == salesId
&& salesLine.LineNum == salesLineNumber;
if
(!inventTrans)
{
select firstonly inventTrans
join RecId from inventTransOrigin where inventTransOrigin.RecId
== inventTrans.InventTransOrigin && InventTrans.StatusIssue ==
StatusIssue::ReservOrdered
join salesLine where salesLine.InventTransId ==
inventTransOrigin.InventTransId && salesLine.SalesId == salesId
&& salesLine.LineNum == salesLineNumber;
}
if
(!inventTrans)
{
select firstonly inventTrans
join RecId from inventTransOrigin where inventTransOrigin.RecId
== inventTrans.InventTransOrigin && InventTrans.StatusIssue ==
StatusIssue::OnOrder
join salesLine where salesLine.InventTransId ==
inventTransOrigin.InventTransId && salesLine.SalesId == salesId
&& salesLine.LineNum == salesLineNumber;
}
return inventTrans;
}
private static
Query initInventTransQuery(SalesLine salesLine)
{
Query
query;
InventDimParm inventDimParmActive;
InventMovement inventMovement;
QueryBuildDataSource qbdsInventTrans;
InventTransOriginId inventTransOriginId;
query = new Query();
qbdsInventTrans
= query.addDataSource(tableNum(InventTrans));
qbdsInventTrans.clearDynalinks();
qbdsInventTrans.clearRanges();
qbdsInventTrans.addRange(fieldNum(InventTrans,StatusReceipt)).value(SysQuery::value(StatusReceipt::None));
qbdsInventTrans.addRange(fieldNum(InventTrans,StatusIssue)).value(SysQuery::range(StatusIssue::Picked,StatusIssue::OnOrder));
inventMovement =
InventTransWMS_Pick::inventMovement(salesLine);
inventTransOriginId = inventMovement.inventTransOriginId();
SAN_PickingQtyOrder::setInventTransOriginQueryRange(qbdsInventTrans, salesLine,
inventMovement, inventTransOriginId);
inventMovement.inventDimGroupSetup().inventDimParmActive(inventDimParmActive);
return query;
}
private static
void setInventTransOriginQueryRange(
QueryBuildDataSource _qbdsInventTrans,
Common
_callerTable,
InventMovement _inventMovement,
InventTransOriginId _inventTransOriginId = _inventMovement
? _inventMovement.inventTransOriginId() : 0)
{
QueryBuildRange qbRange;
InventTransChildType inventTransChildType;
InventTransChildRefId inventTransChildRefId;
str
rangeStr;
int
inventTransChildTypeInt;
if
(_qbdsInventTrans)
{
if (_inventMovement)
{
if (_inventMovement.transChildType())
{
inventTransChildType =
_inventMovement.transChildType();
inventTransChildRefId =
_inventMovement.transChildRefId();
}
else
{
inventTransChildType =
InventTransChildType::None;
inventTransChildRefId = '';
}
}
inventTransChildTypeInt = enum2int(inventTransChildType);
qbRange =
_qbdsInventTrans.addRange(fieldNum(InventTrans,InventTransOrigin));
rangeStr = strFmt('((%1.%2 == %3) && (%4.%5 == %6)',
_qbdsInventTrans.name(),
fieldStr(InventTrans,InventTransOrigin),
queryValue(_inventTransOriginId),
_qbdsInventTrans.name(),
fieldStr(InventTrans,TransChildType),
inventTransChildTypeInt);
if (inventTransChildRefId)
{
rangeStr = rangeStr + strFmt(' && (%1.%2 ==
\"%3\"))',
_qbdsInventTrans.name(),
fieldStr(InventTrans,TransChildRefId),
queryValue(inventTransChildRefId));
}
else
{
rangeStr = rangeStr + strFmt(' && (%1.%2 ==
\"\"))',
_qbdsInventTrans.name(),
fieldStr(InventTrans,TransChildRefId));
}
qbRange.value(rangeStr);
}
}
}
No comments:
Post a Comment