/// <summary> /// Get Purchase Order /// </summary> /// <param name="accountId"></param> /// <param name="purchaseOrderId"></param> /// <returns></returns> public async Task <ResponseModel <PurchaseOrderDataTransformation> > GetPurchaseOrder(int accountId, int purchaseOrderId) { ResponseModel <PurchaseOrderDataTransformation> returnResponse = new ResponseModel <PurchaseOrderDataTransformation>(); PurchaseOrderDataTransformation purchaseOrderDataTransformation = new PurchaseOrderDataTransformation(); try { _purchaseOrderManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); PurchaseOrder purchaseOrder = await _purchaseOrderManagementDataService.GetPurchaseOrder(accountId, purchaseOrderId); purchaseOrderDataTransformation.PurchaseOrderId = purchaseOrderId; purchaseOrderDataTransformation.PurchaseOrderNumber = purchaseOrder.PurchaseOrderNumber; purchaseOrderDataTransformation.PurchaseOrderStatusId = purchaseOrder.PurchaseOrderStatusId; purchaseOrderDataTransformation.SupplierId = purchaseOrder.Supplier.SupplierId; purchaseOrderDataTransformation.SupplierName = purchaseOrder.Supplier.Name; purchaseOrderDataTransformation.AddressLine1 = purchaseOrder.Supplier.AddressLine1; purchaseOrderDataTransformation.AddressLine2 = purchaseOrder.Supplier.AddressLine2; purchaseOrderDataTransformation.City = purchaseOrder.Supplier.City; purchaseOrderDataTransformation.Region = purchaseOrder.Supplier.Region; purchaseOrderDataTransformation.PostalCode = purchaseOrder.Supplier.PostalCode; purchaseOrderDataTransformation.OrderTotal = purchaseOrder.OrderTotal; purchaseOrderDataTransformation.PurchaseOrderStatusDescription = purchaseOrder.PurchaseOrderStatus.Description; purchaseOrderDataTransformation.DateCreated = purchaseOrder.DateCreated; purchaseOrderDataTransformation.DateUpdated = purchaseOrder.DateUpdated; purchaseOrderDataTransformation.PurchaseOrderDetails = new List <PurchaseOrderDetailDataTransformation>(); foreach (PurchaseOrderDetail purchaseOrderDetail in purchaseOrder.PurchaseOrderDetails) { PurchaseOrderDetailDataTransformation purchaseOrderDetailDataTransformation = new PurchaseOrderDetailDataTransformation(); purchaseOrderDetailDataTransformation.PurchaseOrderDetailId = purchaseOrderDetail.PurchaseOrderDetailId; purchaseOrderDetailDataTransformation.PurchaseOrderId = purchaseOrderDetail.PurchaseOrderId; purchaseOrderDetailDataTransformation.ProductId = purchaseOrderDetail.ProductId; purchaseOrderDetailDataTransformation.ProductMasterId = purchaseOrderDetail.Product.ProductMasterId; purchaseOrderDetailDataTransformation.ProductNumber = purchaseOrderDetail.Product.ProductNumber; purchaseOrderDetailDataTransformation.ProductDescription = purchaseOrderDetail.Product.Description; purchaseOrderDetailDataTransformation.UnitPrice = purchaseOrderDetail.UnitPrice; purchaseOrderDetailDataTransformation.OrderQuantity = purchaseOrderDetail.OrderQuantity; purchaseOrderDetailDataTransformation.DateCreated = purchaseOrderDetail.DateCreated; purchaseOrderDetailDataTransformation.DateUpdated = purchaseOrderDetail.DateUpdated; purchaseOrderDataTransformation.PurchaseOrderDetails.Add(purchaseOrderDetailDataTransformation); } returnResponse.ReturnStatus = true; } catch (Exception ex) { returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); } finally { _purchaseOrderManagementDataService.CloseConnection(); } returnResponse.Entity = purchaseOrderDataTransformation; return(returnResponse); }
public async Task <IActionResult> CreatePurchaseOrderDetail([FromBody] PurchaseOrderDetailDataTransformation purchaseOrderDetailDataTransformation) { SecurityModel securityModel = (SecurityModel)(HttpContext.Items["SecurityModel"]); int accountId = securityModel.AccountId; int purchaseOrderId = purchaseOrderDetailDataTransformation.PurchaseOrderId; purchaseOrderDetailDataTransformation.AccountId = accountId; ResponseModel <PurchaseOrderDetailDataTransformation> returnResponse = new ResponseModel <PurchaseOrderDetailDataTransformation>(); try { returnResponse = await _purchaseOrderManagementBusinessService.CreatePurchaseOrderDetail(purchaseOrderDetailDataTransformation); 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> UpdatePurchaseOrderDetail([FromBody] PurchaseOrderDetailDataTransformation purchaseOrderDetailDataTransformation) { SecurityModel securityModel = (SecurityModel)(HttpContext.Items["SecurityModel"]); int accountId = securityModel.AccountId; purchaseOrderDetailDataTransformation.AccountId = accountId; ResponseModel <PurchaseOrderDetailDataTransformation> returnResponse = new ResponseModel <PurchaseOrderDetailDataTransformation>(); try { returnResponse = await _inventoryManagementBusinessService.UpdatePurchaseOrderDetail(purchaseOrderDetailDataTransformation); 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> /// Delete Purchase Order Detail /// </summary> /// <param name="purchaseOrderDetailDataTransformation"></param> /// <returns></returns> public async Task <ResponseModel <PurchaseOrderDetailDataTransformation> > DeletePurchaseOrderDetail(PurchaseOrderDetailDataTransformation purchaseOrderDetailDataTransformation) { ResponseModel <PurchaseOrderDetailDataTransformation> returnResponse = new ResponseModel <PurchaseOrderDetailDataTransformation>(); PurchaseOrderDetail purchaseOrderDetail = new PurchaseOrderDetail(); try { int accountId = purchaseOrderDetailDataTransformation.AccountId; int purchaseOrderId = purchaseOrderDetailDataTransformation.PurchaseOrderId; int purchaseOrderDetailId = purchaseOrderDetailDataTransformation.PurchaseOrderDetailId; _purchaseOrderManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); _purchaseOrderManagementDataService.BeginTransaction((int)IsolationLevel.ReadCommitted); PurchaseOrder purchaseOrder = await _purchaseOrderManagementDataService.GetPurchaseOrderHeader(accountId, purchaseOrderId); if (purchaseOrder == null) { _purchaseOrderManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Purchase Order not found"); returnResponse.ReturnStatus = false; return(returnResponse); } purchaseOrderDetail = await _purchaseOrderManagementDataService.GetPurchaseOrderDetailForUpdate(purchaseOrderDetailId); if (purchaseOrderDetail == null) { _purchaseOrderManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Purchase Order Detail not found"); returnResponse.ReturnStatus = false; return(returnResponse); } double originalLineItemAmount = purchaseOrderDetail.OrderQuantity * purchaseOrderDetail.UnitPrice; await _purchaseOrderManagementDataService.DeletePurchaseOrderDetail(purchaseOrderDetailId); purchaseOrder.OrderTotal = purchaseOrder.OrderTotal - originalLineItemAmount; purchaseOrderDetailDataTransformation.OrderTotal = purchaseOrder.OrderTotal; await _purchaseOrderManagementDataService.UpdatePurchaseOrderHeader(purchaseOrder); purchaseOrderDetail.UnitPrice = purchaseOrderDetailDataTransformation.UnitPrice; purchaseOrderDetail.OrderQuantity = purchaseOrderDetailDataTransformation.OrderQuantity; await _purchaseOrderManagementDataService.UpdatePurchaseOrderDetail(purchaseOrderDetail); await _purchaseOrderManagementDataService.UpdateDatabase(); _purchaseOrderManagementDataService.CommitTransaction(); returnResponse.ReturnStatus = true; } catch (Exception ex) { _purchaseOrderManagementDataService.RollbackTransaction(); returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); } finally { _purchaseOrderManagementDataService.CloseConnection(); } returnResponse.Entity = purchaseOrderDetailDataTransformation; return(returnResponse); }
/// <summary> /// Create Purchase Order Detail /// </summary> /// <param name="purchaseOrderDetailDataTransformation"></param> /// <returns></returns> public async Task <ResponseModel <PurchaseOrderDetailDataTransformation> > CreatePurchaseOrderDetail(PurchaseOrderDetailDataTransformation purchaseOrderDetailDataTransformation) { ResponseModel <PurchaseOrderDetailDataTransformation> returnResponse = new ResponseModel <PurchaseOrderDetailDataTransformation>(); PurchaseOrderDetail purchaseOrderDetail = new PurchaseOrderDetail(); try { int accountId = purchaseOrderDetailDataTransformation.AccountId; int purchaseOrderId = purchaseOrderDetailDataTransformation.PurchaseOrderId; _purchaseOrderManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); _purchaseOrderManagementDataService.BeginTransaction((int)IsolationLevel.ReadCommitted); PurchaseOrderDetailBusinessRules <PurchaseOrderDetailDataTransformation> purchaseOrderDetailBusinessRules = new PurchaseOrderDetailBusinessRules <PurchaseOrderDetailDataTransformation>(purchaseOrderDetailDataTransformation); ValidationResult validationResult = purchaseOrderDetailBusinessRules.Validate(); if (validationResult.ValidationStatus == false) { _purchaseOrderManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage = validationResult.ValidationMessages; returnResponse.ReturnStatus = validationResult.ValidationStatus; return(returnResponse); } PurchaseOrder purchaseOrder = await _purchaseOrderManagementDataService.GetPurchaseOrderHeader(accountId, purchaseOrderId); if (purchaseOrder == null) { _purchaseOrderManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Purchase Order not found"); returnResponse.ReturnStatus = false; return(returnResponse); } double lineItemAmount = purchaseOrderDetailDataTransformation.UnitPrice * purchaseOrderDetailDataTransformation.OrderQuantity; purchaseOrder.OrderTotal = purchaseOrder.OrderTotal + lineItemAmount; purchaseOrderDetailDataTransformation.OrderTotal = purchaseOrder.OrderTotal; await _purchaseOrderManagementDataService.UpdatePurchaseOrderHeader(purchaseOrder); purchaseOrderDetail.ProductId = purchaseOrderDetailDataTransformation.ProductId; purchaseOrderDetail.PurchaseOrderId = purchaseOrderDetailDataTransformation.PurchaseOrderId; purchaseOrderDetail.UnitPrice = purchaseOrderDetailDataTransformation.UnitPrice; purchaseOrderDetail.OrderQuantity = purchaseOrderDetailDataTransformation.OrderQuantity; await _purchaseOrderManagementDataService.CreatePurchaseOrderDetail(purchaseOrderDetail); //await _purchaseOrderManagementDataService.UpdateDatabase(); _purchaseOrderManagementDataService.CommitTransaction(); PurchaseOrderDetail updatedPurchaseOrderDetail = await _purchaseOrderManagementDataService.GetPurchaseOrderDetail(purchaseOrderDetail.PurchaseOrderDetailId); purchaseOrderDetailDataTransformation = new PurchaseOrderDetailDataTransformation(); purchaseOrderDetailDataTransformation.PurchaseOrderDetailId = updatedPurchaseOrderDetail.PurchaseOrderDetailId; purchaseOrderDetailDataTransformation.PurchaseOrderId = updatedPurchaseOrderDetail.PurchaseOrderId; purchaseOrderDetailDataTransformation.ProductId = updatedPurchaseOrderDetail.ProductId; purchaseOrderDetailDataTransformation.ProductMasterId = updatedPurchaseOrderDetail.Product.ProductMasterId; purchaseOrderDetailDataTransformation.ProductNumber = updatedPurchaseOrderDetail.Product.ProductNumber; purchaseOrderDetailDataTransformation.ProductDescription = updatedPurchaseOrderDetail.Product.Description; purchaseOrderDetailDataTransformation.UnitPrice = updatedPurchaseOrderDetail.UnitPrice; purchaseOrderDetailDataTransformation.OrderQuantity = updatedPurchaseOrderDetail.OrderQuantity; purchaseOrderDetailDataTransformation.OrderTotal = purchaseOrder.OrderTotal; returnResponse.ReturnStatus = true; } catch (Exception ex) { _purchaseOrderManagementDataService.RollbackTransaction(); returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); } finally { _purchaseOrderManagementDataService.CloseConnection(); } returnResponse.Entity = purchaseOrderDetailDataTransformation; return(returnResponse); }
/// <summary> /// Update Purchase Order Detail /// </summary> /// <param name="purchaseOrderDetailDataTransformation"></param> /// <returns></returns> public async Task <ResponseModel <PurchaseOrderDetailDataTransformation> > UpdatePurchaseOrderDetail(PurchaseOrderDetailDataTransformation purchaseOrderDetailDataTransformation) { ResponseModel <PurchaseOrderDetailDataTransformation> returnResponse = new ResponseModel <PurchaseOrderDetailDataTransformation>(); PurchaseOrderDetail purchaseOrderDetail = new PurchaseOrderDetail(); try { int accountId = purchaseOrderDetailDataTransformation.AccountId; int purchaseOrderId = purchaseOrderDetailDataTransformation.PurchaseOrderId; int purchaseOrderDetailId = purchaseOrderDetailDataTransformation.PurchaseOrderDetailId; if (purchaseOrderDetailDataTransformation.CurrentReceivedQuantity == 0) { returnResponse.ReturnMessage.Add("Invalid Received Quantity"); returnResponse.ReturnStatus = false; return(returnResponse); } _inventoryManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); _inventoryManagementDataService.BeginTransaction((int)IsolationLevel.Serializable); PurchaseOrder purchaseOrder = await _inventoryManagementDataService.GetPurchaseOrderHeader(accountId, purchaseOrderId); if (purchaseOrder == null) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Purchase Order not found"); returnResponse.ReturnStatus = false; return(returnResponse); } purchaseOrderDetail = await _inventoryManagementDataService.GetPurchaseOrderDetailForUpdate(purchaseOrderDetailId); if (purchaseOrderDetail == null) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Purchase Order Detail not found"); returnResponse.ReturnStatus = false; return(returnResponse); } purchaseOrderDetail.ReceivedQuantity = purchaseOrderDetail.ReceivedQuantity + purchaseOrderDetailDataTransformation.CurrentReceivedQuantity; await _inventoryManagementDataService.UpdatePurchaseOrderDetail(purchaseOrderDetail); Product product = await _inventoryManagementDataService.GetProductInformationForUpdate(purchaseOrderDetail.ProductId); if (product == null) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage.Add("Product not found"); returnResponse.ReturnStatus = false; return(returnResponse); } double newAverageCost = CalculateAverageCost(product.OnHandQuantity, product.AverageCost, purchaseOrderDetailDataTransformation.CurrentReceivedQuantity, purchaseOrderDetail.UnitPrice); if (newAverageCost != 0) { product.AverageCost = newAverageCost; } product.OnHandQuantity = product.OnHandQuantity + purchaseOrderDetailDataTransformation.CurrentReceivedQuantity; await _inventoryManagementDataService.UpdateProduct(product); InventoryTransaction inventoryTransaction = new InventoryTransaction(); inventoryTransaction.EntityId = purchaseOrderDetail.PurchaseOrderDetailId; inventoryTransaction.MasterEntityId = purchaseOrderDetail.MasterPurchaseOrderDetailId; inventoryTransaction.ProductId = purchaseOrderDetail.ProductId; inventoryTransaction.UnitCost = purchaseOrderDetail.UnitPrice; inventoryTransaction.Quantity = purchaseOrderDetailDataTransformation.CurrentReceivedQuantity; inventoryTransaction.TransactionDate = DateTime.UtcNow; await _inventoryManagementDataService.CreateInventoryTransaction(inventoryTransaction); TransactionQueueOutbound transactionQueue = new TransactionQueueOutbound(); transactionQueue.Payload = GenerateInventoryTransactionPayload(inventoryTransaction); transactionQueue.TransactionCode = TransactionQueueTypes.InventoryReceived; transactionQueue.ExchangeName = MessageQueueExchanges.InventoryManagement; await _inventoryManagementDataService.CreateOutboundTransactionQueue(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 = purchaseOrderDetailDataTransformation; return(returnResponse); }