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; } }
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); }
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; }
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)); }