public IEnumerable <Items> GetItemList(int orderId) { List <Items> items = new List <Items>(); OrderData orderData = new OrderData(orderId); var info = orderData.PurchaseInfo.XMLDoc.SelectNodes("genxml/items/*"); foreach (XmlNode xml in info) { var newInfo = new NBrightInfo { XMLData = xml.OuterXml }; items.Add(new Items { ProductName = newInfo.GetXmlProperty("genxml/productname"), Qty = newInfo.GetXmlPropertyInt("genxml/qty"), Model = newInfo.GetXmlProperty("genxml/taxratecode"), ProductPrice = Convert.ToDecimal(newInfo.GetXmlPropertyDouble("genxml/appliedcost")), ProductTotal = Convert.ToDecimal(newInfo.GetXmlPropertyDouble("genxml/appliedtotalcost")) }); } return(items); }
/// <summary> /// /// </summary> /// <param name="cartInfo"></param> /// <returns></returns> public override NBrightInfo CalculateShipping(NBrightInfo cartInfo) { // return zero if we have invalid data cartInfo.SetXmlPropertyDouble("genxml/shippingcost", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingcostTVA", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingdealercost", "0"); var modCtrl = new NBrightBuyController(); var info = modCtrl.GetByGuidKey(PortalSettings.Current.PortalId, -1, "SHIPPING", Shippingkey); if (info == null) { return(cartInfo); } double shippingcost = 10; if (cartInfo.GetXmlPropertyInt("genxml/OS_ShippingProviderlistidx") == 1) { shippingcost = 99.99; } var shippingdealercost = shippingcost; cartInfo.SetXmlPropertyDouble("genxml/shippingcostTVA", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingcost", shippingcost); cartInfo.SetXmlPropertyDouble("genxml/shippingdealercost", shippingdealercost); return(cartInfo); }
/// <summary> /// /// </summary> /// <returns></returns> public IEnumerable <Tally> GetTallyManList(int orderId) { NBrightBuyController nBrightBuy = new NBrightBuyController(); List <Tally> tallies = new List <Tally>(); OrderData orderData = new OrderData(orderId); var info = orderData.PurchaseInfo.XMLDoc.SelectNodes("genxml/tally/*"); foreach (XmlNode xml in info) { var newInfo = new NBrightInfo { XMLData = xml.OuterXml }; tallies.Add(new Tally { OrderId = newInfo.ItemID, IsTally = newInfo.GetXmlPropertyBool("genxml/istally"), ManId = newInfo.GetXmlPropertyInt("genxml/manid"), TallyMan = newInfo.GetXmlProperty("genxml/tallyman"), TallyStartDate = newInfo.GetXmlProperty("genxml/tallystartdate"), TallyEndDate = newInfo.GetXmlProperty("genxml/tallyenddate") }); } return(tallies); }
private void UnSharedRecord(NBrightInfo i) { var createdportalid = PortalSettings.Current.PortalId; // default previously shared record to this portal. if (Utils.IsNumeric(i.GetXmlProperty("genxml/createdportalid"))) { createdportalid = i.GetXmlPropertyInt("genxml/createdportalid"); } i.PortalId = createdportalid; ModCtrl.Update(i); }
private static int GetCurrentPromoId(NBrightInfo prdData, int whichprice, int modIndex) { switch (whichprice) { case 1: return(prdData.GetXmlPropertyInt("genxml/models/genxml[" + modIndex + "]/hidden/promosalepriceid")); case 2: return(prdData.GetXmlPropertyInt("genxml/models/genxml[" + modIndex + "]/hidden/promodealercostid")); case 3: return(prdData.GetXmlPropertyInt("genxml/models/genxml[" + modIndex + "]/hidden/promodealersaleid")); case 4: return(prdData.GetXmlPropertyInt("genxml/models/genxml[" + modIndex + "]/hidden/promodealersaleid")); default: return(prdData.GetXmlPropertyInt("genxml/models/genxml[" + modIndex + "]/hidden/promosalepriceid")); } }
public override NBrightInfo AfterProductSave(NBrightInfo nbrightInfo) { var promoid = nbrightInfo.GetXmlPropertyInt("genxml/hidden/promoid"); if (promoid > 0) { var prdData = ProductUtils.GetProductData(nbrightInfo.ItemID, nbrightInfo.Lang); var objCtrl = new NBrightBuyController(); var promoData = objCtrl.GetData(promoid); var catgroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/catgroupid"); var propgroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propgroupid"); var propbuygroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propbuy"); var propapplygroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propapply"); var removepromo = true; foreach (var c in prdData.GetCategories()) { if (c.categoryid == catgroupid) { removepromo = false; } if (c.categoryid == propgroupid) { removepromo = false; } if (c.categoryid == propbuygroupid) { removepromo = false; } if (c.categoryid == propapplygroupid) { removepromo = false; } } if (removepromo) { PromoUtils.RemoveProductPromoData(nbrightInfo.PortalId, nbrightInfo.ItemID, promoid); ProductUtils.RemoveProductDataCache(nbrightInfo.PortalId, nbrightInfo.ItemID); } } return(nbrightInfo); }
/// <summary> /// /// </summary> /// <param name="cartInfo"></param> /// <returns></returns> public override NBrightInfo CalculateShipping(NBrightInfo cartInfo) { // return zero if we have invalid data cartInfo.SetXmlPropertyDouble("genxml/shippingcost", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingcostTVA", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingdealercost", "0"); var modCtrl = new NBrightBuyController(); var info = modCtrl.GetByGuidKey(PortalSettings.Current.PortalId, -1, "SHIPPING", Shippingkey); if (info == null) { return(cartInfo); } double shippingcost = 0; if (cartInfo.GetXmlPropertyInt("genxml/OS_AllShippinglistidx") == 1) { shippingcost = 99.99; } if (Merchant.IsEnable && Merchant.Type == "B") { shippingcost = Merchant.HomeCost; if (cartInfo.GetXmlPropertyDouble("genxml/appliedsubtotal") >= Merchant.FreeCost) { shippingcost = 0; } } var shippingdealercost = shippingcost; cartInfo.SetXmlPropertyDouble("genxml/shippingcostTVA", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingcost", shippingcost); cartInfo.SetXmlPropertyDouble("genxml/shippingdealercost", shippingdealercost); return(cartInfo); }
public override NBrightInfo CalculateShipping(NBrightInfo cartInfo) { cartInfo.SetXmlPropertyDouble("genxml/shippingcost", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingcostTVA", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingdealercost", "0"); NBrightBuyController nbCtrl = new NBrightBuyController(); NBrightInfo nbInfo = nbCtrl.GetByGuidKey(PortalSettings.Current.PortalId, -1, "SHIPPING", Shippingkey); if (nbInfo == null) { return(cartInfo); } double shippingcost = 0; if (cartInfo.GetXmlPropertyInt("genxml/OS_AllShippinglistidx") == 1) { shippingcost = 99.99; } if (Merchant.IsEnable) { shippingcost = Merchant.UniMartCost; if (cartInfo.GetXmlPropertyDouble("genxml/appliedsubtotal") >= Merchant.FreeCost) { shippingcost = 0; } } var shippingdealercost = shippingcost; cartInfo.SetXmlPropertyDouble("genxml/shippingcostTVA", "0"); cartInfo.SetXmlPropertyDouble("genxml/shippingcost", shippingcost); cartInfo.SetXmlPropertyDouble("genxml/shippingdealercost", shippingdealercost); return(cartInfo); }
/// <summary> /// Get Current Cart Item List /// </summary> /// <returns></returns> public List<NBrightInfo> GetCartItemList(Boolean groupByProduct = false) { var rtnList = new List<NBrightInfo>(); var xmlNodeList = PurchaseInfo.XMLDoc.SelectNodes("genxml/items/*"); if (xmlNodeList != null) { foreach (XmlNode carNod in xmlNodeList) { var newInfo = new NBrightInfo {XMLData = carNod.OuterXml}; newInfo.GUIDKey = newInfo.GetXmlProperty("genxml/itemcode"); newInfo.PortalId = PortalId; newInfo.ItemID = newInfo.GetXmlPropertyInt("genxml/productid"); rtnList.Add(newInfo); } } if (groupByProduct) { var grouped = from p in rtnList group p by p.GetXmlProperty("genxml/productid") into g select new {g.Key,Value = g}; rtnList = new List<NBrightInfo>(); foreach (var group in grouped) { // inject header record for the product var itemheader = (NBrightInfo)group.Value.First().Clone(); itemheader.SetXmlProperty("genxml/groupheader","True"); itemheader.SetXmlProperty("genxml/groupcount", group.Value.Count().ToString("")); itemheader.SetXmlProperty("genxml/seeditemcode", itemheader.GUIDKey); itemheader.GUIDKey = ""; // remove option data, so we get a clear item itemheader.RemoveXmlNode("genxml/options"); rtnList.Add(itemheader); foreach (var item in group.Value) { rtnList.Add(item); } } } return rtnList; }
public String AddSingleItem(String strproductid, String strmodelId, String strqtyId, NBrightInfo objInfoIn, Boolean debugMode = false, int replaceIndex = -1) { if (!Utils.IsNumeric(strqtyId) || Convert.ToInt32(strqtyId) <= 0) return ""; if (StoreSettings.Current.DebugModeFileOut) objInfoIn.XMLDoc.Save(PortalSettings.Current.HomeDirectoryMapPath + "debug_addtobasket.xml"); var objInfo = new NBrightInfo(); objInfo.XMLData = "<genxml></genxml>"; // get productid if (Utils.IsNumeric(strproductid)) { var itemcode = ""; // The itemcode var is used to decide if a cart item is new or already existing in the cart. var productData = ProductUtils.GetProductData(Convert.ToInt32(strproductid), Utils.GetCurrentCulture()); if (productData.Info == null) return ""; // we may have a invalid productid that has been saved by a cookie, but since has been deleted. var modelInfo = productData.GetModel(strmodelId); if (modelInfo == null) return ""; // no valid model objInfo.AddSingleNode("productid", strproductid, "genxml"); itemcode += strproductid + "-"; objInfo.AddSingleNode("modelid", strmodelId, "genxml"); itemcode += strmodelId + "-"; // Get Qty objInfo.AddSingleNode("qty", strqtyId, "genxml"); #region "Get model and product data" objInfo.AddSingleNode("productname", productData.Info.GetXmlPropertyRaw("genxml/lang/genxml/textbox/txtproductname"), "genxml"); objInfo.AddSingleNode("summary", productData.Info.GetXmlPropertyRaw("genxml/lang/genxml/textbox/txtsummary"), "genxml"); objInfo.AddSingleNode("modelref", modelInfo.GetXmlPropertyRaw("genxml/textbox/txtmodelref"), "genxml"); objInfo.AddSingleNode("modeldesc", modelInfo.GetXmlPropertyRaw("genxml/lang/genxml/textbox/txtmodelname"), "genxml"); objInfo.AddSingleNode("modelextra", modelInfo.GetXmlPropertyRaw("genxml/lang/genxml/textbox/txtextra"), "genxml"); objInfo.AddSingleNode("unitcost", modelInfo.GetXmlPropertyRaw("genxml/textbox/txtunitcost"), "genxml"); objInfo.AddSingleNode("dealercost", modelInfo.GetXmlPropertyRaw("genxml/textbox/txtdealercost"), "genxml"); objInfo.AddSingleNode("taxratecode", modelInfo.GetXmlPropertyRaw("genxml/dropdownlist/taxrate"), "genxml"); objInfo.AddSingleNode("saleprice", modelInfo.GetXmlPropertyRaw("genxml/textbox/txtsaleprice"), "genxml"); objInfo.AddSingleNode("basecost", modelInfo.GetXmlPropertyRaw("genxml/textbox/txtunitcost"), "genxml"); // flag if dealer var userInfo = UserController.Instance.GetCurrentUserInfo(); if (userInfo != null && userInfo.IsInRole(StoreSettings.DealerRole) && StoreSettings.Current.Get("enabledealer") == "True") objInfo.SetXmlProperty("genxml/isdealer", "True"); else objInfo.SetXmlProperty("genxml/isdealer", "False"); //move all product and model data into cart item, so we can display bespoke fields. objInfo.AddSingleNode("productxml", productData.Info.XMLData, "genxml"); #endregion #region "Get option Data" //build option data for cart Double additionalCosts = 0; var strXmlIn = ""; var optionDataList = new Dictionary<String, String>(); if (objInfoIn.XMLDoc != null) { var nodList = objInfoIn.XMLDoc.SelectNodes("genxml/textbox/*[starts-with(name(), 'optiontxt')]"); if (nodList != null) foreach (XmlNode nod in nodList) { strXmlIn = "<option>"; var idx = nod.Name.Replace("optiontxt", ""); var optionid = objInfoIn.GetXmlProperty("genxml/hidden/optionid" + idx); var optionInfo = productData.GetOption(optionid); var optvaltext = nod.InnerText; strXmlIn += "<optid>" + optionid + "</optid>"; strXmlIn += "<optvaltext>" + optvaltext + "</optvaltext>"; itemcode += optionid + "-" + Utils.GetUniqueKey() + "-"; strXmlIn += "<optname>" + optionInfo.GetXmlProperty("genxml/lang/genxml/textbox/txtoptiondesc") + "</optname>"; strXmlIn += "</option>"; if (!optionDataList.ContainsKey(idx)) optionDataList.Add(idx, strXmlIn); } nodList = objInfoIn.XMLDoc.SelectNodes("genxml/dropdownlist/*[starts-with(name(), 'optionddl')]"); if (nodList != null) foreach (XmlNode nod in nodList) { strXmlIn = "<option>"; var idx = nod.Name.Replace("optionddl", ""); var optionid = objInfoIn.GetXmlProperty("genxml/hidden/optionid" + idx); var optionvalueid = nod.InnerText; var optionValueInfo = productData.GetOptionValue(optionid, optionvalueid); var optionInfo = productData.GetOption(optionid); strXmlIn += "<optid>" + optionid + "</optid>"; strXmlIn += "<optvalueid>" + optionvalueid + "</optvalueid>"; itemcode += optionid + ":" + optionvalueid + "-"; strXmlIn += "<optname>" + optionInfo.GetXmlProperty("genxml/lang/genxml/textbox/txtoptiondesc") + "</optname>"; strXmlIn += "<optvalcost>" + optionValueInfo.GetXmlProperty("genxml/textbox/txtaddedcost") + "</optvalcost>"; strXmlIn += "<optvaltext>" + optionValueInfo.GetXmlProperty("genxml/lang/genxml/textbox/txtoptionvaluedesc") + "</optvaltext>"; strXmlIn += "</option>"; additionalCosts += optionValueInfo.GetXmlPropertyDouble("genxml/textbox/txtaddedcost"); if (!optionDataList.ContainsKey(idx)) optionDataList.Add(idx, strXmlIn); } nodList = objInfoIn.XMLDoc.SelectNodes("genxml/checkbox/*[starts-with(name(), 'optionchk')]"); if (nodList != null) foreach (XmlNode nod in nodList) { strXmlIn = "<option>"; var idx = nod.Name.Replace("optionchk", ""); var optionid = objInfoIn.GetXmlProperty("genxml/hidden/optionid" + idx); var optionvalueid = nod.InnerText; var optionValueInfo = productData.GetOptionValue(optionid, ""); // checkbox does not have optionvalueid var optionInfo = productData.GetOption(optionid); strXmlIn += "<optid>" + optionid + "</optid>"; strXmlIn += "<optvalueid>" + optionvalueid + "</optvalueid>"; itemcode += optionid + ":" + optionvalueid + "-"; strXmlIn += "<optname>" + optionInfo.GetXmlProperty("genxml/lang/genxml/textbox/txtoptiondesc") + "</optname>"; strXmlIn += "<optvalcost>" + optionValueInfo.GetXmlProperty("genxml/textbox/txtaddedcost") + "</optvalcost>"; strXmlIn += "<optvaltext>" + optionValueInfo.GetXmlProperty("genxml/lang/genxml/textbox/txtoptionvaluedesc") + "</optvaltext>"; strXmlIn += "</option>"; if (nod.InnerText.ToLower() == "true") additionalCosts += optionValueInfo.GetXmlPropertyDouble("genxml/textbox/txtaddedcost"); if (!optionDataList.ContainsKey(idx)) optionDataList.Add(idx, strXmlIn); } } // we need to save the options in the same order as in product, so index works correct on the template tokens. var strXmlOpt = "<options>"; for (int i = 1; i <= optionDataList.Count; i++) { if (optionDataList.ContainsKey(i.ToString(""))) { strXmlOpt += optionDataList[i.ToString("")]; } } strXmlOpt += "</options>"; objInfo.AddXmlNode(strXmlOpt, "options", "genxml"); #endregion //add additional costs from optionvalues (Add to both dealer and unit cost) if (additionalCosts > 0) { objInfo.SetXmlPropertyDouble("genxml/additionalcosts", additionalCosts); var uc = objInfo.GetXmlPropertyDouble("genxml/unitcost"); var dc = objInfo.GetXmlPropertyDouble("genxml/dealercost"); uc += additionalCosts; if (dc > 0) dc += additionalCosts; // only calc dealer cost if it's > zero (active) objInfo.SetXmlPropertyDouble("genxml/unitcost", uc); objInfo.SetXmlPropertyDouble("genxml/dealercost", dc); } objInfo.AddSingleNode("itemcode", itemcode.TrimEnd('-'), "genxml"); // check if we have a client file upload var clientfileuopload = objInfoIn.GetXmlProperty("genxml/textbox/optionfilelist") != ""; //replace the item if it's already in the list. var nodItem = PurchaseInfo.XMLDoc.SelectSingleNode("genxml/items/genxml[itemcode='" + itemcode.TrimEnd('-') + "']"); if (nodItem == null || clientfileuopload) { #region "Client Files" if (clientfileuopload) { // client has uploaded files, so save these to client upload folder and create link in cart data. var flist = objInfoIn.GetXmlProperty("genxml/textbox/optionfilelist").TrimEnd(','); var fprefix = objInfoIn.GetXmlProperty("genxml/hidden/optionfileprefix") + "_"; var fileXml = "<clientfiles>"; foreach (var f in flist.Split(',')) { var fullName = StoreSettings.Current.FolderTempMapPath.TrimEnd(Convert.ToChar("\\")) + "\\" + fprefix + f; var extension = Path.GetExtension(fullName); if (File.Exists(fullName)) { var newDocFileName = StoreSettings.Current.FolderClientUploadsMapPath.TrimEnd(Convert.ToChar("\\")) + "\\" + Guid.NewGuid() + extension; File.Copy(fullName, newDocFileName, true); File.Delete(fullName); var docurl = StoreSettings.Current.FolderClientUploads.TrimEnd('/') + "/" + Path.GetFileName(newDocFileName); fileXml += "<file>"; fileXml += "<mappath>" + newDocFileName + "</mappath>"; fileXml += "<url>" + docurl + "</url>"; fileXml += "<name>" + f + "</name>"; fileXml += "<prefix>" + fprefix + "</prefix>"; fileXml += "</file>"; } } fileXml += "</clientfiles>"; objInfo.AddXmlNode(fileXml, "clientfiles", "genxml"); } #endregion if (replaceIndex >= 0 && replaceIndex < _itemList.Count) _itemList[replaceIndex] = objInfo; //replace else _itemList.Add(objInfo); //add as new item } else { //replace item var qty = nodItem.SelectSingleNode("qty"); if (qty != null && Utils.IsNumeric(qty.InnerText) && Utils.IsNumeric(strqtyId)) { var userqtylimit = objInfoIn.GetXmlPropertyInt("genxml/hidden/userqtylimit"); if (userqtylimit > 0 && Convert.ToInt32(qty.InnerText) >= userqtylimit) return ""; //add new qty and replace item PurchaseInfo.RemoveXmlNode("genxml/items/genxml[itemcode='" + itemcode.TrimEnd('-') + "']"); _itemList = GetCartItemList(); var newQty = Convert.ToString(Convert.ToInt32(qty.InnerText) + Convert.ToInt32(strqtyId)); objInfo.SetXmlProperty("genxml/qty", newQty, TypeCode.String, false); _itemList.Add(objInfo); } } //add nodes for any fields that might exist in cart template objInfo.AddSingleNode("textbox", "", "genxml"); objInfo.AddSingleNode("dropdownlist", "", "genxml"); objInfo.AddSingleNode("radiobuttonlist", "", "genxml"); objInfo.AddSingleNode("checkbox", "", "genxml"); SavePurchaseData(); // need to save after each add, so it exists in data when we check it already exists for updating. // return the message status code in textData, non-critical (usually empty) return objInfo.TextData; } return ""; }
private void CreateXchartOrderRevDataBind(object sender, EventArgs e) { var lc = (Literal) sender; var container = (IDataItemContainer) lc.NamingContainer; lc.Visible = visibleStatus.DefaultIfEmpty(true).First(); if (lc.Visible && container.DataItem != null) { var nbi1 = (NBrightInfo) container.DataItem; var strOut = ""; var nodList = nbi1.XMLDoc.SelectNodes("root/orderstats/*"); if (nodList != null) { foreach (XmlNode nod in nodList) { var nbi = new NBrightInfo(); nbi.XMLData = nod.OuterXml; strOut += "{'x': '" + nbi.GetXmlPropertyInt("item/createdyear") + "-" + nbi.GetXmlPropertyInt("item/createdmonth") + "',"; strOut += "'y': " + nbi.GetXmlPropertyDouble("item/appliedtotal").ToString() + "},"; } strOut = strOut.TrimEnd(','); } lc.Text = strOut; } }
public static string CalcMultiBuyPromoItem(NBrightInfo p) { var objCtrl = new NBrightBuyController(); var propgroupid = p.GetXmlPropertyInt("genxml/dropdownlist/propbuy"); var promoname = p.GetXmlProperty("genxml/textbox/name"); var validfrom = p.GetXmlProperty("genxml/textbox/validfrom"); var validuntil = p.GetXmlProperty("genxml/textbox/validuntil"); var disabled = p.GetXmlPropertyBool("genxml/checkbox/disabled"); var lastcalculated = p.GetXmlProperty("genxml/hidden/lastcalculated"); if (!disabled) { var portalsettings = NBrightDNN.DnnUtils.GetPortalSettings(p.PortalId); var lang = portalsettings.DefaultLanguage; var runcalc = true; if (Utils.IsDate(lastcalculated)) { if (Convert.ToDateTime(lastcalculated) >= p.ModifiedDate) { runcalc = false; // only run if changed } if (DateTime.Now.Date > Convert.ToDateTime(lastcalculated).Date.AddDays(1)) { runcalc = true; // every day just after midnight. (for site performace) } } if (Utils.IsDate(validuntil)) { if (DateTime.Now.Date > Convert.ToDateTime(validuntil)) { runcalc = true; // need to disable the promo if passed date } } if ((runcalc) && Utils.IsDate(validfrom) && Utils.IsDate(validuntil)) { var dteF = Convert.ToDateTime(validfrom).Date; var dteU = Convert.ToDateTime(validuntil).Date; CategoryData gCat; gCat = CategoryUtils.GetCategoryData(propgroupid, lang); var prdList = gCat.GetAllArticles(); foreach (var prd in prdList) { if (DateTime.Now.Date >= dteF && DateTime.Now.Date <= dteU) { // CALC Promo FlagProductMultiBuy(p.PortalId, prd.ParentItemId, promoname, p.ItemID, "PROMOMULTIBUY", dteF, dteU); } if (DateTime.Now.Date > dteU) { // END Promo RemoveProductPromoData(p.PortalId, prd.ParentItemId, p.ItemID); p.SetXmlProperty("genxml/checkbox/disabled", "True"); objCtrl.Update(p); } ProductUtils.RemoveProductDataCache(p.PortalId, prd.ParentItemId); var productData = ProductUtils.GetProductData(prd.ParentItemId, lang); productData.Save(); // recalc any new prices. } p.SetXmlProperty("genxml/hidden/lastcalculated", DateTime.Now.AddSeconds(10).ToString("O")); // Add 10 sec to time so we don't get exact clash with update time. objCtrl.Update(p); } } return("OK"); }
public static NBrightInfo CalcQtyPromoItem(NBrightInfo p, NBrightInfo cartItemInfo) { var objCtrl = new NBrightBuyController(); var typeselect = p.GetXmlProperty("genxml/radiobuttonlist/typeselect"); var catgroupid = p.GetXmlProperty("genxml/dropdownlist/catgroupid"); var propgroupid = p.GetXmlProperty("genxml/dropdownlist/propgroupid"); var promoname = p.GetXmlProperty("genxml/textbox/name"); var amounttype = p.GetXmlProperty("genxml/radiobuttonlist/amounttype"); var amount = p.GetXmlPropertyDouble("genxml/textbox/amount"); var overwrite = p.GetXmlPropertyBool("genxml/checkbox/overwrite"); var disabled = p.GetXmlPropertyBool("genxml/checkbox/disabled"); var rangeList = p.GetXmlProperty("genxml/textbox/range"); if (!disabled) { var productid = cartItemInfo.GetXmlPropertyInt("genxml/productid"); if (productid > 0) { var prodData = new ProductData(productid, Utils.GetCurrentCulture()); if (prodData.Exists) { var groupid = catgroupid; if (typeselect == "prop") { groupid = propgroupid; } var gCat = CategoryUtils.GetCategoryData(groupid, Utils.GetCurrentCulture()); if (gCat == null) { return(cartItemInfo); } if (prodData.HasProperty(gCat.CategoryRef) || prodData.IsInCategory(gCat.CategoryRef)) { var runcalc = true; // build range Data var rangeData = new List <RangeItem>(); var rl = rangeList.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var s in rl) { var ri = s.Split('='); if (ri.Count() == 2 && Utils.IsNumeric(ri[1])) { var riV = ri[0].Split('-'); if (riV.Count() == 2 && Utils.IsNumeric(riV[0]) && Utils.IsNumeric(riV[1])) { var rItem = new RangeItem(); rItem.RangeLow = Convert.ToDouble(riV[0], CultureInfo.GetCultureInfo("en-US")); rItem.Cost = Convert.ToDouble(ri[1], CultureInfo.GetCultureInfo("en-US")); rItem.RangeHigh = Convert.ToDouble(riV[1], CultureInfo.GetCultureInfo("en-US")); rangeData.Add(rItem); } } } var unitcost = cartItemInfo.GetXmlPropertyDouble("genxml/unitcost"); var promoprice = cartItemInfo.GetXmlPropertyDouble("genxml/promoprice"); var rangeValue = cartItemInfo.GetXmlPropertyDouble("genxml/qty"); var basecost = unitcost; foreach (var i in rangeData) { if (rangeValue >= i.RangeLow && rangeValue < i.RangeHigh) { double newsaleprice = 0; if (amounttype == "1") { // percentage discount newsaleprice = Math.Round(basecost - ((basecost / 100) * i.Cost), 4); } else { // amount discount newsaleprice = basecost - i.Cost; if (newsaleprice < 0) { newsaleprice = 0; } } cartItemInfo.SetXmlPropertyDouble("genxml/promoprice", newsaleprice); } } } } } } return(cartItemInfo); }
public static string CalcGroupPromoItem(NBrightInfo p) { var objCtrl = new NBrightBuyController(); var typeselect = p.GetXmlProperty("genxml/radiobuttonlist/typeselect"); var catgroupid = p.GetXmlProperty("genxml/dropdownlist/catgroupid"); var propgroupid = p.GetXmlProperty("genxml/dropdownlist/propgroupid"); var promoname = p.GetXmlProperty("genxml/textbox/name"); var amounttype = p.GetXmlProperty("genxml/radiobuttonlist/amounttype"); var amount = p.GetXmlPropertyDouble("genxml/textbox/amount"); var validfrom = p.GetXmlProperty("genxml/textbox/validfrom"); var validuntil = p.GetXmlProperty("genxml/textbox/validuntil"); var overwrite = p.GetXmlPropertyBool("genxml/checkbox/overwrite"); var disabled = p.GetXmlPropertyBool("genxml/checkbox/disabled"); var lastcalculated = p.GetXmlProperty("genxml/hidden/lastcalculated"); var whichprice = p.GetXmlPropertyInt("genxml/radiobuttonlist/whichprice"); var runfreq = p.GetXmlPropertyInt("genxml/radiobuttonlist/runfreq"); if (!disabled) { var portalsettings = NBrightDNN.DnnUtils.GetPortalSettings(p.PortalId); var lang = portalsettings.DefaultLanguage; var prdList = new List <NBrightInfo>(); if (typeselect == "all") { prdList = objCtrl.GetList(p.PortalId, -1, "PRD"); } else { CategoryData gCat; var groupid = catgroupid; if (typeselect != "cat") { groupid = propgroupid; } gCat = CategoryUtils.GetCategoryData(groupid, lang); if (gCat != null) { prdList = gCat.GetAllArticles(); } } var runcalc = true; if (runfreq == 1 || runfreq == 3) // run freq is date range { if (runfreq == 3) { // run constantly, set end date to +100 year validfrom = DateTime.Now.AddYears(-1).ToString("s"); validuntil = DateTime.Now.AddYears(100).ToString("s"); } // run date range if (Utils.IsDate(lastcalculated)) { if (Convert.ToDateTime(lastcalculated) >= p.ModifiedDate) { runcalc = false; // only run if changed } if (DateTime.Now.Date > Convert.ToDateTime(lastcalculated).Date.AddDays(1)) { runcalc = true; // every day just after midnight. (for site performace) } } if (Utils.IsDate(validuntil)) { if (DateTime.Now.Date > Convert.ToDateTime(validuntil)) { runcalc = true; // need to disable the promo if passed date } } if ((runcalc) && Utils.IsDate(validfrom) && Utils.IsDate(validuntil)) { var dteF = Convert.ToDateTime(validfrom).Date; var dteU = Convert.ToDateTime(validuntil).Date; foreach (var prd in prdList) { var productid = prd.ParentItemId; if (typeselect == "all") { productid = prd.ItemID; } if (DateTime.Now.Date >= dteF && DateTime.Now.Date <= dteU) { // CALC Promo CalcProductSalePrice(p.PortalId, productid, amounttype, amount, p.ItemID, whichprice, overwrite); } if (DateTime.Now.Date > dteU) { // END Promo RemoveProductPromoData(p.PortalId, productid, p.ItemID); } ProductUtils.RemoveProductDataCache(p.PortalId, productid); var productData = ProductUtils.GetProductData(productid, lang); productData.Save(); // recalc any new prices. } if (DateTime.Now.Date > dteU) { // END Promo p.SetXmlProperty("genxml/checkbox/disabled", "True"); } } } if (runfreq == 2) // run Once, do update and disable promo. { foreach (var prd in prdList) { var productid = prd.ParentItemId; if (typeselect == "all") { productid = prd.ItemID; } // CALC Promo CalcProductSalePrice(p.PortalId, productid, amounttype, amount, p.ItemID, whichprice, overwrite); ProductUtils.RemoveProductDataCache(p.PortalId, productid); var productData = ProductUtils.GetProductData(productid, lang); productData.Save(); // recalc any new prices. } p.SetXmlProperty("genxml/checkbox/disabled", "True"); } if (runfreq == 4) // remove { foreach (var prd in prdList) { var productid = prd.ParentItemId; if (typeselect == "all") { productid = prd.ItemID; } RemoveProductPromoData(p.PortalId, productid, p.ItemID); ProductUtils.RemoveProductDataCache(p.PortalId, productid); var productData = ProductUtils.GetProductData(productid, lang); productData.Save(); // recalc any new prices. } p.SetXmlProperty("genxml/checkbox/disabled", "True"); } p.SetXmlProperty("genxml/hidden/lastcalculated", DateTime.Now.AddSeconds(10).ToString("O")); // Add 10 sec to time so we don't get exact clash with update time. objCtrl.Update(p); } return("OK"); }
public static string CalcMultiBuyPromoItem(NBrightInfo p) { var objCtrl = new NBrightBuyController(); var propgroupid = p.GetXmlPropertyInt("genxml/dropdownlist/propbuy"); var promoname = p.GetXmlProperty("genxml/textbox/name"); var validfrom = p.GetXmlProperty("genxml/textbox/validfrom"); var validuntil = p.GetXmlProperty("genxml/textbox/validuntil"); var disabled = p.GetXmlPropertyBool("genxml/checkbox/disabled"); var lastcalculated = p.GetXmlProperty("genxml/hidden/lastcalculated"); if (!disabled) { var runcalc = true; if (Utils.IsDate(lastcalculated)) { if (Convert.ToDateTime(lastcalculated) >= p.ModifiedDate) runcalc = false; // only run if changed if (DateTime.Now.Date > Convert.ToDateTime(lastcalculated).Date.AddDays(1)) runcalc = true; // every day just after midnight. (for site performace) } if (Utils.IsDate(validuntil)) { if (DateTime.Now.Date > Convert.ToDateTime(validuntil)) runcalc = true; // need to disable the promo if passed date } if ((runcalc) && Utils.IsDate(validfrom) && Utils.IsDate(validuntil)) { var dteF = Convert.ToDateTime(validfrom).Date; var dteU = Convert.ToDateTime(validuntil).Date; CategoryData gCat; gCat = CategoryUtils.GetCategoryData(propgroupid, Utils.GetCurrentCulture()); var prdList = gCat.GetAllArticles(); foreach (var prd in prdList) { if (DateTime.Now.Date >= dteF && DateTime.Now.Date <= dteU) { // CALC Promo FlagProductMultiBuy(p.PortalId, prd.ParentItemId, promoname, p.ItemID, "PROMOMULTIBUY",dteF,dteU); } if (DateTime.Now.Date > dteU) { // END Promo RemoveProductPromoData(p.PortalId, prd.ParentItemId, p.ItemID); p.SetXmlProperty("genxml/checkbox/disabled", "True"); objCtrl.Update(p); } ProductUtils.RemoveProductDataCache(p.PortalId, prd.ParentItemId); } p.SetXmlProperty("genxml/hidden/lastcalculated", DateTime.Now.AddSeconds(10).ToString("O")); // Add 10 sec to time so we don't get exact clash with update time. objCtrl.Update(p); } } return "OK"; }
public static String RenderProductAdminList(List <NBrightInfo> list, NBrightInfo ajaxInfo, int recordCount) { try { if (NBrightBuyUtils.CheckRights()) { if (list == null) { return(""); } if (UserController.Instance.GetCurrentUserInfo().UserID <= 0) { return(""); } var strOut = ""; // select a specific entity data type for the product (used by plugins) var themeFolder = "config"; var pageNumber = ajaxInfo.GetXmlPropertyInt("genxml/hidden/pagenumber"); var pageSize = ajaxInfo.GetXmlPropertyInt("genxml/hidden/pagesize"); var razortemplate = ajaxInfo.GetXmlProperty("genxml/hidden/razortemplate"); var editlang = ajaxInfo.GetXmlProperty("genxml/hidden/editlang"); if (editlang == "") { editlang = Utils.GetCurrentCulture(); } var templateControl = "/DesktopModules/NBright/OS_BulkEdit"; bool paging = pageSize > 0; var passSettings = new Dictionary <string, string>(); foreach (var s in ajaxInfo.ToDictionary()) { passSettings.Add(s.Key, s.Value); } foreach (var s in StoreSettings.Current.Settings()) // copy store setting, otherwise we get a byRef assignement { if (passSettings.ContainsKey(s.Key)) { passSettings[s.Key] = s.Value; } else { passSettings.Add(s.Key, s.Value); } } strOut = NBrightBuyUtils.RazorTemplRenderList(razortemplate, 0, "", list, templateControl, themeFolder, editlang, passSettings); // add paging if needed if (paging && (recordCount > pageSize)) { var pg = new NBrightCore.controls.PagingCtrl(); strOut += pg.RenderPager(recordCount, pageSize, pageNumber); } return(strOut); } return(""); } catch (Exception ex) { return(ex.ToString()); } }
/// <summary> /// Search filesystem for any new plugins that have been added. Removed any deleted ones. /// </summary> public void UpdateSystemPlugins() { if (!_portallevel) // only want to edit system level file { // Add new plugins var updated = false; var pluginfoldermappath = System.Web.Hosting.HostingEnvironment.MapPath(StoreSettings.NBrightBuyPath() + "/Plugins"); if (pluginfoldermappath != null && Directory.Exists(pluginfoldermappath)) { var ctrlList = new Dictionary <String, int>(); var flist = Directory.GetFiles(pluginfoldermappath); foreach (var f in flist) { if (f.EndsWith(".xml")) { var datain = File.ReadAllText(f); try { var nbi = new NBrightInfo(); nbi.XMLData = datain; // check if we are injecting multiple var nodlist = nbi.XMLDoc.SelectNodes("root/genxml"); if (nodlist != null && nodlist.Count == 0) { AddPlugin(nbi); } else { foreach (XmlNode nod in nodlist) { var nbi2 = new NBrightInfo(); nbi2.XMLData = nod.OuterXml; AddPlugin(nbi2); } } ctrlList.Add(nbi.GetXmlProperty("genxml/textbox/ctrl"), nbi.GetXmlPropertyInt("genxml/hidden/index")); updated = true; File.Delete(f); } catch (Exception) { // data might not be XML complient (ignore) } } } if (updated) { Save(false); // only update system level } } } }
/// <summary> /// Search filesystem for any new plugins that have been added. Removed any deleted ones. /// </summary> public void UpdateSystemPlugins() { if (!_portallevel) // only want to edit system level file { // Add new plugins var updated = false; var pluginfoldermappath = System.Web.Hosting.HostingEnvironment.MapPath(StoreSettings.NBrightBuyPath() + "/Plugins"); if (pluginfoldermappath != null && Directory.Exists(pluginfoldermappath)) { var ctrlList = new Dictionary <String, int>(); var flist = Directory.GetFiles(pluginfoldermappath); foreach (var f in flist) { if (f.EndsWith(".xml")) { var datain = File.ReadAllText(f); try { var nbi = new NBrightInfo(); nbi.XMLData = datain; AddPlugin(nbi); ctrlList.Add(nbi.GetXmlProperty("genxml/textbox/ctrl"), nbi.GetXmlPropertyInt("genxml/hidden/index")); updated = true; File.Delete(f); } catch (Exception) { // data might not be XML complient (ignore) } } } if (updated) { Save(false); // only update system level if (ctrlList.Count > 0) { // move new plugin to top. foreach (var p in ctrlList) { var topPlugin = GetPlugin(p.Value); if (topPlugin != null) { MovePlugin(p.Key, topPlugin.GUIDKey, false); } } } } } } }
private NBrightInfo ValidateCartItem(int portalId, int userId, NBrightInfo cartItemInfo) { cartItemInfo = NBrightBuyUtils.ProcessEventProvider(EventActions.ValidateCartItemBefore, cartItemInfo); var modelid = cartItemInfo.GetXmlProperty("genxml/modelid"); var prdid = cartItemInfo.GetXmlPropertyInt("genxml/productid"); var qty = cartItemInfo.GetXmlPropertyDouble("genxml/qty"); var prd = ProductUtils.GetProductData(prdid, Utils.GetCurrentCulture()); if (!prd.Exists || prd.Disabled) return null; //Invalid product remove from cart var prdModel = prd.GetModel(modelid); if (prdModel == null) return null; // Invalid Model remove from cart // check if dealer (for tax calc) var userInfo = UserController.GetUserById(portalId, userId); if (userInfo != null && userInfo.IsInRole(StoreSettings.DealerRole) && StoreSettings.Current.Get("enabledealer") == "True") cartItemInfo.SetXmlProperty("genxml/isdealer", "True"); else cartItemInfo.SetXmlProperty("genxml/isdealer", "False"); // check for price change var unitcost = prdModel.GetXmlPropertyDouble("genxml/textbox/txtunitcost"); var dealercost = prdModel.GetXmlPropertyDouble("genxml/textbox/txtdealercost"); var saleprice = prdModel.GetXmlPropertyDouble("genxml/textbox/txtsaleprice"); // calc sale price var sellcost = unitcost; if (saleprice > 0 && saleprice < sellcost) sellcost = saleprice; //stock control if (prdModel != null) { var stockon = prdModel.GetXmlPropertyBool("genxml/checkbox/chkstockon"); var stocklevel = prdModel.GetXmlPropertyDouble("genxml/textbox/txtqtyremaining"); var minStock = prdModel.GetXmlPropertyDouble("genxml/textbox/txtqtyminstock"); if (minStock == 0) minStock = StoreSettings.Current.GetInt("minimumstocklevel"); var maxStock = prdModel.GetXmlPropertyDouble("genxml/textbox/txtqtystockset"); var weight = prdModel.GetXmlPropertyDouble("genxml/textbox/weight"); if (stockon) { stocklevel = stocklevel - minStock; stocklevel = stocklevel - prd.GetModelTransQty(modelid, _cartId); if (stocklevel < qty) { qty = stocklevel; if (qty <= 0) { qty = 0; cartItemInfo.SetXmlProperty("genxml/validatecode", "OUTOFSTOCK"); } else { cartItemInfo.SetXmlProperty("genxml/validatecode", "STOCKADJ"); } base.SetValidated(false); cartItemInfo.SetXmlPropertyDouble("genxml/qty", qty.ToString("")); } } Double additionalCosts = 0; var optNods = cartItemInfo.XMLDoc.SelectNodes("genxml/options/*"); if (optNods != null) { var lp = 1; foreach (XmlNode nod in optNods) { var optid = nod.SelectSingleNode("optid"); if (optid != null) { var optvalueid = nod.SelectSingleNode("optvalueid"); if (optvalueid != null && optvalueid.InnerText != "False") { XmlNode optvalcostnod; if (optvalueid.InnerText == "True") optvalcostnod = cartItemInfo.XMLDoc.SelectSingleNode("genxml/productxml/genxml/optionvalues[@optionid='" + optid.InnerText + "']/genxml/textbox/txtaddedcost"); else optvalcostnod = cartItemInfo.XMLDoc.SelectSingleNode("genxml/productxml/genxml/optionvalues/genxml[./hidden/optionvalueid='" + optvalueid.InnerText + "']/textbox/txtaddedcost"); if (optvalcostnod != null) { var optvalcost = optvalcostnod.InnerText; if (Utils.IsNumeric(optvalcost)) { cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvalcost", optvalcost); var optvaltotal = Convert.ToDouble(optvalcost, CultureInfo.GetCultureInfo("en-US"))*qty; cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvaltotal", optvaltotal); additionalCosts += optvaltotal; } } else { cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvalcost", "0"); cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvaltotal", "0"); } } } lp += 1; } } if (qty > 0) // can't devide by zero { unitcost += (additionalCosts / qty); if (dealercost > 0) dealercost += (additionalCosts / qty); // zero turns off if (saleprice > 0) saleprice += (additionalCosts / qty); // zero turns off sellcost += (additionalCosts / qty); } var totalcost = qty * sellcost; var totaldealercost = qty * dealercost; var totalweight = weight * qty; if (unitcost != cartItemInfo.GetXmlPropertyDouble("genxml/unitcost") || dealercost != cartItemInfo.GetXmlPropertyDouble("genxml/dealercost") || saleprice != cartItemInfo.GetXmlPropertyDouble("genxml/saleprice")) { cartItemInfo.SetXmlPropertyDouble("genxml/unitcost", unitcost); cartItemInfo.SetXmlPropertyDouble("genxml/dealercost", dealercost); cartItemInfo.SetXmlPropertyDouble("genxml/saleprice", saleprice); cartItemInfo.RemoveXmlNode("genxml/productxml"); cartItemInfo.AddSingleNode("productxml", prd.Info.XMLData, "genxml"); } cartItemInfo.SetXmlPropertyDouble("genxml/totalweight", totalweight.ToString("")); cartItemInfo.SetXmlPropertyDouble("genxml/totalcost", totalcost); cartItemInfo.SetXmlPropertyDouble("genxml/totaldealercost", totaldealercost); cartItemInfo.SetXmlPropertyDouble("genxml/totaldealerbonus", (totalcost - totaldealercost)); Double salediscount = 0; Double dealerdiscount = 0; Double discountcodeamt = 0; Double totaldiscount = 0; //add update genxml/discountcodeamt if (saleprice == 0) // discount codes are only valid for items not on sale { var discountcode = PurchaseInfo.GetXmlProperty("genxml/extrainfo/genxml/textbox/promocode"); cartItemInfo = DiscountCodeInterface.UpdateItemPercentDiscountCode(PortalId, UserId, cartItemInfo, discountcode); discountcodeamt = cartItemInfo.GetXmlPropertyDouble("genxml/discountcodeamt"); if (discountcodeamt > 0) PurchaseInfo.SetXmlProperty("genxml/discountprocessed", "False"); totaldiscount = discountcodeamt; } else { salediscount = (unitcost - saleprice); totaldiscount = salediscount * qty; } var totalsalediscount = salediscount * qty; var totaldealerdiscount = dealerdiscount * qty; cartItemInfo.SetXmlPropertyDouble("genxml/totaldiscount", totaldiscount); cartItemInfo.SetXmlPropertyDouble("genxml/salediscount", totalsalediscount); cartItemInfo.SetXmlPropertyDouble("genxml/totaldealerdiscount", totaldealerdiscount); cartItemInfo.SetXmlPropertyDouble("genxml/appliedtotalcost", AppliedCost(portalId, userId, totalcost, totaldealercost)); cartItemInfo.SetXmlPropertyDouble("genxml/appliedcost", AppliedCost(portalId, userId, sellcost, dealercost)); // calc tax for item var taxproviderkey = PurchaseInfo.GetXmlProperty("genxml/hidden/taxproviderkey"); var taxprov = TaxInterface.Instance(taxproviderkey); if (taxprov != null) { var nbi = (NBrightInfo)cartItemInfo.Clone(); cartItemInfo.SetXmlPropertyDouble("genxml/taxcost", taxprov.CalculateItemTax(nbi)); } } cartItemInfo = NBrightBuyUtils.ProcessEventProvider(EventActions.ValidateCartItemAfter, cartItemInfo); return cartItemInfo; }
public static NBrightInfo ModuleSettingsSaveCatRefFromId(NBrightInfo objInfo) { var catid = objInfo.GetXmlPropertyInt("genxml/dropdownlist/defaultcatid"); var catData = CategoryUtils.GetCategoryData(catid, Utils.GetCurrentCulture()); if (catData.Exists) objInfo.SetXmlProperty("genxml/catref", catData.CategoryRef); return objInfo; }
public static NBrightInfo ModuleSettingsResetCatIdFromRef(NBrightInfo objInfo) { var ModCtrl = new NBrightBuyController(); var catid = objInfo.GetXmlPropertyInt("genxml/dropdownlist/defaultcatid"); var nbi = ModCtrl.Get(catid); if (nbi == null) { // categoryid no longer exists, see if we can get it back with the catref (might be lost due to cleardown and import) var catref = objInfo.GetXmlProperty("genxml/catref"); nbi = ModCtrl.GetByGuidKey(objInfo.PortalId, -1, "CATEGORY", catref); if (nbi != null) { objInfo.SetXmlProperty("genxml/dropdownlist/defaultcatid", nbi.ItemID.ToString("")); } } return objInfo; }
/// <summary> /// Search filesystem for any new plugins that have been added. Removed any deleted ones. /// </summary> public void UpdateSystemPlugins() { if (!_portallevel) // only want to edit system level file { // Add new plugins var updated = false; var pluginfoldermappath = System.Web.Hosting.HostingEnvironment.MapPath(StoreSettings.NBrightBuyPath() + "/Plugins"); if (pluginfoldermappath != null && Directory.Exists(pluginfoldermappath)) { var ctrlList = new Dictionary<String,int>(); var flist = Directory.GetFiles(pluginfoldermappath); foreach (var f in flist) { if (f.EndsWith(".xml")) { var datain = File.ReadAllText(f); try { var nbi = new NBrightInfo(); nbi.XMLData = datain; AddPlugin(nbi); ctrlList.Add(nbi.GetXmlProperty("genxml/textbox/ctrl"), nbi.GetXmlPropertyInt("genxml/hidden/index")); updated = true; File.Delete(f); } catch (Exception) { // data might not be XML complient (ignore) } } } if (updated) { Save(false); // only update system level } } } }
private void UpdateRecord() { var xmlData = GenXmlFunctions.GetGenXml(rpData, "", StoreSettings.Current.FolderImagesMapPath); var objInfo = new NBrightInfo(); objInfo.ItemID = -1; objInfo.TypeCode = "POSTDATA"; objInfo.XMLData = xmlData; var settings = objInfo.ToDictionary(); // put the fieds into a dictionary, so we can get them easy. // check we don't have an invalid parentitemid var parentitemid = objInfo.GetXmlPropertyInt("genxml/dropdownlist/ddlparentcatid"); var strOut = "No Category ID ('itemid' hidden fields needed on input form)"; if (settings.ContainsKey("itemid")) { if (parentitemid != Convert.ToInt32(settings["itemid"])) { var catData = CategoryUtils.GetCategoryData(Convert.ToInt32(settings["itemid"]), StoreSettings.Current.EditLanguage); // check we've not put a category under it's child if (IsParentInChildren(catData, parentitemid)) { NBrightBuyUtils.SetNotfiyMessage(ModuleId, "categoryactionsave", NotifyCode.fail); } else { var catDirectList = catData.GetDirectArticles(); var oldparentitemId = catData.ParentItemId; if (parentitemid != oldparentitemId) { // remove articles for category, so we realign the cascade records. foreach (var p in catDirectList) { var prdData = new ProductData(p.ParentItemId, p.PortalId, p.Lang); prdData.RemoveCategory(catData.CategoryId); } } catData.Update(objInfo); if (!String.IsNullOrEmpty(Edittype) && Edittype.ToLower() == "group") { var grptype = objInfo.GetXmlProperty("genxml/dropdownlist/ddlparentcatid"); var grp = ModCtrl.GetByGuidKey(PortalSettings.PortalId, -1, "GROUP", grptype); if (grp != null) { var newGuidKey = objInfo.GetXmlProperty("genxml/textbox/propertyref"); if (newGuidKey != "") { newGuidKey = GetUniqueGuidKey(catData.CategoryId, Utils.UrlFriendly(newGuidKey)); } catData.DataRecord.GUIDKey = newGuidKey; catData.DataRecord.SetXmlProperty("genxml/textbox/txtcategoryref", newGuidKey); catData.DataRecord.ParentItemId = grp.ItemID; // list done using ddlgrouptype, in GetCatList catData.DataRecord.SetXmlProperty("genxml/dropdownlist/ddlgrouptype", grptype); catData.Save(); NBrightBuyUtils.RemoveModCachePortalWide(PortalId); } } else { // the base category ref cannot have language dependant refs, we therefore just use a unique key var catref = catData.DataRecord.GetXmlProperty("genxml/textbox/txtcategoryref"); if (catref == "") { if (catData.DataRecord.GUIDKey == "") { catref = Utils.GetUniqueKey().ToLower(); catData.DataRecord.SetXmlProperty("genxml/textbox/txtcategoryref", catref); catData.DataRecord.GUIDKey = catref; } else { catData.DataRecord.SetXmlProperty("genxml/textbox/txtcategoryref", catData.DataRecord.GUIDKey); } } catData.Save(); CategoryUtils.ValidateLangaugeRef(PortalId, Convert.ToInt32(settings["itemid"])); // do validate so we update all refs and children refs NBrightBuyUtils.RemoveModCachePortalWide(PortalId); } if (parentitemid != oldparentitemId) { // all all articles for category. so we realign the cascade records. foreach (var p in catDirectList) { var prdData = new ProductData(p.ParentItemId, p.PortalId, p.Lang); prdData.AddCategory(catData.CategoryId); } } NBrightBuyUtils.SetNotfiyMessage(ModuleId, "categoryactionsave", NotifyCode.ok); } } else { NBrightBuyUtils.SetNotfiyMessage(ModuleId, "categoryactionsave", NotifyCode.fail); } } NBrightBuyUtils.RemoveModCachePortalWide(PortalId); //clear any cache }
public override NBrightInfo AfterProductSave(NBrightInfo nbrightInfo) { var promoid = nbrightInfo.GetXmlPropertyInt("genxml/hidden/promoid"); // legacy promo flag if (nbrightInfo.GetXmlPropertyBool("genxml/hidden/promoflag") || promoid > 0) { var prdData = ProductUtils.GetProductData(nbrightInfo.ItemID, nbrightInfo.Lang); // loop on models to get all promoid at model level. var modelpromoids = new List <int>(); if (promoid > 0) { modelpromoids.Add(promoid); } var lp = 1; foreach (var m in prdData.Models) { var modelPromoId = prdData.Info.GetXmlPropertyInt("genxml/promo/salepriceid" + lp); if (modelPromoId > 0 && !modelpromoids.Contains(modelPromoId)) { modelpromoids.Add(modelPromoId); } modelPromoId = prdData.Info.GetXmlPropertyInt("genxml/promo/dealercostid" + lp); if (modelPromoId > 0 && !modelpromoids.Contains(modelPromoId)) { modelpromoids.Add(modelPromoId); } modelPromoId = prdData.Info.GetXmlPropertyInt("genxml/promo/dealersaleid" + lp); if (modelPromoId > 0 && !modelpromoids.Contains(modelPromoId)) { modelpromoids.Add(modelPromoId); } lp += 1; } // multiple promotions, remove from each model. foreach (var mpid in modelpromoids) { var objCtrl = new NBrightBuyController(); var promoData = objCtrl.GetData(mpid); var catgroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/catgroupid"); var propgroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propgroupid"); var propbuygroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propbuy"); var propapplygroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propapply"); var removepromo = true; foreach (var c in prdData.GetCategories()) { if (c.categoryid == catgroupid) { removepromo = false; } if (c.categoryid == propgroupid) { removepromo = false; } if (c.categoryid == propbuygroupid) { removepromo = false; } if (c.categoryid == propapplygroupid) { removepromo = false; } } if (removepromo) { PromoUtils.RemoveProductPromoData(nbrightInfo.PortalId, nbrightInfo.ItemID, mpid); ProductUtils.RemoveProductDataCache(nbrightInfo.PortalId, nbrightInfo.ItemID); } } } return(nbrightInfo); }
private void UpdateRecord() { var xmlData = GenXmlFunctions.GetGenXml(rpData, "", StoreSettings.Current.FolderImagesMapPath); var objInfo = new NBrightInfo(); objInfo.ItemID = -1; objInfo.TypeCode = "POSTDATA"; objInfo.XMLData = xmlData; var settings = objInfo.ToDictionary(); // put the fieds into a dictionary, so we can get them easy. // check we don't have an invalid parentitemid var parentitemid = objInfo.GetXmlPropertyInt("genxml/dropdownlist/ddlparentcatid"); var strOut = "No Category ID ('itemid' hidden fields needed on input form)"; if (settings.ContainsKey("itemid")) { if (parentitemid != Convert.ToInt32(settings["itemid"])) { var catData = CategoryUtils.GetCategoryData(Convert.ToInt32(settings["itemid"]), StoreSettings.Current.EditLanguage); // check we've not put a category under it's child if (IsParentInChildren(catData, parentitemid)) { NBrightBuyUtils.SetNotfiyMessage(ModuleId, "categoryactionsave", NotifyCode.fail); } else { catData.Update(objInfo); if (!String.IsNullOrEmpty(Edittype) && Edittype.ToLower() == "group") { var grptype = objInfo.GetXmlProperty("genxml/dropdownlist/ddlparentcatid"); var grp = ModCtrl.GetByGuidKey(PortalSettings.PortalId, -1, "GROUP", grptype); if (grp != null) { var newGuidKey = objInfo.GetXmlProperty("genxml/textbox/propertyref"); if (newGuidKey != "") newGuidKey = GetUniqueGuidKey(catData.CategoryId, Utils.UrlFriendly(newGuidKey)); catData.DataRecord.GUIDKey = newGuidKey; catData.DataRecord.SetXmlProperty("genxml/textbox/txtcategoryref", newGuidKey); catData.DataRecord.ParentItemId = grp.ItemID; // list done using ddlgrouptype, in GetCatList catData.DataRecord.SetXmlProperty("genxml/dropdownlist/ddlgrouptype", grptype); catData.Save(); NBrightBuyUtils.RemoveModCachePortalWide(PortalId); } } else { // the base category ref cannot have language dependant refs, we therefore just use a unique key var catref = catData.DataRecord.GetXmlProperty("genxml/textbox/txtcategoryref"); if (catref == "") { if (catData.DataRecord.GUIDKey == "") { catref = Utils.GetUniqueKey().ToLower(); catData.DataRecord.SetXmlProperty("genxml/textbox/txtcategoryref", catref); catData.DataRecord.GUIDKey = catref; } else { catData.DataRecord.SetXmlProperty("genxml/textbox/txtcategoryref", catData.DataRecord.GUIDKey); } } catData.Save(); CategoryUtils.ValidateLangaugeRef(PortalId, Convert.ToInt32(settings["itemid"])); // do validate so we update all refs and children refs NBrightBuyUtils.RemoveModCachePortalWide(PortalId); } NBrightBuyUtils.SetNotfiyMessage(ModuleId, "categoryactionsave", NotifyCode.ok); } } else { NBrightBuyUtils.SetNotfiyMessage(ModuleId, "categoryactionsave", NotifyCode.fail); } } NBrightBuyUtils.RemoveModCachePortalWide(PortalId); //clear any cache }
private NBrightInfo ValidateCartItem(int portalId, int userId, NBrightInfo cartItemInfo, Boolean removeZeroQtyItems = false) { #region "get cart values" cartItemInfo = NBrightBuyUtils.ProcessEventProvider(EventActions.ValidateCartItemBefore, cartItemInfo); var modelid = cartItemInfo.GetXmlProperty("genxml/modelid"); var prdid = cartItemInfo.GetXmlPropertyInt("genxml/productid"); var qty = cartItemInfo.GetXmlPropertyDouble("genxml/qty"); var lang = cartItemInfo.GetXmlProperty("genxml/lang"); if (removeZeroQtyItems && qty == 0) { return(null); // Remove zero qty item } if (lang == "") { lang = Utils.GetCurrentCulture(); } var prd = ProductUtils.GetProductData(prdid, lang); if (!prd.Exists || prd.Disabled) { return(null); //Invalid product remove from cart } // update product xml data on cart (product may have change via plugin so always replace) cartItemInfo.RemoveXmlNode("genxml/productxml"); // add entitytype for validation methods prd.Info.SetXmlProperty("genxml/entitytypecode", prd.Info.TypeCode); cartItemInfo.AddSingleNode("productxml", prd.Info.XMLData, "genxml"); var prdModel = prd.GetModel(modelid); if (prdModel == null) { return(null); // Invalid Model remove from cart } // check if dealer (for tax calc) if (NBrightBuyUtils.IsDealer()) { cartItemInfo.SetXmlProperty("genxml/isdealer", "True"); } else { cartItemInfo.SetXmlProperty("genxml/isdealer", "False"); } // check for price change var unitcost = prdModel.GetXmlPropertyDouble("genxml/textbox/txtunitcost"); var dealercost = prdModel.GetXmlPropertyDouble("genxml/textbox/txtdealercost"); var saleprice = prdModel.GetXmlPropertyDouble("genxml/textbox/txtsaleprice"); var dealersalecost = prdModel.GetXmlPropertyDouble("genxml/textbox/txtdealersale"); // always make sale price best price if (unitcost > 0 && (unitcost < saleprice || saleprice <= 0)) { saleprice = unitcost; } // if we have a promoprice use it as saleprice (This is passed in via events provider like "Multi-Buy promotions") if (cartItemInfo.GetXmlPropertyDouble("genxml/promoprice") > 0 && cartItemInfo.GetXmlPropertyDouble("genxml/promoprice") < saleprice) { saleprice = cartItemInfo.GetXmlPropertyDouble("genxml/promoprice"); } // always assign the dealercost the best price. if (dealersalecost > 0 && dealersalecost < dealercost) { dealercost = dealersalecost; } if (saleprice > 0 && (saleprice < dealercost || dealercost <= 0)) { dealercost = saleprice; } if (unitcost > 0 && (unitcost < dealercost || dealercost <= 0)) { dealercost = unitcost; } // calc sell price // sellcost = the calculated cost of the item. var sellcost = unitcost; if (saleprice > 0 && saleprice < sellcost) { sellcost = saleprice; } if (NBrightBuyUtils.IsDealer()) { if (dealercost > 0 && dealercost < sellcost) { sellcost = dealercost; } } // -------------------------------------------- #endregion if (prdModel != null) { #region "Stock Control" var stockon = prdModel.GetXmlPropertyBool("genxml/checkbox/chkstockon"); var stocklevel = prdModel.GetXmlPropertyDouble("genxml/textbox/txtqtyremaining"); var minStock = prdModel.GetXmlPropertyDouble("genxml/textbox/txtqtyminstock"); if (minStock == 0) { minStock = StoreSettings.Current.GetInt("minimumstocklevel"); } var maxStock = prdModel.GetXmlPropertyDouble("genxml/textbox/txtqtystockset"); var weight = prdModel.GetXmlPropertyDouble("genxml/textbox/weight"); if (stockon) { stocklevel = stocklevel - minStock; stocklevel = stocklevel - prd.GetModelTransQty(modelid, _cartId); if (stocklevel < qty) { qty = stocklevel; if (qty <= 0) { qty = 0; cartItemInfo.SetXmlProperty("genxml/validatecode", "OUTOFSTOCK"); } else { cartItemInfo.SetXmlProperty("genxml/validatecode", "STOCKADJ"); } base.SetValidated(false); cartItemInfo.SetXmlPropertyDouble("genxml/qty", qty.ToString("")); } } #endregion #region "Addtional options costs" Double additionalCosts = 0; var optNods = cartItemInfo.XMLDoc.SelectNodes("genxml/options/*"); if (optNods != null) { var lp = 1; foreach (XmlNode nod in optNods) { var optid = nod.SelectSingleNode("optid"); if (optid != null) { var optvalueid = nod.SelectSingleNode("optvalueid"); if (optvalueid != null && optvalueid.InnerText != "False") { XmlNode optvalcostnod; if (optvalueid.InnerText == "True") { optvalcostnod = cartItemInfo.XMLDoc.SelectSingleNode("genxml/productxml/genxml/optionvalues[@optionid='" + optid.InnerText + "']/genxml/textbox/txtaddedcost"); } else { optvalcostnod = cartItemInfo.XMLDoc.SelectSingleNode("genxml/productxml/genxml/optionvalues/genxml[./hidden/optionvalueid='" + optvalueid.InnerText + "']/textbox/txtaddedcost"); } if (optvalcostnod != null) { var optvalcost = optvalcostnod.InnerText; if (Utils.IsNumeric(optvalcost)) { cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvalcost", optvalcost); var optvaltotal = Convert.ToDouble(optvalcost, CultureInfo.GetCultureInfo("en-US")) * qty; cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvaltotal", optvaltotal); additionalCosts += optvaltotal; } } else { cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvalcost", "0"); cartItemInfo.SetXmlPropertyDouble("genxml/options/option[" + lp + "]/optvaltotal", "0"); } } } lp += 1; } } if (qty > 0) // can't devide by zero { unitcost += (additionalCosts / qty); if (dealercost > 0) { dealercost += (additionalCosts / qty); // zero turns off } if (saleprice > 0) { saleprice += (additionalCosts / qty); // zero turns off } sellcost += (additionalCosts / qty); } #endregion var totalcost = qty * unitcost; var totalsellcost = qty * sellcost; var totalweight = weight * qty; cartItemInfo.SetXmlPropertyDouble("genxml/unitcost", unitcost); cartItemInfo.SetXmlPropertyDouble("genxml/dealercost", dealercost); cartItemInfo.SetXmlPropertyDouble("genxml/saleprice", saleprice); cartItemInfo.SetXmlPropertyDouble("genxml/totalweight", totalweight.ToString("")); cartItemInfo.SetXmlPropertyDouble("genxml/totalcost", totalcost); cartItemInfo.SetXmlPropertyDouble("genxml/totaldealerbonus", (totalcost - (qty * dealercost))); Double salediscount = 0; Double discountcodeamt = 0; Double totaldiscount = 0; //add update genxml/discountcodeamt var discountcode = PurchaseInfo.GetXmlProperty("genxml/extrainfo/genxml/textbox/promocode"); if (discountcode != "") { cartItemInfo = DiscountCodeInterface.UpdateItemPercentDiscountCode(PortalId, UserId, cartItemInfo, discountcode); discountcodeamt = cartItemInfo.GetXmlPropertyDouble("genxml/discountcodeamt"); if (discountcodeamt > 0) { PurchaseInfo.SetXmlProperty("genxml/discountprocessed", "False"); } } if (NBrightBuyUtils.IsDealer()) { salediscount = (unitcost - dealercost); } else { salediscount = (unitcost - saleprice); } totaldiscount = (salediscount * qty) + discountcodeamt; // add on any promo code amount if (totaldiscount < 0) { totaldiscount = 0; } // if we have a promodiscount use it if (cartItemInfo.GetXmlPropertyDouble("genxml/promodiscount") > 0) { totaldiscount = cartItemInfo.GetXmlPropertyDouble("genxml/promodiscount"); totalcost = totalcost - totaldiscount; if (totalcost < 0) { totalcost = 0; } cartItemInfo.SetXmlPropertyDouble("genxml/appliedtotalcost", totalcost); } cartItemInfo.SetXmlPropertyDouble("genxml/totaldiscount", totaldiscount); // if product is on sale then we need to display the sale price in the cart, and any discount codes don;t show at this cart item level, only on the order total. cartItemInfo.SetXmlPropertyDouble("genxml/appliedtotalcost", totalsellcost); cartItemInfo.SetXmlPropertyDouble("genxml/appliedcost", sellcost); // calc tax for item var taxproviderkey = PurchaseInfo.GetXmlProperty("genxml/hidden/taxproviderkey"); var taxprov = TaxInterface.Instance(taxproviderkey); if (taxprov != null) { var nbi = (NBrightInfo)cartItemInfo.Clone(); cartItemInfo.SetXmlPropertyDouble("genxml/taxcost", taxprov.CalculateItemTax(nbi)); } } cartItemInfo = NBrightBuyUtils.ProcessEventProvider(EventActions.ValidateCartItemAfter, cartItemInfo); return(cartItemInfo); }
public override NBrightInfo AfterProductSave(NBrightInfo nbrightInfo) { var promoid = nbrightInfo.GetXmlPropertyInt("genxml/hidden/promoid"); if (promoid > 0) { var prdData = ProductUtils.GetProductData(nbrightInfo.ItemID, nbrightInfo.Lang); var objCtrl = new NBrightBuyController(); var promoData = objCtrl.GetData(promoid); var catgroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/catgroupid"); var propgroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propgroupid"); var propbuygroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propbuy"); var propapplygroupid = promoData.GetXmlPropertyInt("genxml/dropdownlist/propapply"); var removepromo = true; foreach (var c in prdData.GetCategories()) { if (c.categoryid == catgroupid) removepromo = false; if (c.categoryid == propgroupid) removepromo = false; if (c.categoryid == propbuygroupid) removepromo = false; if (c.categoryid == propapplygroupid) removepromo = false; } if (removepromo) { PromoUtils.RemoveProductPromoData(nbrightInfo.PortalId, nbrightInfo.ItemID,promoid); ProductUtils.RemoveProductDataCache(nbrightInfo.PortalId, nbrightInfo.ItemID); } } return nbrightInfo; }