/// <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());
            }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
            /// <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++;
                }
            }