예제 #1
0
        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());
        }
예제 #2
0
        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));
        }