1 package io.extact.rms.client.console.ui.member;
2
3 import static io.extact.rms.client.console.ui.ClientConstants.*;
4 import static io.extact.rms.client.console.ui.textio.TextIoUtils.*;
5
6 import java.util.List;
7
8 import io.extact.rms.client.api.RentalReservationClientApi;
9 import io.extact.rms.client.api.dto.RentalItemClientDto;
10 import io.extact.rms.client.api.dto.ReservationClientDto;
11 import io.extact.rms.client.api.dto.UserAccountClientDto;
12 import io.extact.rms.client.api.exception.BusinessFlowClientException;
13 import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
14 import io.extact.rms.client.console.ui.TransitionMap.Transition;
15 import io.extact.rms.client.console.ui.textio.TextIoUtils;
16 import lombok.RequiredArgsConstructor;
17
18 @RequiredArgsConstructor
19 public class InquiryReservationScreen implements RmsScreen {
20
21 private final RentalReservationClientApi clientApi;
22
23 @Override
24 public Transition play(UserAccountClientDto loginUser, boolean printHeader) {
25
26 if (printHeader) {
27 printScreenHeader(loginUser, "予約照会画面");
28 }
29
30
31 var items = clientApi.getAllRentalItems();
32 println(INQUIRY_RESERVATION_INFORMATION);
33 items.forEach(dto ->
34 println(RENATL_ITEM_FORMAT.format(dto))
35 );
36 blankLine();
37
38
39 var selectedItem = newIntInputReader()
40 .withSelectableValues(
41 items.stream()
42 .map(RentalItemClientDto::getId)
43 .toList(),
44 SCREEN_BREAK_VALUE)
45 .read("レンタル品番号");
46 if (TextIoUtils.isBreak(selectedItem)) {
47 return Transition.MEMBER_MAIN;
48 }
49
50
51 var inputedDate = newLocalDateReader()
52 .read("日付(入力例-2020/10/23)");
53
54
55 try {
56 var results = clientApi.findReservationByRentalItemAndStartDate(selectedItem, inputedDate);
57 printResultList(results);
58 return Transition.MEMBER_MAIN;
59
60 } catch (BusinessFlowClientException e) {
61 printServerError(e);
62 return play(loginUser, false);
63
64 }
65 }
66
67 private void printResultList(List<ReservationClientDto> reservations) {
68 blankLine();
69 println("***** 予約検索結果 *****");
70 println("選択レンタル品番号:" + reservations.get(0).getRentalItemId());
71 println("入力日付:" + DATE_FORMAT.format(reservations.get(0).getStartDateTime()));
72 reservations.forEach(r ->
73 println(RESERVATION_FORMAT.format(r))
74 );
75 blankLine();
76 waitPressEnter();
77 }
78 }