ソースを参照

消費税対応

develop
sosuke.iwabuchi 2年前
コミット
21e343b071
5個のファイルの変更60行の追加0行の削除
  1. +3
    -0
      src/api/custom/hello-techno/receipt-issuing-order.ts
  2. +1
    -0
      src/pages/dashboard/receipt-issuing-order/custom/hello-techno/create.tsx
  3. +7
    -0
      src/pages/dashboard/receipt-issuing-order/custom/hello-techno/detail.tsx
  4. +38
    -0
      src/pages/dashboard/receipt-issuing-order/custom/hello-techno/hooks/useInputReceiptStep.tsx
  5. +11
    -0
      src/utils/tax.ts

+ 3
- 0
src/api/custom/hello-techno/receipt-issuing-order.ts ファイルの表示

@@ -16,6 +16,7 @@ export type CreateReceiptIssuingOrderRequest = {
adjust_seq_no?: string | number; adjust_seq_no?: string | number;
receipt_use_date: Date | null; receipt_use_date: Date | null;
receipt_amount: string | number; receipt_amount: string | number;
tax_amount: string | number;
memo?: string; memo?: string;
sms_phone_number: string; sms_phone_number: string;
}; };
@@ -43,6 +44,8 @@ export type ReceiptIssuingOrderHTCustom = {
customer_name: string; customer_name: string;
parking_name: string; parking_name: string;
adjust_seq_no?: number; adjust_seq_no?: number;
tax_rate?: number;
tax_amount?: number;
} & ReceiptIssuingOrder; } & ReceiptIssuingOrder;


export type ReceiptIssuingOrdersRequest = { export type ReceiptIssuingOrdersRequest = {


+ 1
- 0
src/pages/dashboard/receipt-issuing-order/custom/hello-techno/create.tsx ファイルの表示

@@ -136,6 +136,7 @@ export default function ReceiptIssuingOrderCreate() {
adjust_seq_no: formData.adjustSeqNo, adjust_seq_no: formData.adjustSeqNo,
receipt_use_date: formData.date, receipt_use_date: formData.date,
receipt_amount: formData.amount, receipt_amount: formData.amount,
tax_amount: formData.tax_amount,
sms_phone_number: formData.address, sms_phone_number: formData.address,
memo: formData.memo, memo: formData.memo,
}); });


+ 7
- 0
src/pages/dashboard/receipt-issuing-order/custom/hello-techno/detail.tsx ファイルの表示

@@ -112,6 +112,13 @@ export default function ReceiptIssuingOrderDetail() {
? order.receipt_amount.toLocaleString() + "円" ? order.receipt_amount.toLocaleString() + "円"
: "-", : "-",
}, },
{
title: "消費税(内税)",
value:
isNumber(order.tax_amount) && isNumber(order.tax_rate)
? order.tax_amount.toLocaleString() + "円(" + order.tax_rate + "%)"
: "-",
},
{ title: "備考", value: order.memo }, { title: "備考", value: order.memo },
]; ];
}, [order]); }, [order]);


+ 38
- 0
src/pages/dashboard/receipt-issuing-order/custom/hello-techno/hooks/useInputReceiptStep.tsx ファイルの表示

@@ -16,6 +16,7 @@ import RHFDatePicker from "components/hook-form/RHFDatePicker";
import { useEffect, useMemo, useState } from "react"; import { useEffect, useMemo, useState } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { dateTimeParse } from "utils/datetime"; import { dateTimeParse } from "utils/datetime";
import { calcInnerTax } from "utils/tax";
import * as Yup from "yup"; import * as Yup from "yup";


type AreaBoxProps = { type AreaBoxProps = {
@@ -32,6 +33,7 @@ function AreaBox({ title, children }: AreaBoxProps) {


type FormProps = { type FormProps = {
amount: string; amount: string;
tax_amount: string;
date: Date | null; date: Date | null;
memo: string; memo: string;
}; };
@@ -46,6 +48,7 @@ export default function useInputReceiptStep({ onNext, onPrev }: Props) {
const form = useForm<FormProps>({ const form = useForm<FormProps>({
defaultValues: { defaultValues: {
amount: "", amount: "",
tax_amount: "",
date: null, date: null,
memo: "", memo: "",
}, },
@@ -55,6 +58,7 @@ export default function useInputReceiptStep({ onNext, onPrev }: Props) {
.required("必須項目です") .required("必須項目です")
.typeError("正しく入力してください"), .typeError("正しく入力してください"),
amount: Yup.number().required("必須項目です"), amount: Yup.number().required("必須項目です"),
tax_amount: Yup.number().required("必須項目です"),
memo: Yup.string().nullable(), memo: Yup.string().nullable(),
}) })
), ),
@@ -77,6 +81,17 @@ export default function useInputReceiptStep({ onNext, onPrev }: Props) {
_setAdjustData(data); _setAdjustData(data);
}; };


const canCalcTax = useMemo(() => {
return !adjustData;
}, [adjustData]);

const calcTax = () => {
if (!canCalcTax) return;
const amount = Number(form.getValues("amount"));
if (!amount) return;
form.setValue("tax_amount", String(calcInnerTax(amount)));
};

const readOnly = useMemo(() => { const readOnly = useMemo(() => {
return adjustData !== null; return adjustData !== null;
}, [adjustData]); }, [adjustData]);
@@ -99,6 +114,27 @@ export default function useInputReceiptStep({ onNext, onPrev }: Props) {
readOnly={readOnly} readOnly={readOnly}
/> />
</AreaBox> </AreaBox>
<AreaBox title="消費税(内税)">
<Stack direction="row" spacing={2}>
<RHFTextField
type="number"
name="tax_amount"
size="small"
InputProps={{
endAdornment: (
<div style={{ color: "black !important" }}>円</div>
),
}}
sx={{ maxWidth: 150 }}
readOnly={readOnly}
/>
{canCalcTax && (
<Button onClick={calcTax} variant="text">
計算
</Button>
)}
</Stack>
</AreaBox>
<AreaBox title="メモ"> <AreaBox title="メモ">
<RHFTextField name="memo" size="small" multiline rows={3} /> <RHFTextField name="memo" size="small" multiline rows={3} />
</AreaBox> </AreaBox>
@@ -116,9 +152,11 @@ export default function useInputReceiptStep({ onNext, onPrev }: Props) {
useEffect(() => { useEffect(() => {
if (adjustData) { if (adjustData) {
form.setValue("amount", String(adjustData.amount)); form.setValue("amount", String(adjustData.amount));
form.setValue("tax_amount", String(adjustData.tax_charge));
form.setValue("date", dateTimeParse(adjustData.adjust_datetime)); form.setValue("date", dateTimeParse(adjustData.adjust_datetime));
} else { } else {
form.setValue("amount", ""); form.setValue("amount", "");
form.setValue("tax_amount", "");
form.setValue("date", null); form.setValue("date", null);
} }
}, [adjustData]); }, [adjustData]);


+ 11
- 0
src/utils/tax.ts ファイルの表示

@@ -0,0 +1,11 @@
export const TAX_RATE_DEFAULT = 0.1;

/**
* 内税計算
*/
export function calcInnerTax(
totalAmount: number,
rate: number = TAX_RATE_DEFAULT
) {
return Math.floor((totalAmount * rate) / (1 + rate));
}

読み込み中…
キャンセル
保存