Exemple #1
0
            private static void LoadItemInfo(ProcessMaskSegmentsServiceRequest serviceRequest, Barcode barcode, int position, BarcodeMaskSegment segment)
            {
                if (barcode.ItemBarcode != null && !string.IsNullOrWhiteSpace(barcode.ItemBarcode.ItemId))
                {
                    // Skip item barcode lookup if it is already set.
                    return;
                }

                string barcodeText = serviceRequest.Barcode.BarcodeId.Substring(0, position + segment.Length);

                barcodeText += '%';

                GetProductBarcodeDataRequest dataRequest = new GetProductBarcodeDataRequest(barcodeText);
                ItemBarcode itemBarcode = serviceRequest.RequestContext.Runtime.Execute <GetProductBarcodeDataResponse>(dataRequest, serviceRequest.RequestContext).Barcode;

                if (itemBarcode == null)
                {
                    barcodeText  = barcodeText.Substring(0, barcodeText.Length - 1);
                    barcodeText += Convert.ToString(CalculateCheckDigit(barcodeText), CultureInfo.CurrentCulture);

                    dataRequest = new GetProductBarcodeDataRequest(barcodeText);
                    itemBarcode = serviceRequest.RequestContext.Runtime.Execute <GetProductBarcodeDataResponse>(dataRequest, serviceRequest.RequestContext).Barcode;
                }

                if (itemBarcode != null)
                {
                    barcode.ItemBarcode   = itemBarcode;
                    barcode.Mask.MaskType = BarcodeMaskType.Item;
                }
            }
Exemple #2
0
            private static Barcode ProcessBarcodeMask(RequestContext context, Barcode barcode, BarcodeMask barcodeMask)
            {
                // If given Barcode prefix matches with configured in AX, then barcode should fall under anyone of Internal types defined.
                if (barcodeMask != null)
                {
                    switch (barcodeMask.MaskType)
                    {
                    case BarcodeMaskType.Item:
                    case BarcodeMaskType.Customer:
                    case BarcodeMaskType.DataEntry:
                    case BarcodeMaskType.Employee:
                    case BarcodeMaskType.Salesperson:
                    case BarcodeMaskType.DiscountCode:
                    case BarcodeMaskType.GiftCard:
                    case BarcodeMaskType.LoyaltyCard:
                    {
                        // Get the Barcode details by processing the masked segments.
                        var serviceRequest  = new ProcessMaskSegmentsServiceRequest(barcode, barcodeMask);
                        var serviceResponse = context.Execute <ProcessMaskSegmentsServiceResponse>(serviceRequest);
                        return(serviceResponse.Barcode);
                    }

                    case BarcodeMaskType.Coupon:
                        break;

                    default:
                        throw new DataValidationException(
                                  DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_UnSupportedType,
                                  string.Format("Process Barcode: Unsupported barcode type {0}", barcodeMask.MaskType));
                    }
                }

                return(barcode);
            }
Exemple #3
0
            private static void LoadPriceInfo(ProcessMaskSegmentsServiceRequest serviceRequest, Barcode barcode, int position, BarcodeMaskSegment segment)
            {
                string strBarCodePrice = serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);

                decimal barCodePrice;

                if (decimal.TryParse(strBarCodePrice, out barCodePrice))
                {
                    barCodePrice = barCodePrice / (decimal)Math.Pow(10, segment.Decimals);
                }
                else
                {
                    throw new DataValidationException(
                              DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidFormat,
                              string.Format("Cannot Parse to decimal, Invalid format {0}", strBarCodePrice));
                }

                barcode.BarcodePrice = barCodePrice == 0 ? (decimal?)null : barCodePrice;
                barcode.Decimals     = segment.Decimals;
            }
