@things-factory/tax-invoice 6.2.84 → 6.2.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/client/pages/tax-invoice/tax-invoice-detail-popup.ts +34 -11
  2. package/client/pages/tax-invoice/tax-invoice-list-page.ts +150 -152
  3. package/client/pages/tax-invoice-api/tax-invoice-api-page.ts +6 -5
  4. package/client/pages/tax-invoice-company/tax-invoice-company-importer.ts +2 -2
  5. package/client/pages/tax-invoice-send/tax-invoice-send-page.ts +580 -0
  6. package/client/route.ts +4 -4
  7. package/dist-client/pages/tax-invoice/tax-invoice-detail-popup.js +39 -13
  8. package/dist-client/pages/tax-invoice/tax-invoice-detail-popup.js.map +1 -1
  9. package/dist-client/pages/tax-invoice/tax-invoice-list-page.d.ts +63 -23
  10. package/dist-client/pages/tax-invoice/tax-invoice-list-page.js +149 -143
  11. package/dist-client/pages/tax-invoice/tax-invoice-list-page.js.map +1 -1
  12. package/dist-client/pages/tax-invoice-api/tax-invoice-api-page.d.ts +1 -1
  13. package/dist-client/pages/tax-invoice-api/tax-invoice-api-page.js +6 -5
  14. package/dist-client/pages/tax-invoice-api/tax-invoice-api-page.js.map +1 -1
  15. package/dist-client/pages/tax-invoice-company/tax-invoice-company-importer.js +2 -2
  16. package/dist-client/pages/tax-invoice-company/tax-invoice-company-importer.js.map +1 -1
  17. package/dist-client/pages/tax-invoice-send/tax-invoice-send-page.d.ts +100 -0
  18. package/dist-client/pages/tax-invoice-send/tax-invoice-send-page.js +510 -0
  19. package/dist-client/pages/tax-invoice-send/tax-invoice-send-page.js.map +1 -0
  20. package/dist-client/route.d.ts +1 -1
  21. package/dist-client/route.js +3 -3
  22. package/dist-client/route.js.map +1 -1
  23. package/dist-client/tsconfig.tsbuildinfo +1 -1
  24. package/dist-server/service/tax-invoice/tax-invoice-mutation.js +137 -41
  25. package/dist-server/service/tax-invoice/tax-invoice-mutation.js.map +1 -1
  26. package/dist-server/service/tax-invoice/tax-invoice-query.js +25 -2
  27. package/dist-server/service/tax-invoice/tax-invoice-query.js.map +1 -1
  28. package/dist-server/service/tax-invoice/tax-invoice-type.js +22 -259
  29. package/dist-server/service/tax-invoice/tax-invoice-type.js.map +1 -1
  30. package/dist-server/service/tax-invoice/tax-invoice.js +22 -24
  31. package/dist-server/service/tax-invoice/tax-invoice.js.map +1 -1
  32. package/dist-server/service/tax-invoice-api/tax-invoice-api-type.js +5 -0
  33. package/dist-server/service/tax-invoice-api/tax-invoice-api-type.js.map +1 -1
  34. package/dist-server/service/tax-invoice-api/tax-invoice-api.js +0 -8
  35. package/dist-server/service/tax-invoice-api/tax-invoice-api.js.map +1 -1
  36. package/dist-server/service/tax-invoice-company/tax-invoice-company.js +0 -8
  37. package/dist-server/service/tax-invoice-company/tax-invoice-company.js.map +1 -1
  38. package/dist-server/service/tax-invoice-item/tax-invoice-item-query.js.map +1 -1
  39. package/dist-server/service/tax-invoice-item/tax-invoice-item-type.js +4 -12
  40. package/dist-server/service/tax-invoice-item/tax-invoice-item-type.js.map +1 -1
  41. package/dist-server/service/tax-invoice-item/tax-invoice-item.js +6 -15
  42. package/dist-server/service/tax-invoice-item/tax-invoice-item.js.map +1 -1
  43. package/dist-server/service/unipost-api/tax-invoice-inquiry.js +90 -0
  44. package/dist-server/service/unipost-api/tax-invoice-inquiry.js.map +1 -0
  45. package/dist-server/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +5 -5
  47. package/server/service/tax-invoice/tax-invoice-mutation.ts +143 -45
  48. package/server/service/tax-invoice/tax-invoice-query.ts +22 -4
  49. package/server/service/tax-invoice/tax-invoice-type.ts +21 -199
  50. package/server/service/tax-invoice/tax-invoice.ts +38 -49
  51. package/server/service/tax-invoice-api/tax-invoice-api-type.ts +4 -0
  52. package/server/service/tax-invoice-api/tax-invoice-api.ts +0 -4
  53. package/server/service/tax-invoice-company/tax-invoice-company.ts +0 -4
  54. package/server/service/tax-invoice-item/tax-invoice-item-query.ts +1 -1
  55. package/server/service/tax-invoice-item/tax-invoice-item-type.ts +4 -13
  56. package/server/service/tax-invoice-item/tax-invoice-item.ts +6 -10
  57. package/server/service/unipost-api/tax-invoice-inquiry.ts +103 -0
  58. package/translations/ko.json +10 -1
@@ -3,53 +3,92 @@ import '@operato/data-grist';
3
3
  import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles';
4
4
  import { PageView } from '@operato/shell';
5
5
  import { css, html } from 'lit';
6
- import { customElement, property, query } from 'lit/decorators.js';
6
+ import { customElement, property, state, query } from 'lit/decorators.js';
7
7
  import { ScopedElementsMixin } from '@open-wc/scoped-elements';
8
8
  import { DataGrist } from '@operato/data-grist';
9
9
  import { client } from '@operato/graphql';
10
10
  import { i18next, localize } from '@operato/i18n';
11
11
  import { notify, openPopup } from '@operato/layout';
12
- import { OxPrompt } from '@operato/popup';
13
- import { isMobileDevice } from '@operato/utils';
14
12
  import gql from 'graphql-tag';
15
13
  import './tax-invoice-detail-popup';
14
+ export var Category;
15
+ (function (Category) {
16
+ Category["EXPORT"] = "10";
17
+ Category["IMPORT"] = "20";
18
+ Category["NTS"] = "30";
19
+ })(Category || (Category = {}));
16
20
  export const CATEGORY = {
17
- '10': '매출',
18
- '20': '매입',
19
- '30': 'NTS'
21
+ [Category.EXPORT]: '매출',
22
+ [Category.IMPORT]: '매입',
23
+ [Category.NTS]: 'NTS'
20
24
  };
