1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import {
  CONTRACT_KIND,
  QUALITY_TYPE,
} from "./scanOut.constants";
import type { ContractKind, QualityType } from "./scanOut.constants";
import {
  scanOutboundSales,
  scanOutboundSalesUnqualified,
} from "@/api/salesManagement/salesLedger";
import {
  scanOutboundPurchase,
  scanOutboundPurchaseUnqualified,
} from "@/api/procurementManagement/procurementLedger";
 
type AnyRow = Record<string, any>;
type AnyRef<T> = { value: T };
 
type SubmitConfig = {
  runApi: (data: any) => Promise<any>;
  payloadBuilder: (list: AnyRow[]) => any;
};
 
export function createSubmitConfig(scanLedgerIdRef: AnyRef<string | number | null>) {
  const cfg: Record<string, SubmitConfig> = {
    [`${CONTRACT_KIND.sales}-${QUALITY_TYPE.qualified}`]: {
      runApi: scanOutboundSales,
      payloadBuilder: (list: AnyRow[]) => ({
        salesLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
    [`${CONTRACT_KIND.sales}-${QUALITY_TYPE.unqualified}`]: {
      runApi: scanOutboundSalesUnqualified,
      payloadBuilder: (list: AnyRow[]) => ({
        salesLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
    [`${CONTRACT_KIND.purchase}-${QUALITY_TYPE.qualified}`]: {
      runApi: scanOutboundPurchase,
      payloadBuilder: (list: AnyRow[]) => ({
        purchaseLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
    [`${CONTRACT_KIND.purchase}-${QUALITY_TYPE.unqualified}`]: {
      runApi: scanOutboundPurchaseUnqualified,
      payloadBuilder: (list: AnyRow[]) => ({
        purchaseLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
  };
  return cfg;
}