/// <summary> /// Page load. /// </summary> protected void Page_Load(object sender, EventArgs e) { if (!StopProcessing) { if (AuthenticationHelper.IsAuthenticated()) { // Get site id of credits main currency int creditSiteId = ECommerceHelper.GetSiteID(SiteContext.CurrentSiteID, ECommerceSettings.USE_GLOBAL_CREDIT); gridCreditEvents.HideControlForZeroRows = true; gridCreditEvents.IsLiveSite = IsLiveSite; gridCreditEvents.OnExternalDataBound += gridCreditEvents_OnExternalDataBound; gridCreditEvents.OrderBy = "EventDate DESC, EventName ASC"; gridCreditEvents.WhereCondition = "EventCustomerID = " + CustomerId + " AND ISNULL(EventSiteID, 0) = " + creditSiteId; // Get total credit value double credit = CreditEventInfoProvider.GetTotalCredit(CustomerId, SiteContext.CurrentSiteID); if (Currency != null) { // Convert global credit to site main currency when using one string siteName = SiteContext.CurrentSiteName; rate = ExchangeRateInfoProvider.GetLastExchangeRate(Currency.CurrencyID, SiteContext.CurrentSiteID, ECommerceSettings.UseGlobalCredit(siteName)); credit = ExchangeRateInfoProvider.ApplyExchangeRate(credit, rate); } lblCreditValue.Text = CurrencyInfoProvider.GetFormattedPrice(credit, Currency); } else { // Hide if user is not authenticated Visible = false; } } }
/// <summary> /// Returns selected shopping cart item parameters containig product option parameters. /// </summary> public ShoppingCartItemParameters GetShoppingCartItemParameters() { // Get product options List <ShoppingCartItemParameters> options = ProductOptionsParameters; // Create params ShoppingCartItemParameters cartItemParams = new ShoppingCartItemParameters(SKUID, Quantity, options); // Ensure minimum allowed number of items is met if (SKU.SKUMinItemsInOrder > Quantity) { cartItemParams.Quantity = SKU.SKUMinItemsInOrder; } if (donationProperties.Visible || !RedirectToDetailsEnabled) { // Get exchange rate from cart currency to site main currency double rate = (SKU.IsGlobal) ? ShoppingCart.ExchangeRateForGlobalItems : ShoppingCart.ExchangeRate; // Set donation specific shopping cart item parameters cartItemParams.IsPrivate = donationProperties.DonationIsPrivate; // Get donation amount in site main currency cartItemParams.Price = ExchangeRateInfoProvider.ApplyExchangeRate(donationProperties.DonationAmount, 1 / rate); } return(cartItemParams); }
/// <summary> /// Copies site-specific exchange rates from last valid global exchange table. /// </summary> protected void CopyFromGlobal() { CheckConfigurationModification(); ExchangeTableInfo globalTable = ExchangeTableInfoProvider.GetLastExchangeTableInfo(0); if (globalTable != null) { ExchangeRateInfoProvider.CopyExchangeRates(globalTable.ExchangeTableID, mExchangeTableId); } }
/// <summary> /// Returns selected shopping cart item parameters containig product option parameters. /// </summary> public ShoppingCartItemParameters GetShoppingCartItemParameters() { // Get product options List <ShoppingCartItemParameters> options = this.ProductOptionsParameters; // Create params ShoppingCartItemParameters cartItemParams = new ShoppingCartItemParameters(this.SKUID, this.Quantity, options); if (this.donationProperties.Visible || !this.RedirectToDetailsEnabled) { // Get exchange rate from cart currency to site main currency double rate = (this.SKU.IsGlobal) ? this.ShoppingCart.ExchangeRateForGlobalItems : this.ShoppingCart.ExchangeRate; // Set donation specific shopping cart item parameters cartItemParams.IsPrivate = this.donationProperties.DonationIsPrivate; // Get donation amount in site main currency cartItemParams.Price = ExchangeRateInfoProvider.ApplyExchangeRate(this.donationProperties.DonationAmount, 1 / rate); } return(cartItemParams); }
protected object gridCreditEvents_OnExternalDataBound(object sender, string sourceName, object parameter) { // Show only date part from date-time value switch (sourceName.ToLower()) { case "eventdate": DateTime date = ValidationHelper.GetDateTime(parameter, DataHelper.DATETIME_NOT_SELECTED); if (date != DataHelper.DATETIME_NOT_SELECTED) { return(date.ToShortDateString()); } else { return(""); } case "eventcreditchange": double credit = ExchangeRateInfoProvider.ApplyExchangeRate(ValidationHelper.GetDouble(parameter, 0), rate); return(CurrencyInfoProvider.GetFormattedPrice(credit, Currency)); } return(parameter); }
protected object gridCreditEvents_OnExternalDataBound(object sender, string sourceName, object parameter) { // Show only date part from date-time value switch (sourceName.ToLowerCSafe()) { case "eventdate": DateTime date = ValidationHelper.GetDateTime(parameter, DateTimeHelper.ZERO_TIME); if (date != DateTimeHelper.ZERO_TIME) { return(TimeZoneHelper.ConvertToUserTimeZone(date, true, MembershipContext.AuthenticatedUser, SiteContext.CurrentSite)); } else { return(String.Empty); } case "eventcreditchange": double credit = ExchangeRateInfoProvider.ApplyExchangeRate(ValidationHelper.GetDouble(parameter, 0), rate); return(CurrencyInfoProvider.GetFormattedPrice(credit, Currency)); } return(parameter); }
/// <summary> /// Saves exchange rates. /// </summary> private void Save() { // Check permissions CheckConfigurationModification(); string errorMessage = new Validator().NotEmpty(txtExchangeTableDisplayName.Text.Trim(), GetString("general.requiresdisplayname")).Result; if ((errorMessage == "") && (plcRateFromGlobal.Visible)) { errorMessage = new Validator().NotEmpty(txtGlobalExchangeRate.Text.Trim(), GetString("ExchangeTable_Edit.DoubleFormatRequired")).Result; } if ((errorMessage == "") && (plcRateFromGlobal.Visible)) { if (!ValidationHelper.IsPositiveNumber(txtGlobalExchangeRate.Text.Trim()) || (ValidationHelper.GetDouble(txtGlobalExchangeRate.Text.Trim(), 0) == 0)) { errorMessage = GetString("ExchangeTable_Edit.errorRate"); } } // From/to date validation if (errorMessage == "") { if ((!dtPickerExchangeTableValidFrom.IsValidRange()) || (!dtPickerExchangeTableValidTo.IsValidRange())) { errorMessage = GetString("general.errorinvaliddatetimerange"); } if ((dtPickerExchangeTableValidFrom.SelectedDateTime != DateTime.MinValue) && (dtPickerExchangeTableValidTo.SelectedDateTime != DateTime.MinValue) && (dtPickerExchangeTableValidFrom.SelectedDateTime >= dtPickerExchangeTableValidTo.SelectedDateTime)) { errorMessage = GetString("General.DateOverlaps"); } } // Exchange rates validation if (errorMessage == String.Empty) { foreach (TextBox txt in mTextBoxes.Values) { string tmp = txt.Text.Trim(); if (tmp != String.Empty) { // Exchange rate mus be double if (!ValidationHelper.IsDouble(tmp)) { errorMessage = GetString("ExchangeTable_Edit.DoubleFormatRequired"); break; } // Exchange rate must be positive double rate = ValidationHelper.GetDouble(tmp, 1); if (rate <= 0) { errorMessage = GetString("ExchangeTable_Edit.errorRate"); } } } } // Save changes if no validation error if (errorMessage == "") { ExchangeTableInfo exchangeTableObj = ExchangeTableInfoProvider.GetExchangeTableInfo(txtExchangeTableDisplayName.Text.Trim(), SiteInfoProvider.GetSiteName(ConfiguredSiteID)); // If exchangeTableName value is unique if ((exchangeTableObj == null) || (exchangeTableObj.ExchangeTableID == mExchangeTableId)) { // Get ExchangeTableInfo object by primary key exchangeTableObj = ExchangeTableInfoProvider.GetExchangeTableInfo(mExchangeTableId); if (exchangeTableObj == null) { // Create new item -> insert exchangeTableObj = new ExchangeTableInfo(); exchangeTableObj.ExchangeTableSiteID = ConfiguredSiteID; } exchangeTableObj.ExchangeTableValidFrom = dtPickerExchangeTableValidFrom.SelectedDateTime; exchangeTableObj.ExchangeTableDisplayName = txtExchangeTableDisplayName.Text.Trim(); exchangeTableObj.ExchangeTableValidTo = dtPickerExchangeTableValidTo.SelectedDateTime; exchangeTableObj.ExchangeTableRateFromGlobalCurrency = 0; if (plcRateFromGlobal.Visible) { exchangeTableObj.ExchangeTableRateFromGlobalCurrency = ValidationHelper.GetDouble(txtGlobalExchangeRate.Text.Trim(), 0); } // Save general exchange table information ExchangeTableInfoProvider.SetExchangeTableInfo(exchangeTableObj); // Save rates on edit if (mExchangeTableId > 0) { foreach (TextBox txt in mTextBoxes.Values) { if (mData[txt.ClientID] != null) { int rateCurrencyId = ValidationHelper.GetInteger(((DataRowView)mData[txt.ClientID])["CurrencyID"], 0); bool rateExists = mExchangeRates.ContainsKey(rateCurrencyId); if (rateExists) { ExchangeRateInfo rate = new ExchangeRateInfo(mExchangeRates[rateCurrencyId]); if (txt.Text.Trim() == String.Empty) { // Remove exchange rate ExchangeRateInfoProvider.DeleteExchangeRateInfo(rate); } else { rate.ExchangeRateValue = ValidationHelper.GetDouble(txt.Text.Trim(), 0); // Update rate ExchangeRateInfoProvider.SetExchangeRateInfo(rate); } } else { if (txt.Text.Trim() != String.Empty) { // Insert exchange rate ExchangeRateInfo rate = new ExchangeRateInfo(); rate.ExchangeRateToCurrencyID = rateCurrencyId; rate.ExchangeRateValue = ValidationHelper.GetDouble(txt.Text.Trim(), 0); rate.ExchangeTableID = mExchangeTableId; ExchangeRateInfoProvider.SetExchangeRateInfo(rate); } } } } } URLHelper.Redirect("ExchangeTable_Edit.aspx?exchangeid=" + exchangeTableObj.ExchangeTableID + "&saved=1&siteId=" + SiteID); } else { // Show error message ShowError(GetString("ExchangeTable_Edit.CurrencyNameExists")); } } else { // Show error message ShowError(errorMessage); } }
/// <summary> /// Load data of editing exchangeTable. /// </summary> /// <param name="exchangeTableObj">ExchangeTable object</param> protected void LoadData(ExchangeTableInfo exchangeTableObj) { editGrid.Columns[0].HeaderText = GetString("ExchangeTable_Edit.ToCurrency"); editGrid.Columns[1].HeaderText = GetString("ExchangeTable_Edit.RateValue"); // Get exchange rates and fill the dictionary DataSet dsExRates = ExchangeRateInfoProvider.GetExchangeRates(mExchangeTableId); if (!DataHelper.DataSourceIsEmpty(dsExRates)) { foreach (DataRow dr in dsExRates.Tables[0].Rows) { int toCurrencyId = ValidationHelper.GetInteger(dr["ExchangeRateToCurrencyID"], -1); if (!mExchangeRates.ContainsKey(toCurrencyId)) { mExchangeRates.Add(toCurrencyId, dr); } } } DataSet dsAllCurrencies = CurrencyInfoProvider.GetCurrencies(ConfiguredSiteID, false); // Row index of main currency int mainCurrIndex = -1; int i = 0; if (!DataHelper.DataSourceIsEmpty(dsAllCurrencies)) { // Find main currency in all currencies dataset if (mMainCurrency != null) { // Prepare site main currency unit label string siteCode = mMainCurrency.CurrencyCode; lblSiteMainCurrency.Text = siteCode; lblMainToSite.Text = string.Format(GetString("ExchangeTable_Edit.FromMainToSite"), HTMLHelper.HTMLEncode(siteCode)); // Prepare global main currency unit label string globalCode = CurrencyInfoProvider.GetMainCurrencyCode(0); lblFromGlobalToMain.Text = string.Format(GetString("ExchangeTable_Edit.FromGlobalToMain"), HTMLHelper.HTMLEncode(globalCode)); foreach (DataRow dr in dsAllCurrencies.Tables[0].Rows) { if (ValidationHelper.GetInteger(dr["CurrencyID"], -1) == mMainCurrency.CurrencyID) { mainCurrIndex = i; } i++; } } // Remove found main currency if (mainCurrIndex != -1) { dsAllCurrencies.Tables[0].Rows[mainCurrIndex].Delete(); dsAllCurrencies.AcceptChanges(); } } if (DataHelper.DataSourceIsEmpty(dsAllCurrencies)) { // Site exchange rates section is visible only when more currencies exist plcSiteRates.Visible = false; lblMainToSite.Visible = false; plcNoCurrency.Visible = true; } // Hide rates part when no grid visible plcGrid.Visible = plcSiteRates.Visible || plcRateFromGlobal.Visible; // Use currencies in grid editGrid.DataSource = dsAllCurrencies; editGrid.DataBind(); // Fill editing form if (!RequestHelper.IsPostBack()) { dtPickerExchangeTableValidFrom.SelectedDateTime = exchangeTableObj.ExchangeTableValidFrom; txtExchangeTableDisplayName.Text = exchangeTableObj.ExchangeTableDisplayName; dtPickerExchangeTableValidTo.SelectedDateTime = exchangeTableObj.ExchangeTableValidTo; txtGlobalExchangeRate.Text = Convert.ToString(exchangeTableObj.ExchangeTableRateFromGlobalCurrency); } }
protected void btnOk_Click(object sender, EventArgs e) { // Check 'ModifyOrders' permission if (!ECommerceContext.IsUserAuthorizedForPermission("ModifyOrders")) { RedirectToCMSDeskAccessDenied("CMS.Ecommerce", "EcommerceModify OR ModifyOrders"); } string errorMessage = ValidateForm(); if (errorMessage == "") { ShoppingCartItem.SKU.SKUName = txtSKUName.Text; // Get new price double rate = (ShoppingCartItem.SKU.IsGlobal) ? ShoppingCart.ExchangeRateForGlobalItems : ShoppingCart.ExchangeRate; double newPrice = ExchangeRateInfoProvider.ApplyExchangeRate(txtSKUPrice.Price, 1 / rate); // Update price if (ShoppingCartItem.SKU.SKUProductType == SKUProductTypeEnum.Donation || ShoppingCartItem.SKU.SKUProductType == SKUProductTypeEnum.Text) { ShoppingCartItem.CartItemPrice = newPrice; } else { ShoppingCartItem.SKU.SKUPrice = newPrice; } // Update units ShoppingCartItem.CartItemUnits = ValidationHelper.GetInteger(txtSKUUnits.Text, 0); // Update is private information if (plcIsPrivate.Visible) { ShoppingCartItem.CartItemIsPrivate = chkIsPrivate.Checked; } // Update product text when visible if (plcItemText.Visible == true) { ShoppingCartItem.CartItemText = txtItemText.Visible ? txtItemText.Text : txtItemMultiText.Text; } // Update units of the product options foreach (ShoppingCartItemInfo option in ShoppingCartItem.ProductOptions) { option.CartItemUnits = ShoppingCartItem.CartItemUnits; } // Evaluate shopping cart content ShoppingCartInfoProvider.EvaluateShoppingCart(ShoppingCart); // Close dialog window and refresh parent window string url = "~/CMSModules/Ecommerce/Pages/Tools/Orders/Order_Edit_OrderItems.aspx?orderid=" + ShoppingCart.OrderId + "&cartexist=1"; ltlScript.Text = ScriptHelper.GetScript("CloseAndRefresh('" + ResolveUrl(url) + "')"); } else { // Show error message ShowError(errorMessage); } }
/// <summary> /// Checks exchange rates. /// </summary> private void CheckExchangeRates() { if (ExchangeRatesCheck) { int currentSiteID = 0; // Check if the site is using global exchage rates if (!ECommerceSettings.UseGlobalExchangeRates(CMSContext.CurrentSiteName)) { currentSiteID = CMSContext.CurrentSiteID; } // Retrieve last valid exchange table ExchangeTableInfo et = ExchangeTableInfoProvider.GetLastValidExchangeTableInfo(CMSContext.CurrentSiteID); if (et == null) { DisplayMessage("com.settingschecker.emptyexchangerate"); } else { DataSet ds = CurrencyInfoProvider.GetCurrencies(currentSiteID, true); if (!DataHelper.DataSourceIsEmpty(ds)) { // Prepare where condition StringBuilder sb = new StringBuilder(); foreach (DataRow item in ds.Tables[0].Rows) { sb.Append(item["CurrencyID"] + ","); } sb.Remove(sb.Length - 1, 1); // Get exchange rate from global currency, if some global checkboxes are checked if (mGlobalUsage) { double exchangerateFromGlobalCurrency = ExchangeTableInfoProvider.GetLastExchangeRateFromGlobalMainCurrency(CMSContext.CurrentSiteID); if (exchangerateFromGlobalCurrency <= 0) { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } // Get all exchange rates for selected table DataSet exchangeDs = ExchangeRateInfoProvider.GetExchangeRates("(ExchangeTableID = " + et.ExchangeTableID + ") AND (ExchangeRateToCurrencyID IN (" + sb.ToString() + "))", null); if (DataHelper.DataSourceIsEmpty(exchangeDs)) { // If there is only one currency in dataset, do not show error message if (ds.Tables[0].Rows.Count > 1) { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } // Check if count of currencies is same in exchangetable else if ((ds.Tables[0].Rows.Count != exchangeDs.Tables[0].Rows.Count)) { // If we are using global objects, there will be one more currency if (mGlobalUsage) { if (ds.Tables[0].Rows.Count != exchangeDs.Tables[0].Rows.Count + 1) { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } else { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } else { foreach (DataRow item in exchangeDs.Tables[0].Rows) { if (item["ExchangeRateValue"] == null) { DisplayMessage("com.settingschecker.emptyexchangerate"); break; } } } } } } }
/// <summary> /// Checks exchange rates. /// </summary> private void CheckExchangeRates() { if (ExchangeRatesCheck) { int currentSiteID = 0; // Check if the site is using global exchange rates if (!ECommerceSettings.UseGlobalExchangeRates(SiteContext.CurrentSiteName)) { currentSiteID = SiteContext.CurrentSiteID; } // Retrieve last valid exchange table ExchangeTableInfo et = ExchangeTableInfoProvider.GetLastValidExchangeTableInfo(SiteContext.CurrentSiteID); if (et == null) { DisplayMessage("com.settingschecker.emptyexchangerate"); } else { DataSet ds = CurrencyInfoProvider.GetCurrencies(currentSiteID, true); if (!DataHelper.DataSourceIsEmpty(ds)) { // Get exchange rate from global currency, if some global checkboxes are checked if (mGlobalUsage) { double exchangeRateFromGlobalCurrency = ExchangeTableInfoProvider.GetLastExchangeRateFromGlobalMainCurrency(SiteContext.CurrentSiteID); if (exchangeRateFromGlobalCurrency <= 0) { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } // Prepare where condition var currencyIds = DataHelper.GetIntegerValues(ds.Tables[0], "CurrencyID"); // Get all exchange rates for selected table DataSet exchangeDs = ExchangeRateInfoProvider.GetExchangeRates(et.ExchangeTableID) .WhereIn("ExchangeRateToCurrencyID", currencyIds); if (DataHelper.DataSourceIsEmpty(exchangeDs)) { // If there is only one currency in dataset, do not show error message if (ds.Tables[0].Rows.Count > 1) { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } // Check if count of currencies is same in exchange table else if ((ds.Tables[0].Rows.Count != exchangeDs.Tables[0].Rows.Count)) { // If we are using global objects, there will be one more currency if (mGlobalUsage) { if (ds.Tables[0].Rows.Count != exchangeDs.Tables[0].Rows.Count + 1) { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } else { DisplayMessage("com.settingschecker.emptyexchangerate"); return; } } else { foreach (DataRow item in exchangeDs.Tables[0].Rows) { if (item["ExchangeRateValue"] == null) { DisplayMessage("com.settingschecker.emptyexchangerate"); break; } } } } } } }
protected void EditForm_OnBeforeSave(object sender, EventArgs e) { // Check if order item modification is allowed if (!ECommerceContext.IsUserAuthorizedForPermission("ModifyOrders") || !ECommerceSettings.EnableOrderItemEditing) { RedirectToAccessDenied("CMS.Ecommerce", "EcommerceModify OR ModifyOrders"); } // Reset auto added units (already auto added units in the shopping cart will not removed) ShoppingCartItem.CartItemAutoAddedUnits = 0; // Get new price double rate = (SKU.IsGlobal) ? ShoppingCart.ExchangeRateForGlobalItems : ShoppingCart.ExchangeRate; double newPrice = ExchangeRateInfoProvider.ApplyExchangeRate(ValidationHelper.GetDouble(EditForm.FieldControls["CartItemUnitPrice"].Value, 0.0), 1 / rate); // Update price if ((SKU.SKUProductType == SKUProductTypeEnum.Donation) || (SKU.SKUProductType == SKUProductTypeEnum.Text)) { // Donation product type stores value in CartItemPrice ShoppingCartItem.CartItemPrice = newPrice; } else { SKU.SKUPrice = newPrice; } // Update SKUName SKU.SKUName = ValidationHelper.GetString(EditForm.FieldControls["CartItemName"].Value, ""); // Update units ShoppingCartItem.CartItemUnits = ValidationHelper.GetInteger(EditForm.FieldControls["SKUUnits"].Value, 0); // Update is private information if (SKU.SKUProductType == SKUProductTypeEnum.Donation) { ShoppingCartItem.CartItemIsPrivate = ValidationHelper.GetBoolean(EditForm.FieldControls["CartItemIsPrivate"].Value, false); } // Update product text if (SKU.IsProductOption && (SKU.SKUOptionCategory.CategoryType == OptionCategoryTypeEnum.Text)) { var controlName = (SKU.SKUOptionCategory.CategorySelectionType == OptionCategorySelectionTypeEnum.TextArea) ? "CartItemTextArea" : "CartItemTextBox"; ShoppingCartItem.CartItemText = ValidationHelper.GetString(EditForm.FieldControls[controlName].Value, String.Empty); } // Update units of the product options int skuUnits = ValidationHelper.GetInteger(EditForm.FieldControls["SKUUnits"].Value, 0); foreach (ShoppingCartItemInfo option in ShoppingCartItem.ProductOptions) { option.CartItemUnits = skuUnits; } // Evaluate shopping cart content ShoppingCartInfoProvider.EvaluateShoppingCart(ShoppingCart); // Close dialog window and refresh parent window CloseDialogWindow(); // Do not save ShoppingCartItem to the database EditForm.StopProcessing = true; }