public async Task <IActionResult> Create([Bind("PartForWork,PartForWorkId,ImageName,ImageFile,ClearImg,ImageBytes")] PartForWork partForWork)
        {
            if (ModelState.IsValid)
            {
                partForWork.PartForWorkId = Guid.NewGuid();

                if (partForWork.WorkItem.WorkItemImageFile != null)
                {
                    partForWork.WorkItem.WorkItemImageBytes = await FileURL.GetFileBytes(partForWork.WorkItem.WorkItemImageFile);
                }
                SetUIDs();
                await _repo.AddPartForWork(partForWork);

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["StaticPartInfoId"] = new SelectList(await _repo.GetAllStaticPartInfos(), "StaticPartInfoId", "DrawingNumber", partForWork.WorkItem.StaticPartInfoId);
            return(View(partForWork));
        }
        public async Task <IActionResult> Initialize(WorkType workType, Guid id, [Bind("WorkItemId,WorkItem,StaticPartInfoId,NumPartsForWork,StartDate,CompleteDate,ProcessSheetNotesFile,WorkId")] WorkItemViewModel vm)
        {
            if (id != vm.WorkItemId)
            {
                return(NotFound());
            }
            ViewBag.WorkType = workType;

            var resultList = await _repo.GetPartsForWorksWithPartInfo(vm.StaticPartInfoId);

            var count = resultList.Count();
            int max   = 0;

            foreach (PartForWork pForWork in resultList)
            {
                var temp = PartSuffixGenerator.SuffixToIndex(pForWork.Suffix);
                if (temp > max)
                {
                    max = temp;
                }
            }

            if (ModelState.IsValid)
            {
                var workItem = await _repo.GetWorkItem(vm.WorkItemId);

                workItem.StaticPartInfoId = vm.StaticPartInfoId;

                workItem.StartDate   = vm.StartDate;
                workItem.InvoiceDate = vm.CompleteDate;

                workItem.IsInitialized = true;

                // look to see if this part/job already exists. If so, name suffix from that point
                var existingBatch = await _repo.GetExistingPartBatch((Guid)workItem.WorkId);

                var initCount = vm.NumPartsForWork;
                vm.NumPartsForWork += existingBatch.Count();

                // update the number of parts in each PartForJob
                foreach (PartForWork part in existingBatch)
                {
                    vm.NumPartsForWork += existingBatch.Count();
                }

                if (workItem.ProcessSheetNotesFile != null)
                {
                    workItem.ProcessSheetNotesPdfBytes = await FileURL.GetFileBytes(workItem.ProcessSheetNotesFile);
                }


                // create each part for the part batch
                for (int i = count; i < initCount + count; i++)
                {
                    try
                    {
                        var tempPartForWork = new PartForWork {
                            PartForWorkId = Guid.NewGuid(), WorkItemId = workItem.WorkItemId,
                        };
                        tempPartForWork.Suffix        = Utility.PartSuffixGenerator.IndexToSuffix(i);
                        tempPartForWork.PartForWorkId = Guid.NewGuid();
                        SetUIDs();
                        await _repo.AddPartForWork(tempPartForWork);
                    }
                    catch (Exception ex) { ex.ToString(); continue; }
                }
                await _repo.UpdateWorkItem(workItem);

                return(RedirectToAction("Index", "WorkItems", new { workType = workType, workId = workItem.WorkId }));
            }
            return(View(vm));
        }