class INTC_CreatePurchaseRequisition
{
PurchReqTable purchReqTable;
PurchReqLine purchReqLine;
INTC_MaterialTakeOffTable materialTakeOffTable;
Name procurementCategoryId;
INTC_MTKONumber mtkoNumber;
public void createHeader(RecId _recId)
{
select materialTakeOffTable where materialTakeOffTable.RecId == _recId;
if(materialTakeOffTable.INTC_MTKONumber != mtkoNumber)
{
purchReqTable.clear();
purchReqTable.initValue();
purchReqTable.PurchReqId = NumberSeq::newGetNum(PurchReqTable::numRefPurchReqId()).num();
purchReqTable.PurchReqName = ProjTable::find(materialTakeOffTable.ProjId).Name;
purchReqTable.ProjId = materialTakeOffTable.ProjId;
purchReqTable.INTC_MTKONumber = materialTakeOffTable.INTC_MTKONumber;
purchReqTable.insert();
info(strFmt("Purchase requisition # %1 created", purchReqTable.PurchReqId));
}
mtkoNumber = materialTakeOffTable.INTC_MTKONumber;
this.createLines(_recId);
}
public void createLines(RecId _recId)
{
INTC_MaterialTakeOffTable materialTakeOffTableUpdate;
InventTable inventTable;
InventDim inventDim;
ProjTable projTable = ProjTable::find(materialTakeOffTable.ProjId);
ProjInvoiceTable projInvoiceTable;
select projInvoiceTable where projInvoiceTable.ProjInvoiceProjId == projTable.ProjInvoiceProjId;
inventTable = InventTable::find(materialTakeOffTable.ItemId);
purchReqLine.clear();
purchReqLine.initValue();
purchReqLine.initFromPurchReqTable(purchReqTable);
purchReqLine.initFromInventTable(inventTable);
purchReqLine.ItemId = materialTakeOffTable.ItemId;
purchReqLine.BuyingLegalEntity = CompanyInfo::find().RecId;
purchReqLine.InventDimIdDataArea = curext();
purchReqLine.PurchQty = materialTakeOffTable.QtyToOrder;
inventDim.InventSiteId = materialTakeOffTable.InventSiteId;
inventDim.InventLocationId = materialTakeOffTable.InventLocationId;
purchReqLine.InventDimId = inventDim::findOrCreate(inventDim).inventDimId;
purchReqLine.CurrencyCode = Ledger::accountingCurrency(CompanyInfo::current());
purchReqLine.ProjSalesCurrencyId = projInvoiceTable.CurrencyId;
purchReqLine.ProjCategoryId = materialTakeOffTable.ProjCategoryId;
purchReqLine.ProjId = materialTakeOffTable.ProjId;
purchReqLine.ProcurementCategory = materialTakeOffTable.ProcureCategoryRecId;
purchReqLine.PurchPrice = this.unitCost(materialTakeOffTable.ItemId, materialTakeOffTable.InventSiteId, materialTakeOffTable.InventLocationId);
purchReqLine.LineAmount = purchReqLine.PurchPrice * materialTakeOffTable.QtyToOrder;
purchReqLine.insert();
select forupdate materialTakeOffTableUpdate where materialTakeOffTableUpdate.RecId == _recId;
ttsbegin;
materialTakeOffTableUpdate.PurchReqId = purchReqTable.PurchReqId;
materialTakeOffTableUpdate.update();
ttscommit;
}
private real unitCost(ItemId _itemId, InventSiteId _site, InventlocationId _warehouse)
{
InventDim inventDim;
InventDimParm inventDimParm;
InventOnHand inventOnHand;
InventSum inventSum;
select firstOnly inventSum where inventSum.ItemId == _itemId;
inventdim.InventSiteId = _site;
inventDim.InventLocationId = _warehouse;
inventDimParm.initFromInventDim(inventDim);
inventOnHand = InventOnHand::newItemDim(inventSum.ItemId, inventDim, inventDimParm);
return inventOnHand.costPricePcs();
}
}
{
PurchReqTable purchReqTable;
PurchReqLine purchReqLine;
INTC_MaterialTakeOffTable materialTakeOffTable;
Name procurementCategoryId;
INTC_MTKONumber mtkoNumber;
public void createHeader(RecId _recId)
{
select materialTakeOffTable where materialTakeOffTable.RecId == _recId;
if(materialTakeOffTable.INTC_MTKONumber != mtkoNumber)
{
purchReqTable.clear();
purchReqTable.initValue();
purchReqTable.PurchReqId = NumberSeq::newGetNum(PurchReqTable::numRefPurchReqId()).num();
purchReqTable.PurchReqName = ProjTable::find(materialTakeOffTable.ProjId).Name;
purchReqTable.ProjId = materialTakeOffTable.ProjId;
purchReqTable.INTC_MTKONumber = materialTakeOffTable.INTC_MTKONumber;
purchReqTable.insert();
info(strFmt("Purchase requisition # %1 created", purchReqTable.PurchReqId));
}
mtkoNumber = materialTakeOffTable.INTC_MTKONumber;
this.createLines(_recId);
}
public void createLines(RecId _recId)
{
INTC_MaterialTakeOffTable materialTakeOffTableUpdate;
InventTable inventTable;
InventDim inventDim;
ProjTable projTable = ProjTable::find(materialTakeOffTable.ProjId);
ProjInvoiceTable projInvoiceTable;
select projInvoiceTable where projInvoiceTable.ProjInvoiceProjId == projTable.ProjInvoiceProjId;
inventTable = InventTable::find(materialTakeOffTable.ItemId);
purchReqLine.clear();
purchReqLine.initValue();
purchReqLine.initFromPurchReqTable(purchReqTable);
purchReqLine.initFromInventTable(inventTable);
purchReqLine.ItemId = materialTakeOffTable.ItemId;
purchReqLine.BuyingLegalEntity = CompanyInfo::find().RecId;
purchReqLine.InventDimIdDataArea = curext();
purchReqLine.PurchQty = materialTakeOffTable.QtyToOrder;
inventDim.InventSiteId = materialTakeOffTable.InventSiteId;
inventDim.InventLocationId = materialTakeOffTable.InventLocationId;
purchReqLine.InventDimId = inventDim::findOrCreate(inventDim).inventDimId;
purchReqLine.CurrencyCode = Ledger::accountingCurrency(CompanyInfo::current());
purchReqLine.ProjSalesCurrencyId = projInvoiceTable.CurrencyId;
purchReqLine.ProjCategoryId = materialTakeOffTable.ProjCategoryId;
purchReqLine.ProjId = materialTakeOffTable.ProjId;
purchReqLine.ProcurementCategory = materialTakeOffTable.ProcureCategoryRecId;
purchReqLine.PurchPrice = this.unitCost(materialTakeOffTable.ItemId, materialTakeOffTable.InventSiteId, materialTakeOffTable.InventLocationId);
purchReqLine.LineAmount = purchReqLine.PurchPrice * materialTakeOffTable.QtyToOrder;
purchReqLine.insert();
select forupdate materialTakeOffTableUpdate where materialTakeOffTableUpdate.RecId == _recId;
ttsbegin;
materialTakeOffTableUpdate.PurchReqId = purchReqTable.PurchReqId;
materialTakeOffTableUpdate.update();
ttscommit;
}
private real unitCost(ItemId _itemId, InventSiteId _site, InventlocationId _warehouse)
{
InventDim inventDim;
InventDimParm inventDimParm;
InventOnHand inventOnHand;
InventSum inventSum;
select firstOnly inventSum where inventSum.ItemId == _itemId;
inventdim.InventSiteId = _site;
inventDim.InventLocationId = _warehouse;
inventDimParm.initFromInventDim(inventDim);
inventOnHand = InventOnHand::newItemDim(inventSum.ItemId, inventDim, inventDimParm);
return inventOnHand.costPricePcs();
}
}
No comments:
Post a Comment