public async Task <ActionResult <esfDailyFuel> > PostesfDailyFuel(DailyFuelViewModel DailyFuel)
        {
            using (var transaction = _context.Database.BeginTransaction())
            {
                esfDailyFuel doc = null;
                try
                {
                    doc = new esfDailyFuel
                    {
                        dcNo     = DailyFuel.dcNo,
                        dcType   = DailyFuel.dcType,
                        dcDate   = DailyFuel.dcDate,
                        emID     = DailyFuel.emID,
                        Comment  = DailyFuel.Comment,
                        CreateAt = DateTime.Now,
                        CreateBy = 0
                    };

                    _context.esfDailyFuel.Add(doc);
                    await _context.SaveChangesAsync();

                    var items = DailyFuel.Items
                                .Select(i => new esfDailyFuelItems
                    {
                        HIID     = null,
                        dfiID    = 0,
                        dcID     = doc.dcID,
                        Income   = i.Income,
                        Outcome  = i.Outcome,
                        Remains  = i.Remains,
                        FileName = i.FileName,
                        eoID     = i.eoID,
                        fuID     = i.fuID,
                        CreateAt = DateTime.Now,
                        CreateBy = 0,
                    }).ToList();
                    _context.esfDailyFuelItems.AddRange(items);
                    await _context.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                }

                return(CreatedAtAction("GetesfDailyFuel", new { id = doc.dcID }, DailyFuel));
            }
        }
        public async Task <IActionResult> PutesfDailyFuel(int dcID, DailyFuelViewModel DailyFuel)
        {
            if (dcID != DailyFuel.dcID)
            {
                return(BadRequest());
            }

            esfDailyFuel doc = await _context.esfDailyFuel.Include(d => d.Items).FirstOrDefaultAsync(d => d.dcID == dcID);

            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    doc.dcNo    = DailyFuel.dcNo;
                    doc.dcDate  = DailyFuel.dcDate;
                    doc.emID    = DailyFuel.emID;
                    doc.Comment = DailyFuel.Comment;

                    doc.Items.RemoveAll(item => !DailyFuel.Items.Any(i => i.dfiID == item.dfiID));

                    foreach (var updItem in DailyFuel.Items)
                    {
                        var item = doc.Items.FirstOrDefault(i => (updItem.dfiID == i.dfiID));

                        if (item == null)
                        {
                            item = new esfDailyFuelItems
                            {
                                HIID     = null,
                                dfiID    = 0,
                                dcID     = doc.dcID,
                                Income   = updItem.Income,
                                Outcome  = updItem.Outcome,
                                Remains  = updItem.Remains,
                                FileName = updItem.FileName,
                                eoID     = updItem.eoID,
                                fuID     = updItem.fuID,
                                CreateAt = DateTime.Now,
                                CreateBy = 0,
                            };
                            doc.Items.Add(item);
                        }
                        else
                        {
                            if (((updItem.eoID != item.eoID) || (updItem.FileName != item.FileName) || (updItem.fuID != item.fuID) || (updItem.Income != item.Income) ||
                                 (updItem.Outcome != item.Outcome) || (updItem.Remains != item.Remains)))
                            {
                                item.eoID     = updItem.eoID;
                                item.fuID     = updItem.fuID;
                                item.FileName = updItem.FileName;
                                item.Income   = updItem.Income;
                                item.Outcome  = updItem.Outcome;
                                item.Remains  = updItem.Remains;
                                item.EditAt   = DateTime.Now;
                            }
                        }
                    }

                    _context.Entry(doc).State = EntityState.Modified;

                    try
                    {
                        await _context.SaveChangesAsync();

                        transaction.Commit();
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        if (!esfDailyFuelExists(dcID))
                        {
                            return(NotFound());
                        }
                        else
                        {
                            throw;
                        }
                    }
                }
                catch (Exception)
                {
                    transaction.Rollback();
                }
            }

            return(NoContent());
        }