SalesTable salesTable;
SalesLine salesLine;
CustTable custTable= custTable::find("Test123"); // assume populated earlier
InventTable inventTable; // assume populated earlier
// Generate SalesId using number sequence
NumberSeq num = NumberSeq::newGetNum(NumberSeqReference::findReference(extendedTypeNum(ProArSalesId)));
SalesId salesId = num.num();
salesTable.initValue();
salesTable.SalesId = salesId; // Assign generated SalesId
num.used(); // Mark number sequence as consumed
// Initialize header values from customer
salesTable.CustAccount = custTable.AccountNum;
salesTable.initFromCustTable();
// Payment and currency settings
salesTable.PaymMode = CustPaymModeTable::find("Test").PaymMode;
salesTable.CurrencyCode = 'USD';
salesTable.LanguageId = '';
// Dates
salesTable.ShippingDateRequested = today();
salesTable.ReceiptDateRequested = today();
salesTable.DeliveryDate = salesTable.ShippingDateRequested;
// Intercompany fields
salesTable.InterCompanyOrder = NoYes::No;
salesTable.InterCompanyCompanyId = '';
salesTable.InterCompanyAutoCreateOrders = NoYes::No;
salesTable.InterCompanyDirectDelivery = NoYes::No;
salesTable.InterCompanyAllowIndirectCreation = NoYes::No;
// Dimensions
salesTable.DefaultDimension = DimensionDefaultFacade::serviceMergeDefaultDimensions( 34556578437,custTable.DefaultDimension);
// Taxes
salesTable.TaxGroup = "";
// Source document header
SourceDocumentHeader sourceDocumentHeader;
sourceDocumentHeader.TypeEnumName = enumStr(SourceDocument_ProductSale);
sourceDocumentHeader.TypeEnumValue = SourceDocument_ProductSale::SalesOrder;
sourceDocumentHeader.AccountingStatus = SourceDocumentAccountingStatus::InProcess;
salesTable.SourceDocumentHeader = SourceDocumentHeader::createSourceDocumentHeader(tableNum(SalesTable),
sourceDocumentHeader);
// Validate and insert SalesTable
if (salesTable.validateWrite())
{
salesTable.insert();
}
// ----------------------------------------------------------------------
// Create SalesLine
// ----------------------------------------------------------------------
InventDim inventDim, inventDimSales;
InventTableModule salesTableModule = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Sales);
InventItemOrderSetupMap inventItemOrderSetupMap = InventItemOrderSetupMap::findDefault(
inventTable.ItemId,
InventItemOrderSetupMap::module2SetupType(ModuleInventPurchSales::Sales));
// Build inventDim
inventDim.InventSiteId = salesTableModule.inventSiteId() ? salesTableModule.inventSiteId() : inventItemOrderSetupMap.inventSiteId();
inventDim.InventLocationId = salesTableModule.inventLocationId() ? salesTableModule.inventLocationId() : inventItemOrderSetupMap.inventLocationId();
inventDimSales = InventDim::findOrCreate(inventDim);
salesLine.clear();
salesLine.initValue(salesTable.SalesType);
salesLine.initFromSalesTable(salesTable);
// Line-specific details
salesLine.TaxWithholdGroup = TaxWithholdGroupHeading::find("");
salesLine.ItemId = inventTable.ItemId;
salesLine.Name = InventTable::name(inventTable.ItemId);
salesLine.TaxItemGroup = salesTableModule.TaxItemGroupId;
// Line number
salesLine.LineNum = SalesLine::lastLineNum(salesLine.SalesId) + 1.0;
salesLine.LineCreationSequenceNumber = real2int(salesLine.LineNum);
// InventTransId from number sequence
salesLine.InventTransId = NumberSeq::newGetNum(InventParameters::numRefInventTransId()).num();
// Dimensions
salesLine.TaxWithholdItemGroupHeading_ = salesTableModule.TaxWithholdItemGroupHeading_TH;
salesLine.InventDimId = inventDimSales.InventDimId;
salesLine.SalesUnit = salesTableModule.UnitId;
// Barcode lookup
InventItemBarcode inventItemBarcode = InventItemBarcode::findSalesBarcodeDimension( salesLine.ItemId,
salesLine.inventDim(), '',salesLine.SalesUnit);
if (inventItemBarcode.RecId)
{
salesLine.BarCode = inventItemBarcode.ItemBarCode;
salesLine.BarCodeType = inventItemBarcode.BarcodeSetupId;
}
// Pricing and quantities
salesLine.PriceUnit = salesTableModule.PriceUnit;
salesLine.SalesPrice = 90;
salesLine.SalesQty = 5;
salesLine.DefaultDimension = DimensionDefaultFacade::serviceMergeDefaultDimensions(3466899223,
custTable.DefaultDimension,inventTable.DefaultDimension);
salesLine.RemainSalesPhysical = salesLine.SalesQty;
salesLine.LineAmount = salesLine.calcLineAmount();
salesLine.RevRecContractStartDate = today();
salesLine.TaxGroup = '';
// Source document line
SourceDocumentLine sourceDocumentLine;
sourceDocumentLine.SourceDocumentHeader = salesLine.salesTable().SourceDocumentHeader;
sourceDocumentLine.TypeEnumName = enumStr(SourceDocumentLine_ProductSale);
sourceDocumentLine.TypeEnumValue = SourceDocumentLine_ProductSale::SalesOrderLine;
sourceDocumentLine.AccountingStatus = SourceDocumentLineAccountingStatus::Draft;
// Insert SalesLine
ttsBegin;
salesLine.SourceDocumentLine = SourceDocumentLine::createSourceDocumentLine(tableNum(SalesLine), sourceDocumentLine);
salesLine.doInsert();
ttsCommit;