public RepairBarcodeValidateResponse ValidateBarcodeFault([FromBody]ReworkBarcodeValidateRequest request, string barcode)
        {
            ItemDetailsModel model = new ItemDetailsModel();
            RequirementsDataContext db = new RequirementsDataContext();
            RepairBarcodeValidateResponse response = new RepairBarcodeValidateResponse();

            if (request.SkuInfo.Count() > 0) {
                var sku = request.SkuInfo[0].Sku;
                var lineId = request.SkuInfo[0].LineId;
                var cstype = request.BarcodeFault.CSType;
                var bcregex = db.BarcodeRegexes.Where(r=>r.CSType == request.BarcodeFault.CSType && r.LineId == lineId).FirstOrDefault();
                if (bcregex != null) {

                    var regex = new Regex(@bcregex.Regex.Trim());
                    var bcmatch = regex.Match(barcode);
                    if (bcmatch.Success)    //validate barcode
                    {
                        //still need to validate barcode
                        var itemInfo = model.GetItemInfo(sku);
                        var partItem = itemInfo.ItemInfos.Where(p => p.PartIndex == bcregex.PartIndex).FirstOrDefault();

                        switch (cstype)
                        {
                            case 1:
                            case 2:
                                var pretensionerPart = bcmatch.Groups["PART"].Value;
                                var pretensionerTrack = bcmatch.Groups["TRACKING"].Value;

                                if (partItem != null)
                                {
                                    string expectedPretPart = model.GetOptionValue(partItem, (int)bcregex.OptionNumber);

                                    if (expectedPretPart == pretensionerPart)
                                    {
                                        //part okay to update and save
                                        response.Success = true;
                                    }
                                    else
                                    {
                                        response.ErrorMessage = "Ops, Wrong Part Expecting: " + expectedPretPart;
                                        response.ExpectedValue = expectedPretPart;
                                        response.Success = false;
                                    }
                                }

                                break;
                            case 7:
                            case 8:
                                var headrestPart = bcmatch.Groups["PARTNO"].Value;
                                string expectedHeadRestPart = model.GetOptionValue(partItem, (int)bcregex.OptionNumber);
                                if (expectedHeadRestPart.IndexOf(headrestPart) != -1)
                                {
                                    //part okay to update and save
                                    response.Success = true;
                                }
                                else
                                {
                                    response.ErrorMessage = "Ops, Wrong Part Expecting: " + expectedHeadRestPart;
                                    response.ExpectedValue = expectedHeadRestPart;
                                    response.Success = false;
                                }

                                break;
                            case 11:
                            case 12:
                                var backDocusew = bcmatch.Groups["BC"].Value;
                                response.Success = true;
                                break;
                            case 23:
                            case 24:
                                var airbagTrack = bcmatch.Groups["AIRBAGTRCK"].Value;
                                response.Success = true;
                                break;
                            default:
                                break;
                        }

                        return response;
                    }
                    else
                    {
                        return new RepairBarcodeValidateResponse
                        {
                            ErrorMessage = "Error: Incorrect Barcode Pattern Match",
                            Success = false,
                        };
                    }
                }
            }

            return new RepairBarcodeValidateResponse
            {
                ErrorMessage = "Error: Cannot Locate Part Info",
                Success = false,
            };
        }
        public BarcodeSwap GetSwapBarcodeSerial(int palletId, string original, string replace)
        {
            MesDataContext dbMes = new MesDataContext();
            RequirementsDataContext db = new RequirementsDataContext();

            int lineId = 0;
            if (palletId > 5000)
                lineId = 1;

            var palletHdr = (from p in dbMes.PalletInfos
                             where p.PalletNbr == palletId && (p.Pallet_Type == "S1" || p.Pallet_Type == "S2")
                             select p).FirstOrDefault();

            if (palletHdr != null)
            {

                var jobInfo = (from j in dbMes.MasterJobTables
                               where j.Job_ID == palletHdr.Job_ID
                               select j).FirstOrDefault();

                if (jobInfo != null)
                {
                    var bcregex = db.BarcodeRegexes.ToList();
                    foreach (var reg in bcregex)
                    {
                        var regex = new Regex(reg.Regex.Trim());
                        var bcmatch = regex.Match(original);
                        if (bcmatch.Success)    //validate barcode
                        {
                            //pretensioner
                            if (reg.CSType == 1 || reg.CSType == 2)
                            {
                                var pretensionerTrack = bcmatch.Groups["TRACKING"].Value;
                                original = pretensionerTrack;
                                break;
                            }
                        }
                    }

                    var result = (from b in dbMes.IWS_SP_GetJobSerialByJobId(jobInfo.Job_ID).Where(s=>s.Serial_Nbr.Trim() == original.Trim())
                                join t in dbMes.EDS_cfg_Component_Serialization_Types on b.CS_Type equals t.CS_Type
                                select new BarcodeSwap {
                                    Description = t.Description_Short.Trim(),
                                    JobId = jobInfo.Job_ID,
                                    OriginalBarcode = original,
                                    ReplaceBarcode = replace
                                }).FirstOrDefault();

                    if (result != null)
                        return result;
                }
            }



            throw new HttpResponseException(
                            HttpErrorResponse.GetHttpErrorResponse(
                            HttpStatusCode.NotFound, "Error", string.Format("Error Has Occured")));
        }
 private List<BarcodeRequirementInfo> GetBarcodeValidationRequirements(List<SkuInfo> skuInfos)
 {
     RequirementsDataContext db = new RequirementsDataContext();
     var bcreqs = (from b in db.BarcodeRequirementInfos.Where(b => b.Obsolete == false).ToList()
                   join part in skuInfos on b.LineId equals part.LineId
                   where ((part.BuildCode & b.SeatOptions) == (part.BuildCode & b.SeatOptions2Check)) &&
                   ((part.BuildCode & b.SeatOptions) == (b.SeatOptions & b.SeatOptions2Check))
                   select b).ToList();
     return bcreqs;
 }