/// <summary>
        /// Inventory Shipped
        /// </summary>
        /// <param name="transaction"></param>
        /// <returns></returns>
        private async Task InventoryShipped(TransactionQueueInbound transaction)
        {
            InventoryTransactionPayload payload = JsonConvert.DeserializeObject <InventoryTransactionPayload>(transaction.Payload);

            int productMasterId = payload.ProductId;

            Product product = await _salesOrderManagementDataService.GetProductInformationByProductMasterForUpdate(productMasterId);

            if (product != null)
            {
                product.OnHandQuantity    = product.OnHandQuantity - payload.Quantity;
                product.CommittedQuantity = product.CommittedQuantity - payload.Quantity;

                await _salesOrderManagementDataService.UpdateProduct(product);
            }

            SalesOrderDetail salesOrderDetail = await _salesOrderManagementDataService.GetSalesOrderDetailForUpdate(payload.MasterEntityId);

            if (salesOrderDetail != null)
            {
                salesOrderDetail.ShippedQuantity = salesOrderDetail.ShippedQuantity + payload.Quantity;
                await _salesOrderManagementDataService.UpdateSalesOrderDetail(salesOrderDetail);
            }

            await LogSuccessfullyProcessed(transaction);
        }
        /// <summary>
        /// Product Updated
        /// </summary>
        /// <param name="transaction"></param>
        private async Task ProductUpdated(TransactionQueueInbound transaction)
        {
            ProductUpdatePayload payload = JsonConvert.DeserializeObject <ProductUpdatePayload>(transaction.Payload);

            int productMasterId = payload.ProductId;

            Product product = await _salesOrderManagementDataService.GetProductInformationByProductMasterForUpdate(productMasterId);

            if (product != null)
            {
                product.ProductNumber = payload.ProductNumber;
                product.Description   = payload.Description;
                product.UnitPrice     = payload.UnitPrice;

                await _salesOrderManagementDataService.UpdateProduct(product);
            }
            else
            {
                product                 = new Product();
                product.AccountId       = payload.AccountId;
                product.ProductNumber   = payload.ProductNumber;
                product.ProductMasterId = payload.ProductId;
                product.Description     = payload.Description;
                product.UnitPrice       = payload.UnitPrice;

                await _salesOrderManagementDataService.CreateProduct(product);
            }

            await LogSuccessfullyProcessed(transaction);
        }
        /// <summary>
        /// Create Inbound Transaction Queue
        /// </summary>
        /// <param name="transactionQueue"></param>
        /// <returns></returns>
        public async Task CreateInboundTransactionQueue(TransactionQueueInbound transactionQueue)
        {
            DateTime dateCreated = DateTime.UtcNow;

            transactionQueue.DateCreated = dateCreated;

            await dbConnection.TransactionQueueInbound.AddAsync(transactionQueue);
        }
Example #4
0
        /// <summary>
        /// Process Acknowledgement
        /// </summary>
        /// <param name="transaction"></param>
        private async Task ProcessAcknowledgement(TransactionQueueInbound transaction)
        {
            int transactionId = transaction.SenderTransactionQueueId;

            TransactionQueueOutbound transactionQueueItem = await _inventoryManagementDataService.GetOutboundTransactionQueueItemById(transactionId);

            if (transactionQueueItem != null)
            {
                await LogOutboundTransactionToHistory(transactionQueueItem);
            }
        }
