FPSMS-frontend
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

124 lines
3.2 KiB

  1. import dayjs, { ConfigType, Dayjs } from "dayjs";
  2. import { Uom } from "../api/settings/uom";
  3. import {
  4. ListIterateeCustom,
  5. every,
  6. isArray,
  7. isNaN,
  8. isNull,
  9. isUndefined,
  10. take,
  11. } from "lodash";
  12. import { Box, BoxProps } from "@mui/material";
  13. export const manhourFormatter = new Intl.NumberFormat("en-HK", {
  14. minimumFractionDigits: 2,
  15. maximumFractionDigits: 2,
  16. });
  17. export const moneyFormatter = new Intl.NumberFormat("en-HK", {
  18. style: "currency",
  19. currency: "HKD",
  20. });
  21. export const decimalFormatter = new Intl.NumberFormat("en-HK", {
  22. minimumFractionDigits: 2,
  23. maximumFractionDigits: 5,
  24. });
  25. export const integerFormatter = new Intl.NumberFormat("en-HK", {});
  26. export const INPUT_DATE_FORMAT = "YYYY-MM-DD";
  27. export const OUTPUT_DATE_FORMAT = "YYYY/MM/DD";
  28. export const OUTPUT_TIME_FORMAT = "HH:mm:ss";
  29. export const arrayToDayjs = (arr: ConfigType | (number | undefined)[]) => {
  30. const isValidNumber = (
  31. item: ListIterateeCustom<number | undefined, boolean>,
  32. ): boolean => typeof item === "number" && !isNaN(item) && isFinite(item);
  33. let tempArr = arr;
  34. if (isArray(arr) && every(arr, isValidNumber) && arr.length >= 3) {
  35. // [year, month, day]
  36. // tempArr = take(arr, 3);
  37. tempArr = `${arr[0]?.toString().padStart(4, "0")}-${arr[1]?.toString().padStart(2, "0")}-${arr[2]?.toString().padStart(2, "0")}`;
  38. }
  39. return dayjs(tempArr as ConfigType);
  40. };
  41. export const arrayToDateString = (arr: ConfigType | (number | undefined)[]) => {
  42. return arrayToDayjs(arr).format(OUTPUT_DATE_FORMAT);
  43. };
  44. export const arrayToInputDateString = (arr: ConfigType | (number | undefined)[]) => {
  45. return arrayToDayjs(arr).format(INPUT_DATE_FORMAT);
  46. };
  47. export const dateStringToDayjs = (date: string) => {
  48. // Format: YYYY/MM/DD
  49. return dayjs(date, OUTPUT_DATE_FORMAT);
  50. };
  51. export const dateTimeStringToDayjs = (dateTime: string) => {
  52. // Format: YYYY/MM/DD HH:mm:ss
  53. return dayjs(dateTime, `${OUTPUT_DATE_FORMAT} ${OUTPUT_TIME_FORMAT}`);
  54. };
  55. export const dayjsToDateString = (date: Dayjs) => {
  56. return date.format(OUTPUT_DATE_FORMAT);
  57. };
  58. export const dayjsToInputDateString = (date: Dayjs) => {
  59. return date.format(INPUT_DATE_FORMAT);
  60. };
  61. export const dayjsToInputDateTimeString = (date: Dayjs) => {
  62. return date.format(`${INPUT_DATE_FORMAT}T${OUTPUT_TIME_FORMAT}`);
  63. };
  64. export const outputDateStringToInputDateString = (date: string) => {
  65. return dayjsToInputDateString(dateStringToDayjs(date))
  66. }
  67. export const stockInLineStatusMap: { [status: string]: number } = {
  68. draft: 0,
  69. pending: 1,
  70. qc: 2,
  71. determine1: 3,
  72. determine2: 4,
  73. determine3: 5,
  74. receiving: 6,
  75. received: 7,
  76. completed: 8,
  77. rejected: 9,
  78. };
  79. export const stockOutLineStatusMap: { [status: string]: number } = {
  80. draft: 0,
  81. pending: 1, // waiting for qc
  82. determine1: 2, // waiting for qc
  83. "lot-change": 3, // waiting for qc
  84. // after qc = completed
  85. completed: 4,
  86. rejected: 5,
  87. };
  88. export const pickOrderStatusMap: { [status: string]: number } = {
  89. pending: 1,
  90. consolidated: 2,
  91. released: 3,
  92. completed: 4,
  93. };
  94. export const calculateWeight = (qty: number, uom: Uom) => {
  95. return qty * (uom.unit2Qty || 1) * (uom.unit3Qty || 1) * (uom.unit4Qty || 1);
  96. };
  97. export const returnWeightUnit = (uom: Uom) => {
  98. return uom.unit4 || uom.unit3 || uom.unit2 || uom.unit1;
  99. };