namespace CAPI.Custom.Data { using System; using System.Collections.Generic; using System.Linq; using System.Web; using CAPI.Custom.Entities; using framework_business; /// /// Summary description for QuotesContext_QuoteBuyoutItems /// public partial class QuotesContext { public QuoteBuyoutItem QuoteBuyoutItem_Recalculate(QuoteBuyoutItem item, QuoteBuyoutSupplier buyoutSupplier = null, bool exportQuoteItems = true) { var stored = QuoteBuyoutItems.Find(item.recId); if (buyoutSupplier.IsNull()) { buyoutSupplier = QuoteBuyoutSuppliers.SingleOrDefault(p => p.itemID == item.ParentSurfaceItemId); } var supplierFreight = buyoutSupplier.Freight.GetValueOrDefault(); //var supplierDiscount = buyoutSupplier.QuoteBuyoutSuppliers_QuoteBuyoutSuppliers_QuoteBuyoutSupplierDefaultDiscount // .TryParseDecimal().GetValueOrDefault(); var supplierDuty = buyoutSupplier.Duty.GetValueOrDefault(); var storedAvailable = stored.QuantityAvailable.GetValueOrDefault(); var storedCost = stored.TotalCost.GetValueOrDefault(); decimal forex = item.CostPriceForex.GetValueOrDefault(); decimal zar = item.CostPriceZAR.GetValueOrDefault(); decimal discount = item.Discount.GetValueOrDefault(); int qtyAvail = item.QuantityAvailable.GetValueOrDefault(); decimal freight = 0; decimal duty = 0; decimal discountAmount = 0; decimal total = 0; if (!new string[] { "", "ZAR" }.Contains(buyoutSupplier.Currency)) { zar = forex * buyoutSupplier.ExchangeRate.GetValueOrDefault(); } freight = BusinessUtils.GetSellingPrice(zar, supplierFreight) - zar; duty = BusinessUtils.GetSellingPrice(zar, supplierDuty) - zar; discountAmount = (zar * discount / 100m); // changed variable discount for supplierDiscount total = zar + freight + duty - discountAmount; stored.Brand = item.Brand; stored.Condition = item.Condition; stored.CostPriceForex = forex; stored.CostPriceZAR = zar; stored.Discount = discount; stored.DutyCost = duty; stored.FreightCost = freight; stored.Leadtime = item.Leadtime; stored.QuantityAvailable = qtyAvail; stored.TotalCost = total; stored.Selected = item.Selected; SaveChanges(); if (exportQuoteItems) { BuyoutItemRecalculated?.Invoke(this, new BuyoutSupplierEvent { BuyoutSupplierId = buyoutSupplier.itemID, QuoteId = buyoutSupplier.ParentSurfaceItemId.GetValueOrDefault() }); //var buyoutStatus = GetBuyoutStatusesQuoteReceived(); //if (buyoutStatus.Id.Equals(buyoutSupplier.QuoteBuyoutSuppliers_QuoteBuyoutSuppliers_QuoteBuyoutSupplierStatus.GetValueOrDefault()) // && (stored.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsQuantityAvailable > 0 // || stored.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsTotalCost > 0)) //{ // QuoteBuyoutItems_ExportToQuoteItems(userId, buyoutSupplier.itemID); //} } return stored; } public QuoteBuyoutItem QuoteBuyoutItems_Clone(int quoteBuyoutItemId) { var cloneItem = QuoteBuyoutItems.FirstOrDefault(p => p.itemID == quoteBuyoutItemId); //var buyoutSupplier = cloneItem.GetParent(context: this); if (!cloneItem.IsNull()) { var newItem = new QuoteBuyoutItem { isActive = true, ParentSurfaceItemId = cloneItem.ParentSurfaceItemId.GetValueOrDefault(), MasterPartNumber = cloneItem.MasterPartNumber, Brand = cloneItem.Brand, Condition = cloneItem.Condition, CostPriceForex = cloneItem.CostPriceForex.GetValueOrDefault(), CostPriceZAR = cloneItem.CostPriceZAR, Description = cloneItem.Description, Discount = cloneItem.Discount, DutyCost = cloneItem.DutyCost, FreightCost = cloneItem.FreightCost, Leadtime = cloneItem.Leadtime, PartNumber = cloneItem.PartNumber, QuantityAvailable = cloneItem.QuantityAvailable, QuantityRequired = cloneItem.QuantityRequired, Selected = cloneItem.Selected, TotalCost = cloneItem.TotalCost, WeightKG = cloneItem.WeightKG, Sequence = cloneItem.Sequence, surfaceId = cloneItem.surfaceId }; newItem = BusinessUtils.Create(newItem); var buyoutSupplier = QuoteBuyoutSuppliers.SingleOrDefault(p => p.itemID == newItem.ParentSurfaceItemId); if (buyoutSupplier.IsQuoteReceived()) { QuoteBuyoutItems_ExportToQuoteItems(buyoutSupplier.itemID); } return newItem; } return null; } //public void QuoteBuyoutItems_ExportQuoteItem(int quoteBuyoutItemId /*recId*/) //{ // var data = (from i in QuoteBuyoutItems // join s in QuoteBuyoutSuppliers on i.ParentSurfaceItemId equals s.itemID // join q in Quotes on s.ParentSurfaceItemId equals q.itemID // where i.recId == quoteBuyoutItemId // select new // { // item = i, // supplier = s, // quote = q // }).FirstOrDefault(); // var buyoutItem = data.item; // var buyoutSupplier = data.supplier; // var quote = data.quote; // if (buyoutSupplier.IsQuoteReceived()) // { // var quoteItem = QuoteItems.FirstOrDefault(p => // p.isActive.Value // && p.ParentSurfaceItemId == buyoutItem.ParentSurfaceItemId // && p.QuoteItems_QuoteItems_PartsMasterPartNumber == buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_PartsMasterPartNumber // && p.QuoteItems_QuoteItems_QuoteItemsBrand == buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsBrand // && p.QuoteItems_QuoteItems_QuoteItemsCondition == buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsCondition // && p.QuoteItems_QuoteItems_QuoteItemsSupplier == buyoutSupplier.QuoteBuyoutSuppliers_QuoteBuyoutSuppliers_SupplierTradingName) // ?? new QuoteItem(); // quoteItem.QuoteItems_QuoteItems_QuoteItemsMargin = quote.QuoteItems_QuoteItems_QuoteItemsDefaultMargin.TryParseDecimal(); // quoteItem.QuoteItems_QuoteItems_QuoteItemsLeadTime = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsLeadtime; // quoteItem.QuoteItems_QuoteItems_QuoteItemsCostPrice = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsTotalCost; // decimal divideBy = 1m - (quoteItem.QuoteItems_QuoteItems_QuoteItemsMargin.GetValueOrDefault() / 100m); // quoteItem.QuoteItems_QuoteItems_QuoteItemsSellingPrice = divideBy == 0 ? 0 : quoteItem.QuoteItems_QuoteItems_QuoteItemsCostPrice / divideBy; // quoteItem.QuoteItems_QuoteItems_QuoteItemsQuantityAvailable = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsQuantityAvailable; // if (quoteItem.recId == 0) // { // quoteItem.ParentSurfaceItemId = quote.itemID; // quoteItem.QuoteItems_QuoteItems_PartsMasterPartNumber = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_PartsMasterPartNumber; // quoteItem.QuoteItems_QuoteItems_QuoteItemsBrand = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsBrand; // quoteItem.QuoteItems_QuoteItems_QuoteItemsCondition = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsCondition; // quoteItem.QuoteItems_QuoteItems_QuoteItemsDescription = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsDescription; // quoteItem.QuoteItems_QuoteItems_QuoteItemsPartNumber = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsPartNumber; // quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplier = buyoutSupplier.QuoteBuyoutSuppliers_QuoteBuyoutSuppliers_SupplierTradingName; // quoteItem.QuoteItems_QuoteItems_QuoteItemsWeightKG = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsWeightKG; // quoteItem.QuoteItems_QuoteItems_QuoteItemsWarehouseLocation = ""; // quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplierCurrency = buyoutSupplier.QuoteBuyoutSuppliers_QuoteBuyoutSuppliers_QuoteBuyoutSupplierCurrency; // quoteItem.QuoteItems_QuoteItems_QuoteItemsSequenceNumber = buyoutItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsSequence; // /* CVH 2019-01-22 Set supplier sequence: // 0 - Inventory Items (not used) // 1 - CEP Inventory pricelist // 2 - CAT pricelist // 3 - Other pricelists in alpha order // 4 - Buyout supplier lists in alpha order // */ // quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplierSequenceNumber = 4; // QuoteItems.Add(quoteItem); // } // SaveChanges(userId); // Quotes_CalcualteQuoteItemTotals(userId, quote.recId); // } //} public void QuoteBuyoutItems_ExportToQuoteItems(int buyoutSupplierId /*itemID*/) { var userId = User.Id; /* any item on the Buyout that has a value in Available greater than 0 and that has an amount in Cost Price greater than 0 must pull through to the Quote Items with that Supplier Name as a new row only push the item details to Quote Items when the Buyout Status = Quote Received */ var buyoutSupplier = QuoteBuyoutSuppliers.FirstOrDefault(p => p.itemID == buyoutSupplierId); if (!buyoutSupplier.IsQuoteReceived()) return; var quote = Quotes.SingleOrDefault(p => p.itemID == buyoutSupplier.ParentSurfaceItemId); //var buyoutItems = (from p in vQuoteBuyoutItems // where p.ParentSurfaceItemId == buyoutSupplier.itemID // && p.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsSelected.Value // && p.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsQuantityAvailable > 0 // select p).ToList(); //var quoteItems = vQuoteItems.Where(p => p.ParentSurfaceItemId == quote.itemID).ToList(); //buyoutItems.ForEach(p => //{ // var quoteItem = from qi in quoteItems // where qi.QuoteItems_QuoteItems_PartsMasterPartNumber == p.QuoteBuyoutItems_QuoteBuyoutItems_PartsMasterPartNumber // && qi.QuoteItems_QuoteItems_QuoteItemsBrand == p.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsBrand // && qi.QuoteItems_QuoteItems_QuoteItemsCondition == p.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsCondition //}); //var buyoutItems = (from p in vQuoteBuyoutItems // where p.ParentSurfaceItemId == buyoutSupplier.itemID // && p.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsSelected.Value // && p.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsQuantityAvailable > 0 // select p); foreach (oQuoteBuyoutItems buyItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oQuoteBuyoutItems), "isActive,ParentSurfaceItemId,QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsSelected,QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsQuantityAvailable", "1," + buyoutSupplier.itemID + ",1,~>0", "", "publ_", false)) { oQuoteItems quoteItem = new oQuoteItems(); foreach (oQuoteItems tmp in xData.GetTypedByCriteriaSpecific("recId", typeof(oQuoteItems), "isActive,ParentSurfaceItemId,QuoteItems_QuoteItems_PartsMasterPartNumber,QuoteItems_QuoteItems_QuoteItemsBrand,QuoteItems_QuoteItems_QuoteItemsCondition,QuoteItems_QuoteItems_QuoteItemsSupplier", "1," + buyoutSupplier.ParentSurfaceItemId + "," + buyItem.QuoteBuyoutItems_QuoteBuyoutItems_PartsMasterPartNumber + "," + buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsBrand + "," + buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsCondition + "," + buyoutSupplier.TradingName, "", "publ_", false)) { quoteItem = tmp; } //CVH 2019-03-21 Get default margin from quote. Also calcualte selling price foreach (oQuotes qt in xData.GetTypedByCriteriaSpecific("recId", typeof(oQuotes), "itemID", buyoutSupplier.ParentSurfaceItemId.ToString(), "", "publ_")) { quoteItem.QuoteItems_QuoteItems_QuoteItemsMargin = qt.QuoteCustomerDetails_QuoteCustomerDetails_QuoteCustomerDefaultMargin .TryParseDecimal().GetValueOrDefault(); } quoteItem.QuoteItems_QuoteItems_QuoteItemsLeadTime = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsLeadtime; quoteItem.QuoteItems_QuoteItems_QuoteItemsCostPrice = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsTotalCost; quoteItem.CalculateSellingPrice(); //quoteItem.QuoteItems_QuoteItems_QuoteItemsSellingPrice = // BusinessUtils.GetSellingPrice( // costPrice: quoteItem.QuoteItems_QuoteItems_QuoteItemsCostPrice, // newMargin: quoteItem.QuoteItems_QuoteItems_QuoteItemsMargin); quoteItem.QuoteItems_QuoteItems_QuoteItemsQuantityAvailable = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsQuantityAvailable; if (quoteItem.recId > 0) { xData.UpdateTyped("recId", quoteItem.recId.ToString(), typeof(oQuoteItems), quoteItem, "publ_", false); } else { oSurfaceItem item = new oSurfaceItem(); item.createdBy = userId; item.dateCreated = System.DateTime.Now; item.isActive = true; item.isDeleted = false; item.surfaceId = 3058;//QuoteItems item.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), item); quoteItem.isActive = true; quoteItem.itemID = item.recId; quoteItem.ParentSurfaceItemId = buyoutSupplier.ParentSurfaceItemId.GetValueOrDefault(); quoteItem.QuoteItems_QuoteItems_PartsMasterPartNumber = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_PartsMasterPartNumber; quoteItem.QuoteItems_QuoteItems_QuoteItemsBrand = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsBrand; quoteItem.QuoteItems_QuoteItems_QuoteItemsCondition = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsCondition; quoteItem.QuoteItems_QuoteItems_QuoteItemsDescription = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsDescription; quoteItem.QuoteItems_QuoteItems_QuoteItemsPartNumber = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsPartNumber; quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplier = buyoutSupplier.TradingName; quoteItem.QuoteItems_QuoteItems_QuoteItemsWeightKG = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsWeightKG; //CVH 2019-02-18 quoteItem.QuoteItems_QuoteItems_QuoteItemsWarehouseLocation = ""; quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplierCurrency = buyoutSupplier.Currency; //CVH 2019-01-22 Set sequence number same as buyout item sequence quoteItem.QuoteItems_QuoteItems_QuoteItemsSequenceNumber = buyItem.QuoteBuyoutItems_QuoteBuyoutItems_QuoteBuyoutItemsSequence; /* CVH 2019-01-22 Set supplier sequence: 0 - Inventory Items (not used) 1 - CEP Inventory pricelist 2 - CAT pricelist 3 - Other pricelists in alpha order 4 - Buyout supplier lists in alpha order */ quoteItem.QuoteItems_QuoteItems_QuoteItemsSupplierSequenceNumber = 4; quoteItem.surfaceId = item.surfaceId; quoteItem.recId = xData.SaveTyped("recId", typeof(oQuoteItems), quoteItem, "publ_", false); } } BuyoutItemsExported?.Invoke(this, new BuyoutSupplierEvent { BuyoutSupplierId = buyoutSupplier.itemID, QuoteId = quote.itemID }); // Quotes_CalcualteQuoteItemTotals(userId, quote.itemID); } public QuoteBuyoutItem QuoteBuyoutItem_GetFromQuoteItemsFinal(int quoteId, string supplierName, string partNumber, string masterPartNumber) { QuoteBuyoutSupplier buyoutSupplier = QuoteBuyoutSuppliers.FirstOrDefault(p => p.ParentSurfaceItemId == quoteId && p.TradingName == supplierName); if(buyoutSupplier == null) { return null; } return QuoteBuyoutItems.FirstOrDefault(p => p.ParentSurfaceItemId == buyoutSupplier.itemID && p.MasterPartNumber == masterPartNumber && p.PartNumber == partNumber); } } }