Rahul Sharma

Solutions Architect - Microsoft Dynamics AX | Azure

Blog
This is a technology blog covering Microsoft Dynamics AX, Microsoft Dynamics CRM, Microsoft Azure, IoT, .Net, SharePoint, SQL Server, SSRS, SSAS, SSIS, Apache Cassandra, MongoDB, and related technologies. Join this blog on facebook {Rahul Sharma}, to start a discussion !!! NOTE: My employer is not responsible for the content published here.

Index | MS Dynamics AX | MS Dynamics CRM
View blog as >> Magazine | Sidebar | Flipcard | Mosaic | Snapshot | Timeslide

Dynamics AX for Retail POS Development - Code Samples

In this post, I am going to share some .Net POS code samples to get you going with Retail POS coding.


Sample POS C# code:

1) How to fetch POS data?

Though you can use any .Net data access technology but POS provides helper classes to make things simpler.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using LSRetailPosis.DataAccess;
using LSRetailPosis.DataAccess.DataUtil;
 
namespace Rahul.Dynamics.Retail.DataAccess
{
    public class PosIsButtonGrid : DataLayer
    {
        public PosIsButtonGrid(SqlConnection connection, string DATAAREAID) 
            : base(connection, DATAAREAID)
        {
        }
 
        public DataTable GetPosIsButtonGridById(string BUTTONGRIDID)
        {
            SqlSelect sqlUtilSelect = new SqlSelect("POSISBUTTONGRID");
            sqlUtilSelect.Select("BUTTONGRIDID");
            sqlUtilSelect.Select("NAME");
            sqlUtilSelect.Where("DATAAREAID", base.dataAreaId, true);
            sqlUtilSelect.Where("BUTTONGRIDID", BUTTONGRIDID, false);
            return base.dbUtil.GetTable(sqlUtilSelect);
        }
 
        public DataTable GetPosIsButtonGridButtonsByGridId(string BUTTONGRIDID)
        {
            SqlSelect sqlUtilSelect = new SqlSelect("POSISBUTTONGRIDBUTTONS");
            sqlUtilSelect.Select("DISPLAYTEXT");
            sqlUtilSelect.Select("ACTIONPROPERTY");
            sqlUtilSelect.Where("DATAAREAID", base.dataAreaId, true);
            sqlUtilSelect.Where("BUTTONGRIDID", BUTTONGRIDID, false);
            sqlUtilSelect.OrderBy("ROWNUMBER", true);
            return base.dbUtil.GetTable(sqlUtilSelect);
        }
    }
}

2) How to show a dialog box?

using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage("Rahul", MessageBoxButtons.OK, MessageBoxIcon.Error))
{
         LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
} 

3) Add an item to the current sales transaction.

//Sale item. Add it to retail transaction
 public static void ItemSale(ref PosTransaction posTransaction, string itemID, decimal quantity)
        {
            // If the transaction object is not of the type RetailTransaction, it has to be converted to one before an item can be added
            if (posTransaction.GetType() != typeof(RetailTransaction))
            {
                posTransaction = new RetailTransaction(LSRetailPosis.Settings.ApplicationSettings.Terminal.StoreId, LSRetailPosis.Settings.ApplicationSettings.Terminal.StoreCurrency, LSRetailPosis.Settings.ApplicationSettings.Terminal.TaxIncludedInPrice, LSRetailPosis.ApplicationServices.IRounding);
                TransactionSystem transSystem = new TransactionSystem(posTransaction);
                transSystem.LoadTransactionStatus();
            }
 
 try
            {
                string selectedItemId = itemID;
                //if (ApplicationServices.IItem.ItemSearch(ref selectedItemId, 500))
                {
                    ItemSystem system = new ItemSystem((RetailTransaction)posTransaction);
                    string selectedBarcodeId = "";
                    DataTable barcodesForItem = system.GetBarcodesForItem(selectedItemId);
                    if (barcodesForItem == null)
                    {
                        selectedBarcodeId = "";
                    }
                    else if (barcodesForItem.Rows.Count == 0)
                    {
                        selectedBarcodeId = "";
                    }
                    else if (barcodesForItem.Rows.Count == 1)
                    {
                        selectedBarcodeId = barcodesForItem.Rows[0][0].ToString();
                    }                        
                    
                    if (selectedBarcodeId.Length != 0)
                    {
                        OperationInfo o = new OperationInfo();
                        o.NumpadQuantity = 1;
                        o.NumpadValue = selectedBarcodeId;
 o.ReturnItems = false;                        
 
 new ItemSale { OperationID = PosisOperations.ItemSale, OperationInfo = o, Barcode = selectedBarcodeId, POSTransaction = posTransaction }.RunOperation();
                    }
                    else
                    {
                        OperationInfo o = new OperationInfo();
                        o.NumpadQuantity = 1;
                        o.NumpadValue = selectedItemId;
                        o.ReturnItems = false;
 
                        new ItemSale { OperationID = PosisOperations.ItemSale, OperationInfo = o, Barcode = selectedItemId, POSTransaction = posTransaction }.RunOperation();
                    }
                }
            }
            catch (PosisException exception)
            {
                using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage(exception.Message, MessageBoxButtons.OK, MessageBoxIcon.Error))
                {
                    LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
                }
                ApplicationExceptionHandler.HandleException("BlankOperation.ItemSale", exception);
                throw;
            }
            catch (Exception exception2)
            {
                using (LSRetailPosis.POSProcesses.frmMessage dialog = new LSRetailPosis.POSProcesses.frmMessage(exception2.Message, MessageBoxButtons.OK, MessageBoxIcon.Error))
                {
                    LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(dialog);
                }
                ApplicationExceptionHandler.HandleException("BlankOperation.ItemSale", exception2);
                throw;
            }
        }


References:
Dynamics AX for Retail POS Development


Join me on facebook and feel free to post your comments / feedback / queries.
Comments
0 Comments