Files
buzz-sheet/lib/commission/income.ts
T
gunshiz 643e77a88f
CI / Verify (push) Successful in 2m50s
CI / Build immutable images and deploy (push) Successful in 2m26s
feat : add monthly
2026-10-04 15:29:02 +07:00

30 lines
1.4 KiB
TypeScript

const BANGKOK_OFFSET = "+07:00";
export function commissionIncomeMonth(value: string | string[] | undefined, now = new Date()) {
const currentParts = new Intl.DateTimeFormat("en-US", {
timeZone: "Asia/Bangkok", year: "numeric", month: "2-digit",
}).formatToParts(now);
const current = `${currentParts.find((part) => part.type === "year")!.value}-${currentParts.find((part) => part.type === "month")!.value}`;
const month = typeof value === "string" && /^(20\d{2}|[3-9]\d{3})-(0[1-9]|1[0-2])$/.test(value) ? value : current;
const [year, number] = month.split("-").map(Number);
const next = number === 12 ? `${year + 1}-01` : `${year}-${String(number + 1).padStart(2, "0")}`;
const previous = number === 1 ? `${year - 1}-12` : `${year}-${String(number - 1).padStart(2, "0")}`;
return {
month, year, number, previous, next,
from: new Date(`${month}-01T00:00:00${BANGKOK_OFFSET}`),
to: new Date(`${next}-01T00:00:00${BANGKOK_OFFSET}`),
days: new Date(Date.UTC(year, number, 0)).getUTCDate(),
leadingDays: (new Date(Date.UTC(year, number - 1, 1)).getUTCDay() + 6) % 7,
};
}
export function commissionIncomeDay(date: Date) {
return Number(new Intl.DateTimeFormat("en-US", {
timeZone: "Asia/Bangkok", day: "numeric",
}).format(date));
}
export function commissionIncomeShares(amountBaht: number) {
return { buzzSatang: amountBaht * 90, gunshinSatang: amountBaht * 10 };
}