x++ code to create call center order through custom service
Creation Of Call Center Orders through Postman
Request Contract Class:
[DataContractAttribute("BASMSCreationOfCallCenterOrdersRequestContract")]
class BASMSCreationOfCallCenterOrdersRequestContract
{
str custAccount;
str dataAreaId;
str siteId;
str warehouse;
int numberOfOrders;
str orderStatus;
List itemsList,paymentsList;
[DataMemberAttribute("CustAccount")]
public str parmCustAccount(str _custAccount = custAccount)
{
custAccount = _custAccount;
return custAccount;
}
[DataMemberAttribute("DataAreaId")]
public str parmDataAreaId(str _dataAreaId = dataAreaId)
{
dataAreaId = _dataAreaId;
return dataAreaId;
}
[DataMemberAttribute("Site")]
public str parmSiteId(str _siteId = siteId)
{
siteId = _siteId;
return siteId;
}
[DataMemberAttribute("WareHouse")]
public str parmWarehouse(str _warehouse = warehouse)
{
warehouse = _warehouse;
return warehouse;
}
[DataMemberAttribute("numberOfOrders")]
public int parmNumberOfOrders(int _numberOfOrders = numberOfOrders)
{
numberOfOrders = _numberOfOrders;
return numberOfOrders;
}
[DataMemberAttribute("OrderStatus")]
public str parmOrderStatus(str _orderStatus = orderStatus)
{
orderStatus = _orderStatus;
return orderStatus;
}
[DataMemberAttribute("ItemsList"),
DataCollectionAttribute(Types::Class, classStr(BASMSCallCenterItemListRequestContract)),
AifCollectionTypeAttribute('_itemsList', Types::Class, classStr(BASMSCallCenterItemListRequestContract)),
AifCollectionTypeAttribute('return', Types::Class, classStr(BASMSCallCenterItemListRequestContract))]
public List parmItemsList(List _itemsList = itemsList)
{
if(!prmIsDefault(_itemsList))
{
itemsList = _itemsList;
}
return itemsList;
}
[DataMemberAttribute("PaymentsList"),
DataCollectionAttribute(Types::Class, classStr(BASMSCallCenterPaymentListRequestContract)),
AifCollectionTypeAttribute('_paymentsList', Types::Class, classStr(BASMSCallCenterPaymentListRequestContract)),
AifCollectionTypeAttribute('return', Types::Class, classStr(BASMSCallCenterPaymentListRequestContract))]
public List parmPaymentsList(List _paymentsList = paymentsList)
{
if(!prmIsDefault(_paymentsList))
{
paymentsList = _paymentsList;
}
return paymentsList;
}
}
ItemListRequestContract Class:
/// <summary>
/// CallCenterItemListRequestContract
/// </summary>
[DataContractAttribute('BASMSCallCenterItemListRequestContract')]
class BASMSCallCenterItemListRequestContract
{
str itemId;
int quantity;
str itemBarCode;
[DataMemberAttribute("itemId")]
public str parmItemId(str _itemId = itemId)
{
itemId = _itemId;
return itemId;
}
[DataMemberAttribute("quantity")]
public int parmQuantity(int _quantity = quantity)
{
quantity = _quantity;
return quantity;
}
[DataMemberAttribute("ItemBarCode")]
public str parmItemBarCode(str _itemBarCode = itemBarCode)
{
itemBarCode = _itemBarCode;
return itemBarCode;
}
}
PaymentListRequestContract Class:
/// <summary>
/// CallCenterPaymentListRequestContract
/// parmPaymentMethod and parmGiftCardNumber
/// </summary>
[DataContractAttribute('BASMSCallCenterPaymentListRequestContract')]
class BASMSCallCenterPaymentListRequestContract
{
str paymentMethod;
[DataMemberAttribute("PaymentMethod")]
public str parmPaymentMethod(str _paymentMethod = paymentMethod)
{
paymentMethod = _paymentMethod;
return paymentMethod;
}
}
Response Contract Class:
/// <summary>
/// contract to set the values to be sent as a response to the service contract
/// </summary>
[DataContractAttribute("BASMSCreationOfCallCenterOrdersResponseContract")]
class BASMSCreationOfCallCenterOrdersResponseContract
{
SalesId salesId;
SalesStatus salesStatus;
[DataMember('SalesId')]
public SalesId parmSalesId(SalesId _salesId = salesId)
{
salesId = _salesId;
return salesId;
}
[DataMember('SalesStatus')]
public SalesStatus parmSalesStatus(SalesStatus _salesStatus = salesStatus)
{
salesStatus = _salesStatus;
return salesStatus;
}
private static BASMSCreationOfCallCenterOrdersResponseContract construct()
{
return new BASMSCreationOfCallCenterOrdersResponseContract();
}
/// <summary>
/// sets the values of the objects in the contract class
/// </summary>
/// <param name = "_salesTable">
/// Record used to set the values
/// </param>
/// <param name = "salesOrderLineDetailsList">
/// List of the line details for the sales order
/// </param>
/// <returns>
/// set of objects for the <c>BASMSSalesOrderDetailsResponseContract</c> contract
///</returns>
public static BASMSCreationOfCallCenterOrdersResponseContract newFromTableRecord(SalesOrderHeaderV2Entity _salesTableEntity,SalesStatus ss)
{
BASMSCreationOfCallCenterOrdersResponseContract contract = BASMSCreationOfCallCenterOrdersResponseContract::construct();
contract.parmSalesId(_salesTableEntity.SalesOrderNumber);
contract.parmSalesStatus(ss);
return contract;
}
}
Helper Class:
/// <summary>
/// Helper class to get the required records for response contract
/// </summary>
class BASMSCreationOfCallCenterOrdersReadHelperClass
{
[AifCollectionTypeAttribute('return', Types::Class, classStr(BASMSCreationOfCallCenterOrdersResponseContract))]
public List callCenterOrderCreation(str _custAccount, str _dataAreaId, str _site, str _warehouse, int _numberOfOrders, str _orderStatus, List _itemsList, List _paymentsList )
{
List callCenterOrderList = new List(Types::Class);
changecompany(_dataAreaId)
{
SalesOrderHeaderV2Entity salesTableEntity;
for(int i=1; i<=_numberOfOrders;i++)
{
// Sales Order Header Creation
ttsbegin;
salesTableEntity.initValue();
salesTableEntity.OrderingCustomerAccountNumber = _custAccount;
salesTableEntity.insert();
ttscommit;
this.insertItemValues(salesTableEntity.SalesOrderNumber,_itemsList);
this.createCallCenterPaymentRecord(salesTableEntity.SalesOrderNumber,_paymentsList);
this.updateSalesStatus(salesTableEntity.SalesOrderNumber,_orderStatus);
Salestable saleaT = SalesTable::find(salesTableEntity.SalesOrderNumber);
BASMSCreationOfCallCenterOrdersResponseContract releasedItemData = new BASMSCreationOfCallCenterOrdersResponseContract();
releasedItemData = BASMSCreationOfCallCenterOrdersResponseContract::newFromTableRecord(salesTableEntity,saleaT.SalesStatus);
callCenterOrderList.addEnd(releasedItemData);
}
}
return callCenterOrderList;
}
public void insertItemValues(SalesId salesId,List itemList)
{
SalesOrderLineV2Entity salesLineEntity;
ListIterator listEnum = new ListIterator(itemList);
while(listEnum.more())
{
BASMSCallCenterItemListRequestContract itemsData = listEnum.value();
ttsbegin;
salesLineEntity.clear();
salesLineEntity.initValue();
salesLineEntity.SalesOrderNumber = salesId;
salesLineEntity.ItemNumber = itemsData.parmItemId();
salesLineEntity.OrderedSalesQuantity = itemsData.parmQuantity();
salesLineEntity.insert();
ttscommit;
listEnum.next();
}
}
public void createCallCenterPaymentRecord(SalesId salesId,List paymentsList)
{
MCRCustPaymTable mcrCustPaymTable;
SalesOrderLineV2Entity soLineEntity;
SalesTable salesTableBuf = SalesTable::find(salesId);
CurrencyCode currency = salesTableBuf.CurrencyCode;
MCRCustPaymStatus mcrCustPaymStatus = MCRCustPaymStatus::NotSubmitted;
salesTableBuf.calculateTieredCharges();
SalesTotals salesTotals = salesTotals::construct(salesTableBuf,SalesUpdate::All);
real totalAmount = salesTotals.totalAmount();
ListIterator listEnum = new ListIterator(paymentsList);
info(Strfmt("Net Amount %1",salesTotals.totalAmount()));
while(listEnum.more())
{
BASMSCallCenterPaymentListRequestContract itemsData = listEnum.value();
if(itemsData.parmPaymentMethod() == "CreditCard")
{
try
{
CreditCardCust creditCardCust = CreditCardCust::findByUniqueCardId('f2379fe0-706f-45e4-8bdd-fda9a4820bbe');
ttsbegin;
mcrCustPaymTable.clear();
mcrCustPaymTable.Channel = salesTableBuf.retailSalesTable().RetailChannel;
mcrCustPaymTable.CurrencyCode = currency;
mcrCustPaymTable.TenderTypeId = "3";
mcrCustPaymTable.RefTableId = salesTableBuf.TableId;
mcrCustPaymTable.RefRecId = salesTableBuf.RecId;
mcrCustPaymTable.CustAccount = salesTableBuf.CustAccount;
mcrCustPaymTable.CardTypeId = 'Visa';
mcrCustPaymTable.Status = mcrCustPaymStatus;
mcrCustPaymTable.PaymInfoTableId = creditCardCust.TableId;
mcrCustPaymTable.PaymInfoRecId = creditCardCust.RecId;
mcrCustPaymTable.CustPaymType = MCRCustPaymTable::getMCRTypeFromTender(mcrCustPaymTable.TenderTypeId,
mcrCustPaymTable.Channel,mcrCustPaymTable.CardTypeId);
switch (mcrCustPaymStatus)
{
case MCRCustPaymStatus::NotSubmitted:
case MCRCustPaymStatus::Authorized:
mcrCustPaymTable.Amount = CurrencyExchange::round(totalAmount, currency);
break;
}
mcrCustPaymTable.insert();
ttscommit;
MCRSalesOrderTotals mcrSalesOrderTotals = new MCRSalesOrderTotals(salesTableBuf, true);
//complete
MCREndOrder::endOrder(salesTableBuf.SalesId, true, mcrSalesOrderTotals, false);
}
catch
{
Error("Error during Call Center payment ");
}
}
else if(itemsData.parmPaymentMethod() == 'Cash')
{
try
{
ttsbegin;
mcrCustPaymTable.clear();
mcrCustPaymTable.Channel = salesTableBuf.retailSalesTable().RetailChannel;
mcrCustPaymTable.CurrencyCode = currency;
mcrCustPaymTable.TenderTypeId = "1";
mcrCustPaymTable.RefTableId = salesTableBuf.TableId;
mcrCustPaymTable.RefRecId = salesTableBuf.RecId;
mcrCustPaymTable.CustAccount = salesTableBuf.CustAccount;
mcrCustPaymTable.CardTypeId = "Cash";
mcrCustPaymTable.Status = mcrCustPaymStatus;
mcrCustPaymTable.CustPaymType = MCRCustPaymTable::getMCRTypeFromTender(mcrCustPaymTable.TenderTypeId,
mcrCustPaymTable.Channel,mcrCustPaymTable.CardTypeId);
switch (mcrCustPaymStatus)
{
case MCRCustPaymStatus::NotSubmitted:
case MCRCustPaymStatus::Authorized:
mcrCustPaymTable.Amount = CurrencyExchange::round(totalAmount, currency);
break;
}
mcrCustPaymTable.insert();
ttscommit;
MCRSalesOrderTotals mcrSalesOrderTotals = new MCRSalesOrderTotals(salesTableBuf, true);
salesTableBuf.payment(true);
//complete
MCREndOrder::endOrder(salesTableBuf.SalesId, true, mcrSalesOrderTotals, false);
}
catch
{
Error("Error during Call Center payment ");
}
}
else if(itemsData.parmPaymentMethod() == 'Check')
{
try
{
ttsbegin;
mcrCustPaymTable.clear();
mcrCustPaymTable.Channel = salesTableBuf.retailSalesTable().RetailChannel;
mcrCustPaymTable.CurrencyCode = currency;
mcrCustPaymTable.TenderTypeId = "2";
mcrCustPaymTable.RefTableId = salesTableBuf.TableId;
mcrCustPaymTable.RefRecId = salesTableBuf.RecId;
mcrCustPaymTable.CustAccount = salesTableBuf.CustAccount;
mcrCustPaymTable.CardTypeId = 'Check';
mcrCustPaymTable.Status = mcrCustPaymStatus;
mcrCustPaymTable.CheckNumber = "1234";
mcrCustPaymTable.CustPaymType = MCRCustPaymTable::getMCRTypeFromTender(mcrCustPaymTable.TenderTypeId,
mcrCustPaymTable.Channel,mcrCustPaymTable.CardTypeId);
switch (mcrCustPaymStatus)
{
case MCRCustPaymStatus::NotSubmitted:
case MCRCustPaymStatus::Authorized:
mcrCustPaymTable.Amount = CurrencyExchange::round(totalAmount, currency);
break;
}
mcrCustPaymTable.insert();
ttscommit;
MCRSalesOrderTotals mcrSalesOrderTotals = new MCRSalesOrderTotals(salesTableBuf, true);
//complete
MCREndOrder::endOrder(salesTableBuf.SalesId, true, mcrSalesOrderTotals, false);
}
catch
{
Error("Error during Call Center payment ");
}
}
else if(itemsData.parmPaymentMethod() == 'GiftCard')
{
try
{
RetailGiftCardTable retailGiftCardTable = RetailGiftCardTable::find("GC12345",false);
ttsbegin;
mcrCustPaymTable.clear();
mcrCustPaymTable.Channel = salesTableBuf.retailSalesTable().RetailChannel;
mcrCustPaymTable.CurrencyCode = currency;
mcrCustPaymTable.TenderTypeId = "8";
mcrCustPaymTable.RefTableId = salesTableBuf.TableId;
mcrCustPaymTable.RefRecId = salesTableBuf.RecId;
mcrCustPaymTable.CustAccount = salesTableBuf.CustAccount;
mcrCustPaymTable.CardTypeId = 'GiftCard';
mcrCustPaymTable.Status = mcrCustPaymStatus;
mcrCustPaymTable.IsPrepay = NoYes::Yes;
mcrCustPaymTable.PaymInfoTableId = retailGiftCardTable.TableId;
mcrCustPaymTable.PaymInfoRecId = retailGiftCardTable.RecId;
mcrCustPaymTable.CustPaymType = MCRCustPaymTable::getMCRTypeFromTender(mcrCustPaymTable.TenderTypeId,
mcrCustPaymTable.Channel,mcrCustPaymTable.CardTypeId);
switch (mcrCustPaymStatus)
{
case MCRCustPaymStatus::NotSubmitted:
case MCRCustPaymStatus::Authorized:
mcrCustPaymTable.Amount = CurrencyExchange::round(totalAmount, currency);
break;
}
mcrCustPaymTable.insert();
ttscommit;
MCRSalesOrderTotals mcrSalesOrderTotals = new MCRSalesOrderTotals(salesTableBuf, true);
//complete
MCREndOrder::endOrder(salesTableBuf.SalesId, true, mcrSalesOrderTotals, false);
// retailGiftCardTransactions.insert();
}
catch
{
Error("Error during Call Center payment ");
}
}
listEnum.next();
}
}
public void updateSalesStatus(SalesId salesId,str _orderStatus)
{
//Updating sales order by SalesFromLetter class
SalesFormLetter salesFormLetter;
//Posting SO Confirmation,
if(_orderStatus == enum2Str(DocumentStatus::Confirmation))
{
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Confirmation);
salesFormLetter.update(SalesTable::find(salesId));
}
//Posting Packing slip
else if(_orderStatus == enum2Str(DocumentStatus::PackingSlip))
{
salesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip);
salesFormLetter.update(SalesTable::find(salesId));
}
//Posting SO Invoice
else if(_orderStatus == enum2Str(DocumentStatus::Invoice))
{
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);
salesFormLetter.update(SalesTable::find(salesId));
}
}
}
Service Class:
/// <summary>
/// Service class for all sales related custom services
/// BASMSCallCenterService
/// </summary>
class BASMSCallCenterService extends SysOperationServiceBase
{
[AifCollectionTypeAttribute('return', Types::Class, classStr(BASMSCreationOfCallCenterOrdersResponseContract))]
public List callCenterSalesOrder(BASMSCreationOfCallCenterOrdersRequestContract _contract)
{
BASMSCreationOfCallCenterOrdersReadHelperClass callCenterOrder = new BASMSCreationOfCallCenterOrdersReadHelperClass();
str custAccount = _contract.parmCustAccount();
str dataAreaId = _contract.parmDataAreaId();
str siteId = _contract.parmSiteId();
str warehouse = _contract.parmWarehouse();
int numberOfOrders = _contract.parmNumberOfOrders();
str orderStatus = _contract.parmOrderStatus();
List itemsList = _contract.parmItemsList();
List paymentsList = _contract.parmPaymentsList();
List itemValueList = new List(Types::Class);
itemValueList = callCenterOrder.callCenterOrderCreation(custAccount,dataAreaId,siteId,warehouse,numberOfOrders,orderStatus,itemsList,paymentsList);
return itemValueList;
}
}
Comments
Post a Comment