internal static void AssertEqual(this SalesQuoteItem expected, ISalesQuoteItemReturn result) { Assert.AreEqual(expected.ToSalesQuoteItemKey().KeyValue, result.SalesQuoteItemKey); Assert.AreEqual(expected.Quantity, result.Quantity); Assert.AreEqual(expected.CustomerProductCode, result.CustomerProductCode); Assert.AreEqual(expected.PriceBase, result.PriceBase); Assert.AreEqual(expected.PriceFreight, result.PriceFreight); Assert.AreEqual(expected.PriceTreatment, result.PriceTreatment); Assert.AreEqual(expected.PriceWarehouse, result.PriceWarehouse); Assert.AreEqual(expected.PriceRebate, result.PriceRebate); Assert.AreEqual(expected.Treatment.ToInventoryTreatmentKey().KeyValue, result.TreatmentKey); expected.Product.AssertEqual(result.Product); expected.PackagingProduct.AssertEqual(result.Packaging); }
internal IResult <SalesQuote> Execute(DateTime timestamp, SalesQuoteParameters parameters) { var employeeResult = new GetEmployeeCommand(_inventoryShipmentOrderUnitOfWork).GetEmployee(parameters.Parameters); if (!employeeResult.Success) { return(employeeResult.ConvertTo <SalesQuote>()); } SalesQuote salesQuote; if (parameters.SalesQuoteNumber == null) { var date = timestamp.Date; var shipmentInfoResult = new CreateShipmentInformationCommand(_inventoryShipmentOrderUnitOfWork).Execute(date); if (!shipmentInfoResult.Success) { return(shipmentInfoResult.ConvertTo <SalesQuote>()); } var sequence = new EFUnitOfWorkHelper(_inventoryShipmentOrderUnitOfWork).GetNextSequence <SalesQuote>(q => q.DateCreated == date, q => q.Sequence); var shipmentInformation = shipmentInfoResult.ResultingObject; var quoteNum = (date.Year * 100) - 1; salesQuote = _inventoryShipmentOrderUnitOfWork.SalesQuoteRepository.Add(new SalesQuote { DateCreated = date, Sequence = sequence, ShipmentInfoDateCreated = shipmentInformation.DateCreated, ShipmentInfoSequence = shipmentInformation.Sequence, ShipmentInformation = shipmentInformation, Items = new List <SalesQuoteItem>(), QuoteNum = _inventoryShipmentOrderUnitOfWork.SalesQuoteRepository.SourceQuery .Select(q => q.QuoteNum) .Where(q => q != null && q > quoteNum) .DefaultIfEmpty(quoteNum) .Max() + 1 }); } else { salesQuote = _inventoryShipmentOrderUnitOfWork.SalesQuoteRepository .Filter(q => q.QuoteNum == parameters.SalesQuoteNumber, q => q.ShipmentInformation, q => q.Items) .FirstOrDefault(); if (salesQuote == null) { return(new InvalidResult <SalesQuote>(null, string.Format(UserMessages.SalesQuoteNotFound_Num, parameters.SalesQuoteNumber))); } } Facility sourceFacility = null; if (parameters.SourceFacilityKey != null) { sourceFacility = _inventoryShipmentOrderUnitOfWork.FacilityRepository.FindByKey(parameters.SourceFacilityKey); if (sourceFacility == null) { return(new InvalidResult <SalesQuote>(null, string.Format(UserMessages.FacilityNotFound, parameters.SourceFacilityKey))); } } Company customer = null; var getCompanyCommand = new GetCompanyCommand(_inventoryShipmentOrderUnitOfWork); if (parameters.CustomerKey != null) { var customerResult = getCompanyCommand.Execute(parameters.CustomerKey.ToCompanyKey(), CompanyType.Customer); if (!customerResult.Success) { return(customerResult.ConvertTo <SalesQuote>()); } customer = customerResult.ResultingObject; } Company broker = null; if (parameters.BrokerKey != null) { var brokerResult = getCompanyCommand.Execute(parameters.BrokerKey, CompanyType.Broker); if (!brokerResult.Success) { return(brokerResult.ConvertTo <SalesQuote>()); } broker = brokerResult.ResultingObject; } salesQuote.EmployeeId = employeeResult.ResultingObject.EmployeeId; salesQuote.TimeStamp = timestamp; salesQuote.SourceFacilityId = sourceFacility == null ? (int?)null : sourceFacility.Id; salesQuote.CustomerId = customer == null ? (int?)null : customer.CompanyKey_Id; salesQuote.BrokerId = broker == null ? (int?)null : broker.CompanyKey_Id; salesQuote.QuoteDate = parameters.Parameters.QuoteDate; salesQuote.DateReceived = parameters.Parameters.DateReceived; salesQuote.CalledBy = parameters.Parameters.CalledBy; salesQuote.TakenBy = parameters.Parameters.TakenBy; salesQuote.PaymentTerms = parameters.Parameters.PaymentTerms; ShippingLabel shipFromOrSoldTo = null; if (parameters.Parameters.ShipmentInformation != null && parameters.Parameters.ShipmentInformation.ShippingInstructions != null) { shipFromOrSoldTo = parameters.Parameters.ShipmentInformation.ShippingInstructions.ShipFromOrSoldTo; } salesQuote.SoldTo.SetShippingLabel(shipFromOrSoldTo); salesQuote.ShipmentInformation.SetShipmentInformation(parameters.Parameters.ShipmentInformation, false); var itemSequence = 0; var itemsToRemove = salesQuote.Items.ToDictionary(i => i.ToSalesQuoteItemKey(), i => { itemSequence = Math.Max(itemSequence, i.ItemSequence); return(i); }); foreach (var item in parameters.Items) { SalesQuoteItem salesQuoteItem = null; if (item.SalesQuoteItemKey != null) { if (itemsToRemove.TryGetValue(item.SalesQuoteItemKey, out salesQuoteItem)) { itemsToRemove.Remove(item.SalesQuoteItemKey); } else { return(new InvalidResult <SalesQuote>(null, string.Format(UserMessages.SalesQuoteItemNotFound, item.SalesQuoteItemKey))); } } else { salesQuote.Items.Add(salesQuoteItem = new SalesQuoteItem { DateCreated = salesQuote.DateCreated, Sequence = salesQuote.Sequence, ItemSequence = ++itemSequence }); } salesQuoteItem.ProductId = item.ProductKey.ProductKey_ProductId; salesQuoteItem.PackagingProductId = item.PackagingProductKey.PackagingProductKey_ProductId; salesQuoteItem.TreatmentId = item.InventoryTreatmentKey.InventoryTreatmentKey_Id; salesQuoteItem.Quantity = item.Parameters.Quantity; salesQuoteItem.PriceBase = item.Parameters.PriceBase; salesQuoteItem.PriceFreight = item.Parameters.PriceFreight; salesQuoteItem.PriceTreatment = item.Parameters.PriceTreatment; salesQuoteItem.PriceWarehouse = item.Parameters.PriceWarehouse; salesQuoteItem.PriceRebate = item.Parameters.PriceRebate; salesQuoteItem.CustomerProductCode = item.Parameters.CustomerProductCode; } foreach (var item in itemsToRemove.Values) { _inventoryShipmentOrderUnitOfWork.SalesQuoteItemRepository.Remove(item); } return(new SuccessResult <SalesQuote>(salesQuote)); }