public List <HistoricView> GetHistoricPrices(int priceBaseId) { PriceBase pb = ControllerManager.PriceBase.GetById(priceBaseId); if (pb == null) { return(null); } ICriteria crit = GetCriteria(); crit.Add(Expression.Eq("Product", pb.Product)); crit.Add(Expression.Eq("Provider", pb.Provider)); ProjectionList pl = Projections.ProjectionList(); pl.Add(Projections.Distinct(Projections.Property("PriceList"))); pl.Add(Projections.Property("TimeStamp.ModifiedOn")); crit.SetProjection(pl); crit.AddOrder(new Order("TimeStamp.ModifiedOn", true)); IList lst = crit.List(); List <HistoricView> hv = new List <HistoricView>(); foreach (object[] arr in lst) { hv.Add(new HistoricView(StringFormat.MilliTimeStamp((DateTime)arr[1]), Convert.ToDecimal(arr[0]))); } return(hv); }
private bool AddItem(Quote q, PriceBase priceBase, string observation, int order) { bool added = true; List <QuoteItem> tmplst = new List <QuoteItem>(q.QuoteItems); decimal pL = 0; Currency plCurrency = null; QuoteItem qi = tmplst.Find(delegate(QuoteItem record) { if (record.PriceBase.ID == priceBase.ID) { return(true); } return(false); }); if (qi == null) { qi = new QuoteItem(); qi.Quote = q; } qi.Observation = observation; qi.Order = order; qi.Quantity = 1; if (qi.SaleCondition == null) { if (qi.PriceBase != null && qi.PriceBase.Provider != null && qi.PriceBase.Provider.SaleConditions != null) { qi.SaleCondition = qi.PriceBase.Provider.SaleConditions; } else { qi.SaleCondition = ControllerManager.Lookup.List(LookupType.Incoterm, true)[0]; } } if (string.IsNullOrEmpty(qi.DeliveryTime)) { qi.DeliveryTime = ControllerManager.Lookup.List(LookupType.DeliveryTime, true)[0].Description; } if (qi.DeliveryTerm == null) { qi.DeliveryTerm = ControllerManager.Lookup.List(LookupType.DeliveryTerm, true)[0]; } ValidateQuoteItem(q, priceBase, qi, out pL, out plCurrency); qi.LastPrice = qi.Price; q.QuoteItems.Add(qi); if (pL == 0) { added = false; } return(added); }
public PriceAttribute GetPriceAttribute(PriceGroup priceGroup, PriceBase priceBase) { ICriteria crit = GetCriteria(); crit.Add(Expression.Eq("PriceBase", priceBase)); crit.Add(Expression.Eq("PriceGroup", priceGroup)); return(crit.UniqueResult <PriceAttribute>()); }
public WorkListItem Get(PriceBase pb, PriceList pl) { ICriteria crit = GetCriteria(); ICriteria pa = crit.CreateCriteria("PriceAttribute"); pa.Add(Expression.Eq("PriceBase", pb)); crit.Add(Expression.Eq("PriceList", pl)); return(crit.UniqueResult <WorkListItem>()); }
/// <summary> /// Execute the calculation for the PriceBase record /// </summary> /// <param name="priceBase">Record to update</param> public void Run(int priceBaseId) { PriceBase priceBase = ControllerManager.PriceBase.GetById(priceBaseId); if (priceBase == null) { return; } priceBases.Add(priceBase); Execute(); }
public decimal FindMaxDiscountPerPriceBase(PriceBase priceBase) { ICriteria crit = GetCriteria(); ICriteria pricelist = crit.CreateCriteria("PriceList"); ICriteria worklistitems = pricelist.CreateCriteria("Items"); ICriteria priceattribute = worklistitems.CreateCriteria("PriceAttribute"); priceattribute.Add(Expression.Eq("PriceBase", priceBase)); crit.Add(Expression.Not(Expression.Eq("DistributorStatus", DistributorStatus.Disable))); crit.SetProjection(Projections.ProjectionList().Add(Projections.Max("Discount"))); object val = crit.UniqueResult(); return val != null ? Convert.ToDecimal(val) : 0; }
public PublishItem GetPublishItem(Distributor distributor, PriceBase priceBase, int publishListId) { ICriteria crit = GetCriteria(); ICriteria publishlist = crit.CreateCriteria("PublishList"); ICriteria pricelist = publishlist.CreateCriteria("PriceList"); ICriteria dist = pricelist.CreateCriteria("Distributors"); crit.Add(Expression.Eq("PriceBase", priceBase)); dist.Add(Expression.Eq("ID", distributor.ID)); publishlist.Add(Expression.Eq("ID", publishListId)); crit.SetMaxResults(1); return(crit.UniqueResult <PublishItem>()); }
public void RollBack(PriceBaseHistory pbh) { pbh = GetById(pbh.ID); PriceBase pb = ControllerManager.PriceBase.GetPriceBase(pbh.Product, pbh.Provider); //SaveAudit(pb, HistoryStatus.RollBack); pb.PriceList = pbh.PriceList; pb.PriceListCurrency = pbh.PriceListCurrency; pb.PricePurchase = pbh.PricePurchase; pb.PricePurchaseCurrency = pbh.PricePurchaseCurrency; pb.PriceSuggest = pbh.PriceSuggest; pb.PriceSuggestCurrency = pbh.PriceSuggestCurrency; pb.ProviderCode = pbh.ProviderCode; ControllerManager.PriceBase.Save(pb); CommitChanges(); }
protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { PriceMasterList1.RecreateFromJavascript(); foreach (int item in PriceMasterList1.GridState.Items) { PriceBase pb = ControllerManager.PriceBase.GetById(item); HtmlAnchor a = new HtmlAnchor(); a.InnerText = "[x]"; a.Attributes["class"] = "removeItem"; a.Attributes["onclick"] = "removeItem()"; HtmlGenericControl h3 = new HtmlGenericControl("h3"); if (string.IsNullOrEmpty(pb.Product.Code)) { h3.InnerText = pb.ProviderCode; } else { h3.InnerText = pb.Product.Code; } HtmlGenericControl p = new HtmlGenericControl("p"); p.InnerText = pb.Product.Model; HtmlGenericControl li = new HtmlGenericControl("li"); li.Attributes["id"] = pb.ID.ToString(); li.Controls.Add(a); li.Controls.Add(h3); li.Controls.Add(p); productlist.Controls.Add(li); } } else { //[BUG]: Se debe setear el foco primero en otro control, para que funcione de primera el //buscador de Ajax AjaxControlToolkit.Utility.SetFocusOnLoad(txtObservations); AjaxControlToolkit.Utility.SetFocusOnLoad(txtDistributor); } }
public PublishItem GetPublishItem(Distributor distributor, PriceBase priceBase) { ICriteria crit = GetCriteria(); ICriteria pricelist = crit.CreateCriteria("PriceList"); ICriteria dist = pricelist.CreateCriteria("Distributors"); dist.Add(Expression.Eq("ID", distributor.ID)); crit.Add(Expression.Le("ValidFrom", DateTime.Today)); pricelist.Add(Expression.Eq("PriceListStatus", PriceListStatus.Active)); crit.AddOrder(new Order("ValidFrom", false)); crit.AddOrder(new Order("TimeStamp.CreatedOn", false)); crit.SetMaxResults(1); PublishList publishList = crit.UniqueResult <PublishList>(); if (publishList != null) { return(ControllerManager.PublishItem.GetPublishItem(distributor, priceBase, publishList.ID)); } return(null); }
public decimal FindMaxDiscountPerPriceBase(PriceBase priceBase) { return(repository.FindMaxDiscountPerPriceBase(priceBase)); }
/// <summary> /// Imports an existing PriceImport into the final tables. /// </summary> /// <param name="id">Id of the PriceImport to process</param> /// <returns>True if import was successfully, otherwise false.</returns> /// public bool Import(Guid id, Guid userId) { List <CategoryBase> lstcat = new List <CategoryBase>(); PriceImport pi = GetById(id); if (pi == null) { return(false); } #if !DEBUG if (pi.ImportStatus != ImportStatus.SendToExecute) { Utils.GetLogger().Info(string.Format("[[PRODUCT IMPORT PROCESS]] Invalid Status: {0}", pi.ImportStatus)); return(false); } pi.ImportStatus = ImportStatus.Executing; Save(pi); NHibernateSession.Flush(); #endif Utils.GetLogger().Info(string.Format("[[PRODUCT IMPORT PROCESS]] Starting ID: {0}", id)); List <Currency> currlist = ControllerManager.Currency.GetAll() as List <Currency>; Currency baseCurrency = ControllerManager.Currency.GetByDescription("€"); List <CurrencyRate> currencyRates = ControllerManager.CurrencyRate.GetLastList(); // Todo make sure to free memory NHibernateSession.Flush(); NHibernateSession.Clear(); DetachedCriteria groupPermissionCriteria = DetachedCriteria.For <CategoryBase>() .SetProjection(Projections.Property("ID")) .CreateCriteria("PriceImportLogs").Add(Expression.Eq("PriceImport", pi)); ICriterion groupSubquery = Subqueries.PropertyIn("ID", groupPermissionCriteria); ICriteria critCategories = NHibernateSession.CreateCriteria(typeof(CategoryBase)); critCategories.SetFetchMode("Products", FetchMode.Join); critCategories.Add(groupSubquery); critCategories.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer()); List <CategoryBase> catlist = critCategories.List <CategoryBase>() as List <CategoryBase>; pi = this.GetById(id); // Save temporal priceBases changes IList <PriceBase> priceBasesAdd = new List <PriceBase>(); IList <PriceBase> priceBasesModify = new List <PriceBase>(); ICriteria critLogResults = NHibernateSession.CreateCriteria(typeof(PriceImportLog)). SetFetchMode("ParsedCategories", FetchMode.Join). SetFetchMode("ParsedPriceBase", FetchMode.Join). SetFetchMode("ParsedPriceBase.PriceImports", FetchMode.Join). SetFetchMode("ParsedProvider", FetchMode.Join). Add(Expression.Eq("PriceImport", pi)). Add(Expression.Not(Expression.Eq("Status", PriceImportLogStatus.Error))); IList <PriceImportLog> pilList = critLogResults.List <PriceImportLog>(); this.BeginTransaction(); Utils.GetLogger().Info("[[PRODUCT IMPORT PROCESS]] Starting."); try { foreach (PriceImportLog logResult in pilList) { PriceBase currentPriceBase = null; switch (logResult.Status) { case PriceImportLogStatus.Add: Product p = new Product(); p.Status = ProductStatus.Active; currentPriceBase = ControllerManager.PriceBase.Create(pi, logResult.CodGrundfos, logResult.CodProvider, logResult.Model, logResult.Description, logResult.ParsedProvider, logResult.ParsedFrequency, logResult.TP, FindInMemory(currlist, logResult.TPCurrency), logResult.GRP, FindInMemory(currlist, logResult.GRPCurrency), logResult.PL, FindInMemory(currlist, logResult.PLCurrency), logResult.ParsedCategories, p, baseCurrency, currencyRates); priceBasesAdd.Add(currentPriceBase); break; case PriceImportLogStatus.Modify: currentPriceBase = logResult.ParsedPriceBase; //ControllerManager.PriceBaseHistory.SaveAudit(currentPriceBase, HistoryStatus.ModificationImport, userId); currentPriceBase = ControllerManager.PriceBase.Modify(pi, logResult.CodGrundfos, logResult.CodProvider, logResult.Model, logResult.Description, logResult.ParsedProvider, logResult.ParsedFrequency, logResult.TP, FindInMemory(currlist, logResult.TPCurrency), logResult.GRP, FindInMemory(currlist, logResult.GRPCurrency), logResult.PL, FindInMemory(currlist, logResult.PLCurrency), logResult.ParsedCategories, currentPriceBase, baseCurrency, HistoryStatus.PriceChange, currencyRates); priceBasesModify.Add(currentPriceBase); break; } if (currentPriceBase != null) { foreach (CategoryBase cb in logResult.ParsedCategories) { catlist[catlist.IndexOf(cb)].Products.Add(currentPriceBase.Product); if (!lstcat.Exists(delegate(CategoryBase record){ if ((record.ID == cb.ID)) { return(true); } return(false); })) { lstcat.Add(cb); } } } if (logResult.FileIndex % 500 == 0) { Utils.GetLogger().Debug(string.Format("[[PRODUCT IMPORT PROCESS]] Processing line: {0}", logResult.FileIndex)); } } #if !DEBUG pi.ImportStatus = ImportStatus.Processed; pi.TimeStamp.ModifiedBy = userId; pi.TimeStamp.ModifiedOn = DateTime.Now; Save(pi); #endif // Make sure to process insert & updates in order. foreach (PriceBase pb in priceBasesAdd) { pb.Product.TimeStamp.CreatedBy = userId; pb.Product.TimeStamp.CreatedOn = DateTime.Now; NHibernateSession.Save(pb.Product); } foreach (PriceBase pb in priceBasesAdd) { pb.TimeStamp.CreatedBy = userId; pb.TimeStamp.CreatedOn = DateTime.Now; NHibernateSession.Save(pb); } foreach (PriceBase pb in priceBasesModify) { pb.TimeStamp.ModifiedBy = userId; pb.TimeStamp.ModifiedOn = DateTime.Now; NHibernateSession.Save(pb); } foreach (PriceBase pb in priceBasesModify) { pb.Product.TimeStamp.ModifiedBy = userId; pb.Product.TimeStamp.ModifiedOn = DateTime.Now; NHibernateSession.Save(pb.Product); } // Commit changes to DB CommitChanges(); IQuery q = NHibernateSession.GetNamedQuery("CategoryCountUpdate"); foreach (CategoryBase categoryBase in lstcat) { q.SetInt32("CategoryId", categoryBase.ID); q.UniqueResult(); } IList <PriceBase> pbList = ControllerManager.PriceBase.Get(pi, PriceBaseStatus.NotVerified); PriceCalculator pc = new PriceCalculator(false, userId); pc.Run(pbList); // TODO: Send email to creator looking for the userId. // TODO: This process is run out of the web server, so it should look for it. Utils.GetLogger().Info("[[PRODUCT IMPORT PROCESS]] Finished Processing"); } catch (Exception ex) { Utils.GetLogger().Error(ex); this.RollbackChanges(); pi = GetById(id); pi.ImportStatus = ImportStatus.Failed; Save(pi); CommitChanges(); throw ex; } return(true); }
/// <summary>Constructor helper</summary> /// <param name="baseVal">Value exclusive or inclusive VAT</param> /// <param name="vatRate">VAT rate (in %)</param> /// <param name="currencyUnit">Price currency</param> /// <param name="base">Specification of 1st parameter: exclusive/inclusive VAT</param> /// <exception cref = "PriceException">Thrown when VAT rate is negative</exception> private void Create(decimal baseVal, decimal vatRate, CurrencyUnit currencyUnit, PriceBase @base = PriceBase.Excl) { if (vatRate < 0) { throw new PriceException(PriceException.VAT_RATE_NEGATIVE); } VATrate = vatRate; exclVAT = @base == PriceBase.Excl ? baseVal : baseVal / VATfactor; if (!IsZero) { CurrencyUnit = currencyUnit.ThrowIfNull(nameof(currencyUnit)); } }
/// <summary>Constructor</summary> /// <param name="baseVal">Value exclusive or inclusive VAT</param> /// <param name="vatRate">VAT rate (in %)</param> /// <param name="currencyUnit">Price currency</param> /// <param name="base">Specification of 1st parameter: exclusive/inclusive VAT</param> /// <exception cref = "PriceException">Thrown when VAT rate is negative</exception> public Price(decimal baseVal, decimal vatRate, CurrencyUnit currencyUnit, PriceBase @base = PriceBase.Excl) =>
/// <summary>Constructor</summary> /// <param name="baseVal">Amount exclusive or inclusive VAT</param> /// <param name="vatRate">VAT rate (in %)</param> /// <param name="currencyUnit">Currency Unit used</param> /// <param name="measureUnit">Measure Unit used (default: QuantityUnit.Item)</param> /// <param name="base">Specification of 1st parameter: exclusive/inclusive VAT</param> /// <exception cref = "PriceException">Thrown when VAT rate is negative</exception> public UnitPrice(decimal baseAmount, decimal vatRate, CurrencyUnit currencyUnit, MeasureUnit measureUnit, PriceBase @base = PriceBase.Excl) : base(baseAmount, vatRate, currencyUnit, @base) =>
private bool ValidateQuoteItem(Quote q, PriceBase priceBase, QuoteItem qi, out decimal pL, out Currency plCurrency) { plCurrency = null; pL = 0; PublishItem pi = ControllerManager.PublishList.GetPublishItem(q.Distributor, priceBase); PriceAttribute pa = null; if (pi != null) { // Lista de Precio (Publicada) qi.PriceBase = priceBase; pL = pi.Price; plCurrency = pi.PriceCurrency; qi.Source = pi.PublishList.PriceList.Name; } else { if (q.Distributor.PriceList != null) { pa = ControllerManager.PriceAttribute.GetPriceAttribute(q.Distributor.PriceList.PriceGroup, priceBase); if (pa != null) { // Pais qi.PriceBase = priceBase; pL = pa.Price; plCurrency = pa.PriceCurrency; qi.Source = Resource.Business.GetString("Country"); } } if (pa == null) { // Base o Fuera de Lista decimal?factor = null; if (q.Distributor.PriceList != null) { if (q.Distributor.PriceList.PriceGroup.Adjust != null) { factor = q.Distributor.PriceList.PriceGroup.Adjust; } } if (factor == null || factor == 0) { factor = 1; } qi.PriceBase = priceBase; pL = priceBase.PriceList / Convert.ToDecimal(factor); plCurrency = priceBase.PriceListCurrency; if (priceBase.Status == PriceBaseStatus.Verified) { qi.Source = Resource.Business.GetString("Base"); } else if (priceBase.Status == PriceBaseStatus.NotVerified) { qi.Source = Resource.Business.GetString("OutOfList"); } } } decimal lastPrice = qi.Price; if (plCurrency != null) { qi.Price = Math.Round(pL * lstRates[plCurrency.ID - 1, q.Currency.ID - 1].Rate, 3); qi.PriceCurrency = q.Currency; qi.CurrencyRate = ControllerManager.CurrencyRate.GetLast(q.Currency); } return(lastPrice == qi.Price); }
private bool AddItem(Quote q, PriceBase priceBase, string observation) { bool added = true; List <QuoteItem> tmplst = new List <QuoteItem>(q.QuoteItems); if (tmplst.Exists(delegate(QuoteItem record) { if (record.PriceBase.ID == priceBase.ID) { return(true); } return(false); })) { return(true); } QuoteItem qi = new QuoteItem(); qi.Observation = observation; qi.Quote = q; PublishItem pi = ControllerManager.PublishList.GetPublishItem(q.Distributor, priceBase); PriceAttribute pa = null; if (pi != null) { // Lista de Precio (Publicada) qi.PriceBase = priceBase; qi.Price = pi.Price; qi.PriceCurrency = pi.PriceCurrency; qi.CurrencyRate = pi.CurrencyRate; qi.Source = pi.PublishList.PriceList.Name; } else { if (q.Distributor.PriceList != null) { pa = ControllerManager.PriceAttribute.GetPriceAttribute(q.Distributor.PriceList.PriceGroup, priceBase); if (pa != null) { // Pais qi.PriceBase = priceBase; qi.Price = pa.Price; qi.PriceCurrency = pa.PriceCurrency; qi.CurrencyRate = pa.CurrencyRate; qi.Source = Resource.Business.GetString("Country"); } } if (pa == null) { // Base decimal?factor = null; if (q.Distributor.PriceList != null) { if (q.Distributor.PriceList.PriceGroup.Adjust != null) { factor = q.Distributor.PriceList.PriceGroup.Adjust; } } if (factor == null || factor == 0) { factor = 1; } qi.PriceBase = priceBase; qi.Price = priceBase.PriceList / Convert.ToDecimal(factor); qi.PriceCurrency = priceBase.PriceListCurrency; qi.CurrencyRate = priceBase.CurrencyRate; if (priceBase.Status == PriceBaseStatus.Verified) { qi.Source = Resource.Business.GetString("Base"); } else if (priceBase.Status == PriceBaseStatus.NotVerified) { qi.Source = Resource.Business.GetString("OutOfList"); } } } if (qi.Price > 0) { q.QuoteItems.Add(qi); } else { added = false; } return(added); }
public Quote AddItems(GridState gridState, int quoteId, string distributorName, string description, string observations, int vigency, int quoteCondition, int quoteIntroText, string email, string contact, out bool canfinal, List <int> contactids, int currencyId) { lstRates = ControllerManager.CurrencyRate.GetArray(); canfinal = true; Currency c = ControllerManager.Currency.GetById(currencyId); Quote q = new Quote(); if (quoteId > 0) { q = repository.GetById(quoteId); } Distributor d = ControllerManager.Distributor.GetByName(distributorName); q.Distributor = d; q.Condition = ControllerManager.Lookup.GetById(quoteCondition); q.Description = description; q.IntroText = ControllerManager.Lookup.GetById(quoteIntroText); q.Observations = observations; q.Status = QuoteStatus.Draft; q.Vigency = ControllerManager.Lookup.GetById(vigency); q.Currency = c; q.CurrencyRate = ControllerManager.CurrencyRate.GetLast(q.Currency); List <Contact> temp = new List <Contact>(d.Contacts); AddContactNotifications(q, temp, contactids); if (!string.IsNullOrEmpty(email.Trim())) { AddNotifications(q, contact.Trim(), email.Trim()); } if (q.QuoteNotifications.Count == 0 && !string.IsNullOrEmpty(q.Distributor.Email)) { AddNotifications(q, q.Distributor.Contact, q.Distributor.Email); } else if (q.QuoteNotifications.Count == 0 && !string.IsNullOrEmpty(q.Distributor.AlternativeEmail)) { AddNotifications(q, q.Distributor.Contact, q.Distributor.AlternativeEmail); } //Si no limpiamos los items antes de agregarlos, se ahorraria tiempo y se podria acomodar por fecha de creación. //¿Porque se sacan todos? //q.QuoteItems.Clear(); List <PriceBase> temppblist = ControllerManager.PriceBase.GetPriceBases(string.Empty, null, null, null, null, null, null, false, gridState.Items, false, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); int i = 1; foreach (int item in gridState.Items) { PriceBase pb = temppblist.Find(delegate(PriceBase record) { if (record.ID == item) { return(true); } return(false); }); canfinal = canfinal && AddItem(q, pb, string.Empty, i); i++; } //foreach (PriceBase priceBase in temppblist) // canfinal = canfinal && AddItem(q, priceBase, string.Empty); repository.Save(q); repository.CommitChange(); q.Number = q.ID.ToString("000000"); if (quoteId == 0) { PermissionManager.AddEntityPermision(q.GetType(), q.ID.ToString(), MembershipHelper.GetUser().UserName); } return(q); }