void QuoteProduct_PropertyChanged(object sender, Xrm.ComponentModel.PropertyChangedEventArgs e) { if (Quantity != null && PricePerUnit != null) { this.ExtendedAmount = new Money(Quantity.Value * PricePerUnit.Value); } this.IsProductOverridden = !String.IsNullOrEmpty(ProductDescription); }
private static string FormatNumber(Money value, NumberFormatInfo format) { if (value != null) { return NumberEx.Format(value.Value,format); } else { return String.Empty; } }
private static void TrySetObservable(Func<object> valueAccessor, jQueryObject inputField, string value, NumberFormatInfo format) { Observable<Money> observable = (Observable<Money>)valueAccessor(); bool isValid = true; Number numericValue = NumberEx.Parse(value, format); if (!Number.IsNaN(numericValue) && numericValue>=format.MinValue && numericValue<=format.MaxValue) { // Set to precision numericValue = NumberEx.Round(numericValue, format.Precision); Money newValue = new Money((decimal)numericValue); observable.SetValue(newValue); if (((string)Script.Literal("typeof({0}.isValid)", observable)) != "undefined") { isValid = ((IValidatedObservable)observable).IsValid() == true; } if (isValid) { string formattedNumber = FormatNumber(newValue, format); inputField.Value(formattedNumber); inputField.Blur(); } } else { Script.Alert(String.Format("You must enter a number between {0} and {1}",format.MinValue,format.MaxValue)); Money currentValue = observable.GetValue(); string formattedNumber = FormatNumber(currentValue, format); inputField.Value(formattedNumber); inputField.Focus(); } }
public static object DeSerialise(XmlNode node,string overrideType) { // Check if the value is null bool isNil = (XmlHelper.GetAttributeValue(node, "i:nil") == "true"); object value = null; if (!isNil) { string typeName = overrideType; if (typeName==null) typeName = _removeNsPrefix(XmlHelper.GetAttributeValue(node, "i:type")); string stringValue = XmlHelper.GetNodeTextValue(node); switch (typeName) { case AttributeTypes.EntityReference: EntityReference entityReferenceValue = new EntityReference( new Guid(XmlHelper.SelectSingleNodeValue(node, "Id")), XmlHelper.SelectSingleNodeValue(node, "LogicalName"), XmlHelper.SelectSingleNodeValue(node, "Name")); value = entityReferenceValue; break; case AttributeTypes.AliasedValue: value = DeSerialise(XmlHelper.SelectSingleNode(node, "Value"),null); break; case AttributeTypes.Boolean_: value = (stringValue == "true"); break; case AttributeTypes.Decimal_: value = decimal.Parse(stringValue); break; case AttributeTypes.DateTime_: DateTime dateValue = DateTimeEx.Parse(stringValue); // We need it in the CRM Users timezone UserSettings settings = OrganizationServiceProxy.UserSettings; if (settings != null) { // Remove the local date formating so that it is in UTC irrespective of the local timezone dateValue.SetTime(dateValue.GetTime() + (dateValue.GetTimezoneOffset() * 60 * 1000)); DateTime localDateValue = DateTimeEx.UTCToLocalTimeFromSettings(dateValue, settings); value = localDateValue; } else value = dateValue; break; case "guid": value = new Guid(stringValue); break; case AttributeTypes.Int_: value = int.Parse(stringValue); break; case AttributeTypes.OptionSetValue: value = OptionSetValue.Parse(XmlHelper.SelectSingleNodeValue(node, "Value")); break; case AttributeTypes.Money: value = new Money(decimal.Parse(XmlHelper.SelectSingleNodeValue(node, "Value"))); break; default: value = stringValue; break; } } return value; }
public override void ApplyValue(Dictionary<string, object> item, object state) { Money money = new Money((decimal)NumberEx.Parse((string)state, numberFormatInfo)); item[_args.Column.Field] = money; this.RaiseOnChange(item); }