Sales Order Creation in AX with Config
public str CreateSalesOrder(SalesIdBase _salesId,CustAccount _customerId,InventSiteId _site,TaxGroup _taxGroup,
)
{
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