public async Task <ResponseModel <ProductDataTransformation> > UpdateProduct(ProductDataTransformation productDataTransformation) { ResponseModel <ProductDataTransformation> returnResponse = new ResponseModel <ProductDataTransformation>(); Product product = new Product(); try { _productManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); _productManagementDataService.BeginTransaction((int)IsolationLevel.Serializable); ProductBusinessRules <ProductDataTransformation> productBusinessRules = new ProductBusinessRules <ProductDataTransformation>(productDataTransformation, _productManagementDataService); ValidationResult validationResult = await productBusinessRules.Validate(); if (validationResult.ValidationStatus == false) { _productManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage = validationResult.ValidationMessages; returnResponse.ReturnStatus = validationResult.ValidationStatus; return(returnResponse); } product = _mapper.Map <Product>(productDataTransformation); product.Dimension = _mapper.Map <Dimension>(productDataTransformation); product.SalesInformation = _mapper.Map <SalesInformation>(productDataTransformation); product.PurchaseInformation = _mapper.Map <PurchaseInformation>(productDataTransformation); product.InventoryAccount = _mapper.Map <InventoryAccount>(productDataTransformation); await _productManagementDataService.UpdateProduct(product); await _productManagementDataService.UpdateDatabase(); _productManagementDataService.CommitTransaction(); returnResponse.ReturnStatus = true; } catch (Exception ex) { _productManagementDataService.RollbackTransaction(); returnResponse.ReturnStatus = false; returnResponse.ReturnMessage.Add(ex.Message); } finally { _productManagementDataService.CloseConnection(); } returnResponse.Entity = productDataTransformation; return(returnResponse); }
/// <summary> /// Create Product /// </summary> /// <param name="product"></param> /// <param name="transaction"></param> /// <returns></returns> public Product CreateProduct(Product product, out TransactionalInformation transaction) { transaction = new TransactionalInformation(); try { ProductBusinessRules productBusinessRules = new ProductBusinessRules(); ValidationResult results = productBusinessRules.Validate(product); bool validationSucceeded = results.IsValid; IList <ValidationFailure> failures = results.Errors; if (validationSucceeded == false) { transaction = ValidationErrors.PopulateValidationErrors(failures); return(product); } // Begin session _dataService.CreateSession(); var param = product.ToDynamicParametersForInsert(); _dataService.ProductRepository.Insert(ProductScript.Insert, param, CommandType.Text); _dataService.CommitTransaction(true); transaction.ReturnStatus = true; transaction.ReturnMessage.Add("successfully!"); } catch (Exception ex) { string errorMessage = ex.Message; transaction.ReturnMessage.Add(errorMessage); transaction.ReturnStatus = false; // Logging: Log4NetLogger.log.Error(ex.Message); } finally { _dataService.CloseSession(); } return(product); }
/// <summary> /// Upload Products /// </summary> /// <param name="products"></param> /// <returns></returns> public async Task <ResponseModel <List <ProductDataTransformation> > > UploadProducts(int accountId, List <ProductDataTransformation> products) { ResponseModel <List <ProductDataTransformation> > returnResponse = new ResponseModel <List <ProductDataTransformation> >(); try { _inventoryManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); List <Product> productsAdded = new List <Product>(); foreach (ProductDataTransformation productItem in products) { _inventoryManagementDataService.BeginTransaction((int)IsolationLevel.Serializable); ProductBusinessRules <ProductDataTransformation> productBusinessRules = new ProductBusinessRules <ProductDataTransformation>(productItem, _inventoryManagementDataService); ValidationResult validationResult = await productBusinessRules.Validate(); if (validationResult.ValidationStatus == false) { _inventoryManagementDataService.RollbackTransaction(); continue; } Product product = new Product(); product.AccountId = accountId; product.ProductNumber = productItem.ProductNumber; product.Description = productItem.Description; product.UnitPrice = productItem.UnitPrice; product.BinLocation = productItem.BinLocation; await _inventoryManagementDataService.CreateProduct(product); //await _inventoryManagementDataService.UpdateDatabase(); TransactionQueueOutbound transactionQueue = new TransactionQueueOutbound(); transactionQueue.Payload = GenerateProductUpdatePayload(product); transactionQueue.TransactionCode = TransactionQueueTypes.ProductUpdated; transactionQueue.ExchangeName = MessageQueueExchanges.InventoryManagement; await _inventoryManagementDataService.CreateOutboundTransactionQueue(transactionQueue); //await _inventoryManagementDataService.UpdateDatabase(); _inventoryManagementDataService.CommitTransaction(); productsAdded.Add(product); } foreach (ProductDataTransformation productItem in products) { Product product = productsAdded.Where(x => x.ProductNumber == productItem.ProductNumber).FirstOrDefault(); if (product != null) { continue; } product = await _inventoryManagementDataService.GetProductInformationByProductNumber(productItem.ProductNumber, accountId); if (product == null) { continue; } productItem.ProductId = product.ProductId; ProductBusinessRules <ProductDataTransformation> productBusinessRules = new ProductBusinessRules <ProductDataTransformation>(productItem, _inventoryManagementDataService); ValidationResult validationResult = await productBusinessRules.Validate(); if (validationResult.ValidationStatus == false) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage = validationResult.ValidationMessages; returnResponse.ReturnStatus = validationResult.ValidationStatus; return(returnResponse); } _inventoryManagementDataService.BeginTransaction((int)IsolationLevel.Serializable); product = await _inventoryManagementDataService.GetProductInformationForUpdate(productItem.ProductId); product.ProductNumber = productItem.ProductNumber; product.Description = productItem.Description; product.UnitPrice = productItem.UnitPrice; product.BinLocation = productItem.BinLocation; await _inventoryManagementDataService.UpdateProduct(product); TransactionQueueOutbound transactionQueue = new TransactionQueueOutbound(); transactionQueue.Payload = GenerateProductUpdatePayload(product); transactionQueue.TransactionCode = TransactionQueueTypes.ProductUpdated; 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(); } return(returnResponse); }
/// <summary> /// Update Product /// </summary> /// <param name="productDataTransformation"></param> /// <returns></returns> public async Task <ResponseModel <ProductDataTransformation> > UpdateProduct(ProductDataTransformation productDataTransformation) { ResponseModel <ProductDataTransformation> returnResponse = new ResponseModel <ProductDataTransformation>(); Product product = new Product(); try { _inventoryManagementDataService.OpenConnection(_connectionStrings.PrimaryDatabaseConnectionString); _inventoryManagementDataService.BeginTransaction((int)IsolationLevel.Serializable); ProductBusinessRules <ProductDataTransformation> productBusinessRules = new ProductBusinessRules <ProductDataTransformation>(productDataTransformation, _inventoryManagementDataService); ValidationResult validationResult = await productBusinessRules.Validate(); if (validationResult.ValidationStatus == false) { _inventoryManagementDataService.RollbackTransaction(); returnResponse.ReturnMessage = validationResult.ValidationMessages; returnResponse.ReturnStatus = validationResult.ValidationStatus; return(returnResponse); } int productId = productDataTransformation.ProductId; product = await _inventoryManagementDataService.GetProductInformationForUpdate(productId); product.ProductNumber = productDataTransformation.ProductNumber; product.Description = productDataTransformation.Description; product.UnitPrice = productDataTransformation.UnitPrice; product.BinLocation = productDataTransformation.BinLocation; await _inventoryManagementDataService.UpdateProduct(product); TransactionQueueOutbound transactionQueue = new TransactionQueueOutbound(); transactionQueue.Payload = GenerateProductUpdatePayload(product); transactionQueue.TransactionCode = TransactionQueueTypes.ProductUpdated; 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 = productDataTransformation; return(returnResponse); }