namespace CAPI.Custom.Data { using CAPI.Custom.Entities; using framework_business; using System; using System.Collections.Generic; using System.Linq; /// /// Summary description for QuotesContext_QuoteItems /// public partial class QuotesContext { //public class PreviousQuotedItem //{ // public DateTime None_QuoteInformation_QuoteDate { get; set; } // public int? None_QuoteInformation_QuoteStatus { get; set; } // public string QuoteInformation_QuoteNumber { get; set; } // public int Quote_itemID { get; set; } // public int Quote_recId { get; set; } // public string Quote_QuoteStatusDisplay { get; set; } // public string QuoteItems_QuoteItems_PartsMasterPartNumber { get; set; } // public string QuoteItems_QuoteItems_QuoteItemsBrand { get; set; } // public string QuoteItems_QuoteItems_QuoteItemsCondition { get; set; } // public decimal QuoteItems_QuoteItems_QuoteItemsCostPrice { get; set; } // public string QuoteItems_QuoteItems_QuoteItemsDescription { get; set; } // public string QuoteItems_QuoteItems_QuoteItemsLeadTime { get; set; } // public decimal QuoteItems_QuoteItems_QuoteItemsMargin { get; set; } // public string QuoteItems_QuoteItems_QuoteItemsPartNumber { get; set; } // public int QuoteItems_QuoteItems_QuoteItemsQuantitySelected { get; set; } // public decimal QuoteItems_QuoteItems_QuoteItemsSellingPrice { get; set; } // public string QuoteItems_QuoteItems_QuoteItemsSupplier { get; set; } // public string QuoteItems_QuoteItems_QuoteItemsWarehouseLocation { get; set; } // public int QuoteItems_itemID { get; set; } // public int QuoteItems_recId { get; set; } // public bool PriceChecked { get; set; } // public DateTime? PriceCheck_Date { get; set; } // public decimal? PriceCheck_NewSellPrice { get; set; } // public DateTime? PriceCheck_QuoteDate { get; set; } // public string PriceCheck_QuoteNumber { get; set; } // public int? PriceCheck_ReferenceQuoteItemId { get; set; } // public decimal? PriceCheck_SellPrice { get; set; } // public PreviousQuotedItem() // { // } // public PreviousQuotedItem(vQuote quote, QuoteItem quoteItem, SurfaceLookup surfaceLookup) // { // this.None_QuoteInformation_QuoteDate = quote.None_QuoteInformation_QuoteDate.GetValueOrDefault(); // this.None_QuoteInformation_QuoteStatus = quote.None_QuoteInformation_QuoteStatus.GetValueOrDefault(); // this.QuoteInformation_QuoteNumber = quote.QuoteInformation_QuoteNumber; // this.QuoteItems_itemID = quoteItem.itemID; // this.QuoteItems_QuoteItems_PartsMasterPartNumber = quoteItem.QuoteItems_QuoteItems_PartsMasterPartNumber; // this.QuoteItems_QuoteItems_QuoteItemsBrand = quoteItem.QuoteItems_QuoteItems_QuoteItemsBrand; // this.QuoteItems_QuoteItems_QuoteItemsCondition = quoteItem.QuoteItems_QuoteItems_QuoteItemsCondition; // this.QuoteItems_QuoteItems_QuoteItemsCostPrice = quoteItem.QuoteItems_QuoteItems_QuoteItemsCostPrice.GetValueOrDefault(); // this.QuoteItems_QuoteItems_QuoteItemsDescription = quoteItem.QuoteItems_QuoteItems_QuoteItemsDescription; // this.QuoteItems_QuoteItems_QuoteItemsLeadTime = quoteItem.QuoteItems_QuoteItems_QuoteItemsLeadTime; // this.QuoteItems_QuoteItems_QuoteItemsMargin = quoteItem.QuoteItems_QuoteItems_QuoteItemsMargin.GetValueOrDefault(); // this.QuoteItems_QuoteItems_QuoteItemsPartNumber = quoteItem.QuoteItems_QuoteItems_QuoteItemsPartNumber; // this.QuoteItems_QuoteItems_QuoteItemsQuantitySelected = quoteItem.QuoteItems_QuoteItems_QuoteItemsQuantitySelected.GetValueOrDefault(); // this.QuoteItems_QuoteItems_QuoteItemsSellingPrice = quoteItem.QuoteItems_QuoteItems_QuoteItemsSellingPrice.GetValueOrDefault(); // this.QuoteItems_QuoteItems_QuoteItemsSupplier = quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplier; // this.QuoteItems_QuoteItems_QuoteItemsWarehouseLocation = quoteItem.QuoteItems_QuoteItems_QuoteItemsWarehouseLocation; // this.QuoteItems_recId = quoteItem.recId; // this.Quote_itemID = quote.itemID; // this.Quote_QuoteStatusDisplay = surfaceLookup?.Display; // this.Quote_recId = quote.recId; // this.PriceChecked = quoteItem.PriceCheckIsChecked.GetValueOrDefault(); // //this.PriceCheck_Date = quoteItem.priceche; // this.PriceCheck_NewSellPrice = quoteItem.PriceCheckNewSellPrice; // this.PriceCheck_QuoteDate = quoteItem.PriceCheckQuoteDate; // this.PriceCheck_QuoteNumber = quoteItem.PriceCheckQuoteNumber; // this.PriceCheck_ReferenceQuoteItemId = quoteItem.PriceCheckQuoteItemId; // this.PriceCheck_SellPrice = quoteItem.PriceCheckOldSellPrice; // } //} // CEP-33 - Quote Items (CAT List Column) public void QuotesItems_RemoveMatchingSurplusWarehouseQuoteItems(int quoteId) { string supplierName = "SURPLUS WAREHOUSE"; var masterGroups = (from qi in QuoteItems where qi.isActive.Value && qi.ParentSurfaceItemId == quoteId && supplierName == qi.Supplier orderby qi.CostPrice descending group qi by qi.MasterPartNumber into grp where grp.Count() > 1 select grp) .ToList(); foreach (var group in masterGroups) { var nullOr0 = new int?[] { null, 0 }; var priciest = group.OrderByDescending(p => p.CostPrice).First(); QuoteItems.RemoveRange(group.Where(p => p.itemID != priciest.itemID // item has none selected && nullOr0.Contains(p.QuantitySelected))); SaveChanges(); } } /// /// /// /// /// quote.itemID //public void QuoteItems_CheckPreviouslyQuotedPrice(int quoteId) //{ // var withinDate = DateTime.Now.AddMonths(-6); // var currentQuote = vQuotes.SingleOrDefault(p => p.itemID == quoteId); // var quoteItems = vQuoteItems.Where(p => p.ParentSurfaceItemId == currentQuote.itemID && !p.IsPriceChecked.Value) // .ToList(); // if (!quoteItems.Any()) return; // var hasChanges = new List(); // // get previously quoted items // foreach (var currentItem in quoteItems.Where(p => !p.IsCatList.Value)) // { // var prevQuotedItem = (from item in vQuoteItems // join quote in vQuotes on item.ParentSurfaceItemId equals quote.itemID // //join status in SurfaceLookups on quote.None_QuoteInformation_QuoteStatus equals status.Id into tmpStatus // //from status in tmpStatus.DefaultIfEmpty() // where quote.IsFinalized.Value // && quote.QuoteInformation_CustomerTradingName == currentQuote.QuoteInformation_CustomerTradingName // && item.QuoteItems_QuoteItems_PartsMasterPartNumber == currentItem.QuoteItems_QuoteItems_PartsMasterPartNumber // //&& item.QuoteItems_QuoteItems_QuoteItemsPartNumber == currentItem.QuoteItems_QuoteItems_QuoteItemsPartNumber // //&& item.QuoteItems_QuoteItems_QuoteItemsBrand == currentItem.QuoteItems_QuoteItems_QuoteItemsBrand // && item.QuoteItems_QuoteItems_QuoteItemsCondition == currentItem.QuoteItems_QuoteItems_QuoteItemsCondition // //&& item.QuoteItems_QuoteItems_QuoteItemsSupplier == currentItem.QuoteItems_QuoteItems_QuoteItemsSupplier // && item.QuoteItems_QuoteItems_QuoteItemsQuantitySelected > 0 // && quote.None_QuoteInformation_QuoteDate.Value <= currentQuote.None_QuoteInformation_QuoteDate.Value // && quote.itemID < currentQuote.itemID // && quote.None_QuoteInformation_QuoteDate.Value >= withinDate // orderby quote.itemID descending, // item.QuoteItems_QuoteItems_QuoteItemsSellingPrice.Value descending // select new { quote, item /*, status*/ }) // .FirstOrDefault(); // var priceCheck = QuoteItemsPriceChecks.SingleOrDefault(p => p.QuoteItemId == currentItem.recId) // ?? new QuoteItemsPriceCheck(); // if (!prevQuotedItem.IsNull()) // { // priceCheck.NewSellPrice = prevQuotedItem.item.QuoteItems_QuoteItems_QuoteItemsSellingPrice; // priceCheck.OldSellPrice = currentItem.QuoteItems_QuoteItems_QuoteItemsSellingPrice; // priceCheck.QuoteDate = prevQuotedItem.quote.None_QuoteInformation_QuoteDate; // priceCheck.QuoteNumber = prevQuotedItem.quote.QuoteInformation_QuoteNumber; // priceCheck.ReferenceQuoteItemId = prevQuotedItem.item.recId; // QuoteItem item = QuoteItems.SingleOrDefault(p => p.recId == currentItem.recId); // item.QuoteItems_QuoteItems_QuoteItemsSellingPrice = priceCheck.NewSellPrice; // // recalculate margin // item.QuoteItems_QuoteItems_QuoteItemsMargin = BusinessUtils.GetMargin( // costPrice: item.QuoteItems_QuoteItems_QuoteItemsCostPrice, // newSellingPrice: item.QuoteItems_QuoteItems_QuoteItemsSellingPrice); // } // else // { // priceCheck.OldSellPrice = currentItem.QuoteItems_QuoteItems_QuoteItemsSellingPrice; // } // if (priceCheck.QuoteItemId == 0) // { // priceCheck.QuoteItemId = currentItem.recId; // hasChanges.Add(priceCheck); // } // } // if (hasChanges.Any()) // { // QuoteItemsPriceChecks.AddRange(hasChanges); // } // SaveChanges(); //} public void QuoteItems_CheckPreviouslyQuotedPrice(int quoteId) { var withinDate = DateTime.Now.AddMonths(-6); var currentQuote = Quotes.GetFirstByItemId(quoteId); var quoteItems = QuoteItems.GetByParentId(quoteId).Where(p => !(p.PriceCheckIsChecked ?? false)) .ToList(); if (!quoteItems.Any()) return; //var hasChanges = new List(); // get previously quoted items foreach (var currentItem in quoteItems.Where(p => !p.IsCATList.Value)) { var prevQuotedItem = (from item in QuoteItems join quote in Quotes on item.ParentSurfaceItemId equals quote.itemID //join status in SurfaceLookups on quote.None_QuoteInformation_QuoteStatus equals status.Id into tmpStatus //from status in tmpStatus.DefaultIfEmpty() where quote.StatusId == QuoteStatus.Accepted && quote.CustomerTradingName == currentQuote.CustomerTradingName && item.MasterPartNumber == currentItem.MasterPartNumber //&& item.QuoteItems_QuoteItems_QuoteItemsPartNumber == currentItem.QuoteItems_QuoteItems_QuoteItemsPartNumber //&& item.QuoteItems_QuoteItems_QuoteItemsBrand == currentItem.QuoteItems_QuoteItems_QuoteItemsBrand && item.Condition == currentItem.Condition //&& item.QuoteItems_QuoteItems_QuoteItemsSupplier == currentItem.QuoteItems_QuoteItems_QuoteItemsSupplier && item.QuantitySelected > 0 && quote.Date.Value <= currentQuote.Date.Value && quote.itemID < currentQuote.itemID && quote.Date.Value >= withinDate orderby quote.itemID descending, item.SellingPrice.Value descending select new { QuoteDate = quote.Date, QuoteNumber = quote.Number, QuoteItemId = item.itemID, SellPrice = item.SellingPrice //quote, //item /*, status*/ }) .FirstOrDefault(); //var priceCheck = QuoteItemsPriceChecks.SingleOrDefault(p => p.QuoteItemId == currentItem.recId) // ?? new QuoteItemsPriceCheck(); if (prevQuotedItem.IsNotNull()) { currentItem.PriceCheckIsChecked = true; currentItem.PriceCheckNewSellPrice = prevQuotedItem.SellPrice.GetValueOrDefault(); currentItem.PriceCheckOldSellPrice = currentItem.SellingPrice.GetValueOrDefault(); currentItem.PriceCheckQuoteDate = prevQuotedItem.QuoteDate.GetValueOrDefault(); currentItem.PriceCheckQuoteItemId = prevQuotedItem.QuoteItemId; currentItem.PriceCheckQuoteNumber = prevQuotedItem.QuoteNumber; //priceCheck.NewSellPrice = prevQuotedItem.item.QuoteItems_QuoteItems_QuoteItemsSellingPrice; //priceCheck.OldSellPrice = currentItem.QuoteItems_QuoteItems_QuoteItemsSellingPrice; //priceCheck.QuoteDate = prevQuotedItem.QuoteDate; //priceCheck.QuoteNumber = prevQuotedItem.QuoteNumber; //priceCheck.ReferenceQuoteItemId = prevQuotedItem.item.recId; //QuoteItem item = QuoteItems.SingleOrDefault(p => p.recId == currentItem.recId); currentItem.SellingPrice = currentItem.PriceCheckNewSellPrice.GetValueOrDefault(); // recalculate margin currentItem.Margin = BusinessUtils.GetMargin( costPrice: currentItem.CostPrice, newSellingPrice: currentItem.SellingPrice); Update(currentItem); } //else //{ // priceCheck.OldSellPrice = currentItem.QuoteItems_QuoteItems_QuoteItemsSellingPrice; //} //if (priceCheck.QuoteItemId == 0) //{ // priceCheck.QuoteItemId = currentItem.recId; // hasChanges.Add(priceCheck); //} } //if (hasChanges.Any()) //{ // QuoteItemsPriceChecks.AddRange(hasChanges); //} //SaveChanges(); } /// /// /// /// /// quote.itemID public void QuoteItems_ApplyCATListPrice(int quoteId) { var quoteItems = QuoteItems.Where(p => p.ParentSurfaceItemId == quoteId && !p.CATListCostPrice.HasValue) .OrderBy(p => p.Sequence) .ThenBy(p => p.MasterPartNumber) .ThenBy(p => p.SupplierSequence) .ThenBy(p => p.Supplier) .ToList(); //var addItems = new List(); foreach (var quoteItem in quoteItems) { if (!quoteItem.IsCATList.Value) //if (!"CAT".Equals(quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplier)) { // get highest cat list cost price for the master number and set as CatListCostPrice var catListCostPrice = quoteItems.Where(catItem => catItem.IsCATList.Value && quoteItem.MasterPartNumber == catItem.MasterPartNumber // check condition? //&& quoteItem.QuoteItems_QuoteItems_QuoteItemsCondition == catItem.QuoteItems_QuoteItems_QuoteItemsCondition ) .Select(catItem => catItem.CostPrice).Max().GetValueOrDefault(); if (catListCostPrice == 0) { catListCostPrice = (from p in QuoteItems where p.ParentSurfaceItemId == quoteId && p.MasterPartNumber == quoteItem.MasterPartNumber select p) .Select(p => p.CATListCostPrice).Max().GetValueOrDefault(); } //var priceCheck = QuoteItemsPriceChecks.SingleOrDefault(p => p.QuoteItemId == quoteItem.recId) // ?? new QuoteItemsPriceCheck(); quoteItem.CATListCostPrice = catListCostPrice; Update(quoteItem); //if (priceCheck.QuoteItemId == 0) //{ // priceCheck.QuoteItemId = quoteItem.recId; // addItems.Add(priceCheck); //} } } //var emptyId = addItems.Where(p => p.QuoteItemId == 0); //QuoteItemsPriceChecks.AddRange(addItems); // remove cat list items from result //var catItems = QuoteItems.Where(p => p.ParentSurfaceItemId == quoteId && p.QuoteItems_QuoteItems_QuoteItemsSupplier == "CAT"); //QuoteItems.RemoveRange(catItems); //SaveChanges(); } } }