Sales Order Creation Service : AX 2012 X++ code
Sales Order Creation in AX with Config |
[AifCollectionTypeAttribute('return', Types::String), SysEntryPointAttribute(true)] |
public str CreateSalesOrder(SalesIdBase _salesId,CustAccount _customerId,InventSiteId _site,TaxGroup _taxGroup, |
comp_SoldToParty _soldToParty,comp_ShipTOParty _shipToParty,SalesPrice _price,CurrencyCode _currency,CustPaymTermId _paymTerm,SalesDlvTermId _delTerm, |
comp_IncoTerm2 _incoTerm,CustPurchaseOrder _custReq,CustRef _ref,SalesInventLocationId _warehouse,SalesFixedExchRate _exchRate,comp_FOCSpacesOffered _FOCspaces, |
SalesShippingDateRequested _deliveryDate,Addressing _billTo,Addressing _shipTo,ItemId _item,Str1260 _charname,Str1260 _charvalue,SalesOrderedQty _qty,comp_OrderType _orderType,comp_OrderCat _orderCategory,FormType_IN _saleTypeSalesTax,comp_SaleTypeExciseDuty _saleTypeExcise, |
String50 _domestic,String50 _export,String50 _e1Sale,string30 _FOCInformation,string30 _financer,MarkupValue _FOCSpares,MarkupValue _salesDed, |
MarkUpvalue _depotTransportCost,MarkUpValue _transportCust,MarkupValue _forward,MarkupValue _freight,MarkupValue _addnlCost,MarkUpValue _miscCharges, |
MarkupValue _extSalesComm,MarkUpvalue _speTax,MarkUpvalue _entTax,MarkupValue _demo,MarkUpValue _freeInsur,MarkUpValue _addnWarrCost,MarkUpValue addnlCredit, |
MarkUpValue _bucketCost,MarkUpValue _opCharges,MarkUpValue _promo,Markupvalue _dealComm,MarkupValue _percentdisc,MarkUpValue _cashDisc) |
{ |
str log; |
str log_1,log_2,log_3,log_4,log_5,log_6,log_7,log_8,log_9; |
Inventsite site; |
InventLocation ware; |
SalesTable header,salesTable,salesTablechk; |
SalesLine line_1,line_2; |
SalesLine_IN line_In,line_Inc; |
NoYes noyes; |
str component; |
container con,_conchar,_concharvalue; |
int i,j,configCount,k,counter; |
MarkupTable markTab; |
MarkupTrans trans; |
EcoResProductMaster ecoResProductMaster; |
EcoResConfiguration ecoResConfiguration; |
EcoResProductMasterConfiguration ecoResProductMasterConfiguration; |
EcoResDistinctProductVariant ecoResDistinctProductVariant; |
EcoResProductVariantConfiguration ecoResProductVariantConfiguration; |
EcoResconfigurationName _name; |
container prodDimensions; |
RefRecId ecoResDistinctProductVariantRecId; |
ConfigChoice config,configrec; |
int newconfigrec; |
ConfigGroup configGroup; |
ConfigGroupId groupId; |
TmpConfigId tempConfig; |
TmpConfigValue tempConfigValue; |
EcoResProductReleaseManagerBase releaseManager; |
InventDim dim; |
InventDimCombination comb; |
// AxSalesTable axsalesTable; |
SalesFormLetter salesFormLetter; |
CompanyInfo info; |
DirPartyLocation dirPartyLocation; |
TaxInformation_IN taxInformation; |
compProductMasterDefault prodMasterdef; |
_conchar = str2con(_charname,','); |
_concharvalue = str2con(_charvalue,','); |
select * from prodMasterdef; |
changeCompany(prodMasterdef.DealerCompany) |
{ |
select salesid from salesTablechk where salesTablechk.salesid ==_salesId; |
if(!salesTablechk.RecId && InventSite::exist(_site) && InventLocation::exist(_warehouse) && InventTable::exist(_item) && SalesTaxFormTypes_IN::exist(_saleTypeSalesTax) && TaxGroupHeading::exist(_taxGroup)) |
{ |
configcount++; |
ttsBegin; |
//creating header |
header.clear(); |
header.SalesId = _salesId; |
header.SalesType = SalesType::Sales; |
header.initValue(); |
header.CustAccount = _customerId; |
header.InvoiceAccount = _customerId; |
header.initFromCustTable(); |
header.InventSiteId = _site; |
header.InventLocationId = _warehouse; |
header.Payment = _paymTerm; |
header.ShippingDateRequested = _deliveryDate; |
header.CurrencyCode = _currency; |
header.LanguageId = systemparameters::getSystemLanguageId(); |
header.comp_SoldToParty = _soldToParty ; |
header.comp_ShipToParty = _shipToParty; |
header.comp_BilltoAddress = _billTo; |
header.comp_ShiptoAddress = _shipTo; |
header.DlvTerm = _delTerm; |
header.CustGroup = CustTable::find(_customerId).CustGroup; |
header.TaxGroup = _taxGroup; |
header.CustomerRef = _ref; |
header.PurchorderFormNum = _custReq; |
header.comp_OrderType = _orderType; |
header.comp_OrderCat = _orderCategory; |
header.comp_SaleTypeExciseDuty = _saleTypeExcise; |
header.comp_E1Sale = str2enum(noyes,_e1Sale); |
header.comp_Domestic = str2enum(NoYes,_domestic); |
header.comp_Export = str2enum(NoYes,_export); |
header.comp_IncoTerm2 = _incoTerm; |
header.comp_FOCSpacesOffered = _FOCspaces; |
header.comp_FocInformation = _FOCInformation; |
header.comp_Financer = _financer; |
header.insert(); |
line_1.initFromSalesTable(header,true); |
line_1.ItemId = _item; |
//line_1.QtyOrdered = _qty; |
line_1.SalesQty = _qty; |
line_1.initFromSalesLine_IN(line_1); |
// line_1.initFromSalesLineView_IN( |
//changes start |
select count(RecId) from configrec where configrec.ItemId == _item; |
{ |
newconfigrec = int642int(configrec.RecId) + 1; |
} |
//changes foc product |
if(!conLen(_conChar)==0 && strLen(_charname) != 0) |
{ |
_name = this.Config(_conChar,_conCharValue,_item); |
if(_name == '') |
{ |
//creating configuration on basis of characteristic name and values |
// _name = 'second'; |
_name = int2str(newconfigrec); |
ecoResConfiguration = EcoResConfiguration::findByName(_name); |
if (!ecoResConfiguration) |
{ |
ecoResConfiguration.clear(); |
ecoResConfiguration.initValue(); |
ecoResConfiguration.Name = _name; |
ecoResConfiguration.insert(); |
} |
select ecoResProductMaster where ecoResProductMaster.DisplayProductNumber == _item; |
Select firstonly ecoResProductMasterConfiguration where ecoResProductMasterConfiguration.ConfigProductMaster == ecoResProductMaster.RecId |
&& ecoResProductMasterConfiguration.Configuration == ecoResConfiguration.RecId; |
if (!ecoResProductMasterConfiguration) |
{ |
ecoResProductMasterConfiguration.clear(); |
ecoResProductMasterConfiguration.initValue(); |
ecoResProductMasterConfiguration.Configuration = ecoResConfiguration.RecId; |
ecoResProductMasterConfiguration.ConfigProductDimensionAttribute = EcoResProductDimensionAttribute::inventDimFieldId2DimensionAttributeRecId(fieldNum(InventDim, ConfigId)); |
ecoResProductMasterConfiguration.ConfigProductMaster = ecoResProductMaster.RecId; |
ecoResProductMasterConfiguration.insert(); |
} |
select tempConfig ; |
tempconfig.ConfigId = ecoResConfiguration.Name; |
tempConfig.doInsert(); |
for (i=1; i <= conlen(_conChar); i++) |
{ |
tempConfigValue.clear(); |
tempConfigValue.ConfigGroupId = conPeek(_conChar,i) ; |
tempConfigValue.ItemId = conPeek(_conChar,i)+'_'+ conPeek(_conCharValue,i); |
tempConfigValue.ConfigId = ecoResConfiguration.Name; |
tempConfigValue.GroupNum = counter; |
tempConfigValue.doInsert(); |
Counter++; |
config.clear(); |
config.initValue(); |
config.initFromTmpConfigValue(tempConfigValue); |
config.ItemId = _item; |
config.ConfigId = ecoResConfiguration.Name; |
config.Autogenerated = NoYes::No; |
config.insert(); |
} |
prodDimensions = EcoResProductVariantDimValue::getDimensionValuesContainer(_name); |
//Create Product search name |
ecoResDistinctProductVariant.DisplayProductNumber = EcoResProductNumberBuilderVariant::buildFromProductNumberAndDimensions('PC104',prodDimensions); |
//Create Product variant with Product and dimensions provided |
ecoResDistinctProductVariantRecId = EcoResProductVariantManager::createProductVariant(ecoResProductMasterConfiguration.ConfigProductMaster,ecoResDistinctProductVariant.DisplayProductNumber,prodDimensions); |
//Find newly created 4 Variant |
ecoResDistinctProductVariant = ecoResDistinctProductVariant::find(ecoResDistinctProductVariantRecId); |
//Now release the Product variant |
releaseManager = EcoResProductReleaseManagerBase::newFromProduct(ecoResDistinctProductVariant); |
releaseManager.release(); |
dim.configId = _name; |
} |
else |
{ |
dim.configId = _name; |
} |
} |
// dim.configId = InventTable::find(line.ItemId).StandardConfigId; |
dim.InventSiteId = _site; |
dim.InventLocationId = _warehouse; |
// dim.configId = _name; |
dim = InventDim::findOrCreate(dim); |
dim.write(); |
//creating line |
line_1.InventDimId = dim.inventDimId; |
comb = InventDimCombination::findByInventDim(line_1.ItemId,dim); |
line_1.RetailVariantId = comb.RetailVariantId ; |
line_1.createLine(true,true,true,false,true,true,false,false,'',true,true,false,null,0,''); |
select forUpdate line_2 where line_2.SalesId == line_1.SalesId; |
if(line_2.RecId) |
{ |
line_2.SalesPrice = _price; |
} |
line_2.modifiedField(fieldnum(SalesLine,SalesPrice)); |
line_2.update(); |
//allocating charges |
if(_FOCSpares != 0 ) |
{ |
markTab = MarkupTable::find((MarkupModuleType::Cust),'1'); |
trans.clear(); |
trans.initFromSalesLine(line_1); |
trans.initFromMarkupTable(marktab); |
trans.MarkupCategory = MarkupCategory::Pcs; |
trans.Value = _FOCSpares/_qty; |
trans.LineNum = k; |
trans.insert(); |
k++; |
} |
info = CompanyInfo::findByCompany_IN(curext()); |
dirPartyLocation = DirPartyLocation::findPrimaryPartyLocation(info.RecId); |
if (dirPartyLocation) |
{ |
line_In.CompanyLocation_IN = LogisticsLocation::find(dirPartyLocation.Location).RecId; |
select firstonly RecId from taxInformation |
where taxInformation.RegistrationLocation == LogisticsLocation::find(dirPartyLocation.Location).RecId |
&& taxInformation.IsPrimary == NoYes::Yes; |
} |
select forupdate line_IN where line_In.SalesLine == line_2.RecId; |
if(line_In.RecId) |
{ |
line_In.CompanyLocation_IN = LogisticsLocation::find(dirPartyLocation.Location).RecId; |
line_In.TaxInformation = taxInformation.RecId; |
line_In.SalesTaxFormTypes_IN = SalesTaxFormTypes_IN::findbyFormType(_saleTypeSalesTax).RecId; |
line_In.AssessableValue_IN = line_2.getMiscChargesAmount_IN(); |
line_In.ExciseRecordType_IN = ExciseRecordType_IN::RG23D; |
line_In.ExciseType_IN = ExciseType_IN::Trader; |
line_IN.update(); |
} |
//confirming Sales Order |
salesformletter = SalesFormletter::construct(DocumentStatus::Confirmation); |
salesTable = SalesTable::find(_salesId); |
salesFormLetter.update(salesTable); |
ttscommit; |
log = strfmt('Success : Sales Order Created successfully'); |
k = 1; |
} |
else |
{ |
if(salesTablechk.RecId) |
{ |
log_9 = strfmt('Saled Order %1 already exist',_salesId) ; |
} |
if(!InventSite::exist(_site)) |
{ |
log_1 = strfmt('Site %1 is not valid for SO %2',_site,_salesId) ; |
} |
if(!InventLocation::exist(_warehouse)) |
{ |
log_2 = strFmt('Warehouse %1 is not valid for SO %2',_warehouse,_salesId) ; |
} |
if(!InventTable::exist(_item)) |
{ |
log_3 = strFmt('Item %1 is not valid for SO %2',_item,_salesId) ; |
} |
if(!SalesTaxFormTypes_IN::exist(_saleTypeSalesTax)) |
{ |
log_4 = strFmt('SalesTax FormType %1 is not valid for SO %2',_saleTypeSalesTax,_salesId) ; |
} |
if(!TaxGroupHeading::exist(_taxGroup)) |
{ |
log_5 = strFmt('Tax Group %1 is not valid for SO %2',_taxGroup,_salesId) ; |
} |
log = strFmt("%1/n%2/n%3/n%4/n%5/n%6",log_9,log_1,log_2,log_3,log_4,log_5); |
} |
info(strFmt("SO Integration : %1 - %2 ",_salesId,log)); |
comp_RetailExceptionActivityLog::logEvent('Sales Order Creation:',infolog.export()); |
return log ; |
}//change company |
} |
Config Creation:
config creation |
public str config(container _conChar,Container _conCharValue,ItemId _item) |
{ |
ConfigChoice choice,_config; |
int length,i,choice_1,con,l; |
ItemId chosenItem; |
boolean configexist; |
ConfigIdStandard configname; |
container conTax ; |
length = conLen(_conChar); |
while select ConfigId from _config group by _config.ConfigId where _config.itemid == _item |
{ |
choice_1 = 0; |
for(i=1;i<=length;i++) |
{ |
chosenItem = conPeek(_conChar,i)+'_'+ conPeek(_conCharValue,i); |
select choice where choice.ConfigId == _config.ConfigId |
&& choice.ChosenItemId == chosenItem; |
if(choice) |
{ |
choice_1++; |
} |
} |
if(choice_1 == length) |
{ |
configexist = true; |
configname = choice.ConfigId; |
} |
if(configexist == true) |
{ |
break ; |
} |
} |
return configname; |
} |
No comments:
Post a Comment