25
+ export var InvoiceType;
26
+ (function (InvoiceType) {
27
+ InvoiceType["TAX_INVOICE"] = "0101";
28
+ InvoiceType["SMALL_BUSINESS_TAX_INVOICE"] = "0102";
29
+ InvoiceType["CONSIGNMENT_TAX_INVOICE"] = "0103";
30
+ InvoiceType["SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE"] = "0105";
31
+ InvoiceType["REVISED_TAX_INVOICE"] = "0201";
32
+ InvoiceType["REVISED_SMALL_BUSINESS_TAX_INVOICE"] = "0202";
33
+ InvoiceType["REVISED_CONSIGNMENT_TAX_INVOICE"] = "0203";
34
+ InvoiceType["REVISED_IMPORT_TAX_INVOICE"] = "0204";
35
+ InvoiceType["REVISED_SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE"] = "0205";
36
+ InvoiceType["INVOICE"] = "0301";
37
+ InvoiceType["CONSIGNMENT_INVOICE"] = "0303";
38
+ InvoiceType["IMPORT_INVOICE"] = "0304";
39
+ InvoiceType["REVISED_INVOICE"] = "0401";
40
+ InvoiceType["REVISED_CONSIGNMENT_INVOICE"] = "0403";
41
+ InvoiceType["REVISED_IMPORT_INVOICE"] = "0404";
42
+ })(InvoiceType || (InvoiceType = {}));
21
43
  export const INVOICE_TYPE = {
22
- '0101': '일반 세금계산서',
23
- '0102': '영세율 세금계산서',
24
- '0103': '위수탁 세금계산서',
25
- '0105': '영세율 위수탁 세금계산서',
26
- '0201': '수정 일반 세금계산서',
27
- '0202': '수정 영세율 세금계산서',
28
- '0203': '수정 위수탁 세금계산서',
29
- '0204': '수정 수입 세금계산서',
30
- '0205': '수정 영세율 위수탁 세금계산서',
31
- '0301': '일반 계산서',
32
- '0303': '위수탁 계산서',
33
- '0304': '수입 계산서',
34
- '0401': '수정 일반 계산서',
35
- '0403': '수정 위수탁 계산서',
36
- '0404': '정 수입 계산서'
44
+ [InvoiceType.TAX_INVOICE]: '일반 전자세금계산서',
45
+ [InvoiceType.SMALL_BUSINESS_TAX_INVOICE]: '영세율 전자세금계산서',
46
+ [InvoiceType.CONSIGNMENT_TAX_INVOICE]: '위수탁 전자세금계산서',
47
+ [InvoiceType.SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE]: '영세율 위수탁 전자세금계산서',
48
+ [InvoiceType.REVISED_TAX_INVOICE]: '수정 일반 전자세금계산서',
49
+ [InvoiceType.REVISED_SMALL_BUSINESS_TAX_INVOICE]: '수정 영세율 전자세금계산서',
50
+ [InvoiceType.REVISED_CONSIGNMENT_TAX_INVOICE]: '수정 위수탁 전자세금계산서',
51
+ [InvoiceType.REVISED_IMPORT_TAX_INVOICE]: '수정 수입 전자세금계산서',
52
+ [InvoiceType.REVISED_SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE]: '수정 영세율 위수탁 전자세금계산서',
53
+ [InvoiceType.INVOICE]: '일반 전자계산서',
54
+ [InvoiceType.CONSIGNMENT_INVOICE]: '위수탁 전자계산서',
55
+ [InvoiceType.IMPORT_INVOICE]: '수입 전자계산서',
56
+ [InvoiceType.REVISED_INVOICE]: '수정 일반 전자계산서',
57
+ [InvoiceType.REVISED_CONSIGNMENT_INVOICE]: '수정 위수탁 전자계산서',
58
+ [InvoiceType.REVISED_IMPORT_INVOICE]: '수정 수입 전자계산서'
37
59
  };
60
+ export var Purpose;
61
+ (function (Purpose) {
62
+ Purpose["RECEIPT"] = "01";
63
+ Purpose["INVOICE"] = "02";
64
+ })(Purpose || (Purpose = {}));
38
65
  export const PURPOSE = {
39
- '01': '영수',
40
- '02': '청구'
66
+ [Purpose.RECEIPT]: '영수',
67
+ [Purpose.INVOICE]: '청구'
68
+ };
69
+ export var BusinessRegistrationCategory;
70
+ (function (BusinessRegistrationCategory) {
71
+ BusinessRegistrationCategory["BUSINESS_REGISTRATION_NUMBER"] = "01";
72
+ BusinessRegistrationCategory["RESIDENT_REGISTRATION_NUMBER"] = "02";
73
+ BusinessRegistrationCategory["FOREIGNER_REGISTRATION_NUMBER"] = "03"; // 외국인등록번호
74
+ })(BusinessRegistrationCategory || (BusinessRegistrationCategory = {}));
75
+ export const BUSINESS_REGISTRATION_CATEGORY = {
76
+ [BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER]: '사업자등록번호',
77
+ [BusinessRegistrationCategory.RESIDENT_REGISTRATION_NUMBER]: '주민등록번호',
78
+ [BusinessRegistrationCategory.FOREIGNER_REGISTRATION_NUMBER]: '외국인'
41
79
  };
