import { Box, Step, StepLabel, Stepper } from "@mui/material";
import { HTParking } from "api/custom/hello-techno";
import { createReceiptIssuingOrder } from "api/custom/hello-techno/receipt-issuing-order";
import { PageID, TabID } from "codes/page";
import useAPICall from "hooks/useAPICall";
import useDashboard from "hooks/useDashBoard";
import useSnackbarCustom from "hooks/useSnackbarCustom";
import { useEffect, useMemo, useState } from "react";
import { CreateContextProvider } from "./contexts/CreateContext";
import useConfirm, { ConfirmDataProps } from "./hooks/useConfirm";
import useCreate from "./hooks/useCreate";
import useInputReceiptStep from "./hooks/useInputReceiptStep";
import useInputSMSSendAddress from "./hooks/useInputSMSSendAddress";
import useParkingList from "./hooks/useParkingList";
export default function ReceiptIssuingOrderCreate() {
const { setHeaderTitle, setTabs } = useDashboard(
PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_CREATE_CUSTOM_HELLO_TECHNO,
TabID.NONE
);
useEffect(() => {
setHeaderTitle("領収証発行依頼作成");
setTabs(null);
}, []);
return (
);
}
function Create() {
const { parking, adjustData } = useCreate();
const { success, error } = useSnackbarCustom();
const [mode, setMode] = useState<
"parking_select" | "input_receipt" | "input_address" | "confirm" | "done"
>("parking_select");
const step = useMemo(() => {
switch (mode) {
case "parking_select":
return 0;
case "input_receipt":
return 1;
case "input_address":
return 2;
case "confirm":
return 3;
case "done":
return 4;
}
}, [mode]);
const getConfimData = (): ConfirmDataProps => {
return {
customerName: parking?.customer_name ?? "XXXXXXXXXXXX",
parkingName: parking?.parking_name ?? "XXXXXXXXXXXXXXX",
adjustSeqNo: adjustData ? String(adjustData.adjust_seq_no) : "",
amount: inputReceiptStep.values("amount"),
date: inputReceiptStep.values("date"),
address: inputSMSSendAddress.values("address"),
memo: inputReceiptStep.values("memo"),
};
};
const getFormData = () => {
return {
...parking,
...inputReceiptStep.values(),
...inputSMSSendAddress.values(),
};
};
const selectParkingStep = useParkingList({
onNext: (parking: HTParking) => {
inputReceiptStep.init();
setMode("input_receipt");
},
});
const inputReceiptStep = useInputReceiptStep({
onNext: () => {
setMode("input_address");
},
onPrev: () => {
setMode("parking_select");
},
});
const inputSMSSendAddress = useInputSMSSendAddress({
onNext: () => {
confirm.setData(getConfimData());
setMode("confirm");
},
onPrev: () => {
setMode("input_receipt");
},
});
const confirm = useConfirm({
onNext: () => {
send();
},
onPrev: () => {
setMode("input_address");
},
});
const createAPI = useAPICall({
apiMethod: createReceiptIssuingOrder,
backDrop: true,
onSuccess: () => {
setMode("done");
success("成功しました");
},
onFailed: () => {
error("失敗しました");
},
});
const send = () => {
const { callAPI, makeSendData } = createAPI;
const formData = getFormData();
const sendData = makeSendData({
customer_code: formData.customer_code ?? "",
parking_management_code: formData.parking_management_code ?? "",
adjust_seq_no: adjustData?.adjust_seq_no,
receipt_use_date: formData.date,
receipt_amount: formData.amount,
tax_amount: formData.tax_amount,
sms_phone_number: formData.address,
memo: formData.memo,
});
callAPI(sendData);
};
return (
駐車場選択
領収証情報入力
SMS送信先入力
確認
完了
{mode === "parking_select" && selectParkingStep.element}
{mode === "input_receipt" && inputReceiptStep.element}
{mode === "input_address" && inputSMSSendAddress.element}
{mode === "confirm" && confirm.element}
{mode === "done" && 受付しました。}
);
}