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 }); }
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)); }
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, }); }
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); }