public async Task <IActionResult> CreateSalesOrderDetail([FromBody] SalesOrderDetailDataTransformation salesOrderDetailDataTransformation) { SecurityModel securityModel = (SecurityModel)(HttpContext.Items["SecurityModel"]); int accountId = securityModel.AccountId; int salesOrderId = salesOrderDetailDataTransformation.SalesOrderId; salesOrderDetailDataTransformation.AccountId = accountId; ResponseModel <SalesOrderDetailDataTransformation> returnResponse = new ResponseModel <SalesOrderDetailDataTransformation>(); try { returnResponse = await _salesOrderManagementBusinessService.CreateSalesOrderDetail(salesOrderDetailDataTransformation); returnResponse.Token = securityModel.Token; if (returnResponse.ReturnStatus == false) { return(BadRequest(returnResponse)); } return(Ok(returnResponse)); } catch (Exception ex) { returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); return(BadRequest(returnResponse)); } }
public async Task <IActionResult> UpdateSalesOrderDetail([FromBody] SalesOrderDetailDataTransformation salesOrderDetailDataTransformation) { SecurityModel securityModel = (SecurityModel)(HttpContext.Items["SecurityModel"]); int accountId = securityModel.AccountId; salesOrderDetailDataTransformation.AccountId = accountId; ResponseModel <SalesOrderDetailDataTransformation> returnResponse = new ResponseModel <SalesOrderDetailDataTransformation>(); try { returnResponse = await _inventoryManagementBusinessService.UpdateSalesOrderDetail(salesOrderDetailDataTransformation); returnResponse.Token = securityModel.Token; if (returnResponse.ReturnStatus == false) { return(BadRequest(returnResponse)); } await _messageQueueContext.Clients.All.SendAsync(MessageQueueEndpoints.InventoryQueue, string.Empty); return(Ok(returnResponse)); } catch (Exception ex) { returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); return(BadRequest(returnResponse)); } }
/// <summary> /// Get Sales Order /// </summary> /// <param name="accountId"></param> /// <param name="salesOrderId"></param> /// <returns></returns> public async Task <ResponseModel <SalesOrderDataTransformation> > GetSalesOrder(int accountId, int salesOrderId) { ResponseModel <SalesOrderDataTransformation> returnResponse = new ResponseModel <SalesOrderDataTransformation>(); SalesOrderDataTransformation salesOrderDataTransformation = new SalesOrderDataTransformation(); try { _inventoryManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); SalesOrder salesOrder = await _inventoryManagementDataService.GetSalesOrder(accountId, salesOrderId); salesOrderDataTransformation.SalesOrderId = salesOrderId; salesOrderDataTransformation.SalesOrderNumber = salesOrder.SalesOrderNumber; salesOrderDataTransformation.SalesOrderStatusId = salesOrder.SalesOrderStatusId; salesOrderDataTransformation.CustomerName = salesOrder.CustomerName; salesOrderDataTransformation.AddressLine1 = salesOrder.AddressLine1; salesOrderDataTransformation.AddressLine2 = salesOrder.AddressLine2; salesOrderDataTransformation.City = salesOrder.City; salesOrderDataTransformation.Region = salesOrder.Region; salesOrderDataTransformation.PostalCode = salesOrder.PostalCode; salesOrderDataTransformation.OrderTotal = salesOrder.OrderTotal; salesOrderDataTransformation.SalesOrderStatusDescription = salesOrder.SalesOrderStatus.Description; salesOrderDataTransformation.DateCreated = salesOrder.DateCreated; salesOrderDataTransformation.DateUpdated = salesOrder.DateUpdated; salesOrderDataTransformation.SalesOrderDetails = new List <SalesOrderDetailDataTransformation>(); foreach (SalesOrderDetail salesOrderDetail in salesOrder.SalesOrderDetails) { SalesOrderDetailDataTransformation salesOrderDetailDataTransformation = new SalesOrderDetailDataTransformation(); salesOrderDetailDataTransformation.SalesOrderDetailId = salesOrderDetail.SalesOrderDetailId; salesOrderDetailDataTransformation.SalesOrderId = salesOrderDetail.SalesOrderId; salesOrderDetailDataTransformation.ProductId = salesOrderDetail.ProductId; salesOrderDetailDataTransformation.ProductNumber = salesOrderDetail.Product.ProductNumber; salesOrderDetailDataTransformation.ProductDescription = salesOrderDetail.Product.Description; salesOrderDetailDataTransformation.UnitPrice = salesOrderDetail.UnitPrice; salesOrderDetailDataTransformation.OrderQuantity = salesOrderDetail.OrderQuantity; salesOrderDetailDataTransformation.ShippedQuantity = salesOrderDetail.ShippedQuantity; salesOrderDetailDataTransformation.DateCreated = salesOrderDetail.DateCreated; salesOrderDetailDataTransformation.DateUpdated = salesOrderDetail.DateUpdated; salesOrderDataTransformation.SalesOrderDetails.Add(salesOrderDetailDataTransformation); } returnResponse.ReturnStatus = true; } catch (Exception ex) { returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); } finally { _inventoryManagementDataService.CloseConnection(); } returnResponse.Entity = salesOrderDataTransformation; return(returnResponse); }
/// <summary> /// Update Sales Order Detail /// </summary> /// <param name="salesOrderDetailDataTransformation"></param> /// <returns></returns> public async Task <ResponseModel <SalesOrderDetailDataTransformation> > UpdateSalesOrderDetail(SalesOrderDetailDataTransformation salesOrderDetailDataTransformation) { ResponseModel <SalesOrderDetailDataTransformation> returnResponse = new ResponseModel <SalesOrderDetailDataTransformation>(); SalesOrderDetail salesOrderDetail = new SalesOrderDetail(); try { int accountId = salesOrderDetailDataTransformation.AccountId; int salesOrderId = salesOrderDetailDataTransformation.SalesOrderId; int salesOrderDetailId = salesOrderDetailDataTransformation.SalesOrderDetailId; // // Validate Shipped Quantity // if (salesOrderDetailDataTransformation.CurrentShippedQuantity == 0) { returnResponse.ReturnMessage.Add("Invalid Shipped Quantity"); returnResponse.ReturnStatus = false; return(returnResponse); } // // Begin a Serializable Transaction // _inventoryManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); _inventoryManagementDataService.BeginTransaction((int)IsolationLevel.Serializable); // // Get Sales Order Header // SalesOrder salesOrder = await _inventoryManagementDataService.GetSalesOrderHeader(accountId, salesOrderId); if (salesOrder == null) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Sales Order not found"); returnResponse.ReturnStatus = false; return(returnResponse); } // // Get Sales Order Detail // salesOrderDetail = await _inventoryManagementDataService.GetSalesOrderDetailForUpdate(salesOrderDetailId); if (salesOrderDetail == null) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Sales Order Detail not found"); returnResponse.ReturnStatus = false; return(returnResponse); } // // Update Sales Order Shipped Quantity // salesOrderDetail.ShippedQuantity = salesOrderDetail.ShippedQuantity + salesOrderDetailDataTransformation.CurrentShippedQuantity; await _inventoryManagementDataService.UpdateSalesOrderDetail(salesOrderDetail); // // Get Product Record with an exclusive update lock // Product product = await _inventoryManagementDataService.GetProductInformationForUpdate(salesOrderDetail.ProductId); if (product == null) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Product not found"); returnResponse.ReturnStatus = false; return(returnResponse); } // // Reduce Product OnHand Quantity by the quantity shipped // product.OnHandQuantity = product.OnHandQuantity - salesOrderDetailDataTransformation.CurrentShippedQuantity; await _inventoryManagementDataService.UpdateProduct(product); // // Create Inventory Transaction Record // InventoryTransaction inventoryTransaction = new InventoryTransaction(); inventoryTransaction.EntityId = salesOrderDetail.SalesOrderDetailId; inventoryTransaction.MasterEntityId = salesOrderDetail.MasterSalesOrderDetailId; inventoryTransaction.ProductId = salesOrderDetail.ProductId; inventoryTransaction.UnitCost = product.AverageCost; inventoryTransaction.Quantity = salesOrderDetailDataTransformation.CurrentShippedQuantity; inventoryTransaction.TransactionDate = DateTime.UtcNow; await _inventoryManagementDataService.CreateInventoryTransaction(inventoryTransaction); // // Create Transaction Queue record and create inventory transaction payload // TransactionQueueOutbound transactionQueue = new TransactionQueueOutbound(); transactionQueue.Payload = GenerateInventoryTransactionPayload(inventoryTransaction); transactionQueue.TransactionCode = TransactionQueueTypes.InventoryShipped; transactionQueue.ExchangeName = MessageQueueExchanges.InventoryManagement; await _inventoryManagementDataService.CreateOutboundTransactionQueue(transactionQueue); //await _inventoryManagementDataService.UpdateDatabase(); // // Commit Transaction // _inventoryManagementDataService.CommitTransaction(); returnResponse.ReturnStatus = true; } catch (Exception ex) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); } finally { _inventoryManagementDataService.CloseConnection(); } returnResponse.Entity = salesOrderDetailDataTransformation; return(returnResponse); }