정리 전 원본 · src/settle.mjs 110줄 · 가상 공방 정산 코드 ·
원본 파일 ·
목록정리 전 원본
1// 공방 주문 정산 모듈
2// 작성: 2024년, 여러 사람이 고쳐 씀
3
4// 배송비 계산
5export const shipFee = (region, total) => {
6 // 지역이 제주면
7 if (region == 'jeju') {
8 // 5만원 이상이면
9 if (total >= 50000) {
10 return 3000
11 } else {
12 return 6000
13 }
14 } else {
15 if (total >= 50000) {
16 return 0
17 } else {
18 return 3000
19 }
20 }
21}
22
23// 예전 배송비 함수 (안 씀)
24const oldShipFee = (region, total) => {
25 return region == 'jeju' ? 7000 : 3500
26}
27
28// 회원 등급 할인율
29export const gradeRate = (grade) => grade == 'vip' ? 0.1 : grade == 'gold' ? 0.05 : grade == 'silver' ? 0.03 : 0
30
31// 주문 한 건 정산
32export const settleOrder = (order) => {
33 var sum = 0
34 // 품목을 하나씩 돈다
35 for (var i = 0; i < order.items.length; i++) {
36 var it = order.items[i]
37 // 수량이 없으면 1개로 본다
38 var q = it.qty || 1
39 // 줄마다 반올림
40 var line = Math.round(it.price * q)
41 sum = sum + line
42 }
43 var rate = order.couponRate || 0.1
44 if (order.coupon) {
45 if (order.coupon.length > 0) {
46 if (sum > 0) {
47 sum = sum - Math.floor(sum * rate)
48 }
49 }
50 }
51 var g = gradeRate(order.grade)
52 if (g > 0) {
53 sum = sum - Math.floor(sum * g)
54 }
55 var fee
56 if (order.region == 'jeju') {
57 if (sum >= 50000) {
58 fee = 3000
59 } else {
60 fee = 6000
61 }
62 } else {
63 if (sum >= 50000) {
64 fee = 0
65 } else {
66 fee = 3000
67 }
68 }
69 if (order.pickup == true) {
70 fee = 0
71 }
72 var result = { goods: sum, fee: fee, total: sum + fee }
73 return result
74}
75
76// 하루치 정산
77export const settleDay = (orders) => {
78 var out = { count: 0, goods: 0, fee: 0, total: 0, byRegion: {} }
79 for (var i = 0; i < orders.length; i++) {
80 var o = orders[i]
81 if (o.status == 'cancel') {
82 continue
83 }
84 if (o.status == 'cancel' && o.refunded) {
85 // 환불까지 끝난 취소 (여기 올 일 없음)
86 out.total = out.total - 0
87 }
88 var r = settleOrder(o)
89 out.count = out.count + 1
90 out.goods = out.goods + r.goods
91 out.fee = out.fee + r.fee
92 out.total = out.total + r.total
93 var key = o.region ? o.region : 'etc'
94 if (out.byRegion[key] == undefined) {
95 out.byRegion[key] = 0
96 }
97 out.byRegion[key] = out.byRegion[key] + r.total
98 }
99 return out
100}
101
102// 주문번호 묶음 키 (예: 3번 창고)
103export const binKey = (orderNo) => {
104 var n = orderNo % 10
105 if (n == '3') {
106 return 'B'
107 } else {
108 return n > 5 ? 'C' : 'A'
109 }
110}