public async Task <IActionResult> Edit(int id, [Bind("Id,BranchId,PercelId,Status,ReceivingDate")] PercelLocation percelLocation)
        {
            if (id != percelLocation.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(percelLocation);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PercelLocationExists(percelLocation.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["BranchId"] = new SelectList(_context.Branches, "Id", "Name", percelLocation.BranchId);
            return(View(percelLocation));
        }
        public async Task <IActionResult> Deliver(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var percel = await _context.Percels.SingleOrDefaultAsync(m => m.Id == id);

            if (percel == null)
            {
                return(NotFound());
            }

            percel.Status = "Delivered";

            _context.Update(percel);
            await _context.SaveChangesAsync();

            PercelLocation percelLocation = new PercelLocation()
            {
                PercelId = percel.Id,
                BranchId = percel.BranchId,
                Status   = "Delivered",
                Date     = System.DateTime.Now
            };

            _context.Add(percelLocation);
            await _context.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
        public async Task <IActionResult> ReceivePercelfromUser([Bind("SenderName,SenderAddress,SenderEmail,SenderContact,ReceiverName,ReceiverAddress,ReceiverEmail,ReceiverContact,Weight,Cost")] PercelReceive percelReceive)
        {
            if (ModelState.IsValid)
            {
                Sender sender = new Sender()
                {
                    Name    = percelReceive.SenderName,
                    Address = percelReceive.SenderAddress,
                    Email   = percelReceive.SenderEmail,
                    Contact = percelReceive.SenderContact
                };

                _context.Add(sender);
                await _context.SaveChangesAsync();

                Receiver receiver = new Receiver()
                {
                    Name    = percelReceive.ReceiverName,
                    Address = percelReceive.ReceiverAddress,
                    Email   = percelReceive.ReceiverEmail,
                    Contact = percelReceive.ReceiverContact
                };

                _context.Add(receiver);
                await _context.SaveChangesAsync();

                var    employeeId = HttpContext.Session.GetInt32("employeeId");
                var    employee   = _context.Employees.FirstOrDefault(e => e.Id == employeeId);
                Percel percel     = new Percel()
                {
                    Code          = GetPercelCode(employee),
                    Weight        = percelReceive.Weight,
                    Cost          = percelReceive.Cost,
                    ReceivingDate = System.DateTime.Now,
                    SenderId      = sender.Id,
                    ReceiverId    = receiver.Id,
                    BranchId      = employee.BranchId,
                    Status        = "Received"
                };

                _context.Add(percel);
                await _context.SaveChangesAsync();

                PercelLocation percelLocation = new PercelLocation()
                {
                    PercelId = percel.Id,
                    BranchId = employee.BranchId,
                    Status   = "Received",
                    Date     = System.DateTime.Now
                };

                _context.Add(percelLocation);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Report", percel));
            }
            return(View(percelReceive));
        }
        public async Task <IActionResult> Index(string Code)
        {
            var employeeId = HttpContext.Session.GetInt32("employeeId");
            var employee   = _context.Employees.FirstOrDefault(e => e.Id == employeeId);

            if (Code == null)
            {
                ViewBag.Percels = await _context.Percels
                                  .Include(p => p.Branch)
                                  .Include(p => p.Receiver)
                                  .Include(p => p.Sender)
                                  .Where(p => p.BranchId == employee.BranchId && p.Status == "Received").ToListAsync();

                return(View());
            }

            var percel = await _context.Percels.SingleOrDefaultAsync(p => p.Code == Code);

            if (percel == null)
            {
                ViewBag.Percels = await _context.Percels
                                  .Include(p => p.Branch)
                                  .Include(p => p.Receiver)
                                  .Include(p => p.Sender)
                                  .Where(p => p.BranchId == employee.BranchId && p.Status == "Received").ToListAsync();

                return(View());
            }

            percel.BranchId = employee.BranchId;
            percel.Status   = "Received";

            _context.Update(percel);
            await _context.SaveChangesAsync();

            PercelLocation percelLocation = new PercelLocation()
            {
                PercelId = percel.Id,
                BranchId = employee.BranchId,
                Status   = "Received",
                Date     = System.DateTime.Now
            };

            _context.Add(percelLocation);
            await _context.SaveChangesAsync();

            ViewBag.Percels = await _context.Percels
                              .Include(p => p.Branch)
                              .Include(p => p.Receiver)
                              .Include(p => p.Sender)
                              .Where(p => p.BranchId == employee.BranchId && p.Status == "Received").ToListAsync();

            return(View());
        }