Saturday, April 16, 2016

SALES QUOTE CREATION AX 2012 X++ CUSTOM WEB SERVICE

SALES QUOTE CREATION AX 2012 
X++ CUSTOM WEB SERVICE

[AifCollectionTypeAttribute('return', Types::String), SysEntryPointAttribute(true)]
public str CreateQuote(QuotationIdBase _quoteId,smmBusRelAccount _prospectId,CustAccount _customerId,LogisticsAddressing _billToAddress,LogisticsAddressing _shipToAddress,CustCurrencyCode _currency,
                        InventSiteName _site,InventLocationName _warehouse,ItemIdSmall _item,SalesQty _qty,comp_OrderType _orderType,comp_OrderCat _orderCategory,FormType_IN _saleTypeSalesTax,comp_SaleTypeExciseDuty   _saleTypeExcise,
                        String50 _domestic,String50 _export,String50 _e1Sale,string50 _price,TaxGroup _taxGroup,MarkupValue _freight)
{

    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;
    SalesQuotationTable             quotation,quotationIdchk;
    SalesQuotationLine              line,line_2;
    InventDim                       dim;
    InventItemOrderSetupType        setupType   = InventItemOrderSetupType::Invent;
    InventTable                     inventTable;
    CustTable                       cust;
    InventDimCombination            comb;
    NoYes                           noyes;
    TmpTaxWorkTrans                 tmpTax;
    SalesQuotationTable             salesQuotationTable;
    SalesQuotationTotals_Sales      salesQuotationTotals;
    TaxTable                        taxtable;
    str                             component;
    container                       con;
    int                             i,k ;
    // changes
    compProductMasterDefault         prodMasterDefault;
    MarkupTable                             markTab;
    MarkupTrans                             trans;

    select * from prodMasterDefault;

   if(_orderCategory == 'Dealer-Customer')
            changeCompany(prodMasterDefault.DealerCompany)
    {  // Validating from masters
        select * from quotationIdchk where quotationIdchk.QuotationId == _quoteId;

     if(!quotationIdchk.RecId &&InventSite::exist(_site) && InventLocation::exist(_warehouse) && InventTable::exist(_item) && SalesTaxFormTypes_IN::exist(_saleTypeSalesTax)  &&  TaxGroupHeading::exist(_taxGroup))

        {

            ttsBegin;
            //creating header
            quotation.clear();
            quotation.initValue();
            quotation.CustAccount = _customerId;
            quotation.QuotationName = _customerId;
            quotation.InvoiceAccount = _customerId;
            quotation.initFromCustTable(true);
            quotation.QuotationId = _quoteId;
            quotation.BusRelAccount = _prospectId;
            quotation.QuotationStatus  = SalesQuotationStatus::Created;
            quotation.CurrencyCode = _currency;
            quotation.InventSiteId = _site;
            quotation.InventLocationId = _warehouse;
            quotation.ShippingDateRequested = systemDateGet();
            quotation.LanguageId = SystemParameters::getSystemLanguageId();
            quotation.comp_OrderType = _orderType;
            quotation.comp_OrderCat  = _orderCategory;
            quotation.comp_SaleTypeExciseDuty = _saleTypeExcise;
            quotation.comp_E1Sale = str2enum(noyes,_e1Sale);
            quotation.comp_Domestic = str2enum(NoYes,_domestic);
            quotation.comp_Export = str2enum(NoYes,_export);
            quotation.insert();
            //creating line
            line.initValue();
            line.initFromSalesQuotationTable(quotation);
            line.initFromCustTable();
            inventTable = InventTable::find(_item);
            line.initFromInventTable(inventTable);
            line.ItemId = _item;
            //creating Inventory Dimensions
            dim.InventSiteId = _site;
            dim.InventLocationId  =_warehouse;
           // dim.configId = InventTable::find(line.ItemId).StandardConfigId;
            dim.configId = prodMasterDefault.DefaultConfig;
            dim = InventDim::findOrCreate(dim);
            dim.write();
            line.SalesQty = _qty;
            line.CurrencyCode = _currency;
            line.ShippingDateRequested = systemDateGet();
            line.InventDimId = dim.inventDimId;
            line.SalesTaxFormTypes_IN = SalesTaxFormTypes_IN::findbyFormType(_saleTypeSalesTax).RecId;
            line.initFromSalesQuotationLine_IN(line);
            comb = InventDimCombination::findByInventDim(line.ItemId,dim);
            line.RetailVariantId = comb.RetailVariantId  ;
            line.ExciseTariffCodes_IN = Inventtable::find(_item).ExciseTariffCodes_IN;
            line.createLine(true,true,false,false,false,false,'',false);


            markTab = MarkupTable::find((MarkupModuleType::Cust),'6');
            trans.clear();
            trans.initFromSalesQuotationLine(line);
            trans.initFromMarkupTable(marktab);
            trans.MarkupCategory = MarkupCategory::Pcs;
            trans.Value = _Freight;
            trans.LineNum = k;
            trans.insert();
            k++;

            //updating line Price
            select forUpdate line_2 where line_2.QuotationId == line.QuotationId
                        && line_2.ItemId == line.ItemId
                        && line_2.LineNum == line.LineNum;
            if(line_2.RecId)
            {
             line_2.SalesPrice = str2num(_price) - _freight;
             line_2.TaxGroup = _taxGroup;
            }
            line_2.modifiedField(fieldnum(SalesQuotationLine,SalesPrice));
            line_2.update();
            ttsCommit;
            salesQuotationTable  = SalesQuotationTable::find(_quoteId);
            salesQuotationTotals = SalesQuotationTotals_Sales::construct(salesQuotationTable);

            // Calculate Tax
            salesQuotationTotals.calc();

            // Load tmpTaxWorkTrans
            tmpTax.setTmpData(salesQuotationTotals.tax().tmpTaxWorkTrans());

            // Showing taxes with tax value
             while
                select tmpTax
            {
                i++;
                select taxtable where taxtable.taxcode == tmpTax.TaxCode;
                component = TaxComponentTable_IN::find(taxtable.TaxComponentTable_IN).Name;
               log_7  = component;
               log_8 = num2str(abs((tmpTax.TaxAmount)/_qty),0,2,0,0);
               con = conins(Con,i,log_7+':'+log_8);


            }
            i =0 ;
            log = con2StrUnlimited(con,'|');
            //info(strFmt('%1',log));
         }
        else
        {
            //InventSite::exist(_site) && InventLocation::exist(_warehouse)
            if(!InventSite::exist(_site))
            {
               log_1 = strFmt('Site %1 is not valid for Sales Quote - %2 for company %3',_site,_quoteId,curext());
            }
            if(!InventLocation::exist(_warehouse))
            {
                log_2 = strFmt('Warehouse %1 is not valid for Sales Quote - %2',_warehouse,_quoteId);
            }
            if(!InventTable::exist(_item))
            {
                log_3 = strFmt('Item %1 is not valid for Sales Quote - %2',_item,_quoteId);
            }
            if(!SalesTaxFormTypes_IN::exist(_saleTypeSalesTax))
            {
                log_4 = strfmt('SalesTax FormType %1 is not valid for Sales Quote - %2',_saleTypeSalesTax,_quoteId);
            }
            if(!TaxGroupHeading::exist(_taxGroup))
            {
                log_5 = strFmt('Tax Group is not valid for Sales Quote - %2',_taxGroup,_quoteId);
            }
            if(quotationIdchk.RecId)
            {
                log_9 = strFmt('Sales Quote %1 already Exist',_quoteId);
            }
            log = strFmt("%1\n%2\n%3\n%4\n%5\n%6",log_1,log_2,log_3,log_4,log_5,log_9);
        }

      }
      else
      {
           changeCompany(prodMasterDefault.delCompany)
          {
          select * from quotationIdchk where quotationIdchk.QuotationId == _quoteId;

       // validating masters
     // if(site.RecId && ware.RecId && InventTable::exist(_item) && SalesTaxFormTypes_IN::exist(_saleTypeSalesTax))
     if(!quotationIdchk.RecId &&InventSite::exist(_site) && InventLocation::exist(_warehouse) && InventTable::exist(_item) && SalesTaxFormTypes_IN::exist(_saleTypeSalesTax)  &&  TaxGroupHeading::exist(_taxGroup))

        {
             ttsBegin;
            //creating header
            quotation.clear();
            quotation.initValue();
            quotation.CustAccount = _customerId;
            quotation.QuotationName = _customerId;
            quotation.InvoiceAccount = _customerId;
            quotation.initFromCustTable(true);
            quotation.QuotationId = _quoteId;
            quotation.BusRelAccount = _prospectId;
            quotation.QuotationStatus  = SalesQuotationStatus::Created;
            quotation.CurrencyCode = _currency;
            quotation.InventSiteId = _site;
            quotation.InventLocationId = _warehouse;
            quotation.ShippingDateRequested = systemDateGet();
            quotation.LanguageId = SystemParameters::getSystemLanguageId();
            quotation.comp_OrderType = _orderType;
            quotation.comp_OrderCat  = _orderCategory;
            quotation.comp_SaleTypeExciseDuty = _saleTypeExcise;
            quotation.comp_E1Sale = str2enum(noyes,_e1Sale);
            quotation.comp_Domestic = str2enum(NoYes,_domestic);
            quotation.comp_Export = str2enum(NoYes,_export);
            quotation.insert();
            //creating lines
            line.initValue();
            line.initFromSalesQuotationTable(quotation);
            line.initFromCustTable();
            inventTable = InventTable::find(_item);
            line.initFromInventTable(inventTable);
            line.ItemId = _item;
            //creating inventory dimension
            dim.InventSiteId = _site;
            dim.InventLocationId  =_warehouse;
            //dim.configId = InventTable::find(line.ItemId).StandardConfigId;
            dim.configId = prodMasterDefault.DefaultConfigdel;
            dim = InventDim::findOrCreate(dim);
            dim.write();
            line.SalesQty = _qty;
            line.CurrencyCode = _currency;
            line.ShippingDateRequested = systemDateGet();
            line.InventDimId = dim.inventDimId;
            line.SalesTaxFormTypes_IN = SalesTaxFormTypes_IN::findbyFormType(_saleTypeSalesTax).RecId;
            line.initFromSalesQuotationLine_IN(line);
            comb = InventDimCombination::findByInventDim(line.ItemId,dim);
            line.RetailVariantId = comb.RetailVariantId  ;
            line.ExciseTariffCodes_IN = Inventtable::find(_item).ExciseTariffCodes_IN;
            line.createLine(true,true,false,false,false,false,'',false);


            markTab = MarkupTable::find((MarkupModuleType::Cust),'6');
            trans.clear();
            trans.initFromSalesQuotationLine(line);
            trans.initFromMarkupTable(marktab);
            trans.MarkupCategory = MarkupCategory::Pcs;
            trans.Value = _Freight;
            trans.LineNum = k;
            trans.insert();
            K++;
            //updating price
             select forUpdate line_2 where line_2.QuotationId == line.QuotationId
                        && line_2.ItemId == line.ItemId
                        && line_2.LineNum == line.LineNum;
            if(line_2.RecId)
            {
             line_2.SalesPrice = str2num(_price)- _freight;
             line_2.TaxGroup = _taxGroup;

            }
            line_2.modifiedField(fieldnum(SalesQuotationLine,SalesPrice));
            line_2.update();
            ttsCommit;
            salesQuotationTable  = SalesQuotationTable::find(_quoteId);
            salesQuotationTotals = SalesQuotationTotals_Sales::construct(salesQuotationTable);

            // Calculate Tax
            salesQuotationTotals.calc();

            // Load tmpTaxWorkTrans
            tmpTax.setTmpData(salesQuotationTotals.tax().tmpTaxWorkTrans());

            // Showing taxes with tax value
             while
                select tmpTax
            {
                i++;
                select taxtable where taxtable.taxcode == tmpTax.TaxCode;
                component = TaxComponentTable_IN::find(taxtable.TaxComponentTable_IN).Name;
               log_7  = component;
               log_8 = num2str(abs((tmpTax.TaxAmount)/_qty),0,2,0,0);
               con = conins(Con,i,log_7+':'+log_8);


            }
            log = con2StrUnlimited(con,'|');
            i =0 ;
            //log = con2Str(con,'');

         }
        else
        {
            if(!InventSite::exist(_site))
            {
               log_1 = strFmt('Site %1 is not valid for Sales Quote - %2 for company %3',_site,_quoteId,curext());
            }
            if(!InventLocation::exist(_warehouse))
            {
                log_2 = strFmt('Warehouse %1 is not valid for Sales Quote - %2',_warehouse,_quoteId);
            }
            if(!InventTable::exist(_item))
            {
                log_3 = strFmt('Item %1 is not valid for Sales Quote - %2',_item,_quoteId);
            }
            if(!SalesTaxFormTypes_IN::exist(_saleTypeSalesTax))
            {
                log_4 = strfmt('SalesTax FormType %1 is not valid for Sales Quote - %2',_saleTypeSalesTax,_quoteId);
            }
            if(!TaxGroupHeading::exist(_taxGroup))
            {
                log_5 = strFmt('Tax Group is not valid for Sales Quote - %2',_taxGroup,_quoteId);
            }
             if(quotationIdchk.RecId)
            {
                log_9 = strFmt('Sales Quote %1 already Exist',_quoteId);
            }
            log = strFmt("%1\n%2\n%3\n%4\n%5\n%6",log_1,log_2,log_3,log_4,log_5,log_9);

        }
          }
      }
   //  info(strFmt(" Sales Quote
     info(strFmt("Sales Quote for %1 is created - %2",_quoteId,log));
     comp_RetailExceptionActivityLog::logEvent('Sales Quote',infolog.export());
     return log ;
    }

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...