public async Task ReverseLastScrap(PrototypeScrapResourceParameter parameter)
        {
            var last = await _context.Scraps
                       .AsNoTracking()
                       .Where(x => x.ShiftReportId == parameter.ShiftReportId)
                       .Where(x => x.Part == parameter.Part)
                       .OrderBy(x => x.ScrapId)
                       .LastOrDefaultAsync()
                       .ConfigureAwait(false);

            if (last == null)
            {
                return;
            }
            await ReverseScrap(last.ScrapId).ConfigureAwait(false);
        }
        public async Task <IActionResult> ReverseLastScrap(PrototypeScrapResourceParameter parameter)
        {
            try
            {
                await _service.ReverseLastScrap(parameter).ConfigureAwait(false);

                var scrapLists = await _context.Scraps
                                 .Where(
                    x => x.ShiftReportId == parameter.ShiftReportId && x.Part == parameter.Part
                    )
                                 .ToListAsync()
                                 .ConfigureAwait(false);

                return(Ok(scrapLists));
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
        public async Task <dynamic> AddScrap(PrototypeScrapResourceParameter parameter)
        {
            if (parameter == null)
            {
                throw new ArgumentNullException(nameof(parameter));
            }

            await using var transaction = await _context.Database
                                          .BeginTransactionAsync()
                                          .ConfigureAwait(false);

            try
            {
                var entity = new Scrap
                {
                    ShiftReportId = parameter.ShiftReportId,
                    Qty           = 1,
                    Code          = "9999", // for now this is a generic scrap code
                    Timestamp     = DateTime.Now,
                    Part          = parameter.Part,
                    Comment       = parameter.Comment,
                    SampleOrder   = parameter.SampleOrder
                };

                await _context.Scraps.AddAsync(entity).ConfigureAwait(false);

                await transaction.CommitAsync().ConfigureAwait(false);

                await _context.SaveChangesAsync().ConfigureAwait(false);

                return(entity);
            }
            catch (Exception e)
            {
                await transaction.RollbackAsync().ConfigureAwait(false);

                throw new Exception(e.Message);
            }
        }