View Javadoc
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); // start over!!
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  }