Example #5
0
        /// <summary>
        /// Log Successfully Processed
        /// </summary>
        /// <param name="transaction"></param>
        /// <returns></returns>
        private async Task LogSuccessfullyProcessed(TransactionQueueInbound transaction)
        {
            TransactionQueueInboundHistory transactionHistory = new TransactionQueueInboundHistory();

            transactionHistory.TransactionQueueInboundId = transaction.TransactionQueueInboundId;
            transactionHistory.SenderTransactionQueueId  = transaction.SenderTransactionQueueId;
            transactionHistory.TransactionCode           = transaction.TransactionCode;
            transactionHistory.Payload               = transaction.Payload;
            transactionHistory.ExchangeName          = transaction.ExchangeName;
            transactionHistory.ProcessedSuccessfully = true;
            transactionHistory.DuplicateMessage      = false;
            transactionHistory.ErrorMessage          = string.Empty;
            transactionHistory.DateCreatedInbound    = transaction.DateCreated;

            await _inventoryManagementDataService.CreateInboundTransactionQueueHistory(transactionHistory);
        }
        /// <summary>
        ///  Log Duplicate Message
        /// </summary>
        /// <param name="transactionQueueItem"></param>
        /// <returns></returns>
        private async Task LogDuplicateMessage(TransactionQueueInbound transactionQueueItem)
        {
            // log history as duplicate
            TransactionQueueInboundHistory transactionHistory = new TransactionQueueInboundHistory();

            transactionHistory.TransactionQueueInboundId = transactionQueueItem.TransactionQueueInboundId;
            transactionHistory.SenderTransactionQueueId  = transactionQueueItem.SenderTransactionQueueId;
            transactionHistory.TransactionCode           = transactionQueueItem.TransactionCode;
            transactionHistory.Payload               = transactionQueueItem.Payload;
            transactionHistory.ExchangeName          = transactionQueueItem.ExchangeName;
            transactionHistory.ProcessedSuccessfully = false;
            transactionHistory.DuplicateMessage      = true;
            transactionHistory.ErrorMessage          = string.Empty;
            transactionHistory.DateCreatedInbound    = transactionQueueItem.DateCreated;

            await _salesOrderManagementDataService.CreateInboundTransactionQueueHistory(transactionHistory);
        }
        /// <summary>
        /// Inventory Received
        /// </summary>
        /// <param name="transaction"></param>
        /// <returns></returns>
        private async Task InventoryReceived(TransactionQueueInbound transaction)
        {
            InventoryTransactionPayload payload = JsonConvert.DeserializeObject <InventoryTransactionPayload>(transaction.Payload);

            int productMasterId = payload.ProductId;

            Product product = await _salesOrderManagementDataService.GetProductInformationByProductMasterForUpdate(productMasterId);

            if (product != null)
            {
                product.OnHandQuantity = product.OnHandQuantity + payload.Quantity;

                await _salesOrderManagementDataService.UpdateProduct(product);
            }

            await LogSuccessfullyProcessed(transaction);
        }
Example #8
0
        /// <summary>
        /// Inventory Received
        /// </summary>
        /// <param name="transaction"></param>
        private async Task InventoryReceived(TransactionQueueInbound transaction)
        {
            InventoryTransactionPayload payload = JsonConvert.DeserializeObject <InventoryTransactionPayload>(transaction.Payload);

            int purchaseOrderDetailId = payload.MasterEntityId;

            PurchaseOrderDetail purchaseOrderDetail = await _purchaseOrderManagementDataService.GetPurchaseOrderDetailForUpdate(purchaseOrderDetailId);

            if (purchaseOrderDetail != null)
            {
                purchaseOrderDetail.ReceiviedQuantity = purchaseOrderDetail.ReceiviedQuantity + payload.Quantity;

                await _purchaseOrderManagementDataService.UpdatePurchaseOrderDetail(purchaseOrderDetail);
            }

            await LogSuccessfullyProcessed(transaction);
        }
Example #9
0
        /// <summary>
        /// Sales Order Submitted
        /// </summary>
        /// <param name=""></param>
        private async Task SalesOrderSubmitted(TransactionQueueInbound transaction)
        {
            SalesOrderUpdatePayload payload = JsonConvert.DeserializeObject <SalesOrderUpdatePayload>(transaction.Payload);

            SalesOrder salesOrder = new SalesOrder();

            salesOrder.AccountId          = payload.AccountId;
            salesOrder.AddressLine1       = payload.AddressLine1;
            salesOrder.AddressLine2       = payload.AddressLine2;
            salesOrder.City               = payload.City;
            salesOrder.Region             = payload.Region;
            salesOrder.PostalCode         = payload.PostalCode;
            salesOrder.CustomerName       = payload.CustomerName;
            salesOrder.SalesOrderStatusId = SalesOrderStatuses.Open;
            salesOrder.SalesOrderNumber   = payload.SalesOrderNumber;
            salesOrder.MasterSalesOrderId = payload.SalesOrderId;
            salesOrder.OrderTotal         = payload.OrderTotal;

            await _inventoryManagementDataService.CreateSalesOrder(salesOrder);

            await _inventoryManagementDataService.UpdateDatabase();

            foreach (SalesOrderDetailUpdatePayload detail in payload.SalesOrderDetails)
            {
                SalesOrderDetail salesOrderDetail = new SalesOrderDetail();

                salesOrderDetail.AccountId = payload.AccountId;
                salesOrderDetail.MasterSalesOrderDetailId = detail.SalesOrderDetailId;
                salesOrderDetail.SalesOrderId             = salesOrder.SalesOrderId;
                salesOrderDetail.ProductId          = detail.ProductMasterId;
                salesOrderDetail.ProductNumber      = detail.ProductNumber;
                salesOrderDetail.ProductDescription = detail.ProductDescription;
                salesOrderDetail.UnitPrice          = detail.UnitPrice;
                salesOrderDetail.OrderQuantity      = detail.OrderQuantity;
                salesOrderDetail.ShippedQuantity    = 0;
                salesOrderDetail.OrderTotal         = detail.UnitPrice * detail.OrderQuantity;

                await _inventoryManagementDataService.CreateSalesOrderDetail(salesOrderDetail);
            }

            await LogSuccessfullyProcessed(transaction);
        }
