From 98ee587dc002dd5d6ea0a6bd4282e963a0e91cba Mon Sep 17 00:00:00 2001 From: minom Date: Tue, 10 Nov 2026 18:03:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=9B=E5=96=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/App_Code/api/guadanOrderController.cs | 116 +++ web/App_Code/api/regionController.cs | 13 +- web/admin/guadan/apply.vue | 64 +- web/admin/guadan/edit.vue | 26 + web/admin/guadan/view.vue | 4 +- web/admin/region/bed/index.aspx | 1147 +++++++++++++++++---- 6 files changed, 1154 insertions(+), 216 deletions(-) diff --git a/web/App_Code/api/guadanOrderController.cs b/web/App_Code/api/guadanOrderController.cs index 0ab5727..c88fa30 100644 --- a/web/App_Code/api/guadanOrderController.cs +++ b/web/App_Code/api/guadanOrderController.cs @@ -304,7 +304,122 @@ public class guadanOrderController : ApiController if (json != null && json.guest != null) { var guest = json.guest; + if (((string)guest.uuid).StartsWith("temp")) + { + //建立掛單明細 + var new_guest = new GuaDanOrderGuest + { + GuaDanOrderNo = guest.guaDanOrderNo, + Uuid = Guid.NewGuid(), + StatusCode = GuaDanOrderGuest.STATUS_BOOKED, // 預約狀態 + RoomUuid = guest.roomUuid, + BedUuid = guest.bedUuid, + CheckInAt = guest.checkInAt, + CheckOutAt = guest.checkOutAt, + Sex = guest.gender, + Handi = guest.handi, + IsDeleted = false, + Name = guest.name, + OrderUuid=guest.orderUuid, + }; + //_db.GuaDanOrderGuest.Remove(old); + _db.GuaDanOrderGuest.Add(new_guest); + + int totalDays = (new_guest.CheckOutAt.Value - new_guest.CheckInAt.Value).Days; + var bedList = new List(); + for (int i = 0; i < totalDays; i++) + { + var scheduleDate = new_guest.CheckOutAt.Value.AddDays(i); + + var schedul = new RegionAndRoomAndBedSchedule + { + Title = "掛單", + Description = "床位掛單", + ScheduleDate = scheduleDate, + IsDeleted = false, + IsCancel = false, + TargetUuid = new_guest.BedUuid, + UseType = (int)RegionAndRoomAndBedSchedule.SchedulePurpose.Bed_Reservation, + CreatedAt = DateTime.Now, + GuaDanOrderNo = new_guest.GuaDanOrderNo, + Uuid = Guid.NewGuid(), + GuaDanOrderGuestUuid = new_guest.Uuid, + }; + //_db.RegionAndRoomAndBedSchedule.Add(schedul); + bedList.Add(schedul); + } + _db.RegionAndRoomAndBedSchedule.AddRange(bedList); + } + else + { + if (!Guid.TryParse((string)guest.uuid, out Guid targetGuid)) + { + return BadRequest("無效的 GUID 格式"); + } + + var old = _db.GuaDanOrderGuest.Where(a => a.Uuid == targetGuid).FirstOrDefault(); + if (old == null) + { + return BadRequest("未找到對應掛單明細資料"); + } + + var sch = _db.RegionAndRoomAndBedSchedule.Where(a => a.GuaDanOrderGuestUuid == old.Uuid).ToList(); + if (sch != null) + { + _db.RegionAndRoomAndBedSchedule.RemoveRange(sch); + } + + + //建立掛單明細 + var new_guest = new GuaDanOrderGuest + { + GuaDanOrderNo = old.GuaDanOrderNo, + Uuid = Guid.NewGuid(), + StatusCode = GuaDanOrderGuest.STATUS_BOOKED, // 預約狀態 + RoomUuid = guest.roomUuid, + BedUuid = guest.bedUuid, + CheckInAt = guest.checkInAt, + CheckOutAt = guest.checkOutAt, + Sex = guest.gender, + Handi = guest.handi, + IsDeleted = false, + Name = guest.name, + + }; + _db.GuaDanOrderGuest.Remove(old); + _db.GuaDanOrderGuest.Add(new_guest); + + int totalDays = (new_guest.CheckOutAt.Value - new_guest.CheckInAt.Value).Days; + var bedList = new List(); + for (int i = 0; i < totalDays; i++) + { + var scheduleDate = new_guest.CheckOutAt.Value.AddDays(i); + + var schedul = new RegionAndRoomAndBedSchedule + { + Title = "掛單", + Description = "床位掛單", + ScheduleDate = scheduleDate, + IsDeleted = false, + IsCancel = false, + TargetUuid = new_guest.BedUuid, + UseType = (int)RegionAndRoomAndBedSchedule.SchedulePurpose.Bed_Reservation, + CreatedAt = DateTime.Now, + GuaDanOrderNo = new_guest.GuaDanOrderNo, + Uuid = Guid.NewGuid(), + GuaDanOrderGuestUuid = new_guest.Uuid, + }; + //_db.RegionAndRoomAndBedSchedule.Add(schedul); + bedList.Add(schedul); + } + _db.RegionAndRoomAndBedSchedule.AddRange(bedList); + } + _db.SaveChanges(); } + else { + return BadRequest("請提供掛單明細資料"); + } + return Ok(); } @@ -383,6 +498,7 @@ public class guadanOrderController : ApiController Handi = detail.handi, IsDeleted = false, Name = detail.name, + OrderUuid=guadanorder.Uuid }; list.Add(guest); if (!Guid.TryParse((string)detail.bedUuid, out Guid targetGuid)) diff --git a/web/App_Code/api/regionController.cs b/web/App_Code/api/regionController.cs index 0d9a45d..b89c7c5 100644 --- a/web/App_Code/api/regionController.cs +++ b/web/App_Code/api/regionController.cs @@ -61,7 +61,9 @@ public class regionController : ApiController { query = query.Where(r => r.Room.Any(room => room.Uuid == filter.RoomId.Value)); } - + var allGuaDanLimits = _db.GuaDanLimits + .Select(g => new { g.ParamNo, g.ParamName }) + .ToList(); var data = query .ToList() .Select(r => new @@ -101,6 +103,15 @@ public class regionController : ApiController bed.StatusCode, bed.IsActive, bed.IsDeleted, + Limits = allGuaDanLimits + .Where(g => (bed.Limits ?? "") + .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) + .Contains(g.ParamNo)) + .Select(g => new + { + g.ParamNo, + g.ParamName + }).ToList(), canuse = bed.IsAvailableDuring(startDate, endDate, _db), statusname = bed.RegionRoomBedStatus.Name, schedules = _db.RegionAndRoomAndBedSchedule diff --git a/web/admin/guadan/apply.vue b/web/admin/guadan/apply.vue index abb6a23..5a486e0 100644 --- a/web/admin/guadan/apply.vue +++ b/web/admin/guadan/apply.vue @@ -187,7 +187,7 @@
mdi-office-building-marker - {{ building.name }} (剩餘: {{ buildingAvailableBedsCount(building) }}) + {{ building.regionPath?building.regionPath.join("/"):building.name }} (剩餘: {{ buildingAvailableBedsCount(building) }})
@@ -223,7 +223,7 @@ {{ bed.name }}