public async Task <IActionResult> Edit(WorkType workType, Guid id, [Bind("PartForWorkId,WorkItemId,WorkItem,ConditionDescription,InitWeight,CladdedWeight,FinishedWeight,ProcessingNotes,Suffix,MachiningImageFile,ClearMachiningFile,ClearMachiningImg,CladdingImageFile,ClearCladdingImg,FinishedImageFile,ClearFinishedImg,UsedImageFile,ClearUsedImg,MachiningImageBytes,CladdingImageBytes,FinishedImageBytes,UsedImageBytes")] PartForWork partForWork)
        {
            if (id != partForWork.PartForWorkId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    partForWork = SetImageUrls(partForWork);
                    partForWork = await SetImageBytes(partForWork);

                    SetUIDs();
                    await _repo.UpdatePartForWork(partForWork);
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!(await PartForJobExists(partForWork.PartForWorkId)))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index", "PartsForAWork", new { workType = workType, workItemId = partForWork.WorkItemId }));
            }
            ViewBag.WorkType = workType;
            return(View(partForWork));
        }
        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> Edit(Guid id, [Bind("PartForWorkId,WorkItemId,WorkItem,Suffix,ConditionDescription,InitialWeight,CladdedWeight,FinishedWeight,ProcessingNotes,ImageName,ImageFile,ClearImg,ImageBytes")] PartForWork partForWork)
        {
            if (id != partForWork.PartForWorkId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (partForWork.WorkItem != null)
                    {
                        if (partForWork.WorkItem.WorkItemImageFile != null)
                        {
                            partForWork.WorkItem.WorkItemImageBytes = await FileURL.GetFileBytes(partForWork.WorkItem.WorkItemImageFile);
                        }
                        else if (partForWork.WorkItem.ClearWorkItemImg)
                        {
                            partForWork.WorkItem.WorkItemImageBytes = null;
                        }
                    }

                    SetUIDs();
                    await _repo.UpdatePartForWork(partForWork);
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PartForWorkExists(partForWork.PartForWorkId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["StaticPartInfoId"] = new SelectList(await _repo.GetAllStaticPartInfos(), "StaticPartInfoId", "DrawingNumber", partForWork.WorkItem.StaticPartInfoId);
            return(View(partForWork));
        }
        private PartForWork SetImageUrls(PartForWork partForWork)
        {
            if (partForWork.MachiningImageBytes != null)
            {
                partForWork.MachiningImageUrl = FileURL.GetImageUrl(partForWork.MachiningImageBytes);
            }
            if (partForWork.CladdingImageBytes != null)
            {
                partForWork.CladdingImageUrl = FileURL.GetImageUrl(partForWork.CladdingImageBytes);
            }
            if (partForWork.FinishedImageBytes != null)
            {
                partForWork.FinishedImageUrl = FileURL.GetImageUrl(partForWork.FinishedImageBytes);
            }
            if (partForWork.UsedImageBytes != null)
            {
                partForWork.UsedImageUrl = FileURL.GetImageUrl(partForWork.UsedImageBytes);
            }

            return(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));
        }
        private async Task <PartForWork> SetImageBytes(PartForWork partForJob)
        {
            if (!partForJob.ClearMachiningImg)
            {
                if (partForJob.MachiningImageFile != null)
                {
                    var machiningBytes = await FileURL.GetFileBytes(partForJob.MachiningImageFile);

                    if (machiningBytes != partForJob.MachiningImageBytes)
                    {
                        partForJob.MachiningImageBytes = machiningBytes;
                    }
                }
            }
            else
            {
                partForJob.MachiningImageBytes = null;
            }
            if (!partForJob.ClearCladdingImg)
            {
                if (partForJob.CladdingImageFile != null)
                {
                    var claddingBytes = await FileURL.GetFileBytes(partForJob.CladdingImageFile);

                    if (claddingBytes != partForJob.CladdingImageBytes)
                    {
                        partForJob.CladdingImageBytes = claddingBytes;
                    }
                }
            }
            else
            {
                partForJob.CladdingImageBytes = null;
            }
            if (!partForJob.ClearFinishedImg)
            {
                if (partForJob.FinishedImageFile != null)
                {
                    var finishedBytes = await FileURL.GetFileBytes(partForJob.FinishedImageFile);

                    if (finishedBytes != partForJob.FinishedImageBytes)
                    {
                        partForJob.FinishedImageBytes = finishedBytes;
                    }
                }
            }
            else
            {
                partForJob.FinishedImageBytes = null;
            }
            if (!partForJob.ClearUsedImg)
            {
                if (partForJob.UsedImageFile != null)
                {
                    var usedBytes = await FileURL.GetFileBytes(partForJob.UsedImageFile);

                    if (usedBytes != partForJob.UsedImageBytes)
                    {
                        partForJob.UsedImageBytes = usedBytes;
                    }
                }
            }
            else
            {
                partForJob.UsedImageBytes = null;
            }
            return(partForJob);
        }