Example #10
0
        /// <summary>
        /// Purchase Order Submitted
        /// </summary>
        /// <param name=""></param>
        private async Task PurchaseOrderSubmitted(TransactionQueueInbound transaction)
        {
            PurchaseOrderUpdatePayload payload = JsonConvert.DeserializeObject <PurchaseOrderUpdatePayload>(transaction.Payload);

            PurchaseOrder purchaseOrder = new PurchaseOrder();

            purchaseOrder.AccountId             = payload.AccountId;
            purchaseOrder.AddressLine1          = payload.AddressLine1;
            purchaseOrder.AddressLine2          = payload.AddressLine2;
            purchaseOrder.City                  = payload.City;
            purchaseOrder.Region                = payload.Region;
            purchaseOrder.PostalCode            = payload.PostalCode;
            purchaseOrder.SupplierName          = payload.SupplierName;
            purchaseOrder.PurchaseOrderStatusId = PurchaseOrderStatuses.Open;
            purchaseOrder.PurchaseOrderNumber   = payload.PurchaseOrderNumber;
            purchaseOrder.MasterPurchaseOrderId = payload.PurchaseOrderId;
            purchaseOrder.OrderTotal            = payload.OrderTotal;

            await _inventoryManagementDataService.CreatePurchaseOrder(purchaseOrder);

            await _inventoryManagementDataService.UpdateDatabase();

            foreach (PurchaseOrderDetailUpdatePayload detail in payload.PurchaseOrderDetails)
            {
                PurchaseOrderDetail purchaseOrderDetail = new PurchaseOrderDetail();

                purchaseOrderDetail.AccountId = payload.AccountId;
                purchaseOrderDetail.MasterPurchaseOrderDetailId = detail.PurchaseOrderDetailId;
                purchaseOrderDetail.PurchaseOrderId             = purchaseOrder.PurchaseOrderId;
                purchaseOrderDetail.ProductId          = detail.ProductMasterId;
                purchaseOrderDetail.ProductNumber      = detail.ProductNumber;
                purchaseOrderDetail.ProductDescription = detail.ProductDescription;
                purchaseOrderDetail.UnitPrice          = detail.UnitPrice;
                purchaseOrderDetail.OrderQuantity      = detail.OrderQuantity;
                purchaseOrderDetail.ReceivedQuantity   = 0;
                purchaseOrderDetail.OrderTotal         = detail.UnitPrice * detail.OrderQuantity;

                await _inventoryManagementDataService.CreatePurchaseOrderDetail(purchaseOrderDetail);
            }

            await LogSuccessfullyProcessed(transaction);
        }
Example #11
0
        /// <summary>
        /// Commit Inbound Message
        /// </summary>
        /// <param name="messageQueue"></param>
        /// <returns></returns>
        public async Task <ResponseModel <MessageQueue> > CommitInboundMessage(MessageQueue messageQueue, ConnectionStrings connectionStrings)
        {
            ResponseModel <MessageQueue> returnResponse = new ResponseModel <MessageQueue>();

            try
            {
                _inventoryManagementDataService.OpenConnection(connectionStrings.PrimaryDatabaseConnectionString);
                _inventoryManagementDataService.BeginTransaction((int)IsolationLevel.ReadCommitted);

                TransactionQueueInbound transactionQueue = new TransactionQueueInbound();
                transactionQueue.ExchangeName             = messageQueue.ExchangeName;
                transactionQueue.SenderTransactionQueueId = messageQueue.TransactionQueueId;
                transactionQueue.TransactionCode          = messageQueue.TransactionCode;
                transactionQueue.Payload = messageQueue.Payload;

                await _inventoryManagementDataService.CreateInboundTransactionQueue(transactionQueue);

                await _inventoryManagementDataService.UpdateDatabase();

                _inventoryManagementDataService.CommitTransaction();

                returnResponse.ReturnStatus = true;
            }
            catch (Exception ex)
            {
                _inventoryManagementDataService.RollbackTransaction();
                returnResponse.ReturnStatus = false;
                returnResponse.ReturnMessage.Add(ex.Message);
            }
            finally
            {
                _inventoryManagementDataService.CloseConnection();
            }

            returnResponse.Entity = messageQueue;

            return(returnResponse);
        }
Example #12
0
        /// <summary>
        /// Delete Inbound Transaction Queue Entry
        /// </summary>
        /// <param name="transactionQueueId"></param>
        /// <returns></returns>
        public async Task DeleteInboundTransactionQueueEntry(int transactionQueueId)
        {
            TransactionQueueInbound transactionQueue = await dbConnection.TransactionQueueInbound.Where(x => x.TransactionQueueInboundId == transactionQueueId).FirstOrDefaultAsync();

            dbConnection.TransactionQueueInbound.Remove(transactionQueue);
        }