adsenseheader

Sunday, June 11, 2023

Create Sales order charges for Header and Lines

DynamicsURL/api/services/SalesOrderChargesServiceGroup/SalesOrderChargesService/SalesOrderCharges

{
  "SalesOrderCharges": [
    {
      "SalesHeaderCharges": [
        {
          "DataAreaId": "100",
          "SalesId": "1000000499",
          "ChargeLineNum": "13.00",
          "ChargeCode": "XYZ",
          "Amount": "25.50"
        },
        {
          "DataAreaId": "100",
          "SalesId": "1000000499",
          "ChargeLineNum": "14.00",
          "ChargeCode": "ABC",
          "Amount": "35.50"
        }
      ],
      "SalesLineCharges": [
        {
          "DataAreaId": "100",
          "SalesId": "1000000499",
          "LineNum": "1.00",
          "ChargeLineNum": "14.00",
          "ChargeCode": "XYZ",
          "Amount": "25.50"
        },
        {
          "DataAreaId": "100",
          "SalesId": "1000000499",
          "ChargeLineNum": "12.00",
          "LineNum": "2.00",
          "ChargeCode": "ABC",
          "Amount": "15.50"
        }
      ]
    }
  ]
}
/// <summary>
/// This class is the data contract class for the <c>SalesLineChargesContract</c> service.
/// </summary>
[DataContract]
class SalesHeaderChargesContract
{
    SalesId                 salesId;
    DataAreaId              dataAreaId;
    MarkupCode              chargeCode;
    MarkupFixedAmount       amount;
    LineNum                 chargesLineNum;

    [DataMember("SalesId")]
    public SalesId parmSalesId(salesId _salesId = salesId)
    {
        salesId = _salesId;
        return salesId;
    }

    [DataMember("DataAreaId")]
    public DataAreaId parmDataAreaId(DataAreaId _dataAreaId = dataAreaId)
    {
        dataAreaId = _dataAreaId;
        return dataAreaId;
    }

    [DataMember("ChargesLineNum")]
    public LineNum parmChargesLineNum(LineNum _chargesLineNum = chargesLineNum)
    {
        chargesLineNum = _chargesLineNum;
        return chargesLineNum;
    }

    [DataMember("ChargeCode")]
    public MarkupCode parmChargeCode(MarkupCode _chargeCode = chargeCode)
    {
        chargeCode = _chargeCode;
        return chargeCode;
    }

    [DataMember("Amount")]
    public MarkupFixedAmount parmAmount(MarkupFixedAmount _amount = amount)
    {
        amount = _amount;
        return amount;
    }

}
/// <summary>
/// Service class to sales line charges.
/// </summary>
[SysEntryPointAttribute(true)]
class SalesHeaderChargesService 
{
    str ret = 'success';
    boolean errors;


    /// <summary>
    /// Method to create sales line charges.
    /// </summary>
    /// <param name = "_contract">SalesLineChargesContract</param>
    /// <returns>Message to users</returns>

    
    public str createChargesheader(SalesHeaderChargesContract   line)
    {
        try
        {
            CompanyInfo companyInfo = CompanyInfo::findDataArea(line.parmDataAreaId());

            if(companyInfo)
            {
                changecompany(companyInfo.DataArea)
                {
                    SalesTable       salesTable    = SalesTable::find(line.parmSalesId(),true);

                    if (SalesTable.recid)
                    {
                        MarkupTrans     markUpTrans;
                        MarkupTable     markupTable;

                        markupTable = markupTable::find(MarkupModuleType::Cust,line.parmChargeCode());

                        if (markupTable.recid)
                        {
                            markUpTrans.initFromSalesTable(SalesTable);//Line number 2181 [this.TransTableId = salesLine.TableId;] in this initFromSalesLine() method is returning 1426 for TransTableId
                            markUpTrans.TransTableId    = tableNum(SalesTable);//tableNum(SalesLine) returns the expected 3071 for TransTableId;
                            markUpTrans.initFromMarkupTable(markupTable);

                            markUpTrans.initvalue();
                            markUpTrans.Linenum    = line.parmChargesLineNum();
                            markUpTrans.Value      = line.parmAmount();
                            
                            markUpTrans.insert();

                            ttsbegin;
                            SalesTable.update();
                            ttscommit;
                        
                            ret = strFmt("@:ChargeCodeSuccess",line.parmChargeCode(),line.parmSalesId());
                        }
                        else
                        {
                            throw Error(strFmt("@:ChargeCodeValidation",line.parmChargeCode()));
                        }
                    }
                    else
                    {
                        throw Error(strFmt("@:SalesLineValidation",line.parmSalesId()));
                    }
                }
            }
            else
            {
                throw Error(strFmt("@HFG:HFGDataAreaIdInvalid",line.parmDataAreaId()));
            }
            
        }
        catch
        {
            errors = true;
        }
        catch(Exception::Error)
        {
            errors = true;
        }

        if(errors)
        {
            throw Error(SalesHeaderChargesService::getError());
        }
        else
        {
            return ret;
        }
        return ret;
    }

