Beispiel #1
0
        public async Task <Response> Create([FromBody] Reservation res)
        {
            // Create Reservation
            res._id              = now.Ticks.ToString();
            res.Active           = true;
            res.CreationDateTime = now;
            res.LastUpdate       = now;

            await reservationDac.Create(res);

            // Create RoomActivated
            var req = new CreateRoomActRequest
            {
                GroupId      = res._id,
                RoomSltLst   = res.Rooms,
                CheckInDate  = res.CheckInDate,
                CheckOutDate = res.CheckOutDate,
            };
            await roomActService.Upsert(req, now);

            return(new Response
            {
                IsSuccess = true
            });
        }
Beispiel #2
0
        public async Task Upsert(CreateRoomActRequest req, DateTime time)
        {
            var roomActLst = await Create(req, "จอง", time);

            var writeModels = roomActLst
                              .OrderBy(it => it.RoomNo)
                              .Select(it =>
                                      new ReplaceOneModel <RoomActivated>(Builders <RoomActivated> .Filter.Eq(d => d._id, it._id), it)
            {
                IsUpsert = true
            });

            await roomActivatedDac.Creates(writeModels);
        }
        public async Task <IEnumerable <RoomActivated> > GetRoomActLst([FromBody] Master master)
        {
            var req = new CreateRoomActRequest
            {
                GroupId      = master._id,
                RoomSltLst   = master.Rooms,
                CheckInDate  = master.CheckInDate,
                CheckOutDate = master.CheckOutDate,
            };
            var status = "เข้าพัก";

            var roomActLst = await roomActService.Create(req, status, now);

            return(roomActService.SetSelected(roomActLst));
        }
Beispiel #4
0
        public async Task <Response> Update(string id, int addReserve, [FromBody] Reservation res)
        {
            // Update Reservation
            res.Reserve   += addReserve;
            res.LastUpdate = now;

            await reservationDac.Update(r => r._id == id, res);

            // Upsert RoomActivated
            var req = new CreateRoomActRequest
            {
                GroupId      = id,
                RoomSltLst   = res.Rooms,
                CheckInDate  = res.CheckInDate,
                CheckOutDate = res.CheckOutDate,
            };
            await roomActService.Upsert(req, now);

            // Delete RoomActivated
            var roomNoLst = res.Rooms.Select(r => r.RoomNo).ToList();
            var filter    = Builders <RoomActivated> .Filter.Where(x => x.GroupId == id && x.Active == true && !roomNoLst.Contains(x.RoomNo));

            var roomNotActLst = await roomActivatedDac.Gets(filter);

            if (roomNotActLst.Any())
            {
                var roomActIdLst = roomNotActLst.Select(it => it._id).ToList();
                var filterDel    = Builders <RoomActivated> .Filter.Where(r => roomActIdLst.Contains(r._id));

                await roomActService.Delete(filterDel, now);
            }
            ;

            return(new Response
            {
                IsSuccess = true,
            });
        }
Beispiel #5
0
        public async Task <IEnumerable <RoomActivated> > Create(CreateRoomActRequest req, string status, DateTime time)
        {
            var roomNoLst = req.RoomSltLst.Select(r => r.RoomNo).ToList();
            var rooms     = await roomDac.Gets(r => roomNoLst.Contains(r._id));

            var roomActLst = req.RoomSltLst.Select(it =>
            {
                var room        = rooms.First(r => r._id == it.RoomNo);
                var expenseList = CreateExpenseList(it.Setting, room.Rate, time);
                var totalCost   = expenseList.Sum(expense => expense.TotalCost);
                var paid        = expenseList.Where(expense => expense.IsPaid == true).Sum(expense => expense.TotalCost);
                var remaining   = expenseList.Where(expense => expense.IsPaid == false).Sum(expense => expense.TotalCost);

                return(new RoomActivated
                {
                    _id = $"{req.GroupId}{room._id}",
                    GroupId = req.GroupId,
                    RoomNo = room._id,
                    RoomType = room.RoomType,
                    BedType = room.BedType,
                    Rate = room.Rate,
                    Discount = it.Setting.Discount,
                    ArrivalDate = req.CheckInDate,
                    Departure = req.CheckOutDate,
                    ExpenseList = expenseList,
                    TotalCost = totalCost,
                    Paid = paid,
                    Remaining = remaining,
                    Status = status,
                    Active = true,
                    CreationDateTime = time,
                    LastUpdate = time,
                });
            }).ToList();

            return(roomActLst);
        }