The class below will be used to create and post pending vendor invoices along with the project information. In my case, I retrieved the data from a staging table and created the pending vendor invoices.
public class CreatePendingVendorInvoice
{
VendInvoiceInfoTable vendInvoiceInfoTable;
ProjParameters projParameters;
str ItemCompany;
str ItemProjId;
RecId ItemProjDimension;
/// <summary>
/// This method will be used to create the Pending vendor invoice header
/// </summary>
/// <param name = "_stagingTrans"></param>
public void createPendingVendorInvoiceHeader(DaxStagingTrans _stagingTrans)
{
projParameters = ProjParameters::find();
NumberSeq numberSeq = NumberSeq::newGetNum(ProjParameters::invoiceId());
vendInvoiceInfoTable.clear();
vendInvoiceInfoTable.initValue();
vendInvoiceInfoTable.DocumentOrigin = DocumentOrigin::Manual;
vendInvoiceInfoTable.InvoiceAccount = this.getVendorAccount();
vendInvoiceInfoTable.defaultRow(null, null, true);
vendInvoiceInfoTable.Num = numberSeq.num();
vendInvoiceInfoTable.VendInvoiceSaveStatus = VendInvoiceSaveStatus::Pending;
vendInvoiceInfoTable.DocumentDate = _stagingTrans.JournalDate;
vendInvoiceInfoTable.ReceivedDate = _stagingTrans.JournalDate;
vendInvoiceInfoTable.TransDate = _stagingTrans.JournalDate;
vendInvoiceInfoTable.LastMatchVariance = LastMatchVarianceOptions::OK;
vendInvoiceInfoTable.RequestStatus = VendInvoiceRequestStatus::Approved;
vendInvoiceInfoTable.insert();
this.createPendingVendorInvoiceLine(_stagingTrans);
}
/// <summary>
/// This method used to create the Pending Vendor incvoice lines
/// </summary>
/// <param name = "_stagingTrans">DaxStagingTrans</param>
public void createPendingVendorInvoiceLine(DaxStagingTrans _stagingTrans)
{
VendInvoiceInfoLine vendInvoiceInfoLine;
vendInvoiceInfoLine.clear();
vendInvoiceInfoLine.initValue();
vendInvoiceInfoLine.DeliveryName = vendInvoiceInfoTable.DeliveryName;
vendInvoiceInfoLine.TableRefId = vendInvoiceInfoTable.TableRefId;
vendInvoiceInfoLine.currencyCode = vendInvoiceInfoTable.CurrencyCode;
vendInvoiceInfoLine.LineNum = 1;
vendInvoiceInfoLine.InvoiceAccount = vendInvoiceInfoTable.InvoiceAccount;
vendInvoiceInfoLine.OrderAccount = vendInvoiceInfoTable.OrderAccount;
vendInvoiceInfoLine.ProcurementCategory = projParameters.ANTHProcurCategory;
vendInvoiceInfoLine.modifiedField(fieldNum(VendInvoiceInfoLine, ProcurementCategory));
vendInvoiceInfoLine.ReceiveNow = 1;
vendInvoiceInfoLine.PurchUnit = projParameters.ANTHPurchUnit;
vendInvoiceInfoLine.DocumentOrigin = DocumentOrigin::Manual;
container conAttribute = ANTHConcurCreateGeneralJournalService::getFDFromParameters();
container convalue = this.getProjectDimensions(conAttribute, _stagingTrans);
vendInvoiceInfoLine.DefaultDimension = ANTHConcurCreateGeneralJournalService::createDefaultDimension(conAttribute, convalue);
vendInvoiceInfoLine.insert();
if (vendInvoiceInfoLine)
{
VendInvoiceInfoLine_Project vendInvoiceInfoLine_Project;
vendInvoiceInfoLine_Project.VendInvoiceInfoLineRefRecId = vendInvoiceInfoLine.RecId;
vendInvoiceInfoLine_Project.ProjDataAreaId = ItemCompany;
vendInvoiceInfoLine_Project.ProjId = ItemProjId;
vendInvoiceInfoLine_Project.ProjCategoryId = _stagingTrans.Expensecategory;
vendInvoiceInfoLine_Project.ProjLinePropertyId = CreatePendingVendorInvoice::findLineProperty();
vendInvoiceInfoLine_Project.TransDate = _stagingTrans.JournalDate;
vendInvoiceInfoLine_Project.ProjSalesUnitId = UnitOfMeasure::findBySymbol(projParameters.ANTHPurchUnit).RecId;
vendInvoiceInfoLine_Project.ProjSalesCurrencyId = _stagingTrans.Currency;
vendInvoiceInfoLine_Project.TransferCurrency = _stagingTrans.Currency;
vendInvoiceInfoLine_Project.TransferPrice = _stagingTrans.Costamount;
vendInvoiceInfoLine_Project.ANTHConcurTransactionID = _stagingTrans.ConcurTransactionID;
vendInvoiceInfoLine_Project.ProjTaxGroupId = '';
vendInvoiceInfoLine_Project.ProjTaxItemGroupId = '';
vendInvoiceInfoLine_Project.insert();
}
}
/// <summary>
/// This method used to Post the Vendor invoice
/// </summary>
public void postInvoice()
{
PurchFormLetter purchFormLetter;
purchFormLetter = PurchFormLetter_Invoice::newFromSavedInvoice(vendInvoiceInfoTable);
purchFormLetter.purchParmUpdate(null);
purchFormLetter.parmId('');
purchFormLetter.initNewPurchParmUpdate();
purchFormLetter.proforma(false);
purchFormLetter.reArrangeNow(false);
purchFormLetter.update(vendInvoiceInfoTable,
vendInvoiceInfoTable.Num,
purchFormLetter.transDate(),
PurchUpdate::All,
AccountOrder::None,
purchFormLetter.proforma(),
purchFormLetter.printFormLetter(),
false,
purchFormLetter.creditRemaining(),
conNull(),
true);
}
/// <summary>
/// This method used to retrieve the Default Dimensions
/// </summary>
/// <param name = "_attribute">Container</param>
/// <param name = "_stagingTrans">DaxStagingTrans</param>
/// <returns>Container</returns>
private container getProjectDimensions(container _attribute, DaxStagingTrans _stagingTrans)
{
// DeptCC-ProfitCenter-PRODGRP-UnifiedProductID-Customer-Vendor
return [_stagingTrans.Costcenter, projParameters.DAXProfitCenter,
CreatePendingVendorInvoice::getDimensionValue(orderItemProjDimension, conPeek(_attribute, 3)),
CreatePendingVendorInvoice::getDimensionValue(orderItemProjDimension, conPeek(_attribute, 4)),
CreatePendingVendorInvoice::getDimensionValue(orderItemProjDimension, conPeek(_attribute, 5))];
}
/// <summary>
/// Gets the display value from the Dimension Recid
/// </summary>
/// <param name = "_dimension">RecId</param>
/// <param name = "_dimensionName">Str</param>
/// <returns>DimensionValue</returns>
public static DimensionValue getDimensionValue(RecId _dimension, str _dimensionName)
{
DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage ;
DimensionAttribute dimensionAttribute;
DimensionValue dimensionValue;
dimensionAttributeValueSetStorage = dimensionAttributeValueSetStorage::find(_dimension);
dimensionAttribute = dimensionAttribute::findbyname(_dimensionName);
dimensionValue = dimensionAttributeValueSetStorage.getDisplayValueByDimensionAttribute(dimensionAttribute.recId);
return dimensionValue;
}
public void OrderDetails(container _OrderCon)
{
[orderItemCompany, orderItemProjId, orderItemProjDimension] = _OrderCon;
}
public str getVendorAccount()
{
DirPartyView partyView;
DirPartyRecId partyId = CompanyInfo::findDataArea(orderItemCompany).RecId;
select firstonly AccountNum from partyView
where partyView.Party == partyId && partyView.RoleType == DirPartyRoleType::Vendor && partyView.DataArea == curExt();
return partyView.AccountNum;
}
public static CreatePendingVendorInvoice construct(container _OrderCon)
{
CreatePendingVendorInvoice concurCreatePendingVendorInvoice = new CreatePendingVendorInvoice();
concurCreatePendingVendorInvoice.OrderDetails(_OrderCon);
return concurCreatePendingVendorInvoice;
}
public static str findLineProperty()
{
ProjLineProperty projLineProperty;
select firstonly LinePropertyId from projLineProperty
where projLineProperty.ToBeInvoiced == false;
return projLineProperty.LinePropertyId;
}
public static ResourceView findResource(str _resourceId)
{
ResourceView resource;
select firstonly resource
where resource.ResourceId == _resourceId;
return resource;
}
}Thanks !!
No comments:
Post a Comment