    /// <summary>
    /// Convert infolog from container to string.
    /// </summary>
    /// <param name = "_logText">InfologData</param>
    /// <returns>Error message</returns>
    private static str getError()
    {
        SysInfologEnumerator    enumerator;
        SysInfologMessageStruct msgStruct;
        Exception               exception;
        str                     error;
        enumerator = SysInfologEnumerator::newData(infolog.cut());
        while (enumerator.moveNext())
        {
            msgStruct = new SysInfologMessageStruct(enumerator.currentMessage());
            exception = enumerator.currentException();
            error = strfmt("%1 - %2", error, msgStruct.message());
        }
        return error;
    }

}
/// <summary>
/// This class is the data contract class for the <c>SalesLineChargesContract</c> service.
/// </summary>
[DataContract]
class SalesLineChargesContract
{
    SalesId                 salesId;
    DataAreaId              dataAreaId;
    LineNum                 lineNum;
    MarkupCode              chargeCode;
    MarkupFixedAmount       amount;
    LineNum                 chargesLineNum;
    NameAlias               readyToInvoice;

    [DataMember("SalesId")]
    public SalesId parmSalesId(salesId _salesId = salesId)
    {
        salesId = _salesId;
        return salesId;
    }

    [DataMember("ReadyToInvoice")]
    public NameAlias parmReadyToInvoice(NameAlias _readyToInvoice = readyToInvoice)
    {
        readyToInvoice = _readyToInvoice;
        return readyToInvoice;
    }

    [DataMember("DataAreaId")]
    public DataAreaId parmDataAreaId(DataAreaId _dataAreaId = dataAreaId)
    {
        dataAreaId = _dataAreaId;
        return dataAreaId;
    }

    [DataMember("ChargesLineNum")]
    public LineNum parmChargesLineNum(LineNum _chargesLineNum = chargesLineNum)
    {
        chargesLineNum = _chargesLineNum;
        return chargesLineNum;
    }

    [DataMember("LineNum")]
    public LineNum parmLineNum(LineNum _lineNum = lineNum)
    {
        lineNum = _lineNum;
        return lineNum;
    }

    [DataMember("ChargeCode")]
    public MarkupCode parmChargeCode(MarkupCode _chargeCode = chargeCode)
    {
        chargeCode = _chargeCode;
        return chargeCode;
    }

    [DataMember("Amount")]
    public MarkupFixedAmount parmAmount(MarkupFixedAmount _amount = amount)
    {
        amount = _amount;
        return amount;
    }

}
[DataContractAttribute('SalesOrderChargesContract')]
internal final class SalesOrderChargesContract
{
    List SalesHeaderChargesList,SalesLineChargesList;

    [DataMemberAttribute("SalesHeaderCharges"),
        AifCollectionTypeAttribute("_SalesHeaderCharges",Types::Class, classStr( SalesHeaderChargesContract)),
        AifCollectionTypeAttribute("return",Types::Class, classStr( SalesHeaderChargesContract))]
    public List parmSalesHeaderChargesList(List _SalesHeaderCharges =  SalesHeaderChargesList)
    {
        SalesHeaderChargesList = _SalesHeaderCharges;
        return  SalesHeaderChargesList;
    }

    [DataMemberAttribute("SalesLineCharges"),
        AifCollectionTypeAttribute("_SalesLineCharges",Types::Class, classStr( SalesLineChargesContract)),
        AifCollectionTypeAttribute("return",Types::Class, classStr( SalesLineChargesContract))]
    public List parmSalesLineChargesList(List _SalesLineCharges =  SalesLineChargesList)
    {
        SalesLineChargesList = _SalesLineCharges;
        return  SalesLineChargesList;
    }

}
[SysEntryPointAttribute(true)]
class SalesOrderChargesService
{
    [AifCollectionTypeAttribute('SalesOrderCharges', Types::Class, classStr(SalesOrderChargesContract))]
    public str processCharges(List SalesOrderCharges)
    {
        ListEnumerator orderEnumerator = SalesOrderCharges.getEnumerator();
        SalesLineChargesService lineChargesService = new SalesLineChargesService();
        SalesHeaderChargesService headerChargesService = new SalesHeaderChargesService();
        SalesLineChargesContract lineChargesContract;
        SalesHeaderChargesContract headerChargesContract;
        while(orderEnumerator.moveNext())
        {
            SalesOrderChargesContract  SalesOrderChargesContract = orderEnumerator.current();
            list lineContract                 = SalesOrderChargesContract.parmSalesLineChargesList();
            list headerContract               = SalesOrderChargesContract.parmSalesHeaderChargesList();

            if (lineContract)
            {
                ListEnumerator lineContractEnumerator = lineContract.getEnumerator();

                if (lineContractEnumerator)
                {
                    while(lineContractEnumerator.moveNext())
                    {
                        lineChargesContract =  lineContractEnumerator.current();
                        lineChargesService.createChargesLines(lineChargesContract);
                    }
                }
            }

            if (headerContract)
            {
                ListEnumerator headerContractEnumerator = headerContract.getEnumerator();

                if (headerContractEnumerator)
                {
                    while(headerContractEnumerator.moveNext())
                    {
                        headerChargesContract = headerContractEnumerator.current();
                        headerChargesService.createChargesheader(headerChargesContract);
                    }
                }
            }
            

        }
        return "Sales order charges created succesfully.";
    }

}

No comments:

Post a Comment