public async Task <IActionResult> AllotRooms([FromBody] RoomAllocation[] roomAllocations, [FromRoute] string clno, [FromRoute] int cano) { var ids = roomAllocations.Select(ra => ra.RoomId).ToArray(); Room[] rooms = await _context.Room.Where(m => ids.Contains(m.RoomId)) .Include(m => m.RoomAllocation) .Where(r => r.LocationNavigation.hasAuth(User)) .ToArrayAsync(); if (rooms == null) { return(BadRequest()); } foreach (var room in rooms) { var NewRoomA = roomAllocations.Where(ra => ra.RoomId == room.RoomId).SingleOrDefault(); bool partial = NewRoomA.Partial > 0; bool empty = true; foreach (var roomA in room.RoomAllocation) { if (roomA.Partial <= 0) { empty = false; } if (!partial) { empty = false; } } if (!empty || room.Status != 1) { continue; } if (!partial) { NewRoomA.Partial = -1; } NewRoomA.ContingentLeaderNo = clno; NewRoomA.ContingentArrivalNo = cano; _context.Update(NewRoomA); _context.Update(room); Utilities.Log(_context, HttpContext, $"Allot room {room.RoomId} ({room.Location} {room.RoomName}) to {clno} #{cano} (p {NewRoomA.Partial})", 2, true); } await _context.SaveChangesAsync(); UpdateLayoutWebSocket(rooms); return(NoContent()); }
public async Task <IActionResult> ApproveContingentArrival([FromRoute] int cano, [FromBody] ContingentArrival contingentArrivalPut) { var contingentArrival = await _context.ContingentArrival .Include(m => m.CAPeople) .SingleOrDefaultAsync(m => m.ContingentArrivalNo == cano); if (contingentArrival == null || contingentArrival.Approved) { return(NotFound()); } /* Set M/F count from posted data */ contingentArrival.Male = contingentArrivalPut.Male; contingentArrival.Female = contingentArrivalPut.Female; contingentArrival.MaleOnSpotDemand = contingentArrivalPut.MaleOnSpotDemand; contingentArrival.FemaleOnSpotDemand = contingentArrivalPut.FemaleOnSpotDemand; contingentArrival.Remark = contingentArrivalPut.Remark; /* Mark people as done with */ String[] minos = contingentArrival.CAPeople.Select(cap => cap.Mino).ToArray(); Person[] people = await _context.Person.Where(m => minos.Contains(m.Mino)).ToArrayAsync(); var linksMaker = new LinksMaker(User, Url); foreach (CAPerson caPerson in contingentArrival.CAPeople) { linksMaker.FillCAPersonLinks(caPerson); Person person = people.SingleOrDefault(m => m.Mino == caPerson.Mino); if (person != null) { person.allottedCA = contingentArrival; _context.Update(person); } DataUtilities.FillCAPerson(User, Url, caPerson, people, contingentArrival.ContingentLeaderNo, false); } /* Approve! */ contingentArrival.Approved = true; Utilities.Log(_context, HttpContext, $"Approve subcontingent {contingentArrival.ContingentArrivalNo} {contingentArrival.ContingentLeaderNo})", 2, true); await _context.SaveChangesAsync(); DataUtilities.UpdateWebSock(null, _hubContext); linksMaker.FillContingentArrivalLinks(contingentArrival); return(Ok(contingentArrival)); }