42
80
  let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(ScopedElementsMixin(PageView)) {
43
81
  constructor() {
44
82
  super(...arguments);
45
- this.mode = isMobileDevice() ? 'CARD' : 'GRID';
83
+ this.summary = null;
84
+ this._numberFormat = (num) => Intl.NumberFormat('en-US').format(num || 0);
46
85
  }
47
86
  get context() {
48
87
  return {
49
88
  title: i18next.t('title.tax invoice list'),
50
89
  help: 'tax-invoice/tax-invoice',
51
90
  actions: [
52
- Object.assign({ title: i18next.t('button.delete'), action: this._deleteTaxInvoice.bind(this) }, CommonButtonStyles.delete)
91
+ Object.assign({ title: i18next.t('button.memo save'), action: this._updateTaxInvoice.bind(this) }, CommonButtonStyles.save)
53
92
  ],
54
93
  exportable: {
55
94
  name: i18next.t('title.tax invoice list'),
@@ -60,7 +99,19 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
60
99
  }
61
100
  render() {
62
101
  const mode = 'GRID';
102
+ const summary = this.summary;
63
103
  return html `
104
+ <div class="summary">
105
+ <span class="title">${i18next.t('field.summary total count')}</span>
106
+ <span class="value">${this._numberFormat(summary === null || summary === void 0 ? void 0 : summary.cnt)}</span>
107
+ <span class="title">${i18next.t('field.summary total amount')}</span>
108
+ <span class="value">${this._numberFormat(summary === null || summary === void 0 ? void 0 : summary.total_amount)}</span>
109
+ <span class="title">${i18next.t('field.summary supply amount')}</span>
110
+ <span class="value">${this._numberFormat(summary === null || summary === void 0 ? void 0 : summary.supply_amount)}</span>
111
+ <span class="title">${i18next.t('field.summary tax amount')}</span>
112
+ <span class="value">${this._numberFormat(summary === null || summary === void 0 ? void 0 : summary.tax_amount)}</span>
113
+ </div>
114
+
64
115
  <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
65
116
  <div slot="headroom">
66
117
  <div id="filters">
@@ -69,7 +120,6 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
69
120
  </div>
70
121
  </ox-grist>
71
122
  `;
72
- // <button @click=${() => this.createTaxInvoice('3')}>생성</button>
73
123
  }
74
124
  async pageInitialized(lifecycle) {
75
125
  this.gristConfig = {
@@ -88,8 +138,8 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
88
138
  },
89
139
  {
90
140
  type: 'string',
91
- name: 'name',
92
- header: i18next.t('field.name'),
141
+ name: 'memo',
142
+ header: i18next.t('field.memo'),
93
143
  record: {
94
144
  editable: true
95
145
  },
@@ -102,8 +152,31 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
102
152
  header: i18next.t('field.tax invoice category'),
103
153
  record: {
104
154
  renderer: value => CATEGORY[value],
155
+ classifier: function (record, rowIndex) {
156
+ return {
157
+ emphasized: record.category === Category.EXPORT ? ['#c6daf6', 'black'] : ['#fedbde', 'black']
158
+ };
159
+ },
105
160
  align: 'center'
106
161
  },
162
+ filter: {
163
+ type: 'select',
164
+ value: Category.EXPORT,
165
+ options: () => [
166
+ {
167
+ display: '전체',
168
+ value: ''
169
+ },
170
+ {
171
+ display: '매출',
172
+ value: Category.EXPORT
173
+ },
174
+ {
175
+ display: '매입',
176
+ value: Category.IMPORT
177
+ }
178
+ ]
179
+ },
107
180
  width: 80
108
181
  },
109
182
  {
@@ -133,7 +206,8 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
133
206
  name: 'supplierBusinessRegistrationNumber',
134
207
  header: i18next.t('field.supplier business registration number'),
135
208
  record: {
136
- align: 'center'
209
+ align: 'center',
210
+ renderer: value => value.replace(/(\d{3})(\d{2})(\d{5})/g, '$1-$2-$3')
137
211
  },
138
212
  width: 150
139
213
  },
@@ -160,7 +234,7 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
160
234
  name: 'totalAmount',
161
235
  header: i18next.t('field.total amount'),
162
236
  record: {
163
- renderer: value => value && new Intl.NumberFormat('en-US').format(value),
237
+ renderer: value => value && this._numberFormat(value),
164
238
  align: 'center'
165
239
  },
166
240
  width: 90
@@ -170,7 +244,7 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
170
244
  name: 'supplyAmount',
171
245
  header: i18next.t('field.supply amount'),
172
246
  record: {
173
- renderer: value => value && new Intl.NumberFormat('en-US').format(value),
247
+ renderer: value => value && this._numberFormat(value),
174
248
  align: 'center'
175
249
  },
176
250
  width: 90
@@ -180,7 +254,7 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
180
254
  name: 'taxAmount',
181
255
  header: i18next.t('field.tax amount'),
182
256
  record: {
183
- renderer: value => value && new Intl.NumberFormat('en-US').format(value),
257
+ renderer: value => value && this._numberFormat(value),
184
258
  align: 'center'
185
259
  },
186
260
  width: 90
@@ -190,7 +264,8 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
190
264
  name: 'approvalNo',
191
265
  header: i18next.t('field.approval no'),
192
266
  record: {
193
- align: 'center'
267
+ align: 'center',
268
+ renderer: value => value.replace(/(\S{8})(\S{8})(\S{8})/g, '$1-$2-$3')
194
269
  },
195
270
  width: 200
196
271
  },
@@ -272,11 +347,11 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
272
347
  async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }) {
273
348
  const response = await client.query({
274
349
  query: gql `
275
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
276
- responses: taxInvoices(filters: $filters, pagination: $pagination, sortings: $sortings) {
350
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!], $summaryFilters: [Filter!]) {
351
+ taxInvoices(filters: $filters, pagination: $pagination, sortings: $sortings) {
277
352
  items {
278
353
  id
279
- name
354
+ memo
280
355
  category
281
356
  issueDate
282
357
  signatureDate
@@ -301,47 +376,25 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
301
376
  }
302
377
  total
303
378
  }
379
+ taxInvoicesSummary(filters: $summaryFilters) {
380
+ summary
381
+ }
304
382
  }
305
383
  `,
306
384
  variables: {
307
385
  filters,
308
386
  pagination: { page, limit },
309
- sortings
387
+ sortings,
388
+ summaryFilters: filters
310
389
  }
311
390
  });
391
+ // 합계 필드 갱신
392
+ this.summary = response.data.taxInvoicesSummary.summary;
312
393
  return {
313
- total: response.data.responses.total || 0,
314
- records: response.data.responses.items || []
394
+ total: response.data.taxInvoices.total || 0,
395
+ records: response.data.taxInvoices.items || []
315
396
  };
316
397
  }
317
- async _deleteTaxInvoice() {
318
- if (await OxPrompt.open({
319
- title: i18next.t('text.are_you_sure'),
320
- text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
321
- confirmButton: { text: i18next.t('button.confirm') },
322
- cancelButton: { text: i18next.t('button.cancel') }
323
- })) {
324
- const ids = this.grist.selected.map(record => record.id);
325
- if (ids && ids.length > 0) {
326
- const response = await client.mutate({
327
- mutation: gql `
328
- mutation ($ids: [String!]!) {
329
- deleteTaxInvoices(ids: $ids)
330
- }
331
- `,
332
- variables: {
333
- ids
334
- }
335
- });
336
- if (!response.errors) {
337
- this.grist.fetch();
338
- notify({
339
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
340
- });
341
- }
342
- }
343
- }
344
- }
345
398
  async _updateTaxInvoice() {
346
399
  let patches = this.grist.dirtyRecords;
347
400
  if (patches && patches.length) {
@@ -375,79 +428,6 @@ let TaxInvoiceListPage = class TaxInvoiceListPage extends localize(i18next)(Scop
375
428
  }
376
429
  }
377
430
  }
378
- async createTaxInvoice(num) {
379
- const year = '2024';
380
- const month = '01';
381
- const day = '02';
382
- const firstWordOfNum = num.slice(0, 1);
383
- const firstWordOfNumNext = String(Number(num.slice(0, 1)) + 1).slice(0, 1);
384
- const supplyAmount = 1000000 * Number(firstWordOfNum);
385
- const taxAmount = supplyAmount / 10;
386
- const taxInvoice = {
387
- name: '설명' + num.repeat(3),
388
- category: 10,
389
- approvalNo: year + month + day + '-' + firstWordOfNum.repeat(8) + '-' + firstWordOfNum.repeat(8),
390
- issueDate: `${year}-${month}-${day}`,
391
- signatureDate: `${year}-${month}-${Number(day) + 1}`,
392
- invoiceType: '0101',
393
- purpose: '02',
394
- remark0: '비고' + num.repeat(3),
395
- supplierBusinessRegistrationCategory: '01',
396
- supplierBusinessRegistrationNumber: `${firstWordOfNum.repeat(3)}-${firstWordOfNum.repeat(2)}-${firstWordOfNum.repeat(5)}`,
397
- supplierBusinessName: '공급자 회사명' + firstWordOfNum.repeat(3),
398
- supplierRepresentativeName: '공급자 대표자' + firstWordOfNum.repeat(3),
399
- supplierAddress: '공급자 주소' + firstWordOfNum.repeat(3),
400
- supplierBusinessType: '공급자 업태' + firstWordOfNum.repeat(3),
401
- supplierIndustryType: '공급자 업종' + firstWordOfNum.repeat(3),
402
- supplierDepartment: '공급자 담당 부서' + firstWordOfNum.repeat(3),
403
- supplierContactName: '공급자 담당자명' + firstWordOfNum.repeat(3),
404
- supplierContactPhone: `010-${firstWordOfNum.repeat(4)}-${firstWordOfNum.repeat(4)}`,
405
- supplierContactEmail: '공급자 담당자 이메일' + firstWordOfNum.repeat(3),
406
- supplierContactCellPhone: '공급자 핸드폰 번호' + firstWordOfNum.repeat(3),
407
- buyerBusinessRegistrationCategory: '01',
408
- buyerBusinessRegistrationNumber: `${firstWordOfNumNext.repeat(3)}-${firstWordOfNumNext.repeat(2)}-${firstWordOfNumNext.repeat(5)}`,
409
- buyerBusinessName: '공급자 회사명' + firstWordOfNum.repeat(3),
410
- buyerRepresentativeName: '공급자 대표자' + firstWordOfNum.repeat(3),
411
- buyerAddress: '공급자 주소' + firstWordOfNum.repeat(3),
412
- buyerBusinessType: '공급자 업태' + firstWordOfNum.repeat(3),
413
- buyerIndustryType: '공급자 업종' + firstWordOfNum.repeat(3),
414
- buyer1stDepartment: '공급자 담당 부서 1st' + firstWordOfNum.repeat(3),
415
- buyer1stContactName: '공급자 담당자명 1st' + firstWordOfNum.repeat(3),
416
- buyer1stContactPhone: `011-${firstWordOfNumNext.repeat(4)}-${firstWordOfNumNext.repeat(4)}`,
417
- buyer1stContactEmail: '공급자 담당자 이메일 1st' + firstWordOfNum.repeat(3),
418
- buyer1stContactCellPhone: '공급자 핸드폰 번호 1st' + firstWordOfNum.repeat(3),
419
- buyer2ndDepartment: '공급자 담당 부서 2nd' + firstWordOfNum.repeat(3),
420
- buyer2ndContactName: '공급자 담당자명 2nd' + firstWordOfNum.repeat(3),
421
- buyer2ndContactPhone: `022-${firstWordOfNumNext.repeat(4)}-${firstWordOfNumNext.repeat(4)}`,
422
- buyer2ndContactEmail: '공급자 담당자 이메일 2nd' + firstWordOfNum.repeat(3),
423
- buyer2ndContactCellPhone: '공급자 핸드폰 번호 2nd' + firstWordOfNum.repeat(3),
424
- paymentAmountCash: 0,
425
- paymentAmountCheck: 0,
426
- paymentAmountPromissoryNote: 0,
427
- paymentAmountAccountsReceivable: 0,
428
- supplyAmount: supplyAmount,
429
- taxAmount: taxAmount,
430
- totalAmount: supplyAmount + taxAmount
431
- };
432
- const response = await client.mutate({
433
- mutation: gql `
434
- mutation CreateTaxInvoice($taxInvoice: NewTaxInvoice!) {
435
- createTaxInvoice(taxInvoice: $taxInvoice) {
436
- id
437
- }
438
- }
439
- `,
440
- variables: {
441
- taxInvoice
442
- }
443
- });
444
- if (!response.errors) {
445
- this.grist.fetch();
446
- notify({
447
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
448
- });
449
- }
450
- }
451
431
  async exportHandler() {
452
432
  const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records;
453
433
  const targetFieldSet = new Set(['id', 'name']);
@@ -473,12 +453,38 @@ TaxInvoiceListPage.styles = [
473
453
  css `
474
454
  :host {
475
455
  display: flex;
456
+ flex-direction: column;
476
457
 
477
458
  width: 100%;
478
459
 
479
460
  --grid-record-emphasized-background-color: red;
480
461
  --grid-record-emphasized-color: yellow;
481
462
  }
463
+
464
+ div.summary {
465
+ display: grid;
466
+ grid-template-columns: 0.7fr 1fr 0.7fr 1fr 0.7fr 1fr 0.7fr 1fr;
467
+ border: solid #d3dbe5;
468
+ border-width: 2px 0;
469
+ margin: 15px 40px;
470
+ align-content: center;
471
+
472
+ span.title {
473
+ background-color: #e9edf6;
474
+ text-align: center;
475
+ display: flex;
476
+ align-items: center;
477
+ justify-content: center;
478
+ height: 35px;
479
+ font-weight: bold;
480
+ }
481
+ span.value {
482
+ padding-left: 10px;
483
+ display: flex;
484
+ align-items: center;
485
+ height: 35px;
486
+ }
487
+ }
482
488
  `
483
489
  ];
484
490
  __decorate([
@@ -486,9 +492,9 @@ __decorate([
486
492
  __metadata("design:type", Object)
487
493
  ], TaxInvoiceListPage.prototype, "gristConfig", void 0);
488
494
  __decorate([
489
- property({ type: String }),
490
- __metadata("design:type", String)
491
- ], TaxInvoiceListPage.prototype, "mode", void 0);
495
+ state(),
496
+ __metadata("design:type", Object)
497
+ ], TaxInvoiceListPage.prototype, "summary", void 0);
492
498
  __decorate([
493
499
  query('ox-grist'),
494
500
  __metadata("design:type", DataGrist)
@@ -1 +1 @@
1
- {"version":3,"file":"tax-invoice-list-page.js","sourceRoot":"","sources":["../../../client/pages/tax-invoice/tax-invoice-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\n\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView, navigate, store } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { ColumnConfig, DataGrist, FetchOption, SortersControl } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { OxPopup, OxPrompt } from '@operato/popup'\nimport { isMobileDevice } from '@operato/utils'\nimport gql from 'graphql-tag'\n\nimport './tax-invoice-detail-popup'\n\nexport const CATEGORY = {\n '10': '매출',\n '20': '매입',\n '30': 'NTS'\n}\n\nexport const INVOICE_TYPE = {\n '0101': '일반 세금계산서',\n '0102': '영세율 세금계산서',\n '0103': '위수탁 세금계산서',\n '0105': '영세율 위수탁 세금계산서',\n '0201': '수정 일반 세금계산서',\n '0202': '수정 영세율 세금계산서',\n '0203': '수정 위수탁 세금계산서',\n '0204': '수정 수입 세금계산서',\n '0205': '수정 영세율 위수탁 세금계산서',\n '0301': '일반 계산서',\n '0303': '위수탁 계산서',\n '0304': '수입 계산서',\n '0401': '수정 일반 계산서',\n '0403': '수정 위수탁 계산서',\n '0404': '정 수입 계산서'\n}\n\nexport const PURPOSE = {\n '01': '영수',\n '02': '청구'\n}\n\n@customElement('tax-invoice-list-page')\nexport class TaxInvoiceListPage extends localize(i18next)(ScopedElementsMixin(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n `\n ]\n\n @property({ type: Object }) gristConfig: any\n @property({ type: String }) mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('title.tax invoice list'),\n help: 'tax-invoice/tax-invoice',\n actions: [\n {\n title: i18next.t('button.delete'),\n action: this._deleteTaxInvoice.bind(this),\n ...CommonButtonStyles.delete\n }\n ],\n exportable: {\n name: i18next.t('title.tax invoice list'),\n data: this.exportHandler.bind(this),\n accept: ['xlsx']\n }\n }\n }\n\n render() {\n const mode = 'GRID'\n\n return html`\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\">\n <div id=\"filters\">\n <ox-filters-form autofocus></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n // <button @click=${() => this.createTaxInvoice('3')}>생성</button>\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'reorder',\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this.openDetailPopup(record.id)\n }\n }\n },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n record: {\n editable: true\n },\n filter: 'search',\n width: 150\n },\n {\n type: 'string',\n name: 'category',\n header: i18next.t('field.tax invoice category'),\n record: {\n renderer: value => CATEGORY[value],\n align: 'center'\n },\n width: 80\n },\n {\n type: 'date',\n name: 'issueDate',\n header: i18next.t('field.issue date'),\n record: {\n align: 'center'\n },\n filter: {\n type: 'date',\n operator: 'between'\n },\n width: 120\n },\n {\n type: 'date',\n name: 'signatureDate',\n header: i18next.t('field.signature date'),\n record: {\n align: 'center'\n },\n width: 120\n },\n {\n type: 'string',\n name: 'supplierBusinessRegistrationNumber',\n header: i18next.t('field.supplier business registration number'),\n record: {\n align: 'center'\n },\n width: 150\n },\n {\n type: 'string',\n name: 'supplierBusinessName',\n header: i18next.t('field.supplier business name'),\n record: {\n align: 'center'\n },\n width: 140\n },\n {\n type: 'string',\n name: 'supplierRepresentativeName',\n header: i18next.t('field.supplier representative name'),\n record: {\n align: 'center'\n },\n width: 120\n },\n {\n type: 'number',\n name: 'totalAmount',\n header: i18next.t('field.total amount'),\n record: {\n renderer: value => value && new Intl.NumberFormat('en-US').format(value),\n align: 'center'\n },\n width: 90\n },\n {\n type: 'number',\n name: 'supplyAmount',\n header: i18next.t('field.supply amount'),\n record: {\n renderer: value => value && new Intl.NumberFormat('en-US').format(value),\n align: 'center'\n },\n width: 90\n },\n {\n type: 'number',\n name: 'taxAmount',\n header: i18next.t('field.tax amount'),\n record: {\n renderer: value => value && new Intl.NumberFormat('en-US').format(value),\n align: 'center'\n },\n width: 90\n },\n {\n type: 'string',\n name: 'approvalNo',\n header: i18next.t('field.approval no'),\n record: {\n align: 'center'\n },\n width: 200\n },\n {\n type: 'string',\n name: 'invoiceType',\n header: i18next.t('field.invoice type'),\n record: {\n renderer: value => INVOICE_TYPE[value],\n align: 'center'\n },\n width: 130\n },\n {\n type: 'string',\n name: 'remark0',\n header: i18next.t('field.remark0'),\n record: {\n align: 'center'\n },\n width: 80\n },\n {\n type: 'string',\n name: 'purpose',\n header: i18next.t('field.purpose'),\n record: {\n renderer: value => PURPOSE[value],\n align: 'center'\n },\n width: 80\n },\n {\n type: 'string',\n name: 'supplierContactEmail',\n header: i18next.t('field.supplier contact email'),\n record: {\n align: 'center'\n },\n width: 140\n },\n {\n type: 'string',\n name: 'buyer1stContactEmail',\n header: i18next.t('field.buyer 1st contact email'),\n record: {\n align: 'center'\n },\n width: 140\n },\n {\n type: 'string',\n name: 'buyer2ndContactEmail',\n header: i18next.t('field.buyer 2nd contact email'),\n record: {\n align: 'center'\n },\n width: 140\n }\n ],\n rows: {\n selectable: {\n multiple: true\n },\n appendable: false\n },\n sorters: [\n {\n name: 'issueDate'\n }\n ]\n }\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n // do something here when this page just became as active\n }\n }\n\n async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: taxInvoices(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n category\n issueDate\n signatureDate\n supplierBusinessRegistrationNumber\n supplierBusinessName\n supplierRepresentativeName\n totalAmount\n supplyAmount\n taxAmount\n approvalNo\n invoiceType\n remark0\n purpose\n supplierContactEmail\n buyer1stContactEmail\n buyer2ndContactEmail\n updater {\n id\n name\n }\n updatedAt\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n\n async _deleteTaxInvoice() {\n if (\n await OxPrompt.open({\n title: i18next.t('text.are_you_sure'),\n text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const ids = this.grist.selected.map(record => record.id)\n if (ids && ids.length > 0) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteTaxInvoices(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({\n message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })\n })\n }\n }\n }\n }\n\n async _updateTaxInvoice() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(patch => {\n let patchField: any = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($patches: [TaxInvoicePatch!]!) {\n updateMultipleTaxInvoice(patches: $patches) {\n id\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.save') }) })\n } else {\n notify({ message: i18next.t('error.fail-save'), level: 'error' })\n }\n }\n }\n\n async createTaxInvoice(num: string) {\n const year = '2024'\n const month = '01'\n const day = '02'\n const firstWordOfNum = num.slice(0, 1)\n const firstWordOfNumNext = String(Number(num.slice(0, 1)) + 1).slice(0, 1)\n const supplyAmount = 1000000 * Number(firstWordOfNum)\n const taxAmount = supplyAmount / 10\n\n const taxInvoice = {\n name: '설명' + num.repeat(3),\n category: 10,\n approvalNo: year + month + day + '-' + firstWordOfNum.repeat(8) + '-' + firstWordOfNum.repeat(8),\n issueDate: `${year}-${month}-${day}`,\n signatureDate: `${year}-${month}-${Number(day) + 1}`,\n invoiceType: '0101',\n purpose: '02',\n remark0: '비고' + num.repeat(3),\n supplierBusinessRegistrationCategory: '01',\n supplierBusinessRegistrationNumber: `${firstWordOfNum.repeat(3)}-${firstWordOfNum.repeat(2)}-${firstWordOfNum.repeat(5)}`,\n supplierBusinessName: '공급자 회사명' + firstWordOfNum.repeat(3),\n supplierRepresentativeName: '공급자 대표자' + firstWordOfNum.repeat(3),\n supplierAddress: '공급자 주소' + firstWordOfNum.repeat(3),\n supplierBusinessType: '공급자 업태' + firstWordOfNum.repeat(3),\n supplierIndustryType: '공급자 업종' + firstWordOfNum.repeat(3),\n supplierDepartment: '공급자 담당 부서' + firstWordOfNum.repeat(3),\n supplierContactName: '공급자 담당자명' + firstWordOfNum.repeat(3),\n supplierContactPhone: `010-${firstWordOfNum.repeat(4)}-${firstWordOfNum.repeat(4)}`,\n supplierContactEmail: '공급자 담당자 이메일' + firstWordOfNum.repeat(3),\n supplierContactCellPhone: '공급자 핸드폰 번호' + firstWordOfNum.repeat(3),\n\n buyerBusinessRegistrationCategory: '01',\n buyerBusinessRegistrationNumber: `${firstWordOfNumNext.repeat(3)}-${firstWordOfNumNext.repeat(2)}-${firstWordOfNumNext.repeat(5)}`,\n buyerBusinessName: '공급자 회사명' + firstWordOfNum.repeat(3),\n buyerRepresentativeName: '공급자 대표자' + firstWordOfNum.repeat(3),\n buyerAddress: '공급자 주소' + firstWordOfNum.repeat(3),\n buyerBusinessType: '공급자 업태' + firstWordOfNum.repeat(3),\n buyerIndustryType: '공급자 업종' + firstWordOfNum.repeat(3),\n buyer1stDepartment: '공급자 담당 부서 1st' + firstWordOfNum.repeat(3),\n buyer1stContactName: '공급자 담당자명 1st' + firstWordOfNum.repeat(3),\n buyer1stContactPhone: `011-${firstWordOfNumNext.repeat(4)}-${firstWordOfNumNext.repeat(4)}`,\n buyer1stContactEmail: '공급자 담당자 이메일 1st' + firstWordOfNum.repeat(3),\n buyer1stContactCellPhone: '공급자 핸드폰 번호 1st' + firstWordOfNum.repeat(3),\n buyer2ndDepartment: '공급자 담당 부서 2nd' + firstWordOfNum.repeat(3),\n buyer2ndContactName: '공급자 담당자명 2nd' + firstWordOfNum.repeat(3),\n buyer2ndContactPhone: `022-${firstWordOfNumNext.repeat(4)}-${firstWordOfNumNext.repeat(4)}`,\n buyer2ndContactEmail: '공급자 담당자 이메일 2nd' + firstWordOfNum.repeat(3),\n buyer2ndContactCellPhone: '공급자 핸드폰 번호 2nd' + firstWordOfNum.repeat(3),\n\n paymentAmountCash: 0,\n paymentAmountCheck: 0,\n paymentAmountPromissoryNote: 0,\n paymentAmountAccountsReceivable: 0,\n supplyAmount: supplyAmount,\n taxAmount: taxAmount,\n totalAmount: supplyAmount + taxAmount\n }\n const response = await client.mutate({\n mutation: gql`\n mutation CreateTaxInvoice($taxInvoice: NewTaxInvoice!) {\n createTaxInvoice(taxInvoice: $taxInvoice) {\n id\n }\n }\n `,\n variables: {\n taxInvoice\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({\n message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })\n })\n }\n }\n\n async exportHandler() {\n const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records\n const targetFieldSet = new Set(['id', 'name'])\n\n return exportTargets.map(taxInvoice => {\n let tempObj = {}\n for (const field of targetFieldSet) {\n tempObj[field] = taxInvoice[field]\n }\n\n return tempObj\n })\n }\n\n private openDetailPopup(id: string) {\n openPopup(html` <tax-invoice-detail-popup .taxInvoiceId=${id}> </tax-invoice-detail-popup>`, {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.tax invoice detail')\n })\n }\n}\n"]}
1
+ {"version":3,"file":"tax-invoice-list-page.js","sourceRoot":"","sources":["../../../client/pages/tax-invoice/tax-invoice-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\n\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, state, query } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { OxPrompt } from '@operato/popup'\nimport { isMobileDevice } from '@operato/utils'\nimport gql from 'graphql-tag'\n\nimport './tax-invoice-detail-popup'\n\nexport enum Category {\n EXPORT = '10',\n IMPORT = '20',\n NTS = '30'\n}\nexport const CATEGORY = {\n [Category.EXPORT]: '매출',\n [Category.IMPORT]: '매입',\n [Category.NTS]: 'NTS'\n}\n\nexport enum InvoiceType {\n 'TAX_INVOICE' = '0101',\n 'SMALL_BUSINESS_TAX_INVOICE' = '0102',\n 'CONSIGNMENT_TAX_INVOICE' = '0103',\n 'SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE' = '0105',\n 'REVISED_TAX_INVOICE' = '0201',\n 'REVISED_SMALL_BUSINESS_TAX_INVOICE' = '0202',\n 'REVISED_CONSIGNMENT_TAX_INVOICE' = '0203',\n 'REVISED_IMPORT_TAX_INVOICE' = '0204',\n 'REVISED_SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE' = '0205',\n 'INVOICE' = '0301',\n 'CONSIGNMENT_INVOICE' = '0303',\n 'IMPORT_INVOICE' = '0304',\n 'REVISED_INVOICE' = '0401',\n 'REVISED_CONSIGNMENT_INVOICE' = '0403',\n 'REVISED_IMPORT_INVOICE' = '0404'\n}\nexport const INVOICE_TYPE = {\n [InvoiceType.TAX_INVOICE]: '일반 전자세금계산서',\n [InvoiceType.SMALL_BUSINESS_TAX_INVOICE]: '영세율 전자세금계산서',\n [InvoiceType.CONSIGNMENT_TAX_INVOICE]: '위수탁 전자세금계산서',\n [InvoiceType.SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE]: '영세율 위수탁 전자세금계산서',\n [InvoiceType.REVISED_TAX_INVOICE]: '수정 일반 전자세금계산서',\n [InvoiceType.REVISED_SMALL_BUSINESS_TAX_INVOICE]: '수정 영세율 전자세금계산서',\n [InvoiceType.REVISED_CONSIGNMENT_TAX_INVOICE]: '수정 위수탁 전자세금계산서',\n [InvoiceType.REVISED_IMPORT_TAX_INVOICE]: '수정 수입 전자세금계산서',\n [InvoiceType.REVISED_SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE]: '수정 영세율 위수탁 전자세금계산서',\n [InvoiceType.INVOICE]: '일반 전자계산서',\n [InvoiceType.CONSIGNMENT_INVOICE]: '위수탁 전자계산서',\n [InvoiceType.IMPORT_INVOICE]: '수입 전자계산서',\n [InvoiceType.REVISED_INVOICE]: '수정 일반 전자계산서',\n [InvoiceType.REVISED_CONSIGNMENT_INVOICE]: '수정 위수탁 전자계산서',\n [InvoiceType.REVISED_IMPORT_INVOICE]: '수정 수입 전자계산서'\n}\n\nexport enum Purpose {\n RECEIPT = '01',\n INVOICE = '02'\n}\nexport const PURPOSE = {\n [Purpose.RECEIPT]: '영수',\n [Purpose.INVOICE]: '청구'\n}\n\nexport enum BusinessRegistrationCategory {\n BUSINESS_REGISTRATION_NUMBER = '01', // 사업자등록번호\n RESIDENT_REGISTRATION_NUMBER = '02', // 주민등록번호\n FOREIGNER_REGISTRATION_NUMBER = '03' // 외국인등록번호\n}\nexport const BUSINESS_REGISTRATION_CATEGORY = {\n [BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER]: '사업자등록번호',\n [BusinessRegistrationCategory.RESIDENT_REGISTRATION_NUMBER]: '주민등록번호',\n [BusinessRegistrationCategory.FOREIGNER_REGISTRATION_NUMBER]: '외국인'\n}\n\n@customElement('tax-invoice-list-page')\nexport class TaxInvoiceListPage extends localize(i18next)(ScopedElementsMixin(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n div.summary {\n display: grid;\n grid-template-columns: 0.7fr 1fr 0.7fr 1fr 0.7fr 1fr 0.7fr 1fr;\n border: solid #d3dbe5;\n border-width: 2px 0;\n margin: 15px 40px;\n align-content: center;\n\n span.title {\n background-color: #e9edf6;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 35px;\n font-weight: bold;\n }\n span.value {\n padding-left: 10px;\n display: flex;\n align-items: center;\n height: 35px;\n }\n }\n `\n ]\n\n @property({ type: Object }) gristConfig: any\n @state() summary: { cnt: number; total_amount: number; supply_amount: number; tax_amount: number } | null = null\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('title.tax invoice list'),\n help: 'tax-invoice/tax-invoice',\n actions: [\n {\n title: i18next.t('button.memo save'),\n action: this._updateTaxInvoice.bind(this),\n ...CommonButtonStyles.save\n }\n ],\n exportable: {\n name: i18next.t('title.tax invoice list'),\n data: this.exportHandler.bind(this),\n accept: ['xlsx']\n }\n }\n }\n\n render() {\n const mode = 'GRID'\n const summary = this.summary\n\n return html`\n <div class=\"summary\">\n <span class=\"title\">${i18next.t('field.summary total count')}</span>\n <span class=\"value\">${this._numberFormat(summary?.cnt)}</span>\n <span class=\"title\">${i18next.t('field.summary total amount')}</span>\n <span class=\"value\">${this._numberFormat(summary?.total_amount)}</span>\n <span class=\"title\">${i18next.t('field.summary supply amount')}</span>\n <span class=\"value\">${this._numberFormat(summary?.supply_amount)}</span>\n <span class=\"title\">${i18next.t('field.summary tax amount')}</span>\n <span class=\"value\">${this._numberFormat(summary?.tax_amount)}</span>\n </div>\n\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\">\n <div id=\"filters\">\n <ox-filters-form autofocus></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'reorder',\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this.openDetailPopup(record.id)\n }\n }\n },\n {\n type: 'string',\n name: 'memo',\n header: i18next.t('field.memo'),\n record: {\n editable: true\n },\n filter: 'search',\n width: 150\n },\n {\n type: 'string',\n name: 'category',\n header: i18next.t('field.tax invoice category'),\n record: {\n renderer: value => CATEGORY[value],\n classifier: function (record, rowIndex) {\n return {\n emphasized: record.category === Category.EXPORT ? ['#c6daf6', 'black'] : ['#fedbde', 'black']\n }\n },\n align: 'center'\n },\n filter: {\n type: 'select',\n value: Category.EXPORT,\n options: () => [\n {\n display: '전체',\n value: ''\n },\n {\n display: '매출',\n value: Category.EXPORT\n },\n {\n display: '매입',\n value: Category.IMPORT\n }\n ]\n },\n width: 80\n },\n {\n type: 'date',\n name: 'issueDate',\n header: i18next.t('field.issue date'),\n record: {\n align: 'center'\n },\n filter: {\n type: 'date',\n operator: 'between'\n },\n width: 120\n },\n {\n type: 'date',\n name: 'signatureDate',\n header: i18next.t('field.signature date'),\n record: {\n align: 'center'\n },\n width: 120\n },\n {\n type: 'string',\n name: 'supplierBusinessRegistrationNumber',\n header: i18next.t('field.supplier business registration number'),\n record: {\n align: 'center',\n renderer: value => value.replace(/(\\d{3})(\\d{2})(\\d{5})/g, '$1-$2-$3')\n },\n width: 150\n },\n {\n type: 'string',\n name: 'supplierBusinessName',\n header: i18next.t('field.supplier business name'),\n record: {\n align: 'center'\n },\n width: 140\n },\n {\n type: 'string',\n name: 'supplierRepresentativeName',\n header: i18next.t('field.supplier representative name'),\n record: {\n align: 'center'\n },\n width: 120\n },\n {\n type: 'number',\n name: 'totalAmount',\n header: i18next.t('field.total amount'),\n record: {\n renderer: value => value && this._numberFormat(value),\n align: 'center'\n },\n width: 90\n },\n {\n type: 'number',\n name: 'supplyAmount',\n header: i18next.t('field.supply amount'),\n record: {\n renderer: value => value && this._numberFormat(value),\n align: 'center'\n },\n width: 90\n },\n {\n type: 'number',\n name: 'taxAmount',\n header: i18next.t('field.tax amount'),\n record: {\n renderer: value => value && this._numberFormat(value),\n align: 'center'\n },\n width: 90\n },\n {\n type: 'string',\n name: 'approvalNo',\n header: i18next.t('field.approval no'),\n record: {\n align: 'center',\n renderer: value => value.replace(/(\\S{8})(\\S{8})(\\S{8})/g, '$1-$2-$3')\n },\n width: 200\n },\n {\n type: 'string',\n name: 'invoiceType',\n header: i18next.t('field.invoice type'),\n record: {\n renderer: value => INVOICE_TYPE[value],\n align: 'center'\n },\n width: 130\n },\n {\n type: 'string',\n name: 'remark0',\n header: i18next.t('field.remark0'),\n record: {\n align: 'center'\n },\n width: 80\n },\n {\n type: 'string',\n name: 'purpose',\n header: i18next.t('field.purpose'),\n record: {\n renderer: value => PURPOSE[value],\n align: 'center'\n },\n width: 80\n },\n {\n type: 'string',\n name: 'supplierContactEmail',\n header: i18next.t('field.supplier contact email'),\n record: {\n align: 'center'\n },\n width: 140\n },\n {\n type: 'string',\n name: 'buyer1stContactEmail',\n header: i18next.t('field.buyer 1st contact email'),\n record: {\n align: 'center'\n },\n width: 140\n },\n {\n type: 'string',\n name: 'buyer2ndContactEmail',\n header: i18next.t('field.buyer 2nd contact email'),\n record: {\n align: 'center'\n },\n width: 140\n }\n ],\n rows: {\n selectable: {\n multiple: true\n },\n appendable: false\n },\n sorters: [\n {\n name: 'issueDate'\n }\n ]\n }\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n // do something here when this page just became as active\n }\n }\n\n async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!], $summaryFilters: [Filter!]) {\n taxInvoices(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n memo\n category\n issueDate\n signatureDate\n supplierBusinessRegistrationNumber\n supplierBusinessName\n supplierRepresentativeName\n totalAmount\n supplyAmount\n taxAmount\n approvalNo\n invoiceType\n remark0\n purpose\n supplierContactEmail\n buyer1stContactEmail\n buyer2ndContactEmail\n updater {\n id\n name\n }\n updatedAt\n }\n total\n }\n taxInvoicesSummary(filters: $summaryFilters) {\n summary\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings,\n summaryFilters: filters\n }\n })\n\n // 합계 필드 갱신\n this.summary = response.data.taxInvoicesSummary.summary\n\n return {\n total: response.data.taxInvoices.total || 0,\n records: response.data.taxInvoices.items || []\n }\n }\n\n async _updateTaxInvoice() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(patch => {\n let patchField: any = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($patches: [TaxInvoicePatch!]!) {\n updateMultipleTaxInvoice(patches: $patches) {\n id\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.save') }) })\n } else {\n notify({ message: i18next.t('error.fail-save'), level: 'error' })\n }\n }\n }\n\n async exportHandler() {\n const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records\n const targetFieldSet = new Set(['id', 'name'])\n\n return exportTargets.map(taxInvoice => {\n let tempObj = {}\n for (const field of targetFieldSet) {\n tempObj[field] = taxInvoice[field]\n }\n\n return tempObj\n })\n }\n\n private openDetailPopup(id: string) {\n openPopup(html` <tax-invoice-detail-popup .taxInvoiceId=${id}> </tax-invoice-detail-popup>`, {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.tax invoice detail')\n })\n }\n\n private _numberFormat = (num: number | undefined) => Intl.NumberFormat('en-US').format(num || 0)\n}\n"]}
@@ -31,6 +31,6 @@ export declare class TaxInvoiceApiPage extends TaxInvoiceApiPage_base {
31
31
  }>;
32
32
  _deleteTaxInvoiceApi(): Promise<void>;
33
33
  _updateTaxInvoiceApi(): Promise<void>;
34
- getAttributeSetForDomain(): Promise<any>;
34
+ getAttributeSetForEntity(): Promise<any>;
35
35
  }
36
36
  export {};
@@ -118,7 +118,7 @@ let TaxInvoiceApiPage = class TaxInvoiceApiPage extends localize(i18next)(Scoped
118
118
  {
119
119
  type: 'string',
120
120
  name: 'businessName',
121
- header: i18next.t('field.business name'),
121
+ header: i18next.t('field.tax invoice business name'),
122
122
  record: {
123
123
  editable: true
124
124
  },
@@ -127,7 +127,7 @@ let TaxInvoiceApiPage = class TaxInvoiceApiPage extends localize(i18next)(Scoped
127
127
  {
128
128
  type: 'string',
129
129
  name: 'representativeName',
130
- header: i18next.t('field.representative name'),
130
+ header: i18next.t('field.tax invoice representative name'),
131
131
  record: {
132
132
  editable: true
133
133
  },
@@ -214,7 +214,7 @@ let TaxInvoiceApiPage = class TaxInvoiceApiPage extends localize(i18next)(Scoped
214
214
  options: async () => {
215
215
  return {
216
216
  objectified: true,
217
- attributeSet: await this.getAttributeSetForDomain()
217
+ attributeSet: await this.getAttributeSetForEntity()
218
218
  };
219
219
  }
220
220
  },
@@ -280,6 +280,7 @@ let TaxInvoiceApiPage = class TaxInvoiceApiPage extends localize(i18next)(Scoped
280
280
  contactPhone
281
281
  contactEmail
282
282
  contactCellPhone
283
+ attributes
283
284
  updater {
284
285
  id
285
286
  name
@@ -362,12 +363,12 @@ let TaxInvoiceApiPage = class TaxInvoiceApiPage extends localize(i18next)(Scoped
362
363
  }
363
364
  }
364
365
  }
365
- async getAttributeSetForDomain() {
366
+ async getAttributeSetForEntity() {
366
367
  var _a;
367
368
  const response = await client.query({
368
369
  query: gql `
369
370
  query {
370
- attributeSet: attributeSetByEntity(entity: "Domain") {
371
+ attributeSet: attributeSetByEntity(entity: "TaxInvoiceApi") {
371
372
  entity
372
373
  description
373
374
  items {