Esempio n. 1
0
        /// <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));
            }
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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);
        }