public async Task <IActionResult> UpdateLandDetail(int id, LandDetail LandDetail)
        {
            if (id != LandDetail.ID)
            {
                return(BadRequest());
            }

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

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!LandDetailExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <LandDetail> > AddLandDetail([FromBody] LandDetailViewModel input)
        {
            try
            {
                if (isExists(input.Name, input.UserId, input.ID))
                {
                    return(new JsonResult(new { status = true, ErrorMessage = "Given land name exist" }));
                }

                LandDetail landDetails = null;
                if (input != null)
                {
                    landDetails = input.Adapt <LandDetail>();
                    var stateList = _context.StateLists.Where(s => s.ID == input.StateId).FirstOrDefault();
                    if (stateList == null)
                    {
                        return(new JsonResult(new { ErrorMessage = "The given state id not found." }));
                    }
                    var user = _context.Users.Where(s => s.ID == input.UserId).FirstOrDefault();
                    if (user == null)
                    {
                        return(new JsonResult(new { ErrorMessage = "The given user id not found." }));
                    }
                    landDetails.User = user;


                    landDetails.State = stateList;
                    if (input.ID <= 0)
                    {
                        _context.LandDetails.Add(landDetails);
                    }
                    else
                    {
                        _context.LandDetails.Update(landDetails);
                    }
                }
                await _context.SaveChangesAsync();

                return(new JsonResult(landDetails));
            }
            catch (Exception _ex)
            {
                return(new JsonResult(new { ErrorMessage = _ex.Message }));
            }
        }
        private bool isExists(string landName, int userId, int id)
        {
            LandDetail landDetail = null;

            if (id == 0)
            {
                landDetail = _context.LandDetails.Where(a => a.Name.Equals(landName) && a.UserId == userId).FirstOrDefault();
            }
            else
            {
                landDetail = _context.LandDetails.Where(a => a.Name.Equals(landName) && a.ID != id && a.UserId == userId).FirstOrDefault();
            }

            if (landDetail != null)
            {
                return(true);
            }
            return(false);
        }
        public async Task <ActionResult <IEnumerable <ViewReportViewModel> > > GetViewReport(int id)
        {
            LandDetail landDetailViewModel = await _context.LandDetails.FindAsync(id);

            List <PartitionLandDetail> partitionLandViewModel = await _context.PartitionLandDetails.Where(p => p.LandDetailId == id).ToListAsync();

            List <ViewReportViewModel> viewReportViewModel = new List <ViewReportViewModel>();

            List <Plowing>     plowing     = null;
            List <Seeding>     seeding     = null;
            List <PestControl> pestControl = null;
            List <WeedRemove>  weedRemove  = null;
            List <Sale>        sale        = null;
            List <Harvestings> harvestings = null;

            foreach (var partition in partitionLandViewModel)
            {
                plowing = await _context.Plowings.Where(p => p.PartitionLandDetailId == partition.ID).ToListAsync();

                seeding = await _context.Seedings.Where(s => s.PartitionLandDetailId == partition.ID).ToListAsync();

                pestControl = await _context.PestControls.Where(p => p.PartitionLandDetailId == partition.ID).ToListAsync();

                weedRemove = await _context.WeedRemove.Where(p => p.PartitionLandDetailId == partition.ID).ToListAsync();

                sale = await _context.Sales.Where(p => p.PartitionLandDetailId == partition.ID).ToListAsync();

                harvestings = await _context.Harvestings.Where(p => p.PartitionLandDetailId == partition.ID).ToListAsync();

                foreach (var plow in plowing)
                {
                    viewReportViewModel.Add(new ViewReportViewModel
                    {
                        Expense   = plow.PlowingExp,
                        Income    = 0,
                        LandName  = landDetailViewModel.Name,
                        Partition = partition.LandDirection,
                        Purpose   = "Plowing"
                    });
                }
                foreach (var seed in seeding)
                {
                    viewReportViewModel.Add(new ViewReportViewModel
                    {
                        Expense   = seed.SeedCost + seed.LabourCost,
                        Income    = 0,
                        LandName  = landDetailViewModel.Name,
                        Partition = partition.LandDirection,
                        Purpose   = "Seeding"
                    });
                }
                foreach (var pest in pestControl)
                {
                    viewReportViewModel.Add(new ViewReportViewModel
                    {
                        Expense   = pest.LabourCost + pest.Cost,
                        Income    = 0,
                        LandName  = landDetailViewModel.Name,
                        Partition = partition.LandDirection,
                        Purpose   = "PestControl"
                    });
                }
                foreach (var weed in weedRemove)
                {
                    viewReportViewModel.Add(new ViewReportViewModel
                    {
                        Expense   = weed.Cost + weed.LabourCost,
                        Income    = 0,
                        LandName  = landDetailViewModel.Name,
                        Partition = partition.LandDirection,
                        Purpose   = "WeedRemove"
                    });
                }
                foreach (var harvest in harvestings)
                {
                    viewReportViewModel.Add(new ViewReportViewModel
                    {
                        Expense   = harvest.Cost + harvest.LabourCost,
                        Income    = 0,
                        LandName  = landDetailViewModel.Name,
                        Partition = partition.LandDirection,
                        Purpose   = "Harvesting"
                    });
                }

                foreach (var sales in sale)
                {
                    viewReportViewModel.Add(new ViewReportViewModel
                    {
                        Expense   = sales.Price,
                        Income    = 0,
                        LandName  = landDetailViewModel.Name,
                        Partition = partition.LandDirection,
                        Purpose   = "Sale"
                    });
                }
            }

            return(viewReportViewModel);
        }