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();
}
}
}