boolean postInventTransferOrderReceive()
{
inventTransferParmTable inventTransferParmTable;
InventTransferMultiReceive inventTransferMultiReceive;
YIP_InventTransferSectionDetails table, lastReceDetails, updateRemainStatus;
Num parmId;
boolean ret = true;
inventTransferJour inventTransferJour;
InventTransferJourLine inventTransferJourLine;
inventJournalTable inventJournalTable;
str errorMsg, voucherId;
inventTransferLine inventTransferLine, inventTransferLineUpd;
qty packQty, qtyOver, qtyUnOver, minQty, maxQty, qtyActReceived,qtyLoss;
percent subOverPct;
int lastSectionId = YIP_InventTranferSection::getLastSectionId(this.TransferId);
int fixRate;
;
fixRate = YIP_InventItemCoal::exist(this.ItemId) == true ? 100 : 10;
select count(recId) from lastReceDetails
where lastReceDetails.InventTransId == this.InventTransId &&
lastReceDetails.SectionId == lastSectionId &&
lastReceDetails.VoucherId == "";
if (lastReceDetails.RecId == 1)
{
inventTransferLine = this.inventTransferLine();
/*
select minof(TransferStatus) from table where table.InventTransId == this.InventTransId;
if (table.TransferStatus != InventTransferStatus::Received)
throw checkFailed(strfmt("当前转移批次[%1]所有分段明细状态必须为[%2].",this.InventTransId,InventTransferStatus::Received));
*/
packQty = inventTransferLine.YIP_getQtyReceivedSection();
qtyActReceived = inventTransferLine.YIP_getQtyReceivedSection();//YIP_QtyActReceived;
qtyOver = packQty * inventTransferLine.OverDeliveryPct / fixRate;//超交
qtyUnOver = packQty * inventTransferLine.UnderDeliveryPct / fixRate;//欠交
minQty = packQty - qtyUnOver;
maxQty = packQty + qtyOver;
subOverPct = (qtyActReceived - packQty) / (packQty ? packQty : 1) * fixRate;
if (subOverPct > inventTransferLine.OverDeliveryPct)
throw checkFailed(strfmt("@SYS24920",subOverPct,inventTransferLine.OverDeliveryPct));
subOverPct = (packQty - qtyActReceived) / (packQty ? packQty : 1) * fixRate;
if (subOverPct > inventTransferLine.UnderDeliveryPct)
throw checkFailed(strfmt("@SYS24921",subOverPct, inventTransferLine.UnderDeliveryPct));
}
qtyActReceived = this.QtyReceive;
if (!box::yesNo(strfmt("您确认要过账接收吗[实际收货数量(%1)]?", num2str(qtyActReceived, 1, 2, 1, 2)),
dialogButton::No, "接收过账"))
return false;
try
{
ttsbegin;
inventTransferLine = this.inventTransferLine(true);
if (lastReceDetails.RecId == 1)
{
inventTransferLine.QtyReceiveNow = inventTransferLine.YIP_QtyDelivery - inventTransferLine.YIP_QtyActReceived;
inventTransferLine.YIP_QtyActReceived= inventTransferLine.YIP_getQtyReceivedSection();
}
else
{
inventTransferLine.QtyReceiveNow = this.QtyReceive;
inventTransferLine.YIP_QtyActReceived += this.QtyReceive;
}
inventTransferLine.doUpdate();
inventTransferMultiReceive = InventTransferMultiReceive::construct();
parmId = runBaseMultiParm::getSysParmId();
inventTransferParmTable.clear();
inventTransferParmTable.initValue();
inventTransferParmTable.ParmId = parmId;
inventTransferParmTable.TransferId = this.TransferId;
inventTransferParmTable.UpdateType = InventTransferUpdateType::Receive;
inventTransferParmTable.ReceiveUpdateQty= InventTransferReceiveUpdateQty::ReceiveNow;
inventTransferParmTable.EditLines = true;
inventTransferParmTable.ExplodeLines = true;
inventTransferParmTable.UpdatedBy = emplTable::userId2EmplId(curUserId());
inventTransferParmTable.YIP_RefInventTransId = inventTransferLine.InventTransIdReceive;
//inventTransferParmTable.AutoReceiveQty = NoYes::No;
inventTransferParmTable.insert();
//Receive
inventTransferMultiReceive.runUpdate(inventTransferParmTable);
if (lastReceDetails.RecId == 1)
{
qtyLoss = inventTransferLine.YIP_getQtyReceivedSection() - inventTransferLine.YIP_getQtyShippedSection();
if (qtyLoss)
{
// update loss rate
inventJournalTable = this.createPLInventJournalTrans(true);
inventTransferLineUpd = this.inventTransferLine(true);
if (inventTransferLineUpd)
{
inventTransferLineUpd.YIP_LossRate = (- qtyLoss / inventTransferLineUpd.YIP_QtyDelivery) * fixRate;
inventTransferLineUpd.YIP_LossProfitJournal = inventJournalTable.JournalId;
inventTransferLineUpd.doUpdate();
}
}
}
// update section details status
table = YIP_InventTransferSectionDetails::findRecId(this.RecId, true);
if (table)
{
select firstonly inventTransferJour
where inventTransferJour.YIP_ParmId == inventTransferParmTable.ParmId;
if (inventTransferJour)
{
table.TransferStatus = InventTransferStatus::Received;
table.VoucherId = inventTransferJour.VoucherId;
table.RemainStatus = InventTransferRemainStatus::None;
table.LossRate = (table.QtyDelivery - table.QtyReceive) / table.QtyDelivery * fixRate;
table.write();
}
if (lastReceDetails.RecId == 1)
{
update_recordset updateRemainStatus
setting RemainStatus = InventTransferRemainStatus::None
where updateRemainStatus.InventTransId == this.InventTransId &&
updateRemainStatus.RemainStatus != InventTransferRemainStatus::None;
}
}
ttscommit;
}
catch
{
ret = false;
ttsabort;
errorMsg = aifUtil::getClrErrorMessage();
if (errorMsg)
error(errorMsg);
error("catch exception.");
}
return ret;
}