//N Added by Venkatesh for W_ProductionOrderCreationandPostingAPI
public class W_ProductionOrderCreationAndPostingService
{
public W_ProductionOrderCreationAndPostingResponseContract processReport(
W_ProductionOrderCreationAndPostingHeaderRequestContract ProductionBookingContract)
{
W_ProductionOrderCreationAndPostingResponseContract
contract;
W_ProductionOrderCreationAndPostingLinesRequestContract linecontract;
ProdStatusType ProdStatusType;
str
1000 pckinglisterror ;
ProjId existProjid, newProdID;
ProdJournalBOM JournalBOM;
UnitQty UnitQty;
JournalId journalid;
List Pickinglist = ProductionBookingContract.parmProdLines();;
ListEnumerator PickingListEnumerator = Pickinglist.getEnumerator();
ListEnumerator PickingListEnumeratorItems = Pickinglist.getEnumerator();
W_ProductionOrderCreationAndPostingResponseContract response
= new W_ProductionOrderCreationAndPostingResponseContract();
try
{
//ttsbegin;
changecompany(ProductionBookingContract.parmDataAreaId())
{
if(this.checkOnholdQty(ProductionBookingContract.parmLocation(),ProductionBookingContract.parmsite(),ProductionBookingContract.parmItemID(),ProductionBookingContract.parmWarehourse(),ProductionBookingContract.parmStartQty()))
{
throw Error(strFmt("%1 Item not avaliable with quantity
%2",ProductionBookingContract.parmItemID(),ProductionBookingContract.parmStartQty()));
}
ExistProjid = this.existProjid(ProductionBookingContract.parmsite(),ProductionBookingContract.parmItemID(),ProductionBookingContract.parmpool(),ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmWarehourse(),ProductionBookingContract.parmLocation(),ProductionBookingContract.parmDateLoc(),ProductionBookingContract.parmIspackingOrder());
response.parmPONumber(ExistProjid);
if(ExistProjid)
{
while(pickinglistenumeratoritems.movenext())
{
linecontract = pickinglistenumeratoritems.current();
if(this.checkonholdqty(linecontract.parmlocation(),productionbookingcontract.parmsite(),linecontract.parmitemid(),linecontract.parmwarehourse(),linecontract.parmquantity()))
{
throw error(strfmt("%1 item not avaliable with quantity
%2",linecontract.parmitemid(),linecontract.parmquantity()));
}
}
ProdJournalTable ProdJournalTable;
response.parmPONumber(ExistProjid);
ExistProjid = this.ProdStartUP(ExistProjid,ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmDateLoc());
ttsbegin;
select ProdJournalTable
order by ProdJournalTable.CreatedDateTime desc
where ProdJournalTable.ProdId == ExistProjid
&& ProdJournalTable.JournalType == ProdJournalType::Picklist;
if(ProdJournalTable.RecId)
{
ProdJournalTable.selectForUpdate(true);
ProdJournalTable.
WStartUpQty =ProductionBookingContract.parmStartQty();
ProdJournalTable.update();
}
ttscommit;
if(ProdJournalTable.RecId)
{
while(PickingListEnumerator.moveNext())
{
linecontract = PickingListEnumerator.current();
ttsbegin;
select JournalBOM where JournalBOM.JournalId == ProdJournalTable.journalid
&& JournalBOM.ItemId ==linecontract.parmItemID();
if(JournalBOM.ItemId != linecontract.parmItemID())
{
throw Error (strFmt('Given item is in correct %1',linecontract.parmItemID()));
}
if(JournalBOM.RecId)
{
JournalBOM.selectForUpdate(true);
JournalBOM.InventDimId = this.createInventDim(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse());
JournalBOM. WWeighingQty = linecontract.parmQuantity();
prodJournalBOM::pickingListJournalLineValues(JournalBOM);
JournalBOM. WFeedMoisture = linecontract.parmFeedMositure();
prodJournalBOM::pickingListJournalLineValues(JournalBOM);
UnitQty =this.prodJournalBOMWriteen(JournalBOM);
if( UnitQty)
{
JournalBOM. WWeighedAvgFeedMoisture = UnitQty;
}
ProdBOM
prodbom;
BOM
bom;
select bom
exists join prodbom
where prodbom.BOMRefRecId == bom.RecId
&& prodbom.InventTransId ==
JournalBOM.InventTransId
&& prodbom.ItemId
== JournalBOM.ItemId;
JournalBOM. WDryQty =
round(JournalBOM. WWeighingQty*(1-(JournalBOM. WFeedMoisture/100)),0.001);
JournalBOM. WEndReading = round(JournalBOM. WDryQty/(1-(JournalBOM.
WWeighedAvgFeedMoisture/100)),0.001);
if(bom.ScrapVar != 0)
{
JournalBOM.BOMConsump = round(JournalBOM. WEndReading/(1-(bom.ScrapVar/100)),
0.001);
}
else
{
JournalBOM.BOMConsump = round(JournalBOM. WEndReading,0.001);
}
if (bom. WInFactor)
{
JournalBOM. WDryQty =
JournalBOM. WWeighingQty;
JournalBOM. WEndReading = JournalBOM. WWeighingQty;
JournalBOM.BOMConsump = JournalBOM. WWeighingQty;
}
JournalBOM.InventConsump = linecontract.parmQuantity();
//JournalBOM.BOMConsump = linecontract.parmQuantity();
JournalBOM.TransDate = ProductionBookingContract.parmDateLoc();
JournalBOM.update();
}
ttscommit;
}
response.parmPlNumberr(ProdJournalTable.JournalId);
pckinglisterror =" ";
pckinglisterror =
this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId,response);
//this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId);
if(pckinglisterror == " ")
{
if(!ProdTable::find(ExistProjid). WPackingOrder)
{
this.prodReportFinished(ExistProjid,ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmBOMNumber(),ProdJournalTable.JournalId);
select JournalId,JournalType from ProdJournalTable
order by ProdJournalTable.RecId desc
where ProdJournalTable.ProdId == ExistProjid
&& ProdJournalTable.JournalType == ProdJournalType::ReportFinished;
if(ProdJournalTable.JournalType == ProdJournalType::ReportFinished &&
ProdJournalTable.RecId)
{
response.parmRAFnumber(ProdJournalTable.JournalId);
}
}
response.parmErrorMessage('Success');
}
else
{
response.parmErrorMessage(pckinglisterror);
}
}
}
else
{
NewProdID = this.CreateProductionOrder(
ProductionBookingContract.parmProdQty(),
ProductionBookingContract.parmItemID(), ProductionBookingContract.parmLocation(),
ProductionBookingContract.parmsite(),
ProductionBookingContract.parmBOMNumber(),
ProductionBookingContract.parmRouteNumber(),
ProductionBookingContract.parmpool(),
ProductionBookingContract.parmWarehourse(),
ProductionBookingContract.parmCostcenter(),
ProductionBookingContract.parmCostCenterGroup(),
ProductionBookingContract.parmDepartment(),
ProductionBookingContract.parmIspackingOrder(),
ProductionBookingContract.parmDateLoc());
response.parmPONumber(NewProdID);
while(PickingListEnumeratorItems.moveNext())
{
linecontract = PickingListEnumeratorItems.current();
if(this.checkOnholdQty(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse(),linecontract.parmQuantity()))
{
throw Error(strFmt("%1 Item not avaliable with quantity
%2",linecontract.parmItemID(),linecontract.parmQuantity()));
}
}
ProdJournalTable ProdJournalTable;
NewProdID = this.ProdStartUP(NewProdID,
ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmDateLoc());
ttsbegin;
select ProdJournalTable
order by ProdJournalTable.CreatedDateTime desc
where ProdJournalTable.ProdId == NewProdID
&& ProdJournalTable.JournalType == ProdJournalType::Picklist;
if(ProdJournalTable.RecId)
{
ProdJournalTable.selectForUpdate(true);
ProdJournalTable. WStartUpQty =ProductionBookingContract.parmStartQty();
ProdJournalTable.update();
}
ttscommit;
if(ProdJournalTable.RecId)
{
while(PickingListEnumerator.moveNext())
{
ttsbegin;
linecontract = PickingListEnumerator.current();
select JournalBOM where JournalBOM.JournalId ==
ProdJournalTable.JournalId
&& JournalBOM.ItemId ==linecontract.parmItemID();
if(JournalBOM.ItemId != linecontract.parmItemID())
{
throw Error (strFmt('Given item is in correct %1',linecontract.parmItemID()));
}
if(JournalBOM.RecId)
{
JournalBOM.selectForUpdate(true);
JournalBOM.InventDimId = this.createInventDim(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse());
JournalBOM. WWeighingQty = linecontract.parmQuantity();
prodJournalBOM::pickingListJournalLineValues(JournalBOM);
prodJournalBOM::pickingListJournalLineValues(JournalBOM);
UnitQty =this.prodJournalBOMWriteen(JournalBOM);
if( UnitQty)
{
JournalBOM. WWeighedAvgFeedMoisture = UnitQty;
}
ProdBOM
prodbom;
BOM
bom;
select bom
exists join prodbom
where prodbom.BOMRefRecId == bom.RecId
&& prodbom.InventTransId ==
JournalBOM.InventTransId
&& prodbom.ItemId
== JournalBOM.ItemId;
JournalBOM. WDryQty =
round(JournalBOM. WWeighingQty*(1-(JournalBOM. WFeedMoisture/100)),0.001);
JournalBOM. WEndReading = round(JournalBOM. WDryQty/(1-(JournalBOM.
WWeighedAvgFeedMoisture/100)),0.001);
if(bom.ScrapVar != 0)
{
JournalBOM.BOMConsump = round(JournalBOM. WEndReading/(1-(bom.ScrapVar/100)),
0.001);
}
else
{
JournalBOM.BOMConsump = round(JournalBOM. WEndReading,0.001);
}
if (bom. WInFactor)
{
JournalBOM. WDryQty =
JournalBOM. WWeighingQty;
JournalBOM. WEndReading = JournalBOM. WWeighingQty;
JournalBOM.BOMConsump = JournalBOM. WWeighingQty;
}
JournalBOM.InventConsump = linecontract.parmQuantity();
// JournalBOM.BOMConsump = JournalBOM. WEndReading;
JournalBOM.TransDate = ProductionBookingContract.parmDateLoc();
JournalBOM.update();
}
ttscommit;
}
response.parmPlNumberr(ProdJournalTable.JournalId);
pckinglisterror = " ";
pckinglisterror =
this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId,response);
//this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId);
if(pckinglisterror ==" ")
{
if(!ProdTable::find(newProdID). WPackingOrder)
{
this.prodReportFinished(newProdID,ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmBOMNumber(),ProdJournalTable.JournalId);
select JournalId, JournalType from ProdJournalTable
where ProdJournalTable.ProdId == newProdID
&& ProdJournalTable.JournalType ==
ProdJournalType::ReportFinished;
if(ProdJournalTable.JournalType == ProdJournalType::ReportFinished &&
ProdJournalTable.RecId)
{
response.parmRAFnumber(ProdJournalTable.JournalId);
}
}
response.parmErrorMessage('Success');
}
else
{
response.parmErrorMessage(pckinglisterror);
}
}
}
}
//ttscommit;
}
catch(Exception::Error)
{
response.parmErrorMessage(this.ErrorMsg());
}
catch(Exception::Deadlock)
{
response.parmErrorMessage(this.ErrorMsg());
}
catch(Exception::UpdateConflict)
{
response.parmErrorMessage(this.ErrorMsg());
}
catch(Exception::DuplicateKeyException)
{
response.parmErrorMessage(this.ErrorMsg());
}
catch(Exception::CLRError)
{
System.Exception ex = CLRInterop::getLastException();
response.parmErrorMessage(ex.Message);
}
catch(Exception::ViewDataSourceValidation)
{
response.parmErrorMessage(this.ErrorMsg());
}
return
response;
}
public boolean checkOnholdQty(str
_LocationId,str _Site,str _Item,str _Warehouse, InventQty _qty)
{
InventDim
inventDim;
InventDimParm
inventDimParm;
InventOnhand inventOnhand;
InventQty qty;
InventSum
inventsum;
boolean
ret;
select ItemId,
InventDimId from inventSum
where
inventSum.InventSiteId == _Site
&& inventSum.inventLocationId == _Warehouse
&& inventSum.wMSLocationId == _LocationId
&& inventSum.ItemId == _Item
&& inventSum.configId == 'NA';
inventDim =
InventDim::find(inventSum.inventDim().inventDimId);
inventDimParm.initFromInventDim(inventDim);
inventOnhand =
InventOnhand::newParameters(_Item, inventDim, inventDimParm);
qty =
inventOnhand.availPhysical();
if(qty<_qty)
{
ret =true;
}
return ret;
}
public ProjId existProjid(str _site,str
_itemId,str _PoolId,real _qty,str _Warehouse ,str _LocationId,Transdate _date,
NoYes _isPackingOrder)
{
ProdTable
prodTable;
InventDim
inventDim,inventDimloc;
ProdId ProdId;
InventDimId
InventDimId;
int month,year,
sysmonth,sysyear;
NoYes isPackingOrder =_isPackingOrder;
sysmonth
=DateTimeUtil::month(_date);
sysyear =
DateTimeUtil::year(_date);
select
firstonly inventDim
where inventDim.InventLocationId == _Warehouse
&& inventDim.InventSiteId ==_Site
&& inventDim.wMSLocationId ==_LocationId;
InventDimId =
inventDim.inventDimId;
while
select prodTable
order by prodTable.createdDateTime desc
//,prodTable.ProdId asc
where prodTable.InventDimId == InventDimId
&& prodTable.ItemId ==_itemId
&& prodTable.ProdPoolId == _PoolId
&& (prodTable.ProdStatus ==ProdStatus::Created || prodTable.ProdStatus
==ProdStatus::StartedUp)
&&(prodTable.QtySched -prodTable.QtyStUp) >= _qty
&& prodTable. WPackingOrder == isPackingOrder
{
month = DateTimeUtil::month(prodTable.DlvDate);
year =DateTimeUtil::year(prodTable.DlvDate);
if(month == sysmonth && year== sysyear)// && prodTable. WPackingOrder
==isPackingOrder && avlQty >= _qty)
{
ProdId = prodTable.ProdId;
break;
}
}
return
ProdId;
}
public ProdId CreateProductionOrder(real
_ProdQty,ItemId _item,str _locationId,str _site,str _BOM,str _RouteId,str
_poolId,str _Warehouse, str _costCenter, str _CostCenterGroup, str _Department,
NoYes _IspackingOrder, transdate _TransDate)
{
ProdId prodId;
ProdTable
prodTableLoc;
InventDim
inventDim;
ProdQtySched productionQty =_ProdQty;
ItemId productionItem = _item;
select
firstonly inventDim
where inventDim.wMSLocationId == _locationId
&& inventDim.InventSiteId ==_site
&& inventDim.InventLocationId ==_Warehouse;
InventDimParm
inventDimParm;
InventTable
inventTable;
inventDim.initValue();
inventTable =
InventTable::find(productionItem);
//Initialise the
base values
ttsbegin;
prodTableLoc.clear();
prodTableLoc.initValue();
prodTableLoc.ItemId = inventTable.ItemId;
prodTableLoc.initFromInventTable(inventTable);
prodTableLoc.DlvDate =DateStartMth(_TransDate);
prodTableLoc.QtySched = productionQty;
prodTableLoc.RemainInventPhysical = prodTableLoc.QtySched;
//Set the active
bom and route
if(_BOM)
{
prodTableLoc.BOMId =_BOM ;
}
/*else
{
prodTableLoc.BOMId = BOMVersion::findActive(prodTableLoc.ItemId,
prodTableLoc.BOMDate,
prodTableLoc.QtySched,
inventDim).BOMId;
prodTableLoc.initBOMVersion();
prodTableLoc.SkipCreateBOMLines = true;
}*/
if(_RouteId)
{
prodTableLoc.RouteId = _RouteId;
}
/* else
{
prodTableLoc.RouteId = RouteVersion::findActive(prodTableLoc.ItemId,
prodTableLoc.BOMDate,
prodTableLoc.QtySched,
inventDim).RouteId;
prodTableLoc.initRouteVersion();
prodTableLoc.SkipCreateRouteOperations = true;
}*/
prodTableLoc.ProdPoolId =_poolId;
prodTableLoc. WPackingOrder=_IspackingOrder;
prodTableLoc.DefaultDimension =
this.createDefaultDimension(_site,_CostCenterGroup,_costCenter,_Department);
prodTableLoc.InventDimId = inventDim.inventDimId;
prodTableLoc.insert();
ttscommit;
ProdId =
prodTableLoc.ProdId;
return
ProdId;
}
public DimensionDefault
createDefaultDimension(str _BusinessUnit, str _CostCenterGroup, str
_costCenter,str _Department)
{
DimensionAttributeValueSetStorage valueSetStorage = new
DimensionAttributeValueSetStorage();
DimensionDefault
result;
int
i;
DimensionAttribute dimensionAttribute;
DimensionAttributeValue dimensionAttributeValue;
container
conAttr = ["BusinessUnit", "CostCenterGroup",
"costCenter","Department"];
container
conValue = [_BusinessUnit, _CostCenterGroup, _costCenter,_Department];
str
dimValue;
for (i = 1; i
<= conLen(conAttr); i++)
{
dimensionAttribute = dimensionAttribute::findByName(conPeek(conAttr,i));
if (dimensionAttribute.RecId == 0)
{
continue;
}
dimValue = conPeek(conValue,i);
if (dimValue != "")
{
dimensionAttributeValue =
dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true);
valueSetStorage.addItem(dimensionAttributeValue);
}
}
result =
valueSetStorage.save();
//It reutrns the
value of type DimensionDefault
return
result;
}
public str ProdStartUP(ProdId _prodId,
Qty _qty,transdate _postDate)
{
ProdParmStartUp
ProdParmStartUp;
prodTable prodTable;
str
prodId =_prodId ;
ProdMultiStartUp
prodMultiStartUp = new prodMultiStartUp();
ProdStatusType
ProdStatusType;
ProdPurch
prodPurch = ProdPurch::newProd();
ttsbegin;
prodTable =
ProdTable::find(prodId);
prodMultiStartUp
= ProdMultiStartUp::construct(new Args());
RunBaseMultiParm::initParm(prodMultiStartUp);
prodMultiStartUp.insert(prodTable, prodMultiStartUp.defaultParmBuffer());
select
forupdate ProdParmStartUp where ProdParmStartUp.ProdId == prodId;
if(ProdParmStartUp.RecId)
{
prodParmStartUp.StartUpQty
= _qty;
prodParmStartUp.PostDate
= _postDate;
prodParmStartUp.PostNowBOM
= NoYes::No;
prodParmStartUp.PostNowRoute =
NoYes::No;
prodParmStartUp.StartUpProduction = NoYes::Yes;
prodParmStartUp.JournalShowInfo = NoYes::Yes;
prodParmStartUp.EndRouteCard =
NoYes::Yes;
prodParmStartUp.BOMAutoConsump =
BOMAutoConsump::Always;
ProdParmStartUp.update();
}
prodTable.status().runStartUp(ProdParmStartUp);
ttscommit;
return
prodId;
}
public str 1000
checkPostProdJournalTablePickingList(JournalId _journalID, W_ProductionOrderCreationAndPostingResponseContract
_response)
{
ProdJournalCheckPost ProdJournalCheckPost;
str message =" ";
ProdJournalTable
prodJournalTable = ProdJournalTable::find(_journalID, true);
try
{
ProdJournalCheckPost = ProdJournalCheckPostBOM::newJournalCheckPost(true,
true,
JournalCheckPostType::Post,
prodJournalTable.TableId,
prodJournalTable.JournalId);
ProdJournalCheckPost.parmThrowCheckFailed(true);
ProdJournalCheckPost.run();
}
catch(Exception::Warning)
{
message =this.ErrorMsg();
_response.parmErrorMessage(message);
}
catch(Exception::Error)
{
message =this.ErrorMsg();
_response.parmErrorMessage(message);
}
catch(Exception::Deadlock)
{
message =this.ErrorMsg();
_response.parmErrorMessage(message);
}
catch(Exception::UpdateConflict)
{
message =this.ErrorMsg();
_response.parmErrorMessage(message);
}
catch(Exception::DuplicateKeyException)
{
message =this.ErrorMsg();
_response.parmErrorMessage(message);
}
catch(Exception::CLRError)
{
System.Exception ex = CLRInterop::getLastException();
message =ex.Message;
_response.parmErrorMessage(message);
}
catch(Exception::ViewDataSourceValidation)
{
message =this.ErrorMsg();
_response.parmErrorMessage(message);
}
return
message;
}
public void prodReportFinished(ProjId
_proid,Qty _startQty,str _BOMNumber,str _JournalID)
{
ProdJournalTable
prodJournalTable;
ProdJournalBOM
prodJournalBOM;
BOM
bom;
ProdBOM
prodBOM;
InventQty
totalDryQty;
Args Args;
ProdMultiReportFinished ProdMultiReportFinished;
prodParmreportFinished prodParmreportFinished,prodParmreportFinishedUPD;
Boolean
RAF,Ended;
ProdTable
ProdTable = ProdTable::find(_proid);
ttsbegin;
Args = new
Args();
Args.parmEnum(0);
Args.record(prodTable);
ProdMultiReportFinished = ProdMultiReportFinished::construct(Args);
RunBaseMultiParm::initParm(ProdMultiReportFinished);
prodParmreportFinished = ProdMultiReportFinished.defaultParmBuffer();
ProdMultiReportFinished.insert(prodTable,prodParmreportFinished);
prodParmreportFinishedUPD =
prodParmreportFinished::find(prodParmreportFinished.ParmId,prodParmreportFinished.ProdId,True);
if(prodParmreportFinishedUPD)
{
prodParmreportFinishedUPD.selectForUpdate(true);
while select * from prodJournalTable
order by prodJournalTable.RecId desc
where prodJournalTable.ProdId == _proid
&& prodJournalTable.Posted == NoYes::Yes &&
prodJournalTable.JournalType == ProdJournalType::Picklist
&& prodJournalTable.JournalId == _JournalID
{
while select prodJournalBOM
join prodBOM
join bom
where prodJournalBOM.JournalId == prodJournalTable.JournalId &&
prodJournalBOM.InventTransId == prodBOM.InventTransId &&
prodbom.BOMRefRecId == bom.RecId
&& bom. WNotInclude == NoYes::No
{
if (bom. WInFactor)
{
totalDryQty += prodJournalBOM. WWeighingQty/bom. WInFactor;
}
else
{
totalDryQty += prodJournalBOM. WDryQty;
}
}
}
if(ProdTable::find(_proid). WPackingOrder == NoYes::No &&
ProdTable::find(_proid). WRAFStatus == NoYes::No)
{
prodParmreportFinishedUPD.QtyGood
= _startQty;
}
if(ProdTable::find(_proid). WRAFStatus == NoYes::Yes)
{
prodParmreportFinishedUPD.QtyGood =
totalDryQty;
}
prodParmreportFinishedUPD.RouteAutoConsump =
RouteAutoConsump::Never;
prodParmreportFinishedUPD.BOMAutoConsump =
BomAutoConsump::Never;
prodParmreportFinishedUPD.AcceptError =
Noyes::Yes;
prodParmreportFinishedUPD.EndJob
= NoYes::No;
prodParmreportFinishedUPD.ReportFinishProd = NoYes::Yes;
prodParmreportFinishedUPD.JournalShowInfo = NoYes::Yes;
prodParmreportFinishedUPD.update();
}
ttscommit;
ProdMultiReportFinished.run();
//ProdTable
prodTable;
//ProdMultiReportFinished prodMultiReportFinished;
//prodTable =
ProdTable::find(_proid);
//prodMultiReportFinished = ProdMultiReportFinished::construct(new
Args());
//RunBaseMultiParm::initParm(prodMultiReportFinished);
//prodMultiReportFinished.insert(prodTable,
prodMultiReportFinished.defaultParmBuffer());
//prodMultiReportFinished.run();
}
public str 1000 ErrorMsg()
{
SysInfologEnumerator sysInfologEnumerator;
SysInfologMessageStruct infoMessageStruct;
str
logMessage;
str
logString;
str
ret;
int
i;
#Define.NewLine('\n')
sysInfologEnumerator =
SysInfologEnumerator::newData(infolog.infologData());
while
(sysInfologEnumerator.moveNext())
{
i = 1;
if (logMessage)
{
logMessage += #Newline;
}
infoMessageStruct =
SysInfologMessageStruct::construct(sysInfologEnumerator.currentMessage());
while (i <= infoMessageStruct.prefixDepth())
{
logString = logString + infoMessageStruct.preFixTextElement(i) + '. ';
i++;
}
logString = logString + infoMessageStruct.message();
logMessage = logString;
//logMessage = logMessage + infoMessageStruct.message(); commented by
ratna
}
return
logMessage;
}
public UnitQty
prodJournalBOMWriteen(ProdJournalBOM _ProdJournalBOMtable)
{
InventQualityOrderTable inventQualityOrderTable;
InventQualityOrderLine
inventQualityOrderLine;
InventDim
inventDimQO, inventDimBOM;
boolean
isPassQOAvailable;
real
WTFMPercentage;
prodJournalBOM
prodJournalBOM,prodJournalBOMUpd;
prodJournalBOM =
_ProdJournalBOMtable;
if(prodJournalBOM.InventTransChildType ==
InventTransChildType::ProdJournalBOM)
{
while select ItemId,OrderStatus,OrderStatus,QualityOrderId,InventDimId from
inventQualityOrderTable
order by VALIDATEDDATETIME desc
where
inventQualityOrderTable.ItemId
== prodJournalBOM.ItemId
&&
inventQualityOrderTable.OrderStatus ==
InventTestOrderStatus::Pass
&& (inventQualityOrderTable.ReferenceType ==
InventTestReferenceType::Purch
|| inventQualityOrderTable.ReferenceType ==
InventTestReferenceType::Inventory)
{
inventDimQO =
InventDim::find(inventQualityOrderTable.InventDimId);
inventDimBOM =
InventDim::find(prodJournalBOM.InventDimId);
if( inventDimQO.InventSiteId ==
inventDimBOM.InventSiteId
&& inventDimQO.InventLocationId ==
inventDimBOM.InventLocationId
&& inventDimQO.wMSLocationId ==
inventDimBOM.wMSLocationId)
{
isPassQOAvailable = true;
break;
}
else
{
continue;
}
}
if(isPassQOAvailable)
{
select QualityOrderId,TestId, WWeightedAvgFeedMoisture from
inventQualityOrderLine
where inventQualityOrderLine.QualityOrderId ==
inventQualityOrderTable.QualityOrderId
&&
(inventQualityOrderLine.TestId ==
"Moisture"
||
inventQualityOrderLine.TestId ==
"PFM");
if(inventQualityOrderLine)
{
if(inventQualityOrderLine. WWeightedAvgFeedMoisture != prodJournalBOM. WWeighedAvgFeedMoisture)
{
return inventQualityOrderLine. WWeightedAvgFeedMoisture;
}
}
}
}
Return
inventQualityOrderLine. WWeightedAvgFeedMoisture;
}
public JournalId
createPickListJournal(ProjId _projid, real _qty, transdate _dlvDate)
{
ProdJournalCreateBOM prodJournalCreateBOM;
ProdJournalTable ProdJournalTable;
ProdJournalBOM ProdJournalBOM;
prodJournalCreateBOM = ProdJournalCreateBOM::construct();
prodJournalCreateBOM.parmProdId(_projid);
prodJournalCreateBOM.parmJournalNameId(ProdJournalName::standardJournalName(ProdJournalType::Picklist,
prodJournalCreateBOM.parmProdId()));
prodJournalCreateBOM.parmTransDate(_dlvDate);
prodJournalCreateBOM.parmBOMAutoConsump(BOMAutoConsump::Never);
prodJournalCreateBOM.parmProposalAsConsump(NoYes::No);
prodJournalCreateBOM.parmQtyCalc(_qty);
prodJournalCreateBOM.parmConsumpProposal(ProdBOMConsumpProposal::Qty);
prodJournalCreateBOM.run();
ttsbegin;
select forupdate
ProdJournalTable
order by JournalId desc
where ProdJournalTable.ProdId == _projid;
if(ProdJournalTable.RecId)
{
ProdJournalTable.selectForUpdate(true);
ProdJournalTable. WStartUpQty = _qty;
ProdJournalTable.write();
}
ttscommit;
return
ProdJournalTable.JournalId;
}
/// <summary>
///
/// </summary>
public InventDimId createInventDim(str
_LocationId,str _Site,str _Item,str _Warehouse)
{
InventDim
inventDim;
//select
firstonly inventDim
// where inventDim.InventLocationId == _Warehouse
// && inventDim.InventSiteId ==_Site
// && inventDim.wMSLocationId ==_LocationId
// && inventDim.configId == 'NA';
inventDim.clear();
inventDim.InventLocationId = _Warehouse;
inventDim.InventSiteId =_Site;
inventDim.wMSLocationId =_LocationId;
inventDim.configId = 'NA';
inventDim =
InventDim::findOrCreate(inventDim);
return
inventDim.inventDimId;
}
}