Exemple #4
0
            private static ProcessMaskSegmentsServiceResponse ProcessMaskSegments(ProcessMaskSegmentsServiceRequest serviceRequest)
            {
                GetBarcodeMaskSegmentDataRequest getBarcodeMaskSegmentDataRequest = new GetBarcodeMaskSegmentDataRequest(serviceRequest.BarcodeMask.MaskId, QueryResultSettings.AllRecords);
                IEnumerable <BarcodeMaskSegment> barCodeMaskSegments = serviceRequest.RequestContext.Runtime.Execute <EntityDataServiceResponse <BarcodeMaskSegment> >(getBarcodeMaskSegmentDataRequest, serviceRequest.RequestContext).PagedEntityCollection.Results;

                int position = serviceRequest.BarcodeMask.Prefix.Length;

                Barcode barcodeInfo = serviceRequest.Barcode;

                foreach (BarcodeMaskSegment segment in barCodeMaskSegments)
                {
                    var segmentType = (BarcodeSegmentType)segment.MaskType;

                    switch (segmentType)
                    {
                    case BarcodeSegmentType.Item:
                    {
                        LoadItemInfo(serviceRequest, barcodeInfo, position, segment);
                        break;
                    }

                    case BarcodeSegmentType.AnyNumber:
                    case BarcodeSegmentType.CheckDigit:     // Check Digit is not implemented yet functionality in RetailServer.
                    {
                        break;
                    }

                    case BarcodeSegmentType.Price:
                    {
                        LoadPriceInfo(serviceRequest, barcodeInfo, position, segment);

                        if (barcodeInfo.BarcodePrice != null && barcodeInfo.ItemBarcode.ItemId != null)
                        {
                            ProductPrice productPrice        = GetItemPrice(serviceRequest.RequestContext, barcodeInfo.ItemBarcode.ItemId, barcodeInfo.ItemBarcode.InventoryDimensionId, barcodeInfo.ItemBarcode.UnitId, string.Empty);
                            decimal      defaultProductPrice = productPrice.AdjustedPrice;

                            var calculateQuantityRequest = new CalculateQuantityFromPriceServiceRequest(barcodeInfo.BarcodePrice.Value, defaultProductPrice, barcodeInfo.ItemBarcode.UnitId);
                            CalculateQuantityFromPriceServiceResponse calculateQuantityResponse = serviceRequest.RequestContext.Execute <CalculateQuantityFromPriceServiceResponse>(calculateQuantityRequest);

                            barcodeInfo.BarcodeQuantity = calculateQuantityResponse.BarcodeQuantity;
                        }

                        break;
                    }

                    case BarcodeSegmentType.Quantity:
                    {
                        LoadQuantityInfo(serviceRequest, barcodeInfo, position, segment);
                        break;
                    }

                    case BarcodeSegmentType.DiscountCode:
                    {
                        barcodeInfo.DiscountCode = serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length).TrimStart('0');
                        break;
                    }

                    case BarcodeSegmentType.GiftCard:
                    {
                        barcodeInfo.GiftCardNumber = serviceRequest.BarcodeMask.Prefix + serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);
                        break;
                    }

                    case BarcodeSegmentType.LoyaltyCard:
                    {
                        barcodeInfo.LoyaltyCardNumber = serviceRequest.BarcodeMask.Prefix + serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);
                        break;
                    }

                    case BarcodeSegmentType.SizeDigit:
                    case BarcodeSegmentType.ColorDigit:
                    case BarcodeSegmentType.StyleDigit:
                    {
                        // Not used.
                        break;
                    }

                    case BarcodeSegmentType.EANLicenseCode:
                    {
                        barcodeInfo.EANLicenseId = serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);
                        break;
                    }

                    case BarcodeSegmentType.Employee:
                    {
                        barcodeInfo.EmployeeId = serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);
                        break;
                    }

                    case BarcodeSegmentType.Salesperson:
                    {
                        barcodeInfo.SalespersonId = serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);
                        break;
                    }

                    case BarcodeSegmentType.Customer:
                    {
                        barcodeInfo.CustomerId = serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);
                        break;
                    }

                    case BarcodeSegmentType.DataEntry:
                    {
                        barcodeInfo.DataEntry = serviceRequest.Barcode.BarcodeId.Substring(position, segment.Length);
                        break;
                    }

                    default:
                    {
                        break;
                    }
                    }

                    position = position + segment.Length;
                }

                return(new ProcessMaskSegmentsServiceResponse(barcodeInfo));
            }