您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

263 行
8.1KB

  1. import {
  2. Box,
  3. Button,
  4. Paper,
  5. Stack,
  6. Table,
  7. TableBody,
  8. TableCell,
  9. TableRow,
  10. Typography,
  11. } from "@mui/material";
  12. import { useSeasonTicketContractContext } from "contexts/dashboard/SeasonTicketContractContext";
  13. import useDashboard from "hooks/useDashBoard";
  14. import useNavigateCustom from "hooks/useNavigateCustom";
  15. import { PageID, TabID } from "pages";
  16. import { useEffect, useMemo } from "react";
  17. import { useParams } from "react-router-dom";
  18. import { getPath } from "routes/path";
  19. import { numberFormat } from "utils/string";
  20. import PayingPlanList from "./component/PayingPlanList";
  21. export default function ContractDetail() {
  22. const { setHeaderTitle, setTabs } = useDashboard(
  23. PageID.DASHBOARD_SEASON_TICKET_CONTRACT_DETAIL,
  24. TabID.NONE
  25. );
  26. const { id: paramId } = useParams();
  27. const {
  28. initialized,
  29. selectedseasonTicketContract: seasonTicketContract,
  30. seasonTicketContracts,
  31. select,
  32. } = useSeasonTicketContractContext();
  33. const { navigate, navigateWhenChanged } = useNavigateCustom();
  34. const moveToList = () => {
  35. navigateWhenChanged(getPath(PageID.DASHBOARD_SEASON_TICKET_CONTRACT_LIST));
  36. };
  37. const endDate = useMemo(() => {
  38. if (seasonTicketContract) {
  39. const { contract_end_date } = seasonTicketContract;
  40. if (contract_end_date === "2121/12/31") {
  41. return "";
  42. }
  43. return contract_end_date;
  44. }
  45. return "";
  46. }, [seasonTicketContract]);
  47. const vehcleNo = useMemo(() => {
  48. if (seasonTicketContract) {
  49. const { vehicle_no } = seasonTicketContract;
  50. if (vehicle_no !== "") {
  51. return vehicle_no;
  52. }
  53. return "未登録";
  54. }
  55. return "";
  56. }, [seasonTicketContract]);
  57. useEffect(() => {
  58. setHeaderTitle("契約詳細");
  59. setTabs(null);
  60. }, [setHeaderTitle, setTabs]);
  61. useEffect(() => {
  62. if (initialized && !!paramId) {
  63. const target = seasonTicketContracts.find((ele) => {
  64. return ele.season_ticekt_contract_record_no === paramId;
  65. });
  66. if (target) {
  67. select(target);
  68. } else {
  69. select(null);
  70. moveToList();
  71. }
  72. }
  73. }, [initialized]);
  74. if (!initialized || seasonTicketContract === null) {
  75. return null;
  76. }
  77. return (
  78. <Box>
  79. <Stack spacing={2}>
  80. <Box>
  81. <Button onClick={moveToList}>戻る</Button>
  82. </Box>
  83. <Paper sx={{ p: 2 }}>
  84. <Typography variant="h5">契約情報</Typography>
  85. <Table>
  86. <TableBody>
  87. <TableRow>
  88. <TableCell>駐車場名</TableCell>
  89. <TableCell>{seasonTicketContract.parking_name}</TableCell>
  90. </TableRow>
  91. <TableRow>
  92. <TableCell>区画</TableCell>
  93. <TableCell>{seasonTicketContract.room_no}</TableCell>
  94. </TableRow>
  95. <TableRow>
  96. <TableCell>契約金額</TableCell>
  97. <TableCell>
  98. {numberFormat(seasonTicketContract.contract_amount)}円
  99. </TableCell>
  100. </TableRow>
  101. <TableRow>
  102. <TableCell>車両番号</TableCell>
  103. <TableCell>{vehcleNo}</TableCell>
  104. </TableRow>
  105. <TableRow>
  106. <TableCell>契約期間</TableCell>
  107. <TableCell>
  108. {seasonTicketContract.contract_start_date}-{endDate}
  109. </TableCell>
  110. </TableRow>
  111. </TableBody>
  112. </Table>
  113. </Paper>
  114. <PayingPlanList />
  115. {seasonTicketContract.can_some_apply && (
  116. <>
  117. <Paper sx={{ p: 2 }}>
  118. <Typography variant="h5">各種申請</Typography>
  119. <Stack spacing={2} mt={2}>
  120. {seasonTicketContract.has_sticker && (
  121. <Box>
  122. <Button
  123. variant="contained"
  124. onClick={() => {
  125. navigateWhenChanged(
  126. getPath(
  127. PageID.DASHBOARD_SEASON_TICKET_CONTRACT_STICKER_RE_ORDER
  128. )
  129. );
  130. }}
  131. >
  132. シール再発行申請
  133. </Button>
  134. </Box>
  135. )}
  136. {seasonTicketContract.has_season_ticket && (
  137. <Box>
  138. <Button
  139. variant="contained"
  140. onClick={() => {
  141. navigateWhenChanged(
  142. getPath(
  143. PageID.DASHBOARD_SEASON_TICKET_CONTRACT_SEASON_TICKET_RE_ORDER
  144. )
  145. );
  146. }}
  147. >
  148. 定期券再発行申請
  149. </Button>
  150. </Box>
  151. )}
  152. {seasonTicketContract.can_parking_certificate_apply && (
  153. <Box>
  154. <Button
  155. variant="contained"
  156. onClick={() => {
  157. navigateWhenChanged(
  158. getPath(
  159. PageID.DASHBOARD_SEASON_TICKET_CONTRACT_PARKING_CERTIFICATE_ORDER
  160. )
  161. );
  162. }}
  163. >
  164. 駐車証明証申請
  165. </Button>
  166. </Box>
  167. )}
  168. <Box>
  169. <Button
  170. variant="contained"
  171. onClick={() => {
  172. navigateWhenChanged(
  173. getPath(
  174. PageID.DASHBOARD_SEASON_TICKET_CONTRACT_TERMINATE_ORDER
  175. )
  176. );
  177. }}
  178. >
  179. 解約申請
  180. </Button>
  181. </Box>
  182. <Box>
  183. <Button
  184. variant="contained"
  185. onClick={() => {
  186. navigateWhenChanged(
  187. getPath(
  188. PageID.DASHBOARD_SEASON_TICKET_CONTRACT_UPDATE_VEHICLE_INFO_ORDER
  189. )
  190. );
  191. }}
  192. >
  193. 車両情報変更申請
  194. </Button>
  195. </Box>
  196. {seasonTicketContract.can_change_plan_apply && (
  197. <Box>
  198. <Button
  199. variant="contained"
  200. onClick={() => {
  201. navigateWhenChanged(
  202. getPath(
  203. PageID.DASHBOARD_SEASON_TICKET_CONTRACT_CHANGE_PLAN
  204. )
  205. );
  206. }}
  207. >
  208. プラン変更
  209. </Button>
  210. </Box>
  211. )}
  212. </Stack>
  213. </Paper>
  214. <Paper sx={{ p: 2 }}>
  215. <Typography variant="h5">各種証明証提出</Typography>
  216. <Stack spacing={2} mt={2}>
  217. <Box>
  218. <Button
  219. variant="contained"
  220. onClick={() => {
  221. navigateWhenChanged(
  222. getPath(
  223. PageID.DASHBOARD_USER_STUDENT_LICENSE_IMAGES_UPLOAD
  224. )
  225. );
  226. }}
  227. >
  228. 学生証画像アップロード
  229. </Button>
  230. </Box>
  231. <Box>
  232. <Button
  233. variant="contained"
  234. onClick={() => {
  235. navigateWhenChanged(
  236. getPath(
  237. PageID.DASHBOARD_USER_OTHER_LICENSE_IMAGES_UPLOAD
  238. )
  239. );
  240. }}
  241. >
  242. 障がい者手帳画像アップロード
  243. </Button>
  244. </Box>
  245. </Stack>
  246. </Paper>
  247. </>
  248. )}
  249. </Stack>
  250. </Box>
  251. );
  252. }