/// <summary> /// Convert unit of measure for item availabilities. /// </summary> /// <param name="context">The request context.</param> /// <param name="itemAvailableQuantities">The item availabilities.</param> /// <param name="itemUnits">The desired item unit of measures.</param> /// <returns>The converted item available quantities.</returns> internal static IEnumerable <ItemAvailableQuantity> ConvertUnitOfMeasure(RequestContext context, IEnumerable <ItemAvailableQuantity> itemAvailableQuantities, IEnumerable <ItemUnit> itemUnits) { List <ItemAvailableQuantity> convertedItemAvailableQuantities = new List <ItemAvailableQuantity>(); IEnumerable <ItemUnit> distinctItemUnits = itemUnits.Distinct(); IEnumerable <ItemUnitQuantity> itemUnitQuantities = itemAvailableQuantities.Select(itemAvailableQuantity => itemAvailableQuantity.GetItemUnitQuantity()); Dictionary <ItemUnitConversion, UnitOfMeasureConversion> conversions = GetUnitOfMeasureConversions(context, itemUnitQuantities, distinctItemUnits); ILookup <ItemVariantInventoryDimension, ItemUnit> itemUnitLookupByItem = distinctItemUnits.ToLookup(itemUnit => itemUnit.GetItem()); foreach (ItemAvailableQuantity itemAvailableQuantity in itemAvailableQuantities) { bool hasInventoryUnit = false; foreach (ItemUnit itemUnit in itemUnitLookupByItem[itemAvailableQuantity.GetItem()]) { ItemUnitConversion itemUnitConversion = ChannelAvailabilityHelper.GetItemUnitConversion(itemAvailableQuantity.GetItemUnitQuantity(), itemUnit); UnitOfMeasureConversion unitOfMeasureConversion; if (!conversions.TryGetValue(itemUnitConversion, out unitOfMeasureConversion)) { if (!StringDataHelper.Equals(itemAvailableQuantity.UnitOfMeasure, itemUnit.UnitOfMeasure)) { context.Notify(new UnableToConvertUnitOfMeasureNotification(itemUnitConversion)); } if (!hasInventoryUnit) { convertedItemAvailableQuantities.Add(itemAvailableQuantity); hasInventoryUnit = true; } } else { ItemAvailableQuantity convertedItemAvailableQuantity = new ItemAvailableQuantity(); convertedItemAvailableQuantity.CopyPropertiesFrom(itemAvailableQuantity); convertedItemAvailableQuantity.AvailableQuantity = unitOfMeasureConversion.Convert(itemAvailableQuantity.AvailableQuantity); convertedItemAvailableQuantity.UnitOfMeasure = itemUnitConversion.ToUnitOfMeasure; convertedItemAvailableQuantities.Add(convertedItemAvailableQuantity); } } } return(convertedItemAvailableQuantities.AsEnumerable()); }
public static SKCanvas FillWithRandomText(this SKCanvas canvas, SKImageInfo info, SKPaint paint) { int numberOfLines = (int)Math.Ceiling((decimal)(info.Height / paint.TextSize)); int numberOfCharacters = 12; string text; do { numberOfCharacters *= 2; text = StringDataHelper.RandomString(numberOfCharacters); } while (paint.MeasureText(text) < (1.25 * info.Width)); for (int i = 0; i < numberOfLines; ++i) { canvas.DrawText(StringDataHelper.RandomString(numberOfCharacters), 0f, (float)((i + 1) * paint.TextSize), paint); } return(canvas); }
/// <summary> /// Saves the reason code line. /// </summary> /// <param name="transactionId">Transaction identifier.</param> /// <param name="transaction">The transaction.</param> /// <param name="reasonCodeTable">The reason code table.</param> /// <param name="parentLineNumber">The parent line number.</param> /// <param name="context">The request context.</param> private void FillReasonCodeLines(string transactionId, NonSalesTransaction transaction, DataTable reasonCodeTable, decimal parentLineNumber, RequestContext context) { ThrowIf.Null(transaction, "transaction"); ThrowIf.Null(reasonCodeTable, "reasonCodeTable"); int lineNumber = 1; DateTimeOffset transactionDate = context.GetNowInChannelTimeZone(); foreach (ReasonCodeLine reasonCodeLine in transaction.ReasonCodeLines) { DataRow row = reasonCodeTable.NewRow(); row[RetailTransactionPaymentSchema.TransactionIdColumn] = transactionId; row[RetailTransactionPaymentSchema.TransDateColumn] = transactionDate.Date; // trans time is stored as seconds (integer) in the database row[RetailTransactionPaymentSchema.TransTimeColumn] = (int)transactionDate.TimeOfDay.TotalSeconds; row[RetailTransactionPaymentSchema.LineNumColumn] = lineNumber; row[RetailTransactionPaymentSchema.DataAreaIdColumn] = context.GetChannelConfiguration().InventLocationDataAreaId; row[RetailTransactionPaymentSchema.TypeColumn] = (int)ReasonCodeLineType.NoSale; row[RetailTransactionPaymentSchema.ReasonCodeIdColumn] = StringDataHelper.TruncateString(reasonCodeLine.ReasonCodeId, 10); row[RetailTransactionPaymentSchema.InformationColumn] = StringDataHelper.TruncateString(reasonCodeLine.Information, 100); row[RetailTransactionPaymentSchema.InformationAmountColumn] = reasonCodeLine.InformationAmount; row[RetailTransactionPaymentSchema.StoreColumn] = transaction.StoreId; row[RetailTransactionPaymentSchema.TerminalColumn] = transaction.TerminalId ?? string.Empty; row[RetailTransactionPaymentSchema.StaffIdColumn] = StringDataHelper.TruncateString(transaction.StaffId, 25); row[RetailTransactionPaymentSchema.ItemTenderColumn] = StringDataHelper.TruncateString(reasonCodeLine.ItemTender, 10); row[RetailTransactionPaymentSchema.AmountColumn] = reasonCodeLine.Amount; row[RetailTransactionPaymentSchema.InputTypeColumn] = (int)reasonCodeLine.InputType; row[RetailTransactionPaymentSchema.SubReasonCodeIdColumn] = StringDataHelper.TruncateString(reasonCodeLine.SubReasonCodeId, 10); row[RetailTransactionPaymentSchema.StatementCodeColumn] = StringDataHelper.TruncateString(reasonCodeLine.StatementCode, 25); row[RetailTransactionPaymentSchema.SourceCodeColumn] = StringDataHelper.TruncateString(reasonCodeLine.SourceCode, 20); row[RetailTransactionPaymentSchema.SourceCode2Column] = StringDataHelper.TruncateString(reasonCodeLine.SourceCode2, 20); row[RetailTransactionPaymentSchema.SourceCode3Column] = StringDataHelper.TruncateString(reasonCodeLine.SourceCode3, 20); row[RetailTransactionPaymentSchema.ParentLineNumColumn] = parentLineNumber; reasonCodeTable.Rows.Add(row); lineNumber++; } }