using System; using System.Linq; namespace Xylem.Common.Logic.ProductionOrderCore.OrderData { /// /// Conversion of scanned number to serial number /// public static class ScanToSerialNr { public static Boolean ConvertScanToSerialNr(String scan ,out Int32 internalSerialNr,out String customerSr) { customerSr = ""; internalSerialNr = -1; try { const String prefix = "8SEN20"; const Int32 length = 9; if (scan.Contains(",")) { customerSr = scan.Substring(0, scan.IndexOf(",", StringComparison.Ordinal)); } if (scan.StartsWith(prefix)) { scan = scan.Substring(prefix.Length, length); if (!scan.EndsWith(",")) { throw new ApplicationException("Could not parse serial number"); } scan = scan.TrimEnd(','); } if (int.TryParse(scan, out var ret)) { internalSerialNr = ret; return true; } if (scan.Length == 11 && scan.StartsWith("10")) { customerSr = scan.Substring(2, 9); return true; } if (scan.Count( a => a == ',') == 2) { customerSr = scan.Split(',')[1] + ',';// 0, scan.IndexOf(",", StringComparison.Ordinal)); } if (customerSr.StartsWith(prefix)) { customerSr = customerSr.Substring(prefix.Length, length); if (!customerSr.EndsWith(",")) { throw new ApplicationException("Could not parse serial number"); } customerSr = customerSr.TrimEnd(','); } if (int.TryParse(customerSr, out var retCustom)) { if (retCustom.ToString().Length == "18795584".Length) { internalSerialNr = retCustom; } return true; } if (scan.Replace(" ", "").Length == 12) { customerSr = scan.Replace(" ", ""); } throw new ApplicationException("Could not parse serial number"); } catch (Exception ) { return false; } } } }