UIBuilder class
/// <summary>
/// The <c>TransferOrderCreateProposalUIBuilder</c> The data contract for Transfer order creation.
/// </summary>
class TransferOrderCreateProposalUIBuilder extends SysOperationAutomaticUIBuilder
{
DialogField toDate;
DialogField timeFence;
DialogField fromSite;
DialogField fromWarehouse,toWarehouses;
DialogField proposalModel;
DialogField recalculateQuantities;
DialogField replaceCurrentProposals;
SysLookupMultiSelectCtrl ctrlSources;
/// <summary>
///
/// </summary>
public void postBuild()
{
TransferOrderCreateProposalContract contract = this.dataContractObject() as TransferOrderCreateProposalContract;
toDate = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmToDate));
timeFence = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmTimeFence));
fromSite = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmInventSiteId));
fromWarehouse = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmInventLocationIdFrom));
toWarehouses = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmInventLocationIdTo));
proposalModel = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmProposalModel));
recalculateQuantities = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmRecalculateQuantities));
replaceCurrentProposals = this.bindInfo().getDialogField(contract, methodStr(TransferOrderCreateProposalContract, parmReplaceCurrentProposal));
replaceCurrentProposals.allowEdit(false);
recalculateQuantities.visible(false);
toWarehouses.lookupButton(FormLookupButton::Always);
switch (this.controller().parmArgs().menuItemName())
{
case menuItemActionStr(TransferOrderCreateProposal):
replaceCurrentProposals.value(true);
recalculateQuantities.value(false);
toDate.value(DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()));
break;
case menuItemActionStr(TransferOrderEditProposal):
TransferOrderProposal transferOrderProposal = this.controller().parmArgs().record();
fromSite.allowEdit(false);
fromWarehouse.allowEdit(false);
proposalModel.allowEdit(false);
recalculateQuantities.value(false);
replaceCurrentProposals.value(false);
toDate.value(transferOrderProposal.ToDate);
fromSite.value(transferOrderProposal.InventSiteIdFrom);
timeFence.value(transferOrderProposal.timeFence);
proposalModel.value(transferOrderProposal.ProposalModel);
fromWarehouse.value(transferOrderProposal.InventLocationIdFrom);
break;
case menuItemActionStr(TransferOrderRecalculateQty):
toDate.visible(false);
fromSite.visible(false);
fromWarehouse.visible(false);
timeFence.visible(false);
toWarehouses.visible(false);
replaceCurrentProposals.visible(false);
recalculateQuantities.value(true);
replaceCurrentProposals.value(false);
break;
default:
break;
}
}
/// <summary>
///
/// </summary>
public void postRun()
{
if ( this.controller().parmArgs().menuItemName() == menuItemActionStr(TransferOrderCreateProposal) )
{
this.WarehouseLookup(false);
}
else if ( this.controller().parmArgs().menuItemName() == menuItemActionStr(TransferOrderEditProposal) )
{
this.WarehouseLookup(true);
}
}
/// <summary>
/// Multi select lookup for warehouse
/// </summary>
/// <param name = "_preselectValues">true for preselect lookup values</param>
public void WarehouseLookup(boolean _preselectValues)
{
Query query = new Query();
QueryBuildDataSource qbdsWarehouses = query.addDataSource(tablenum(InventLocation));
container selectedFields = [tableNum(InventLocation), fieldNum(InventLocation, InventLocationId)];
qbdsWarehouses.fields().addField(fieldNum(InventLocation, InventLocationId));
qbdsWarehouses.fields().addField(fieldNum(InventLocation, Name));
ctrlSources = SysLookupMultiSelectCtrl::constructWithQuery(this.dialog().formRun(),
toWarehouses.control(),
query,
true,
selectedFields);
if (_preselectValues)
{
TransferOrderProposal transferOrderProposal, transferOrderProposalLoc = this.controller().parmArgs().record();
InventLocation inventLocation;
container selectedRecIds;
container selectedValues;
while select InventLocationIdTo from transferOrderProposal group by InventLocationIdTo
where transferOrderProposal.ProposalModel == transferOrderProposalLoc.ProposalModel
{
inventLocation = InventLocation::find(transferOrderProposal.InventLocationIdTo);
selectedRecIds += inventLocation.RecId;
selectedValues += inventLocation.InventLocationId;
}
ctrlSources.set([selectedRecIds, selectedValues]);
}
}
}
Service class
/// <summary>
/// The <c>TransferOrderCreationProposalService</c> is used to create Transfer order proposals
/// for planned orders.
/// </summary>
class TransferOrderCreateProposalService
{
List toWareHouse;
Query query;
counter timeFence, lineNum;
boolean replaceCurrentProposal;
String20 proposalModel;
TransDate fromDate,toDate;
InventTable inventTable;
InventSiteId fromInventSite;
InventLocationId fromWarehouse;
Enumerator enumerator;
TransferOrderCreateProposalContract contract;
/// <summary>
/// Entry point for creating Transfer order propsal lines based on proposal model
/// </summary>
/// <param name = "_contract">TransferOrderCreateProposalContract passed from dialog</param>
public void createTransferOrderProposal(TransferOrderCreateProposalContract _contract)
{
contract = _contract;
this.initializeQuery();
this.initializeParameters();
ttsbegin;
this.deleteTranferProposalsLines(proposalModel, replaceCurrentProposal);
this.createTransferOrderProposalLines();
ttscommit;
}
/// <summary>
/// Method is used to delete the Transfer order propsal lines based on proposal model
/// </summary>
/// <param name = "_proposalModel">from dialog</param>
/// <param name = "_replaceCurrentProposal">true if creating new transfer order proposal</param>
public void deleteTranferProposalsLines(ProposalModelId _proposalModel, boolean _replaceCurrentProposal)
{
if (_replaceCurrentProposal)
{
TransferOrderProposal transferOrderProposal;
delete_from transferOrderProposal
where transferOrderProposal.ProposalModel == _proposalModel;
}
}
/// <summary>
/// intilalize parameters
/// </summary>
public void initializeParameters()
{
toDate = contract.parmToDate();
timeFence = contract.parmTimeFence();
fromDate = contract.parmToDate() - timeFence;
toWareHouse = contract.parmInventLocationIdTo();
fromWarehouse = contract.parmInventLocationIdFrom();
proposalModel = contract.parmProposalModel();
fromInventSite = contract.parmInventSiteId();
replaceCurrentProposal = contract.parmReplaceCurrentProposal();
}
/// <summary>
/// initialize query object
/// </summary>
public void initializeQuery()
{
query = contract.parmQuery();
}
/// <summary>
/// Method is used to create the Transfer order propsal lines based on proposal model
/// </summary>
public void createTransferOrderProposalLines()
{
Real workingdays;
InventLocation inventLocation;
InventQtyTotal inventQty;
RecordInsertList transferOrderProposalInsertList = null;
TransferOrderProposal transferOrderProposal;
QueryRun queryRun = new QueryRun(query);
while (queryRun.next())
{
transferOrderProposalInsertList = new RecordInsertList(tablenum(TransferOrderProposal));
inventTable = queryRun.get(tablenum(InventTable));
enumerator = toWareHouse.getEnumerator();
try
{
ttsbegin;
while (enumerator.moveNext())
{
if (!replaceCurrentProposal)
{
if (TransferOrderProposal::exist(inventTable.ItemId, enumerator.current(), proposalModel))
{
lineNum++;
continue;
}
}
transferOrderProposal.clear();
lineNum++;
transferOrderProposal.LineNum = lineNum;
transferOrderProposal.ItemId = inventTable.ItemId;
transferOrderProposal.ItemName = inventTable.itemName();
transferOrderProposal.ToDate = toDate;
transferOrderProposal.TimeFence = timeFence;
transferOrderProposal.InventSiteIdFrom = fromInventSite;
inventLocation = InventLocation::find(fromWarehouse);
transferOrderProposal.InventLocationIdFrom = inventLocation.InventLocationId;
transferOrderProposal.InventLocationIdFromName = inventLocation.Name;
transferOrderProposal.InventSiteIdTo = fromInventSite;
inventLocation = InventLocation::find(enumerator.current());
transferOrderProposal.InventLocationIdTo = inventLocation.InventLocationId;
transferOrderProposal.InventLocationIdToName = inventLocation.Name;
transferOrderProposal.ProposalModel = proposalModel;
transferOrderProposal.CoverageGroup = inventTable.ReqGroupId;
transferOrderProposal.RefillAvailablePhysical = this.getRefillItemAvailPhysicalBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdFrom,
transferOrderProposal.InventLocationIdFrom);
inventQty = 0;
inventQty = this.getItemTotalSalesBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdFrom,
transferOrderProposal.InventLocationIdFrom,
fromDate,
toDate);
workingdays = 0;
workingdays = this.getNumOfWorkingdays(transferOrderProposal.InventLocationIdFrom, fromDate, toDate);
transferOrderProposal.RefillSalesPerDay = workingdays ? inventQty / workingdays : 0;
transferOrderProposal.RefillCoverageDays = transferOrderProposal.RefillSalesPerDay ? transferOrderProposal.RefillAvailablePhysical / transferOrderProposal.RefillSalesPerDay : 0;
transferOrderProposal.DCAvailablePhysical = this.getDCItemAvailPhysicalBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdTo,
transferOrderProposal.InventLocationIdTo);
inventQty = 0;
inventQty = this.getItemTotalSalesBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdTo,
transferOrderProposal.InventLocationIdTo,
fromDate,
toDate);
workingdays = 0;
workingdays = this.getNumOfWorkingdays(transferOrderProposal.InventLocationIdTo,fromDate, toDate);
transferOrderProposal.DCSalesPerDay = workingdays ? inventQty / workingdays : 0;
transferOrderProposal.DCCoverageDays = transferOrderProposal.DCSalesPerDay ? transferOrderProposal.DCAvailablePhysical / transferOrderProposal.DCSalesPerDay : 0;
transferOrderProposalInsertList.add(transferOrderProposal);
}
transferOrderProposalInsertList.insertDatabase();
ttscommit;
}
catch(Exception::Error)
{
throw error( "@Planning:TransferOrderPropsalCreationError");
}
catch(Exception::Deadlock )
{
if(xSession::currentRetryCount() >= Planning_Constants::MaxOCCRetryCount)
{
throw Exception::Deadlock;
}
else
{
retry;
}
}
catch(Exception::UpdateConflict)
{
if (appl.ttsLevel() == 0)
{
if (xSession::currentRetryCount() >= Planning_Constants::MaxOCCRetryCount)
{
throw Exception::UpdateConflictNotRecovered;
}
else
{
retry;
}
}
else
{
throw Exception::UpdateConflict;
}
}
info(strFmt("@Planning:TransferOrderProposalCreationSuccess", lineNum, proposalModel));
}
}
/// <summary>
/// Calculate total sales between daterange for each item based on site and warehouse
/// </summary>
/// <param name = "_itemId"></param>
/// <param name = "_inevntSiteId"></param>
/// <param name = "_inventLocationId"></param>
/// <returns></returns>
public InventQtyTotal getItemTotalSalesBySiteAndWarehouse(ItemId _itemId,
InventSiteId _inventSiteId,
InventLocationId _inventLocationId,
FromDate _fromDate,
ToDate _toDate)
{
InventDim inventDim;
InventTrans inventTrans;
InventTransOrigin inventTransOrigin;
select sum(Qty) from inventTrans
where inventTrans.ItemId == _itemId
&& inventTrans.DatePhysical >= _fromDate
&& inventTrans.DatePhysical <= _toDate
exists join inventTransOrigin
where inventTransOrigin.RecId == inventTrans.InventTransOrigin
&& inventTransOrigin.ReferenceCategory == InventTransType::Sales
exists join inventDim
where inventDim.inventDimId == inventTrans.inventDimId
&& inventDim.InventSiteId == _inventSiteId
&& inventDim.InventLocationId == _inventLocationId;
return abs(inventTrans.Qty);
}
/// <summary>
/// calculates number of working days based on warehouse or Legal entity base calender
/// </summary>
/// <param name = "_inventLocationId"></param>
/// <returns></returns>
public Real getNumOfWorkingdays(InventLocationId _inventLocationId, FromDate _fromDate, ToDate _toDate)
{
Real workingdays;
CalendarId calenderId;
WorkCalendarDate WorkCalendarDate;
if (InventLocation::find(_inventLocationId).ReqCalendarId)
{
calenderId = InventLocation::find(_inventLocationId).ReqCalendarId;
}
else
{
calenderId = CompanyInfo::find().ShippingCalendarId;
}
select count(RecId) from WorkCalendarDate
where WorkCalendarDate.CalendarId == calenderId
&& (WorkCalendarDate.TransDate >= _fromDate
&& WorkCalendarDate.TransDate <= _toDate)
&& WorkCalendarDate.WorkTimeControl == WorkTimeControl::Open;
workingdays = any2Real(WorkCalendarDate.RecId);
if (!calenderId)
{
Real noOfDays = _toDate - _fromDate;
//Formula for calculating working days if No base calender is present
workingdays = (abs(noOfDays) / Planning_Constants::NumOfDaysInAWeek ) * Planning_Constants::MinWorkingDaysInAWeek;
}
return abs(workingdays);
}
/// <summary>
/// Calculate avaialable physical inventory for each item based on site and warehouse
/// </summary>
/// <param name = "_itemId"></param>
/// <param name = "_inevntSiteId"></param>
/// <param name = "_inventLocationId"></param>
/// <returns>Refill warehouse avail physical</returns>
public InventQtyAvailPhysical getRefillItemAvailPhysicalBySiteAndWarehouse(ItemId _itemId, InventSiteId _inventSiteId, InventLocationId _inventLocationId)
{
InventDim inventDim;
InventDimParm inventDimParm;
inventDim = this.initInventDim(_inventSiteId, _inventLocationId);
inventDimParm.initFromInventDim(inventDim);
return abs(InventOnhand::newParameters(_itemId, inventDim, inventDimParm).availPhysical());
}
/// <summary>
/// Calculate avaialable physical inventory for each item based on site and warehouse
/// </summary>
/// <param name = "_itemId"></param>
/// <param name = "_inevntSiteId"></param>
/// <param name = "_inventLocationId"></param>
/// <returns>DC warehouse avail physical</returns>
public InventQtyAvailPhysical getDCItemAvailPhysicalBySiteAndWarehouse(ItemId _itemId, InventSiteId _inventSiteId, InventLocationId _inventLocationId)
{
InventDim inventDim;
InventTrans inventTrans;
InventDimParm inventDimParm;
inventTransOrigin InventTransOrigin;
InventQty totalAvailPhysical;
inventDim = this.initInventDim(_inventSiteId, _inventLocationId);
inventDimParm.initFromInventDim(inventDim);
totalAvailPhysical = abs(InventOnhand::newParameters(_itemId, inventDim, inventDimParm).availPhysical());
inventDim.clear();
select sum(Qty) from inventTrans
where inventTrans.ItemId == _itemId
&& inventTrans.DatePhysical == dateNull()
&& inventTrans.StatusIssue == StatusIssue::ReservPhysical
exists join inventTransOrigin
where inventTransOrigin.RecId == inventTrans.InventTransOrigin
&& (inventTransOrigin.ReferenceCategory == InventTransType::TransferOrderShip
|| inventTransOrigin.ReferenceCategory == InventTransType::TransferOrderReceive)
exists join inventDim
where inventDim.inventDimId == inventTrans.inventDimId
&& inventDim.InventSiteId == _inventSiteId
&& inventDim.InventLocationId == _inventLocationId;
return totalAvailPhysical + abs(inventTrans.Qty);
}
/// <summary>
/// Initilalize InevntDim by site and warehouse
/// </summary>
/// <param name = "_inevntSiteId">SiteId from proposal line</param>
/// <param name = "_inventLocationId">LocationId from proposal line</param>
/// <returns>InventDim buffer</returns>
public InventDim initInventDim(InventSiteId _inevntSiteId, InventLocationId _inventLocationId)
{
InventDim inventDim;
inventDim.InventSiteId = _inevntSiteId;
inventDim.InventLocationId = _inventLocationId;
inventDim = InventDim::findOrCreate(inventDim);
return inventDim;
}
/// <summary>
/// Recalculates and updates avail physical quanties
/// </summary>
/// <param name = "_contract">TransferOrderCreateProposalContract from dialog</param>
public void recalculateQuanties(TransferOrderCreateProposalContract _contract)
{
TransferOrderProposal transferOrderProposal;
InventQtyTotal inventQty;
Real workingdays;
while select forupdate transferOrderProposal
where transferOrderProposal.ProposalModel == _contract.parmProposalModel()
{
try
{
ttsbegin;
transferOrderProposal.RefillAvailablePhysical = this.getRefillItemAvailPhysicalBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdFrom,
transferOrderProposal.InventLocationIdFrom);
inventQty = 0;
inventQty = this.getItemTotalSalesBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdFrom,
transferOrderProposal.InventLocationIdFrom,
transferOrderProposal.ToDate - transferOrderProposal.TimeFence,
transferOrderProposal.ToDate);
workingdays = 0;
workingdays = this.getNumOfWorkingdays(transferOrderProposal.InventLocationIdFrom, transferOrderProposal.ToDate - transferOrderProposal.TimeFence, transferOrderProposal.ToDate);
transferOrderProposal.RefillCoverageDays = transferOrderProposal.RefillSalesPerDay ? transferOrderProposal.RefillAvailablePhysical / transferOrderProposal.RefillSalesPerDay : 0;
transferOrderProposal.DCAvailablePhysical = this.getDCItemAvailPhysicalBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdTo,
transferOrderProposal.InventLocationIdTo);
inventQty = 0;
inventQty = this.getItemTotalSalesBySiteAndWarehouse(transferOrderProposal.ItemId,
transferOrderProposal.InventSiteIdTo,
transferOrderProposal.InventLocationIdTo,
transferOrderProposal.ToDate - transferOrderProposal.TimeFence,
transferOrderProposal.ToDate);
workingdays = 0;
workingdays = this.getNumOfWorkingdays(transferOrderProposal.InventLocationIdFrom, transferOrderProposal.ToDate - transferOrderProposal.TimeFence, transferOrderProposal.ToDate);
transferOrderProposal.DCCoverageDays = transferOrderProposal.DCSalesPerDay ? transferOrderProposal.DCAvailablePhysical / transferOrderProposal.DCSalesPerDay : 0;
transferOrderProposal.update();
ttscommit;
}
catch(Exception::Error)
{
throw error( "@Planning:TransferOrderPropsalCreationError");
}
catch(Exception::Deadlock )
{
if(xSession::currentRetryCount() >= Planning_Constants::MaxOCCRetryCount)
{
throw Exception::Deadlock;
}
else
{
retry;
}
}
catch(Exception::UpdateConflict)
{
if (appl.ttsLevel() == 0)
{
if (xSession::currentRetryCount() >= Planning_Constants::MaxOCCRetryCount)
{
throw Exception::UpdateConflictNotRecovered;
}
else
{
retry;
}
}
else
{
throw Exception::UpdateConflict;
}
}
}
}
}
Controller class
/// <summary>
/// The controller for handling bulk Transfer order proposal creation.
/// </summary>
class TransferOrderCreateProposalController extends SysOperationServiceController
{
/// <summary>
/// Constructs a new instance of the <c>TransferOrderCreateProposalController</c>.
/// </summary>
/// <param name = "_args">A set of arguments that is used for Transfer order proposal creation.</param>
/// <returns>A new instance of the <c>TransferOrderCreateProposalController</c>.</returns>
public static TransferOrderCreateProposalController construct(Args _args)
{
TransferOrderCreateProposalController controller;
switch (_args.menuItemName())
{
case menuItemActionStr(TransferOrderEditProposal):
case menuItemActionStr(TransferOrderCreateProposal):
controller = new TransferOrderCreateProposalController(classStr( TransferOrderCreateProposalService ),
methodStr( TransferOrderCreateProposalService, createTransferOrderProposal ),
SysOperationExecutionMode::Synchronous);
break;
case menuItemActionStr(TransferOrderRecalculateQty):
controller = new TransferOrderCreateProposalController(classStr( TransferOrderCreateProposalService ),
methodStr( TransferOrderCreateProposalService, recalculateQuanties ),
SysOperationExecutionMode::Synchronous);
break;
default:
break;
}
controller.parmArgs( _args );
return controller;
}
public static void main(Args _args)
{
TransferOrderCreateProposalController controller = TransferOrderCreateProposalController::construct( _args );
controller.startOperation();
//Only run if in Non batch mode
if (controller.startResult == SysOperationStartResult::Started)
{
controller.RefreshCallingForm(_args);
}
}
/// <summary>
/// Refresh TransferOrderProposal from when not running in batch
/// </summary>
/// <param name = "_args"></param>
private void RefreshCallingForm(args _args)
{
if (_args && _args.caller() && _args.caller() is formRun)
{
TransferOrderCreateProposalContract contract = this.getDataContractObject();
FormStringControl proposalModel;
FormRun callerFormRun = _args.caller() as formRun;
proposalModel = callerFormRun.design().controlName(formControlStr(TransferOrderProposal, ProposalModel));
proposalModel.Text(contract.parmProposalModel());
proposalModel.modified();
callerFormRun.dataSource(1).research(true);
callerFormRun.dataSource(1).refresh();
callerFormRun.dataSource(2).research(true);
callerFormRun.dataSource(2).refresh();
}
}
protected boolean canRunInNewSession()
{
return true;
}
}
Contract class
/// <summary>
/// The data contract for Transfer order creation.
/// </summary>
[
DataContract,
SysOperationGroup("HistoricalHorizoGroup","@:HistoricalHorizon","1",FormArrangeMethod::Vertical),
SysOperationGroup("ReplaceCurrentProposalGroup","@:ReplaceCurrentProposal","2",FormArrangeMethod::Vertical),
SysOperationContractProcessing(classStr(TransferOrderCreateProposalUIBuilder))
]
public class TransferOrderCreateProposalContract implements SysOperationInitializable, SysOperationValidatable
{
Query query;
str packedQuery;
TransDate fromDate,toDate;
NoYesId replaceCurrentProposal;
NoYesId recalculateQuantities;
InventSiteId inventSiteId;
InventLocationId inventLocationIdFrom;
Integer timeFence;
ProposalModelId proposalModel;
List inventLocationIdTo;
/// <summary>
/// Indicates whether the contract is valid.
/// </summary>
/// <returns>
/// A Boolean value that indicates whether the contract is valid.
/// </returns>
public boolean validate()
{
boolean isValid = true;
if (!proposalModel)
{
isValid = checkFailed(strFmt("@SYS135209", "@:ProposalModel"));
}
else if (!this.confirmReplaceCurrentProposal(proposalModel, replaceCurrentProposal) && !recalculateQuantities)
{
isValid = false;
}
if (!replaceCurrentProposal && !recalculateQuantities)
{
isValid = this.checkProposalExists();
}
return isValid;
}
/// <summary>
/// check for transfer order proposals exists
/// </summary>
/// <returns>A Boolean value that indicates whether the contract is valid</returns>
public boolean checkProposalExists()
{
Query queryVal;
Counter lineNum;
container results;
Enumerator enumerator;
InventTable inventTable;
boolean isValid = true;
if (query == null && packedQuery)
{
queryVal = new Query( SysOperationHelper::base64Decode( packedQuery ) );
}
else
{
queryVal = query;
}
QueryRun queryRun = new QueryRun(queryVal);
while (queryRun.next())
{
inventTable = queryRun.get(tablenum(InventTable));
enumerator = inventLocationIdTo.getEnumerator();
while (enumerator.moveNext())
{
if (TransferOrderProposal::exist(inventTable.ItemId, enumerator.current(), proposalModel))
{
lineNum++;
results += strFmt("@:ProposalExistsValidation", inventTable.ItemId, enumerator.current());
if (lineNum >= 100)
{
break;
}
}
}
}
if (conLen(results) > 0)
{
warning(con2Str(results));
DialogButton diagBut;
str strMessage = "@:TransferOrderAddlinesConfirmation";
str strTitle = "@ApplicationPlatform:SystemNotificationTitle";
diagBut = Box::okCancel(strMessage,
DialogButton::Cancel, // Initial focus is on the Cancel button.
strTitle);
if (diagBut == DialogButton::Cancel)
{
isValid = false;
}
else
{
isValid = true;
}
}
return isValid;
}
/// <summary>
/// confirm from user to replace Marked/modifeied transfer order proposals
/// </summary>
/// <param name = "_proposalModel">user selected value</param>
/// <param name = "_replaceCurrentProposal">true</param>
/// <returns>A Boolean value that indicates whether the contract is valid </returns>
public boolean confirmReplaceCurrentProposal(ProposalModelId _proposalModel, boolean _replaceCurrentProposal)
{
boolean ret = true;
if(_proposalModel && _replaceCurrentProposal)
{
TransferOrderProposal transferOrderProposal;
select firstonly RecId from transferOrderProposal
where transferOrderProposal.ProposalModel == _proposalModel
&& (transferOrderProposal.AddToShipment == NoYes::Yes
|| transferOrderProposal.CaseQty != 0);
if (transferOrderProposal.RecId)
{
DialogButton diagBut;
str strMessage = "@:PropsalReplaceConfirmationText";
str strTitle = "@ApplicationPlatform:SystemNotificationTitle";
diagBut = Box::okCancel(strMessage,
DialogButton::Cancel, // Initial focus is on the Cancel button.
strTitle);
if (diagBut == DialogButton::Cancel)
{
ret = false;
}
else
{
ret = true;
}
}
}
else
{
ret = true;
}
return ret;
}
/// <summary>
/// Initailizes the default values to parameters.
/// </summary>
public void initialize()
{
query = new Query( queryStr( InventTableQuery ) );
}
/// <summary>
/// load query from syslast value
/// </summary>
/// <param name = "_packedQuery"></param>
/// <returns> packed query string</returns>
[
DataMember,
AifQueryTypeAttribute('_packedQuery', queryStr( InventTableQuery ) )
]
public str parmPackedQuery( str _packedQuery = packedQuery)
{
packedQuery = _packedQuery;
return packedQuery;
}
/// <summary>
/// Encode/decode the query and set or get
/// </summary>
/// <param name = "_query"></param>
/// <returns>query object</returns>
public Query parmQuery( Query _query = query )
{
if ( prmisDefault( _query ) && query == null )
{
query = new Query( SysOperationHelper::base64Decode( packedQuery ) );
}
else
{
packedQuery = SysOperationHelper::base64Encode( _query.pack() );
query = _query;
}
return query;
}
/// <summary>
/// Method used to specify the data memmber attribute
/// </summary>
/// <param>
/// <name>parmFromDate</name>is used to set and get the FromDate
/// </param>
[
DataMember,
SysOperationGroupMember("HistoricalHorizoGroup"),
SysOperationDisplayOrder("1"),
SysOperationLabelAttribute(literalstr("@:TransferProposalModel"))
]
public ProposalModelId parmProposalModel( ProposalModelId _proposalModel = proposalModel )
{
proposalModel = _proposalModel;
return proposalModel;
}
/// <summary>
/// Method used to specify the data member attribute
/// </summary>
/// <param>
/// <name>parmTimeFence</name>is used to set and get the historical time
/// </param>
[
DataMember,
SysOperationGroupMember("HistoricalHorizoGroup"),
SysOperationDisplayOrder("2"),
SysOperationLabelAttribute(literalstr("@SYS315566"))
]
public Integer parmTimeFence(Integer _timeFence = timeFence )
{
timeFence = _timeFence;
return timeFence;
}
/// <summary>
/// Method used to specify the data member attribute
/// </summary>
/// <param>
/// <name>parmToDate</name>is used to set and get the ToDate
/// </param>
[
DataMember,
SysOperationGroupMember("HistoricalHorizoGroup"),
SysOperationDisplayOrder("3"),
SysOperationLabelAttribute(literalstr("@:ToDate"))
]
public TransDate parmToDate( TransDate _toDate = toDate )
{
toDate = _toDate;
return toDate;
}
/// <summary>
/// Method used to specify the data member attribute
/// </summary>
/// <param>
/// <name>parmReplaceCurrentProposal</name>is used to set and get the parameter value
/// </param>
[
DataMember,
SysOperationGroupMember("ReplaceCurrentProposalGroup"),
SysOperationDisplayOrder("4"),
SysOperationLabelAttribute(literalstr("@:ReplaceCurrentProposal"))
]
public NoYesId parmReplaceCurrentProposal( NoYesId _replaceCurrentProposal = replaceCurrentProposal )
{
replaceCurrentProposal = _replaceCurrentProposal;
return replaceCurrentProposal;
}
/// <summary>
/// Method used to specify the data memmber attribute
/// </summary>
/// <param>
/// <name>parmToDate</name>is used to set and get the ToDate
/// </param>
[
DataMember,
SysOperationGroupMember("ReplaceCurrentProposalGroup"),
SysOperationDisplayOrder("5"),
SysOperationLabelAttribute(literalstr("@SYS106955"))
]
public InventSiteId parmInventSiteId( InventSiteId _inventSiteId = inventSiteId )
{
inventSiteId = _inventSiteId;
return inventSiteId;
}
/// <summary>
/// Method used to specify the data memmber attribute
/// </summary>
/// <param>
/// <name>parmToDate</name>is used to set and get the ToDate
/// </param>
[
DataMember,
SysOperationGroupMember("ReplaceCurrentProposalGroup"),
SysOperationDisplayOrder("6"),
SysOperationLabelAttribute(literalstr("@SYS25253"))
]
public InventLocationId parmInventLocationIdFrom( InventLocationId _inventLocationIdFrom = inventLocationIdFrom )
{
inventLocationIdFrom = _inventLocationIdFrom;
return inventLocationIdFrom;
}
/// <summary>
/// Method used to specify the data memmber attribute
/// </summary>
/// <param>
/// <name>parmToDate</name>is used to set and get the ToDate
/// </param>
[
DataMember,
SysOperationGroupMember("ReplaceCurrentProposalGroup"),
SysOperationDisplayOrder("7"),
SysOperationLabelAttribute(literalstr("@SYS8519")),
AifCollectionType('return', Types::String)
]
public List parmInventLocationIdTo( List _inventLocationIdTo = inventLocationIdTo )
{
inventLocationIdTo = _inventLocationIdTo;
return inventLocationIdTo;
}
/// <summary>
/// Method used to specify the data memmber attribute
/// </summary>
/// <param>
/// <name>parmReplaceCurrentProposal</name>is used to set and get the parameter value
/// </param>
[
DataMember,
SysOperationGroupMember("ReplaceCurrentProposalGroup"),
SysOperationDisplayOrder("8"),
SysOperationLabelAttribute(literalstr("@SYS40695"))
]
public NoYesId parmRecalculateQuantities( NoYesId _recalculateQuantities = recalculateQuantities )
{
recalculateQuantities = _recalculateQuantities;
return recalculateQuantities;
}
}