@things-factory/tax-invoice 6.2.143 → 6.2.145
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.
- package/client/pages/tax-invoice-send/tax-invoice-send-page.ts +34 -15
- package/dist-client/pages/tax-invoice-send/tax-invoice-send-page.d.ts +7 -3
- package/dist-client/pages/tax-invoice-send/tax-invoice-send-page.js +28 -13
- package/dist-client/pages/tax-invoice-send/tax-invoice-send-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/tax-invoice-api/tax-invoice-api-mutation.js +20 -1
- package/dist-server/service/tax-invoice-api/tax-invoice-api-mutation.js.map +1 -1
- package/dist-server/service/tax-invoice-item/tax-invoice-item.js +2 -2
- package/dist-server/service/tax-invoice-item/tax-invoice-item.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/server/service/tax-invoice-api/tax-invoice-api-mutation.ts +25 -3
- package/server/service/tax-invoice-item/tax-invoice-item.ts +2 -2
|
@@ -85,7 +85,7 @@ interface TaxInvoice {
|
|
|
85
85
|
paymentAmountPromissoryNote?: number
|
|
86
86
|
paymentAmountAccountsReceivable?: number
|
|
87
87
|
supplyAmount: number
|
|
88
|
-
taxAmount
|
|
88
|
+
taxAmount: number
|
|
89
89
|
totalAmount: number
|
|
90
90
|
// revisedReason?: RevisedReason
|
|
91
91
|
}
|
|
@@ -376,21 +376,26 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
376
376
|
|
|
377
377
|
// 오늘 날짜 YYYY-MM-DD 형식으로 뽑기
|
|
378
378
|
private today: string = new Intl.DateTimeFormat('fr-CA', { timeZone: 'Asia/Seoul' }).format(new Date())
|
|
379
|
+
private isTaxFree = false
|
|
379
380
|
|
|
380
|
-
|
|
381
|
+
private defaultSupplier = {
|
|
381
382
|
supplierBusinessRegistrationCategory: '01',
|
|
382
383
|
supplierBusinessRegistrationNumber: '',
|
|
383
384
|
supplierBranchIdentification: '',
|
|
384
385
|
supplierBusinessName: '',
|
|
385
386
|
supplierRepresentativeName: ''
|
|
386
387
|
}
|
|
387
|
-
@
|
|
388
|
+
@state() supplier: Supplier = this.defaultSupplier
|
|
389
|
+
|
|
390
|
+
private defaultBuyer = {
|
|
388
391
|
buyerBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,
|
|
389
392
|
buyerBusinessRegistrationNumber: '',
|
|
390
393
|
buyerBusinessName: '',
|
|
391
394
|
buyerRepresentativeName: ''
|
|
392
395
|
}
|
|
393
|
-
@property({ type: Object })
|
|
396
|
+
@property({ type: Object }) buyer: Buyer = this.defaultBuyer
|
|
397
|
+
|
|
398
|
+
private defaultTaxInvoice = {
|
|
394
399
|
invoiceType: InvoiceType.TAX_INVOICE,
|
|
395
400
|
category: Category.EXPORT,
|
|
396
401
|
issueDate: this.today,
|
|
@@ -399,6 +404,7 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
399
404
|
taxAmount: 0,
|
|
400
405
|
totalAmount: 0
|
|
401
406
|
}
|
|
407
|
+
@property({ type: Object }) taxInvoice: TaxInvoice = this.defaultTaxInvoice
|
|
402
408
|
|
|
403
409
|
private defaultTaxInvoiceItem = {
|
|
404
410
|
sequence: new Date().getTime(), // 구분용 임시 값 (중복되면 안되니 생성 마다 넣어주기)
|
|
@@ -621,10 +627,8 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
621
627
|
<th>${i18next.t('field.delete')}</th>
|
|
622
628
|
</tr>
|
|
623
629
|
|
|
624
|
-
${this.taxInvoiceItems.map(
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
return html`
|
|
630
|
+
${this.taxInvoiceItems.map(
|
|
631
|
+
(item, idx) => html`
|
|
628
632
|
<tr>
|
|
629
633
|
<input type="hidden" name="sequence" value=${item.sequence} />
|
|
630
634
|
<td>${this.taxInvoice.issueDate.split('-')[1]}</td>
|
|
@@ -641,14 +645,14 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
641
645
|
name="taxPrice"
|
|
642
646
|
.value=${this._numberFormat(item.taxPrice)}
|
|
643
647
|
@input=${e => this._onInputItem(e, idx)}
|
|
644
|
-
.disabled=${
|
|
648
|
+
.disabled=${this.isTaxFree}
|
|
645
649
|
/>
|
|
646
650
|
</td>
|
|
647
651
|
<td><input type="text" name="remark" .value=${item.remark || ''} @input=${e => this._onInputItem(e, idx)} /></td>
|
|
648
652
|
<td><button class="btn-delete" @click=${e => this._onRemoveInvoiceItem(e, item.sequence)}>삭제</button></td>
|
|
649
653
|
</tr>
|
|
650
654
|
`
|
|
651
|
-
|
|
655
|
+
)}
|
|
652
656
|
</table>
|
|
653
657
|
</div>
|
|
654
658
|
|
|
@@ -758,7 +762,7 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
758
762
|
}
|
|
759
763
|
}
|
|
760
764
|
|
|
761
|
-
async _sendTaxInvoice(
|
|
765
|
+
async _sendTaxInvoice() {
|
|
762
766
|
// 아이템 시퀀스 재 할당 + 날짜, 품목, 규격, 수량이 없으면 필터
|
|
763
767
|
let taxInvoiceItems = this.taxInvoiceItems.map((item, idx) => ({ ...item, sequence: idx + 1, quantity: Number(item.quantity), unitPrice: Number(item.unitPrice) }))
|
|
764
768
|
taxInvoiceItems = taxInvoiceItems.filter(item => item.supplyDate && item.itemName && item.quantity && item.unitPrice)
|
|
@@ -771,6 +775,8 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
771
775
|
taxInvoice.paymentAmountAccountsReceivable = Number(taxInvoice.paymentAmountAccountsReceivable || 0)
|
|
772
776
|
taxInvoice.supplyAmount = Number(taxInvoice.supplyAmount || 0)
|
|
773
777
|
taxInvoice.taxAmount = Number(taxInvoice.taxAmount || 0)
|
|
778
|
+
taxInvoice.buyerBusinessRegistrationNumber = taxInvoice.buyerBusinessRegistrationNumber.replace(/-/gi, '')
|
|
779
|
+
taxInvoice.supplierBusinessRegistrationNumber = taxInvoice.supplierBusinessRegistrationNumber.replace(/-/gi, '')
|
|
774
780
|
|
|
775
781
|
// 공급받는자 필수 값 체크
|
|
776
782
|
if (!this.buyer.buyerBusinessRegistrationNumber || !this.buyer.buyerBusinessName || !this.buyer.buyerRepresentativeName) {
|
|
@@ -784,6 +790,12 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
784
790
|
return
|
|
785
791
|
}
|
|
786
792
|
|
|
793
|
+
// 세금이 없는 타입인데 세금이 있는지 체크
|
|
794
|
+
if (taxInvoice.invoiceType === InvoiceType.SMALL_BUSINESS_TAX_INVOICE && taxInvoice.taxAmount > 0) {
|
|
795
|
+
alert('세금이 0원이 아닙니다.')
|
|
796
|
+
return
|
|
797
|
+
}
|
|
798
|
+
|
|
787
799
|
// 현금, 수표, 어음, 외상미수금의 합계 = 총 합계금액 체크
|
|
788
800
|
const paymentAmount: number =
|
|
789
801
|
taxInvoice.paymentAmountCash + taxInvoice.paymentAmountCheck + taxInvoice.paymentAmountPromissoryNote + taxInvoice.paymentAmountAccountsReceivable
|
|
@@ -810,10 +822,14 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
810
822
|
|
|
811
823
|
if (!response.errors) {
|
|
812
824
|
notify({ message: i18next.t('text.success tax send') })
|
|
825
|
+
this.taxInvoice = this.defaultTaxInvoice
|
|
826
|
+
this.supplier = this.defaultSupplier
|
|
827
|
+
this.buyer = this.defaultBuyer
|
|
828
|
+
this.taxInvoiceItems = []
|
|
813
829
|
}
|
|
814
830
|
}
|
|
815
831
|
|
|
816
|
-
private _numberFormat(value: number
|
|
832
|
+
private _numberFormat(value: number): string {
|
|
817
833
|
return !value ? '' : new Intl.NumberFormat('en-US').format(value) || ''
|
|
818
834
|
}
|
|
819
835
|
|
|
@@ -840,6 +856,8 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
840
856
|
|
|
841
857
|
// 세금이 없는 영세율이 선택 시 모든 아이템의 세금 0원으로 초기화
|
|
842
858
|
if (target.name === 'invoiceType' && target.value === InvoiceType.SMALL_BUSINESS_TAX_INVOICE) {
|
|
859
|
+
this.isTaxFree = true
|
|
860
|
+
this.taxInvoice = { ...this.taxInvoice, taxAmount: 0 }
|
|
843
861
|
this.taxInvoiceItems = this.taxInvoiceItems.map(item => ({ ...item, taxPrice: 0 }))
|
|
844
862
|
}
|
|
845
863
|
|
|
@@ -874,7 +892,7 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
874
892
|
if (target.name == 'quantity' || target.name == 'unitPrice') {
|
|
875
893
|
const supplyPrice = target.name == 'quantity' ? Number(inputVal) * this.taxInvoiceItems[idx]['unitPrice'] : Number(inputVal) * this.taxInvoiceItems[idx]['quantity']
|
|
876
894
|
this.taxInvoiceItems[idx]['supplyPrice'] = supplyPrice
|
|
877
|
-
this.taxInvoiceItems[idx]['taxPrice'] = Math.floor(supplyPrice / 10)
|
|
895
|
+
this.taxInvoiceItems[idx]['taxPrice'] = this.isTaxFree ? 0 : Math.floor(supplyPrice / 10)
|
|
878
896
|
}
|
|
879
897
|
|
|
880
898
|
// 인풋에 값 넣기
|
|
@@ -1025,8 +1043,9 @@ export class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(Pa
|
|
|
1025
1043
|
|
|
1026
1044
|
private _setTaxInvoiceSummaryCalc() {
|
|
1027
1045
|
const supplyPrice: number = this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.supplyPrice), 0) || 0
|
|
1028
|
-
const taxPrice: number = this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.taxPrice), 0) || 0
|
|
1046
|
+
const taxPrice: number = this.isTaxFree ? 0 : this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.taxPrice), 0) || 0
|
|
1047
|
+
const totalAmount: number = supplyPrice + taxPrice
|
|
1029
1048
|
|
|
1030
|
-
this.taxInvoice = { ...this.taxInvoice, supplyAmount: supplyPrice, taxAmount: taxPrice, totalAmount:
|
|
1049
|
+
this.taxInvoice = { ...this.taxInvoice, supplyAmount: supplyPrice, taxAmount: taxPrice, totalAmount: totalAmount }
|
|
1031
1050
|
}
|
|
1032
1051
|
}
|
|
@@ -54,7 +54,7 @@ interface TaxInvoice {
|
|
|
54
54
|
paymentAmountPromissoryNote?: number;
|
|
55
55
|
paymentAmountAccountsReceivable?: number;
|
|
56
56
|
supplyAmount: number;
|
|
57
|
-
taxAmount
|
|
57
|
+
taxAmount: number;
|
|
58
58
|
totalAmount: number;
|
|
59
59
|
}
|
|
60
60
|
interface TaxInvoiceItem {
|
|
@@ -75,8 +75,12 @@ export declare class TaxInvoiceSendPage extends TaxInvoiceSendPage_base {
|
|
|
75
75
|
'company-list-popup': typeof CompanyListPopup;
|
|
76
76
|
};
|
|
77
77
|
private today;
|
|
78
|
+
private isTaxFree;
|
|
79
|
+
private defaultSupplier;
|
|
78
80
|
supplier: Supplier;
|
|
81
|
+
private defaultBuyer;
|
|
79
82
|
buyer: Buyer;
|
|
83
|
+
private defaultTaxInvoice;
|
|
80
84
|
taxInvoice: TaxInvoice;
|
|
81
85
|
private defaultTaxInvoiceItem;
|
|
82
86
|
taxInvoiceItems: TaxInvoiceItem[];
|
|
@@ -92,14 +96,14 @@ export declare class TaxInvoiceSendPage extends TaxInvoiceSendPage_base {
|
|
|
92
96
|
danger: boolean;
|
|
93
97
|
};
|
|
94
98
|
title: string;
|
|
95
|
-
action: (
|
|
99
|
+
action: () => Promise<void>;
|
|
96
100
|
}[];
|
|
97
101
|
};
|
|
98
102
|
render(): import("lit-html").TemplateResult<1>;
|
|
99
103
|
pageInitialized(lifecycle: any): Promise<void>;
|
|
100
104
|
_fetchSupplier(): Promise<void>;
|
|
101
105
|
pageUpdated(changes: any, lifecycle: any): Promise<void>;
|
|
102
|
-
_sendTaxInvoice(
|
|
106
|
+
_sendTaxInvoice(): Promise<void>;
|
|
103
107
|
private _numberFormat;
|
|
104
108
|
private _onInputTaxInvoice;
|
|
105
109
|
private _onInputItem;
|
|
@@ -35,20 +35,23 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
35
35
|
super(...arguments);
|
|
36
36
|
// 오늘 날짜 YYYY-MM-DD 형식으로 뽑기
|
|
37
37
|
this.today = new Intl.DateTimeFormat('fr-CA', { timeZone: 'Asia/Seoul' }).format(new Date());
|
|
38
|
-
this.
|
|
38
|
+
this.isTaxFree = false;
|
|
39
|
+
this.defaultSupplier = {
|
|
39
40
|
supplierBusinessRegistrationCategory: '01',
|
|
40
41
|
supplierBusinessRegistrationNumber: '',
|
|
41
42
|
supplierBranchIdentification: '',
|
|
42
43
|
supplierBusinessName: '',
|
|
43
44
|
supplierRepresentativeName: ''
|
|
44
45
|
};
|
|
45
|
-
this.
|
|
46
|
+
this.supplier = this.defaultSupplier;
|
|
47
|
+
this.defaultBuyer = {
|
|
46
48
|
buyerBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,
|
|
47
49
|
buyerBusinessRegistrationNumber: '',
|
|
48
50
|
buyerBusinessName: '',
|
|
49
51
|
buyerRepresentativeName: ''
|
|
50
52
|
};
|
|
51
|
-
this.
|
|
53
|
+
this.buyer = this.defaultBuyer;
|
|
54
|
+
this.defaultTaxInvoice = {
|
|
52
55
|
invoiceType: InvoiceType.TAX_INVOICE,
|
|
53
56
|
category: Category.EXPORT,
|
|
54
57
|
issueDate: this.today,
|
|
@@ -57,6 +60,7 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
57
60
|
taxAmount: 0,
|
|
58
61
|
totalAmount: 0
|
|
59
62
|
};
|
|
63
|
+
this.taxInvoice = this.defaultTaxInvoice;
|
|
60
64
|
this.defaultTaxInvoiceItem = {
|
|
61
65
|
sequence: new Date().getTime(),
|
|
62
66
|
supplyDate: '',
|
|
@@ -279,9 +283,7 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
279
283
|
<th>${i18next.t('field.delete')}</th>
|
|
280
284
|
</tr>
|
|
281
285
|
|
|
282
|
-
${this.taxInvoiceItems.map((item, idx) =>
|
|
283
|
-
const taxDisabled = this.taxInvoice.invoiceType === InvoiceType.SMALL_BUSINESS_TAX_INVOICE;
|
|
284
|
-
return html `
|
|
286
|
+
${this.taxInvoiceItems.map((item, idx) => html `
|
|
285
287
|
<tr>
|
|
286
288
|
<input type="hidden" name="sequence" value=${item.sequence} />
|
|
287
289
|
<td>${this.taxInvoice.issueDate.split('-')[1]}</td>
|
|
@@ -298,14 +300,13 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
298
300
|
name="taxPrice"
|
|
299
301
|
.value=${this._numberFormat(item.taxPrice)}
|
|
300
302
|
@input=${e => this._onInputItem(e, idx)}
|
|
301
|
-
.disabled=${
|
|
303
|
+
.disabled=${this.isTaxFree}
|
|
302
304
|
/>
|
|
303
305
|
</td>
|
|
304
306
|
<td><input type="text" name="remark" .value=${item.remark || ''} @input=${e => this._onInputItem(e, idx)} /></td>
|
|
305
307
|
<td><button class="btn-delete" @click=${e => this._onRemoveInvoiceItem(e, item.sequence)}>삭제</button></td>
|
|
306
308
|
</tr>
|
|
307
|
-
|
|
308
|
-
})}
|
|
309
|
+
`)}
|
|
309
310
|
</table>
|
|
310
311
|
</div>
|
|
311
312
|
|
|
@@ -410,7 +411,7 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
410
411
|
// do something here when this page just became as active
|
|
411
412
|
}
|
|
412
413
|
}
|
|
413
|
-
async _sendTaxInvoice(
|
|
414
|
+
async _sendTaxInvoice() {
|
|
414
415
|
// 아이템 시퀀스 재 할당 + 날짜, 품목, 규격, 수량이 없으면 필터
|
|
415
416
|
let taxInvoiceItems = this.taxInvoiceItems.map((item, idx) => (Object.assign(Object.assign({}, item), { sequence: idx + 1, quantity: Number(item.quantity), unitPrice: Number(item.unitPrice) })));
|
|
416
417
|
taxInvoiceItems = taxInvoiceItems.filter(item => item.supplyDate && item.itemName && item.quantity && item.unitPrice);
|
|
@@ -422,6 +423,8 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
422
423
|
taxInvoice.paymentAmountAccountsReceivable = Number(taxInvoice.paymentAmountAccountsReceivable || 0);
|
|
423
424
|
taxInvoice.supplyAmount = Number(taxInvoice.supplyAmount || 0);
|
|
424
425
|
taxInvoice.taxAmount = Number(taxInvoice.taxAmount || 0);
|
|
426
|
+
taxInvoice.buyerBusinessRegistrationNumber = taxInvoice.buyerBusinessRegistrationNumber.replace(/-/gi, '');
|
|
427
|
+
taxInvoice.supplierBusinessRegistrationNumber = taxInvoice.supplierBusinessRegistrationNumber.replace(/-/gi, '');
|
|
425
428
|
// 공급받는자 필수 값 체크
|
|
426
429
|
if (!this.buyer.buyerBusinessRegistrationNumber || !this.buyer.buyerBusinessName || !this.buyer.buyerRepresentativeName) {
|
|
427
430
|
alert('공급받는자 필수 값을 모두 입력해 주세요.');
|
|
@@ -432,6 +435,11 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
432
435
|
alert('등록 가능한 아아템의 개수는 1개 이상이여야 합니다.');
|
|
433
436
|
return;
|
|
434
437
|
}
|
|
438
|
+
// 세금이 없는 타입인데 세금이 있는지 체크
|
|
439
|
+
if (taxInvoice.invoiceType === InvoiceType.SMALL_BUSINESS_TAX_INVOICE && taxInvoice.taxAmount > 0) {
|
|
440
|
+
alert('세금이 0원이 아닙니다.');
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
435
443
|
// 현금, 수표, 어음, 외상미수금의 합계 = 총 합계금액 체크
|
|
436
444
|
const paymentAmount = taxInvoice.paymentAmountCash + taxInvoice.paymentAmountCheck + taxInvoice.paymentAmountPromissoryNote + taxInvoice.paymentAmountAccountsReceivable;
|
|
437
445
|
if (paymentAmount > 0 && paymentAmount !== taxInvoice.totalAmount) {
|
|
@@ -455,6 +463,10 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
455
463
|
});
|
|
456
464
|
if (!response.errors) {
|
|
457
465
|
notify({ message: i18next.t('text.success tax send') });
|
|
466
|
+
this.taxInvoice = this.defaultTaxInvoice;
|
|
467
|
+
this.supplier = this.defaultSupplier;
|
|
468
|
+
this.buyer = this.defaultBuyer;
|
|
469
|
+
this.taxInvoiceItems = [];
|
|
458
470
|
}
|
|
459
471
|
}
|
|
460
472
|
_numberFormat(value) {
|
|
@@ -482,6 +494,8 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
482
494
|
}
|
|
483
495
|
// 세금이 없는 영세율이 선택 시 모든 아이템의 세금 0원으로 초기화
|
|
484
496
|
if (target.name === 'invoiceType' && target.value === InvoiceType.SMALL_BUSINESS_TAX_INVOICE) {
|
|
497
|
+
this.isTaxFree = true;
|
|
498
|
+
this.taxInvoice = Object.assign(Object.assign({}, this.taxInvoice), { taxAmount: 0 });
|
|
485
499
|
this.taxInvoiceItems = this.taxInvoiceItems.map(item => (Object.assign(Object.assign({}, item), { taxPrice: 0 })));
|
|
486
500
|
}
|
|
487
501
|
// 변경시에는 아이템 변경도 리 렌더가 필요해서 데이터 갱신
|
|
@@ -511,7 +525,7 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
511
525
|
if (target.name == 'quantity' || target.name == 'unitPrice') {
|
|
512
526
|
const supplyPrice = target.name == 'quantity' ? Number(inputVal) * this.taxInvoiceItems[idx]['unitPrice'] : Number(inputVal) * this.taxInvoiceItems[idx]['quantity'];
|
|
513
527
|
this.taxInvoiceItems[idx]['supplyPrice'] = supplyPrice;
|
|
514
|
-
this.taxInvoiceItems[idx]['taxPrice'] = Math.floor(supplyPrice / 10);
|
|
528
|
+
this.taxInvoiceItems[idx]['taxPrice'] = this.isTaxFree ? 0 : Math.floor(supplyPrice / 10);
|
|
515
529
|
}
|
|
516
530
|
// 인풋에 값 넣기
|
|
517
531
|
this.taxInvoiceItems[idx][target.name] = inputVal;
|
|
@@ -644,8 +658,9 @@ let TaxInvoiceSendPage = class TaxInvoiceSendPage extends localize(i18next)(Scop
|
|
|
644
658
|
}
|
|
645
659
|
_setTaxInvoiceSummaryCalc() {
|
|
646
660
|
const supplyPrice = this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.supplyPrice), 0) || 0;
|
|
647
|
-
const taxPrice = this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.taxPrice), 0) || 0;
|
|
648
|
-
|
|
661
|
+
const taxPrice = this.isTaxFree ? 0 : this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.taxPrice), 0) || 0;
|
|
662
|
+
const totalAmount = supplyPrice + taxPrice;
|
|
663
|
+
this.taxInvoice = Object.assign(Object.assign({}, this.taxInvoice), { supplyAmount: supplyPrice, taxAmount: taxPrice, totalAmount: totalAmount });
|
|
649
664
|
}
|
|
650
665
|
};
|
|
651
666
|
TaxInvoiceSendPage.styles = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tax-invoice-send-page.js","sourceRoot":"","sources":["../../../client/pages/tax-invoice-send/tax-invoice-send-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, query, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\nimport { BUSINESS_REGISTRATION_CATEGORY, BusinessRegistrationCategory, Category, INVOICE_TYPE, InvoiceType, PURPOSE, Purpose } from '../tax-invoice/tax-invoice-list-page'\nimport { openPopup } from '@operato/layout'\nimport { CompanyListPopup } from './company-list-popup'\n\nconst SHORT_INVOICE_TYPE = {\n TAX_INVOICE: {\n [InvoiceType.TAX_INVOICE]: '일반',\n [InvoiceType.SMALL_BUSINESS_TAX_INVOICE]: '영세율',\n [InvoiceType.CONSIGNMENT_TAX_INVOICE]: '위수탁',\n [InvoiceType.SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE]: '위수탁영세율'\n },\n INVOICE: {\n [InvoiceType.INVOICE]: '일반',\n [InvoiceType.CONSIGNMENT_INVOICE]: '위수탁'\n // [InvoiceType.IMPORT_INVOICE]: INVOICE_TYPE[IMPORT_INVOICE],\n }\n}\n\nconst SHORT_BUSINESS_REGISTRATION_CATEGORY = {\n [BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER]: '사업자',\n [BusinessRegistrationCategory.RESIDENT_REGISTRATION_NUMBER]: '개인',\n [BusinessRegistrationCategory.FOREIGNER_REGISTRATION_NUMBER]: '외국인'\n}\n\nexport interface Supplier {\n supplierBusinessRegistrationCategory: string\n supplierBusinessRegistrationNumber: string\n supplierBranchIdentification?: string\n supplierBusinessName: string\n supplierRepresentativeName: string\n supplierAddress?: string\n supplierBusinessType?: string\n supplierIndustryType?: string\n supplierDepartment?: string\n supplierContactName?: string\n supplierContactPhone?: string\n supplierContactEmail?: string\n supplierContactCellPhone?: string\n}\ninterface Buyer {\n buyerBusinessRegistrationCategory: BusinessRegistrationCategory\n buyerBusinessRegistrationNumber: string\n buyerBranchIdentification?: string\n buyerBusinessName: string\n buyerRepresentativeName: string\n buyerAddress?: string\n buyerBusinessType?: string\n buyerIndustryType?: string\n buyer1stDepartment?: string\n buyer1stContactName?: string\n buyer1stContactPhone?: string\n buyer1stContactEmail?: string\n buyer1stContactCellPhone?: string\n buyer2ndDepartment?: string\n buyer2ndContactName?: string\n buyer2ndContactPhone?: string\n buyer2ndContactEmail?: string\n buyer2ndContactCellPhone?: string\n}\ninterface TaxInvoice {\n category: Category\n issueNo?: string\n approvalNo?: string\n originalApprovalNo?: string\n issueDate: string\n signatureDate?: string\n invoiceType: InvoiceType\n purpose: Purpose\n remark0?: string\n remark1?: string\n remark2?: string\n paymentAmountCash?: number\n paymentAmountCheck?: number\n paymentAmountPromissoryNote?: number\n paymentAmountAccountsReceivable?: number\n supplyAmount: number\n taxAmount?: number\n totalAmount: number\n // revisedReason?: RevisedReason\n}\ninterface TaxInvoiceItem {\n sequence: number\n supplyDate: string\n itemName: string\n specification: string\n quantity: number\n unitPrice: number\n supplyPrice: number\n taxPrice: number\n remark?: string\n}\n\n@customElement('tax-invoice-send-page')\nexport class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n overflow-x: hidden;\n\n width: 100%;\n min-width: 850px;\n padding: 0 40px 40px 40px;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n .flex-row {\n display: flex;\n flex-direction: row;\n }\n .flex-column {\n display: flex;\n flex-direction: column;\n }\n\n input[type='text'],\n input[type='date'],\n input[type='number'] {\n width: 85%;\n max-width: calc(100% - 12px);\n height: 14px;\n margin: 0;\n padding: 4px 5px 5px;\n line-height: 14px;\n border: 1px solid #bbb;\n background: #fff;\n letter-spacing: 0.5px;\n }\n input[type='date'] {\n width: auto;\n }\n input[readonly],\n input:disabled {\n background-color: #eee;\n }\n\n div.invoice-type {\n font-size: 18px;\n margin-top: 15px;\n }\n\n table {\n border: solid;\n border-width: 2px 0;\n border-collapse: collapse;\n border-spacing: 0;\n }\n\n .title table {\n border-color: #d3dbe5;\n width: 100%;\n height: 33px;\n margin-top: 10px;\n font-size: 12px;\n\n th {\n font-size: 13px;\n background-color: #e9edf6;\n min-width: 140px;\n }\n td {\n width: 50%;\n padding-left: 10px;\n\n & > * {\n vertical-align: middle;\n }\n & > input {\n margin: 0 5px 0 1px;\n }\n }\n }\n\n div.body {\n margin-top: 15px;\n font-size: 14px;\n\n div.data {\n display: flex;\n margin-top: 5px;\n\n table {\n flex: 1;\n\n td,\n th {\n padding: 5px;\n min-width: 60px;\n }\n td {\n padding-left: 8px;\n }\n th.target {\n width: 25px;\n writing-mode: vertical-rl;\n min-width: unset;\n }\n\n &.supplier {\n border-color: #f64843;\n\n td,\n th {\n background-color: #fef5f7;\n border: solid 1.5px #f5b1b1;\n }\n th.target {\n background-color: #fedbde;\n }\n }\n &.buyer {\n border-color: #007ed9;\n\n td,\n th {\n background-color: #f7f7ff;\n border: solid 1.5px #a7bcff;\n }\n th.target {\n background-color: #c6daf6;\n }\n }\n }\n }\n\n div.header {\n display: flex;\n\n span {\n flex: 1;\n }\n }\n\n div.info {\n margin-top: 15px;\n border: solid;\n border-color: #000;\n border-width: 2px 0px 0px 0px;\n\n div.flex-row div {\n border: solid #c4d2ff;\n border-width: 0px 1.5px 1.5px 1.5px;\n margin-right: -1px;\n padding: 5px;\n text-align: center;\n\n &.title {\n background-color: #e9edf5;\n font-weight: bold;\n flex: 1;\n }\n &.value {\n flex: 3;\n text-align: left;\n\n .desc {\n font-size: 11px;\n color: #c90000;\n }\n }\n }\n }\n\n div.items,\n div.summary {\n margin-top: 20px;\n\n table {\n width: 100%;\n border-color: #000;\n border-width: 2px 0px 0px 0px;\n\n th {\n background-color: #e9edf5;\n }\n th,\n td {\n border: solid 1.5px #c4d2ff;\n padding: 5px;\n text-align: center;\n }\n }\n }\n\n div.summary {\n display: flex;\n\n & > table {\n flex: 6.7;\n }\n & > div {\n flex: 3.2;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1.5px solid #c4d2ff;\n border-top: 2px solid #000;\n }\n\n span.type-wrapper {\n margin: 0 10px;\n\n & > div {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 4px;\n\n input[type='radio' i] {\n margin: 0px;\n }\n }\n }\n }\n\n div.items {\n div.desc {\n font-weight: 400;\n font-size: 12px;\n margin-bottom: 5px;\n }\n div.desc-date {\n color: #005d98;\n }\n button {\n font-size: 13px;\n height: 25px;\n cursor: pointer;\n text-align: center;\n font-weight: 600;\n border-radius: 2px;\n border-color: #ccc;\n }\n .btn-add {\n color: #333;\n background-color: #f9f9f9;\n }\n .btn-delete {\n color: #fff;\n background-color: #5c636e;\n border: none;\n }\n }\n\n *[required]::before {\n content: '*';\n color: red;\n margin-right: 2px;\n }\n }\n `\n ]\n\n static get scopedElements() {\n return {\n 'company-list-popup': CompanyListPopup\n }\n }\n\n // 오늘 날짜 YYYY-MM-DD 형식으로 뽑기\n private today: string = new Intl.DateTimeFormat('fr-CA', { timeZone: 'Asia/Seoul' }).format(new Date())\n\n @state() supplier: Supplier = {\n supplierBusinessRegistrationCategory: '01',\n supplierBusinessRegistrationNumber: '',\n supplierBranchIdentification: '',\n supplierBusinessName: '',\n supplierRepresentativeName: ''\n }\n @property({ type: Object }) buyer: Buyer = {\n buyerBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,\n buyerBusinessRegistrationNumber: '',\n buyerBusinessName: '',\n buyerRepresentativeName: ''\n }\n @property({ type: Object }) taxInvoice: TaxInvoice = {\n invoiceType: InvoiceType.TAX_INVOICE,\n category: Category.EXPORT,\n issueDate: this.today,\n purpose: Purpose.INVOICE,\n supplyAmount: 0,\n taxAmount: 0,\n totalAmount: 0\n }\n\n private defaultTaxInvoiceItem = {\n sequence: new Date().getTime(), // 구분용 임시 값 (중복되면 안되니 생성 마다 넣어주기)\n supplyDate: '',\n itemName: '',\n specification: '',\n quantity: 0,\n unitPrice: 0,\n supplyPrice: 0,\n taxPrice: 0\n }\n @property({ type: Array }) taxInvoiceItems: TaxInvoiceItem[] = [{ ...this.defaultTaxInvoiceItem }]\n\n get context() {\n return {\n title: i18next.t('title.tax invoice send'),\n help: 'tax-invoice-send/tax-invoice-send',\n actions: [\n {\n title: i18next.t('button.tax invoice send'),\n action: this._sendTaxInvoice.bind(this),\n ...CommonButtonStyles.add\n }\n ]\n }\n }\n\n render() {\n return html`\n <div class=\"invoice-type\">\n * ${INVOICE_TYPE[this.taxInvoice?.invoiceType]} (${SHORT_BUSINESS_REGISTRATION_CATEGORY[this.buyer.buyerBusinessRegistrationCategory]})\n </div>\n\n <div class=\"title\">\n <table>\n <tr>\n <th>${i18next.t('field.short invoice type')}</th>\n <td>\n ${Object.keys(SHORT_INVOICE_TYPE['TAX_INVOICE']).map(key => {\n const disabled: boolean = key !== InvoiceType.TAX_INVOICE && key !== InvoiceType.SMALL_BUSINESS_TAX_INVOICE\n const checked: boolean = key === InvoiceType.TAX_INVOICE\n return html`\n <label for=\"${'tax_' + key}\">${SHORT_INVOICE_TYPE['TAX_INVOICE'][key]}</label>\n <input\n type=\"radio\"\n id=\"${'tax_' + key}\"\n .value=\"${key}\"\n name=\"invoiceType\"\n ?checked=${checked}\n ?disabled=${disabled}\n @change=${this._onInputTaxInvoice}\n />\n `\n })}\n </td>\n <th>${i18next.t('field.tax invoice buyer registration category')}</th>\n <td>\n ${Object.keys(BUSINESS_REGISTRATION_CATEGORY).map(key => {\n const disabled: boolean = key !== BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER\n const checked: boolean = key === BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER\n return html`\n <label for=\"${'tax_' + key}\">${BUSINESS_REGISTRATION_CATEGORY[key]}</label>\n <input type=\"radio\" id=\"${'tax_' + key}\" value=\"${key}\" name=\"buyerBusinessRegistrationCategory\" ?checked=${checked} ?disabled=${disabled} />\n `\n })}\n </td>\n </tr>\n </table>\n </div>\n\n <div class=\"body\">\n <div class=\"header\">\n <span><button @click=${this._openSupplierPopup}>공급처 선택</button></span>\n <span><button @click=${this._openBuyerPopup}>공급받는자 선택</button></span>\n </div>\n\n <div class=\"data\">\n <table class=\"supplier\">\n <colgroup>\n <col width=\"150px\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n </colgroup>\n <tr>\n <th rowspan=\"6\" class=\"target\">${i18next.t('field.tax invoice supplier')}</th>\n <th required>${i18next.t('field.short business registration number')}</th>\n <td>${this.supplier?.supplierBusinessRegistrationNumber.replace(/(\\S{3})(\\S{2})(\\S{5})/g, '$1-$2-$3')}</td>\n <th>${i18next.t('field.short branch identification')}</th>\n <td>${this.supplier?.supplierBranchIdentification}</td>\n </tr>\n <tr>\n <th required>${i18next.t('field.short tax invoice business name')}</th>\n <td><input type=\"text\" name=\"supplierBusinessName\" .value=${this.supplier?.supplierBusinessName || ''} @input=${this._onInputTaxInvoice} /></td>\n <th required>${i18next.t('field.tax invoice representative name')}</th>\n <td>\n <input type=\"text\" name=\"supplierRepresentativeName\" .value=${this.supplier?.supplierRepresentativeName || ''} @input=${this._onInputTaxInvoice} />\n </td>\n </tr>\n <tr>\n <th>${i18next.t('field.address')}</th>\n <td colspan=\"3\">${this.supplier?.supplierAddress}</td>\n </tr>\n <tr>\n <th>${i18next.t('field.business type')}</th>\n <td><input type=\"text\" name=\"supplierBusinessType\" .value=${this.supplier?.supplierBusinessType || ''} @input=${this._onInputTaxInvoice} /></td>\n <th>${i18next.t('field.industry type')}</th>\n <td><input type=\"text\" name=\"supplierIndustryType\" .value=${this.supplier?.supplierIndustryType || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th rowspan=\"2\">${i18next.t('field.email')}</th>\n <td rowspan=\"2\" colspan=\"3\">\n <input type=\"text\" name=\"supplierContactEmail\" .value=${this.supplier?.supplierContactEmail || ''} @input=${this._onInputTaxInvoice} />\n </td>\n </tr>\n <tr></tr>\n </table>\n\n <table class=\"buyer\">\n <colgroup>\n <col width=\"150px\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n </colgroup>\n <tr>\n <th rowspan=\"6\" class=\"target\">${i18next.t('field.tax invoice buyer')}</th>\n <th required>${i18next.t('field.short business registration number')}</th>\n <td>\n <input\n type=\"text\"\n maxlength=\"10\"\n name=\"buyerBusinessRegistrationNumber\"\n .value=${this.buyer?.buyerBusinessRegistrationNumber || ''}\n @input=${this._onInputTaxInvoice}\n />\n </td>\n <th>${i18next.t('field.short branch identification')}</th>\n <td><input type=\"text\" name=\"buyerBranchIdentification\" .value=${this.buyer?.buyerBranchIdentification || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th required>${i18next.t('field.short tax invoice business name')}</th>\n <td><input type=\"text\" name=\"buyerBusinessName\" .value=${this.buyer?.buyerBusinessName || ''} @input=${this._onInputTaxInvoice} /></td>\n <th required>${i18next.t('field.tax invoice representative name')}</th>\n <td><input type=\"text\" name=\"buyerRepresentativeName\" .value=${this.buyer?.buyerRepresentativeName || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.address')}</th>\n <td colspan=\"3\"><input type=\"text\" name=\"buyerAddress\" .value=${this.buyer?.buyerAddress || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.business type')}</th>\n <td><input type=\"text\" name=\"buyerBusinessType\" .value=${this.buyer?.buyerBusinessType || ''} @input=${this._onInputTaxInvoice} /></td>\n\n <th>${i18next.t('field.industry type')}</th>\n <td><input type=\"text\" name=\"buyerIndustryType\" .value=${this.buyer?.buyerIndustryType || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.email')}</th>\n <td colspan=\"3\"><input type=\"text\" name=\"buyer1stContactEmail\" .value=${this.buyer?.buyer1stContactEmail || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.email')}</th>\n <td colspan=\"3\"><input type=\"text\" name=\"buyer2ndContactEmail\" .value=${this.buyer?.buyer2ndContactEmail || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n </table>\n </div>\n\n <div class=\"info flex-column\">\n <div class=\"flex-row\">\n <div class=\"title\" required>${i18next.t('field.issue date')}</div>\n <div class=\"value\">\n <input type=\"date\" name=\"issueDate\" .value=${this.taxInvoice.issueDate} @input=${this._onInputTaxInvoice} />\n <span class=\"desc\">※ 작성일자는 공급 연월일을 의미함</span>\n </div>\n <div class=\"title\">${i18next.t('field.remark0')}</div>\n <div class=\"value\"><input type=\"text\" name=\"remark0\" .value=${this.taxInvoice?.remark0 || ''} @input=${this._onInputTaxInvoice} /></div>\n </div>\n <div class=\"flex-row\">\n <div class=\"title\">${i18next.t('field.total amount')}</div>\n <div class=\"value\">${this._numberFormat(this.taxInvoice?.totalAmount)}</div>\n <div class=\"title\">${i18next.t('field.supply amount')}</div>\n <div class=\"value\">${this._numberFormat(this.taxInvoice?.supplyAmount)}</div>\n <div class=\"title\">${i18next.t('field.tax amount')}</div>\n <div class=\"value\">${this._numberFormat(this.taxInvoice?.taxAmount)}</div>\n </div>\n </div>\n\n <div class=\"items\">\n <div class=\"desc desc-date\">\n ※ 아래 '품목'의 '월'은 상단 '작성일자'의 '월'이 자동 반영됩니다. 합계의 '계산' 버튼은 금액을 공급가액과 세액으로 계산할 수 있습니다.\n </div>\n <div class=\"desc\"><button class=\"btn-add\" @click=${this._onAddInvoiceItem}>품목추가</button> 품목은 최대 16개까지 추가, 삭제 가능</div>\n\n <table>\n <colgroup>\n <col width=\"5%\" />\n <col width=\"5%\" />\n <col width=\"14%\" />\n <col width=\"7%\" />\n <col width=\"7%\" />\n <col width=\"12%\" />\n <col width=\"12%\" />\n <col width=\"12%\" />\n <col width=\"16%\" />\n <col width=\"8%\" />\n </colgroup>\n <tr>\n <th>${i18next.t('field.tax invoice month')}</th>\n <th required>${i18next.t('field.tax invoice day')}</th>\n <th required>${i18next.t('field.tax invoice item name')}</th>\n <th>${i18next.t('field.tax invoice ea')}</th>\n <th required>${i18next.t('field.tax invoice quantity')}</th>\n <th required>${i18next.t('field.tax invoice price')}</th>\n <th>${i18next.t('field.supply amount')}</th>\n <th>${i18next.t('field.tax amount')}</th>\n <th>${i18next.t('field.remark0')}</th>\n <th>${i18next.t('field.delete')}</th>\n </tr>\n\n ${this.taxInvoiceItems.map((item, idx) => {\n const taxDisabled = this.taxInvoice.invoiceType === InvoiceType.SMALL_BUSINESS_TAX_INVOICE\n\n return html`\n <tr>\n <input type=\"hidden\" name=\"sequence\" value=${item.sequence} />\n <td>${this.taxInvoice.issueDate.split('-')[1]}</td>\n <td><input type=\"text\" numeric maxlength=\"2\" name=\"supplyDate\" @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" name=\"itemName\" .value=${item.itemName} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" name=\"specification\" .value=${item.specification} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" numeric name=\"quantity\" .value=${this._numberFormat(item.quantity)} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" numeric name=\"unitPrice\" .value=${this._numberFormat(item.unitPrice)} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" numeric name=\"supplyPrice\" .value=${this._numberFormat(item.supplyPrice)} @input=${e => this._onInputItem(e, idx)} /></td>\n <td>\n <input\n type=\"text\"\n numeric\n name=\"taxPrice\"\n .value=${this._numberFormat(item.taxPrice)}\n @input=${e => this._onInputItem(e, idx)}\n .disabled=${taxDisabled}\n />\n </td>\n <td><input type=\"text\" name=\"remark\" .value=${item.remark || ''} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><button class=\"btn-delete\" @click=${e => this._onRemoveInvoiceItem(e, item.sequence)}>삭제</button></td>\n </tr>\n `\n })}\n </table>\n </div>\n\n <div class=\"summary\">\n <table>\n <colgroup>\n <col width=\"25%\" />\n <col width=\"25%\" />\n <col width=\"25%\" />\n <col width=\"25%\" />\n </colgroup>\n <tr>\n <th>${i18next.t('field.tax invoice payment cash')}</th>\n <th>${i18next.t('field.tax invoice payment check')}</th>\n <th>${i18next.t('field.tax invoice payment promissory note')}</th>\n <th>${i18next.t('field.tax invoice payment accounts receivable')}</th>\n </tr>\n <tr>\n <td><input type=\"text\" numeric name=\"paymentAmountCash\" .value=${this.taxInvoice?.paymentAmountCash || ''} @input=${this._onInputTaxInvoice} /></td>\n <td><input type=\"text\" numeric name=\"paymentAmountCheck\" .value=${this.taxInvoice?.paymentAmountCheck || ''} @input=${this._onInputTaxInvoice} /></td>\n <td>\n <input\n type=\"text\"\n numeric\n name=\"paymentAmountPromissoryNote\"\n .value=${this.taxInvoice?.paymentAmountPromissoryNote || ''}\n @input=${this._onInputTaxInvoice}\n />\n </td>\n <td>\n <input\n type=\"text\"\n numeric\n name=\"paymentAmountAccountsReceivable\"\n .value=${this.taxInvoice?.paymentAmountAccountsReceivable || ''}\n @input=${this._onInputTaxInvoice}\n />\n </td>\n </tr>\n </table>\n <div>\n ${i18next.t('text.prev tax invoice description payment') + ' ('}\n <span class=\"type-wrapper\">\n <div>\n <input type=\"radio\" id=\"purpose_20\" name=\"purpose\" .value=${Purpose.INVOICE} @change=${this._onInputTaxInvoice} checked />\n <label for=\"purpose_20\">${PURPOSE[Purpose.INVOICE]}</label>\n </div>\n <div>\n <input type=\"radio\" id=\"purpose_10\" name=\"purpose\" .value=${Purpose.RECEIPT} @change=${this._onInputTaxInvoice} />\n <label for=\"purpose_10\">${PURPOSE[Purpose.RECEIPT]}</label>\n </div>\n </span>\n ${') ' + i18next.t('text.next tax invoice description payment')}\n </div>\n </div>\n </div>\n `\n }\n\n async pageInitialized(lifecycle: any) {\n this._fetchSupplier()\n }\n\n async _fetchSupplier() {\n const response = await client.query({\n query: gql`\n query taxInvoiceDefaultCompany {\n response: taxInvoiceDefaultCompany {\n businessRegistrationNumber\n branchIdentification\n businessName\n representativeName\n address\n businessType\n industryType\n department\n contactName\n contactPhone\n contactEmail\n contactCellPhone\n }\n }\n `\n })\n\n const supplier = response.data.response\n this.supplier = {\n supplierBusinessRegistrationCategory: supplier.businessRegistrationCategory,\n supplierBusinessRegistrationNumber: supplier.businessRegistrationNumber,\n supplierBranchIdentification: supplier.branchIdentification,\n supplierBusinessName: supplier.businessName,\n supplierRepresentativeName: supplier.representativeName,\n supplierAddress: supplier.address,\n supplierBusinessType: supplier.businessType,\n supplierIndustryType: supplier.industryType,\n supplierDepartment: supplier.department,\n supplierContactName: supplier.contactName,\n supplierContactPhone: supplier.contactPhone,\n supplierContactEmail: supplier.contactEmail,\n supplierContactCellPhone: supplier.contactCellPhone\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 _sendTaxInvoice(num: string) {\n // 아이템 시퀀스 재 할당 + 날짜, 품목, 규격, 수량이 없으면 필터\n let taxInvoiceItems = this.taxInvoiceItems.map((item, idx) => ({ ...item, sequence: idx + 1, quantity: Number(item.quantity), unitPrice: Number(item.unitPrice) }))\n taxInvoiceItems = taxInvoiceItems.filter(item => item.supplyDate && item.itemName && item.quantity && item.unitPrice)\n\n // taxInvoice 데이터 생성 및 타입 변환\n let taxInvoice = { ...this.taxInvoice, ...this.supplier, ...this.buyer }\n taxInvoice.paymentAmountCash = Number(taxInvoice.paymentAmountCash || 0)\n taxInvoice.paymentAmountCheck = Number(taxInvoice.paymentAmountCheck || 0)\n taxInvoice.paymentAmountPromissoryNote = Number(taxInvoice.paymentAmountPromissoryNote || 0)\n taxInvoice.paymentAmountAccountsReceivable = Number(taxInvoice.paymentAmountAccountsReceivable || 0)\n taxInvoice.supplyAmount = Number(taxInvoice.supplyAmount || 0)\n taxInvoice.taxAmount = Number(taxInvoice.taxAmount || 0)\n\n // 공급받는자 필수 값 체크\n if (!this.buyer.buyerBusinessRegistrationNumber || !this.buyer.buyerBusinessName || !this.buyer.buyerRepresentativeName) {\n alert('공급받는자 필수 값을 모두 입력해 주세요.')\n return\n }\n\n // 아이템 개수 체크\n if (taxInvoiceItems.length === 0) {\n alert('등록 가능한 아아템의 개수는 1개 이상이여야 합니다.')\n return\n }\n\n // 현금, 수표, 어음, 외상미수금의 합계 = 총 합계금액 체크\n const paymentAmount: number =\n taxInvoice.paymentAmountCash + taxInvoice.paymentAmountCheck + taxInvoice.paymentAmountPromissoryNote + taxInvoice.paymentAmountAccountsReceivable\n if (paymentAmount > 0 && paymentAmount !== taxInvoice.totalAmount) {\n alert('현금, 수표, 어음, 외상미수금의 합계는 총 합계금액과 동일해야 합니다.')\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation SendTaxInvoicesByApi($taxInvoiceSendList: [TaxInvoiceSend!]!) {\n response: sendTaxInvoicesByApi(taxInvoiceSendList: $taxInvoiceSendList)\n }\n `,\n variables: {\n taxInvoiceSendList: [\n {\n taxInvoice,\n taxInvoiceItems\n }\n ]\n }\n })\n\n if (!response.errors) {\n notify({ message: i18next.t('text.success tax send') })\n }\n }\n\n private _numberFormat(value: number | undefined): string {\n return !value ? '' : new Intl.NumberFormat('en-US').format(value) || ''\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputTaxInvoice(event: InputEvent) {\n const target = event.target as HTMLInputElement\n\n // 숫자 타입은 다른 문자 입력 제거\n if (target.hasAttribute('numeric')) {\n target.value = target.value.replace(/\\D/g, '')\n }\n\n if (target.name.startsWith('supplier')) {\n this.supplier[target.name] = target.value\n } else if (target.name.startsWith('buyer')) {\n this.buyer[target.name] = target.value\n } else {\n // 날짜 체크가 오늘 날짜를 넘어가면 값 변경 되면 안됨\n if (target.name === 'issueDate' && target.value > this.today) {\n target.value = this.taxInvoice['issueDate']\n alert('작성일자는 현재일까지 입력하시기 바랍니다.')\n return\n }\n\n // 세금이 없는 영세율이 선택 시 모든 아이템의 세금 0원으로 초기화\n if (target.name === 'invoiceType' && target.value === InvoiceType.SMALL_BUSINESS_TAX_INVOICE) {\n this.taxInvoiceItems = this.taxInvoiceItems.map(item => ({ ...item, taxPrice: 0 }))\n }\n\n // 변경시에는 아이템 변경도 리 렌더가 필요해서 데이터 갱신\n this.taxInvoice[target.name] = target.value\n this.taxInvoice = { ...this.taxInvoice }\n }\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputItem(e: InputEvent, idx: number) {\n const target = e.target as HTMLInputElement\n let inputVal: any = target.value\n\n // 숫자 타입은 다른 문자 입력 제거\n if (target.hasAttribute('numeric')) {\n inputVal = Number(inputVal.replace(/\\D/g, ''))\n target.value = inputVal\n }\n\n // 공급일자 케이스 시 => 세금계산서의 작성일자의 YYYY-MM + 아이템의 입력된 DD\n if (target.name === 'supplyDate') {\n const itemDate = this.taxInvoice.issueDate.substring(0, 8) + inputVal.toString().padStart(2, '0')\n if (itemDate > this.taxInvoice.issueDate) {\n alert('품목의 일자는 작성일자보다 클 수 없습니다.')\n target.value = ''\n }\n inputVal = itemDate\n }\n\n // 수량, 단가 수정시 공급가액/세액 자동 계산\n if (target.name == 'quantity' || target.name == 'unitPrice') {\n const supplyPrice = target.name == 'quantity' ? Number(inputVal) * this.taxInvoiceItems[idx]['unitPrice'] : Number(inputVal) * this.taxInvoiceItems[idx]['quantity']\n this.taxInvoiceItems[idx]['supplyPrice'] = supplyPrice\n this.taxInvoiceItems[idx]['taxPrice'] = Math.floor(supplyPrice / 10)\n }\n\n // 인풋에 값 넣기\n this.taxInvoiceItems[idx][target.name] = inputVal\n\n // 아이템 금액에 관련된 필드 수정시 합계 계산\n if (['quantity', 'unitPrice', 'supplyPrice', 'taxPrice'].includes(target.name)) {\n this.taxInvoiceItems = [...this.taxInvoiceItems]\n this._setTaxInvoiceSummaryCalc()\n }\n }\n\n private async _openSupplierPopup() {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: taxInvoiceApis(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name: provider\n businessRegistrationNumber\n branchIdentification\n businessName\n representativeName\n address\n businessType\n industryType\n department\n contactName\n contactPhone\n contactEmail\n contactCellPhone\n }\n }\n }\n `\n })\n\n const items = response.data.responses.items || []\n openPopup(\n html`\n <company-list-popup\n .companyList=${items}\n @selected=${e => {\n this.supplier = {\n supplierBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,\n supplierBusinessRegistrationNumber: e.detail.businessRegistrationNumber || '',\n supplierBranchIdentification: e.detail.branchIdentification || '',\n supplierBusinessName: e.detail.businessName || '',\n supplierRepresentativeName: e.detail.representativeName || '',\n supplierAddress: e.detail.address || '',\n supplierBusinessType: e.detail.businessType || '',\n supplierIndustryType: e.detail.industryType || '',\n supplierDepartment: e.detail.department || '',\n supplierContactName: e.detail.contactName || '',\n supplierContactPhone: e.detail.contactPhone || '',\n supplierContactEmail: e.detail.contactEmail || '',\n supplierContactCellPhone: e.detail.contactCellPhone || ''\n }\n\n history.back()\n }}\n >\n </company-list-popup>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.company list popup')\n }\n )\n }\n\n private async _openBuyerPopup() {\n const response = await client.query({\n query: gql`\n query TaxInvoiceBuyerList {\n responses: taxInvoiceBuyerList {\n id\n name\n businessRegistrationNumber\n branchIdentification\n businessName\n representativeName\n address\n businessType\n industryType\n department\n contactName\n contactPhone\n contactEmail\n contactCellPhone\n }\n }\n `\n })\n\n const items = response.data.responses || []\n openPopup(\n html`\n <company-list-popup\n .companyList=${items}\n @selected=${e => {\n this.buyer = {\n buyerBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,\n buyerBusinessRegistrationNumber: e.detail.businessRegistrationNumber || '',\n buyerBranchIdentification: e.detail.branchIdentification || '',\n buyerBusinessName: e.detail.businessName || '',\n buyerRepresentativeName: e.detail.representativeName || '',\n buyerAddress: e.detail.address || '',\n buyerBusinessType: e.detail.businessType || '',\n buyerIndustryType: e.detail.industryType || '',\n buyer1stDepartment: e.detail.department || '',\n buyer1stContactName: e.detail.contactName || '',\n buyer1stContactPhone: e.detail.contactPhone || '',\n buyer1stContactEmail: e.detail.contactEmail || '',\n buyer1stContactCellPhone: e.detail.contactCellPhone || ''\n }\n\n history.back()\n }}\n >\n </company-list-popup>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.company list popup')\n }\n )\n }\n\n private _onAddInvoiceItem(e: Event) {\n e.preventDefault()\n if (this.taxInvoiceItems.length >= 16) {\n alert('품목은 최대 16개까지 추가 가능합니다.')\n return\n }\n\n this.taxInvoiceItems = [...this.taxInvoiceItems, { ...this.defaultTaxInvoiceItem, sequence: new Date().getTime() }]\n }\n\n private _onRemoveInvoiceItem(e: Event, sequence: number) {\n e.preventDefault()\n this.taxInvoiceItems = [...this.taxInvoiceItems.filter(item => item.sequence != sequence)]\n this._setTaxInvoiceSummaryCalc()\n }\n\n private _setTaxInvoiceSummaryCalc() {\n const supplyPrice: number = this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.supplyPrice), 0) || 0\n const taxPrice: number = this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.taxPrice), 0) || 0\n\n this.taxInvoice = { ...this.taxInvoice, supplyAmount: supplyPrice, taxAmount: taxPrice, totalAmount: supplyPrice + taxPrice }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tax-invoice-send-page.js","sourceRoot":"","sources":["../../../client/pages/tax-invoice-send/tax-invoice-send-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, query, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\nimport { BUSINESS_REGISTRATION_CATEGORY, BusinessRegistrationCategory, Category, INVOICE_TYPE, InvoiceType, PURPOSE, Purpose } from '../tax-invoice/tax-invoice-list-page'\nimport { openPopup } from '@operato/layout'\nimport { CompanyListPopup } from './company-list-popup'\n\nconst SHORT_INVOICE_TYPE = {\n TAX_INVOICE: {\n [InvoiceType.TAX_INVOICE]: '일반',\n [InvoiceType.SMALL_BUSINESS_TAX_INVOICE]: '영세율',\n [InvoiceType.CONSIGNMENT_TAX_INVOICE]: '위수탁',\n [InvoiceType.SMALL_BUSINESS_CONSIGNMENT_TAX_INVOICE]: '위수탁영세율'\n },\n INVOICE: {\n [InvoiceType.INVOICE]: '일반',\n [InvoiceType.CONSIGNMENT_INVOICE]: '위수탁'\n // [InvoiceType.IMPORT_INVOICE]: INVOICE_TYPE[IMPORT_INVOICE],\n }\n}\n\nconst SHORT_BUSINESS_REGISTRATION_CATEGORY = {\n [BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER]: '사업자',\n [BusinessRegistrationCategory.RESIDENT_REGISTRATION_NUMBER]: '개인',\n [BusinessRegistrationCategory.FOREIGNER_REGISTRATION_NUMBER]: '외국인'\n}\n\nexport interface Supplier {\n supplierBusinessRegistrationCategory: string\n supplierBusinessRegistrationNumber: string\n supplierBranchIdentification?: string\n supplierBusinessName: string\n supplierRepresentativeName: string\n supplierAddress?: string\n supplierBusinessType?: string\n supplierIndustryType?: string\n supplierDepartment?: string\n supplierContactName?: string\n supplierContactPhone?: string\n supplierContactEmail?: string\n supplierContactCellPhone?: string\n}\ninterface Buyer {\n buyerBusinessRegistrationCategory: BusinessRegistrationCategory\n buyerBusinessRegistrationNumber: string\n buyerBranchIdentification?: string\n buyerBusinessName: string\n buyerRepresentativeName: string\n buyerAddress?: string\n buyerBusinessType?: string\n buyerIndustryType?: string\n buyer1stDepartment?: string\n buyer1stContactName?: string\n buyer1stContactPhone?: string\n buyer1stContactEmail?: string\n buyer1stContactCellPhone?: string\n buyer2ndDepartment?: string\n buyer2ndContactName?: string\n buyer2ndContactPhone?: string\n buyer2ndContactEmail?: string\n buyer2ndContactCellPhone?: string\n}\ninterface TaxInvoice {\n category: Category\n issueNo?: string\n approvalNo?: string\n originalApprovalNo?: string\n issueDate: string\n signatureDate?: string\n invoiceType: InvoiceType\n purpose: Purpose\n remark0?: string\n remark1?: string\n remark2?: string\n paymentAmountCash?: number\n paymentAmountCheck?: number\n paymentAmountPromissoryNote?: number\n paymentAmountAccountsReceivable?: number\n supplyAmount: number\n taxAmount: number\n totalAmount: number\n // revisedReason?: RevisedReason\n}\ninterface TaxInvoiceItem {\n sequence: number\n supplyDate: string\n itemName: string\n specification: string\n quantity: number\n unitPrice: number\n supplyPrice: number\n taxPrice: number\n remark?: string\n}\n\n@customElement('tax-invoice-send-page')\nexport class TaxInvoiceSendPage extends localize(i18next)(ScopedElementsMixin(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n overflow-x: hidden;\n\n width: 100%;\n min-width: 850px;\n padding: 0 40px 40px 40px;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n .flex-row {\n display: flex;\n flex-direction: row;\n }\n .flex-column {\n display: flex;\n flex-direction: column;\n }\n\n input[type='text'],\n input[type='date'],\n input[type='number'] {\n width: 85%;\n max-width: calc(100% - 12px);\n height: 14px;\n margin: 0;\n padding: 4px 5px 5px;\n line-height: 14px;\n border: 1px solid #bbb;\n background: #fff;\n letter-spacing: 0.5px;\n }\n input[type='date'] {\n width: auto;\n }\n input[readonly],\n input:disabled {\n background-color: #eee;\n }\n\n div.invoice-type {\n font-size: 18px;\n margin-top: 15px;\n }\n\n table {\n border: solid;\n border-width: 2px 0;\n border-collapse: collapse;\n border-spacing: 0;\n }\n\n .title table {\n border-color: #d3dbe5;\n width: 100%;\n height: 33px;\n margin-top: 10px;\n font-size: 12px;\n\n th {\n font-size: 13px;\n background-color: #e9edf6;\n min-width: 140px;\n }\n td {\n width: 50%;\n padding-left: 10px;\n\n & > * {\n vertical-align: middle;\n }\n & > input {\n margin: 0 5px 0 1px;\n }\n }\n }\n\n div.body {\n margin-top: 15px;\n font-size: 14px;\n\n div.data {\n display: flex;\n margin-top: 5px;\n\n table {\n flex: 1;\n\n td,\n th {\n padding: 5px;\n min-width: 60px;\n }\n td {\n padding-left: 8px;\n }\n th.target {\n width: 25px;\n writing-mode: vertical-rl;\n min-width: unset;\n }\n\n &.supplier {\n border-color: #f64843;\n\n td,\n th {\n background-color: #fef5f7;\n border: solid 1.5px #f5b1b1;\n }\n th.target {\n background-color: #fedbde;\n }\n }\n &.buyer {\n border-color: #007ed9;\n\n td,\n th {\n background-color: #f7f7ff;\n border: solid 1.5px #a7bcff;\n }\n th.target {\n background-color: #c6daf6;\n }\n }\n }\n }\n\n div.header {\n display: flex;\n\n span {\n flex: 1;\n }\n }\n\n div.info {\n margin-top: 15px;\n border: solid;\n border-color: #000;\n border-width: 2px 0px 0px 0px;\n\n div.flex-row div {\n border: solid #c4d2ff;\n border-width: 0px 1.5px 1.5px 1.5px;\n margin-right: -1px;\n padding: 5px;\n text-align: center;\n\n &.title {\n background-color: #e9edf5;\n font-weight: bold;\n flex: 1;\n }\n &.value {\n flex: 3;\n text-align: left;\n\n .desc {\n font-size: 11px;\n color: #c90000;\n }\n }\n }\n }\n\n div.items,\n div.summary {\n margin-top: 20px;\n\n table {\n width: 100%;\n border-color: #000;\n border-width: 2px 0px 0px 0px;\n\n th {\n background-color: #e9edf5;\n }\n th,\n td {\n border: solid 1.5px #c4d2ff;\n padding: 5px;\n text-align: center;\n }\n }\n }\n\n div.summary {\n display: flex;\n\n & > table {\n flex: 6.7;\n }\n & > div {\n flex: 3.2;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1.5px solid #c4d2ff;\n border-top: 2px solid #000;\n }\n\n span.type-wrapper {\n margin: 0 10px;\n\n & > div {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 4px;\n\n input[type='radio' i] {\n margin: 0px;\n }\n }\n }\n }\n\n div.items {\n div.desc {\n font-weight: 400;\n font-size: 12px;\n margin-bottom: 5px;\n }\n div.desc-date {\n color: #005d98;\n }\n button {\n font-size: 13px;\n height: 25px;\n cursor: pointer;\n text-align: center;\n font-weight: 600;\n border-radius: 2px;\n border-color: #ccc;\n }\n .btn-add {\n color: #333;\n background-color: #f9f9f9;\n }\n .btn-delete {\n color: #fff;\n background-color: #5c636e;\n border: none;\n }\n }\n\n *[required]::before {\n content: '*';\n color: red;\n margin-right: 2px;\n }\n }\n `\n ]\n\n static get scopedElements() {\n return {\n 'company-list-popup': CompanyListPopup\n }\n }\n\n // 오늘 날짜 YYYY-MM-DD 형식으로 뽑기\n private today: string = new Intl.DateTimeFormat('fr-CA', { timeZone: 'Asia/Seoul' }).format(new Date())\n private isTaxFree = false\n\n private defaultSupplier = {\n supplierBusinessRegistrationCategory: '01',\n supplierBusinessRegistrationNumber: '',\n supplierBranchIdentification: '',\n supplierBusinessName: '',\n supplierRepresentativeName: ''\n }\n @state() supplier: Supplier = this.defaultSupplier\n\n private defaultBuyer = {\n buyerBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,\n buyerBusinessRegistrationNumber: '',\n buyerBusinessName: '',\n buyerRepresentativeName: ''\n }\n @property({ type: Object }) buyer: Buyer = this.defaultBuyer\n\n private defaultTaxInvoice = {\n invoiceType: InvoiceType.TAX_INVOICE,\n category: Category.EXPORT,\n issueDate: this.today,\n purpose: Purpose.INVOICE,\n supplyAmount: 0,\n taxAmount: 0,\n totalAmount: 0\n }\n @property({ type: Object }) taxInvoice: TaxInvoice = this.defaultTaxInvoice\n\n private defaultTaxInvoiceItem = {\n sequence: new Date().getTime(), // 구분용 임시 값 (중복되면 안되니 생성 마다 넣어주기)\n supplyDate: '',\n itemName: '',\n specification: '',\n quantity: 0,\n unitPrice: 0,\n supplyPrice: 0,\n taxPrice: 0\n }\n @property({ type: Array }) taxInvoiceItems: TaxInvoiceItem[] = [{ ...this.defaultTaxInvoiceItem }]\n\n get context() {\n return {\n title: i18next.t('title.tax invoice send'),\n help: 'tax-invoice-send/tax-invoice-send',\n actions: [\n {\n title: i18next.t('button.tax invoice send'),\n action: this._sendTaxInvoice.bind(this),\n ...CommonButtonStyles.add\n }\n ]\n }\n }\n\n render() {\n return html`\n <div class=\"invoice-type\">\n * ${INVOICE_TYPE[this.taxInvoice?.invoiceType]} (${SHORT_BUSINESS_REGISTRATION_CATEGORY[this.buyer.buyerBusinessRegistrationCategory]})\n </div>\n\n <div class=\"title\">\n <table>\n <tr>\n <th>${i18next.t('field.short invoice type')}</th>\n <td>\n ${Object.keys(SHORT_INVOICE_TYPE['TAX_INVOICE']).map(key => {\n const disabled: boolean = key !== InvoiceType.TAX_INVOICE && key !== InvoiceType.SMALL_BUSINESS_TAX_INVOICE\n const checked: boolean = key === InvoiceType.TAX_INVOICE\n return html`\n <label for=\"${'tax_' + key}\">${SHORT_INVOICE_TYPE['TAX_INVOICE'][key]}</label>\n <input\n type=\"radio\"\n id=\"${'tax_' + key}\"\n .value=\"${key}\"\n name=\"invoiceType\"\n ?checked=${checked}\n ?disabled=${disabled}\n @change=${this._onInputTaxInvoice}\n />\n `\n })}\n </td>\n <th>${i18next.t('field.tax invoice buyer registration category')}</th>\n <td>\n ${Object.keys(BUSINESS_REGISTRATION_CATEGORY).map(key => {\n const disabled: boolean = key !== BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER\n const checked: boolean = key === BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER\n return html`\n <label for=\"${'tax_' + key}\">${BUSINESS_REGISTRATION_CATEGORY[key]}</label>\n <input type=\"radio\" id=\"${'tax_' + key}\" value=\"${key}\" name=\"buyerBusinessRegistrationCategory\" ?checked=${checked} ?disabled=${disabled} />\n `\n })}\n </td>\n </tr>\n </table>\n </div>\n\n <div class=\"body\">\n <div class=\"header\">\n <span><button @click=${this._openSupplierPopup}>공급처 선택</button></span>\n <span><button @click=${this._openBuyerPopup}>공급받는자 선택</button></span>\n </div>\n\n <div class=\"data\">\n <table class=\"supplier\">\n <colgroup>\n <col width=\"150px\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n </colgroup>\n <tr>\n <th rowspan=\"6\" class=\"target\">${i18next.t('field.tax invoice supplier')}</th>\n <th required>${i18next.t('field.short business registration number')}</th>\n <td>${this.supplier?.supplierBusinessRegistrationNumber.replace(/(\\S{3})(\\S{2})(\\S{5})/g, '$1-$2-$3')}</td>\n <th>${i18next.t('field.short branch identification')}</th>\n <td>${this.supplier?.supplierBranchIdentification}</td>\n </tr>\n <tr>\n <th required>${i18next.t('field.short tax invoice business name')}</th>\n <td><input type=\"text\" name=\"supplierBusinessName\" .value=${this.supplier?.supplierBusinessName || ''} @input=${this._onInputTaxInvoice} /></td>\n <th required>${i18next.t('field.tax invoice representative name')}</th>\n <td>\n <input type=\"text\" name=\"supplierRepresentativeName\" .value=${this.supplier?.supplierRepresentativeName || ''} @input=${this._onInputTaxInvoice} />\n </td>\n </tr>\n <tr>\n <th>${i18next.t('field.address')}</th>\n <td colspan=\"3\">${this.supplier?.supplierAddress}</td>\n </tr>\n <tr>\n <th>${i18next.t('field.business type')}</th>\n <td><input type=\"text\" name=\"supplierBusinessType\" .value=${this.supplier?.supplierBusinessType || ''} @input=${this._onInputTaxInvoice} /></td>\n <th>${i18next.t('field.industry type')}</th>\n <td><input type=\"text\" name=\"supplierIndustryType\" .value=${this.supplier?.supplierIndustryType || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th rowspan=\"2\">${i18next.t('field.email')}</th>\n <td rowspan=\"2\" colspan=\"3\">\n <input type=\"text\" name=\"supplierContactEmail\" .value=${this.supplier?.supplierContactEmail || ''} @input=${this._onInputTaxInvoice} />\n </td>\n </tr>\n <tr></tr>\n </table>\n\n <table class=\"buyer\">\n <colgroup>\n <col width=\"150px\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n <col width=\"18%\" />\n <col width=\"32%\" />\n </colgroup>\n <tr>\n <th rowspan=\"6\" class=\"target\">${i18next.t('field.tax invoice buyer')}</th>\n <th required>${i18next.t('field.short business registration number')}</th>\n <td>\n <input\n type=\"text\"\n maxlength=\"10\"\n name=\"buyerBusinessRegistrationNumber\"\n .value=${this.buyer?.buyerBusinessRegistrationNumber || ''}\n @input=${this._onInputTaxInvoice}\n />\n </td>\n <th>${i18next.t('field.short branch identification')}</th>\n <td><input type=\"text\" name=\"buyerBranchIdentification\" .value=${this.buyer?.buyerBranchIdentification || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th required>${i18next.t('field.short tax invoice business name')}</th>\n <td><input type=\"text\" name=\"buyerBusinessName\" .value=${this.buyer?.buyerBusinessName || ''} @input=${this._onInputTaxInvoice} /></td>\n <th required>${i18next.t('field.tax invoice representative name')}</th>\n <td><input type=\"text\" name=\"buyerRepresentativeName\" .value=${this.buyer?.buyerRepresentativeName || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.address')}</th>\n <td colspan=\"3\"><input type=\"text\" name=\"buyerAddress\" .value=${this.buyer?.buyerAddress || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.business type')}</th>\n <td><input type=\"text\" name=\"buyerBusinessType\" .value=${this.buyer?.buyerBusinessType || ''} @input=${this._onInputTaxInvoice} /></td>\n\n <th>${i18next.t('field.industry type')}</th>\n <td><input type=\"text\" name=\"buyerIndustryType\" .value=${this.buyer?.buyerIndustryType || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.email')}</th>\n <td colspan=\"3\"><input type=\"text\" name=\"buyer1stContactEmail\" .value=${this.buyer?.buyer1stContactEmail || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n <tr>\n <th>${i18next.t('field.email')}</th>\n <td colspan=\"3\"><input type=\"text\" name=\"buyer2ndContactEmail\" .value=${this.buyer?.buyer2ndContactEmail || ''} @input=${this._onInputTaxInvoice} /></td>\n </tr>\n </table>\n </div>\n\n <div class=\"info flex-column\">\n <div class=\"flex-row\">\n <div class=\"title\" required>${i18next.t('field.issue date')}</div>\n <div class=\"value\">\n <input type=\"date\" name=\"issueDate\" .value=${this.taxInvoice.issueDate} @input=${this._onInputTaxInvoice} />\n <span class=\"desc\">※ 작성일자는 공급 연월일을 의미함</span>\n </div>\n <div class=\"title\">${i18next.t('field.remark0')}</div>\n <div class=\"value\"><input type=\"text\" name=\"remark0\" .value=${this.taxInvoice?.remark0 || ''} @input=${this._onInputTaxInvoice} /></div>\n </div>\n <div class=\"flex-row\">\n <div class=\"title\">${i18next.t('field.total amount')}</div>\n <div class=\"value\">${this._numberFormat(this.taxInvoice?.totalAmount)}</div>\n <div class=\"title\">${i18next.t('field.supply amount')}</div>\n <div class=\"value\">${this._numberFormat(this.taxInvoice?.supplyAmount)}</div>\n <div class=\"title\">${i18next.t('field.tax amount')}</div>\n <div class=\"value\">${this._numberFormat(this.taxInvoice?.taxAmount)}</div>\n </div>\n </div>\n\n <div class=\"items\">\n <div class=\"desc desc-date\">\n ※ 아래 '품목'의 '월'은 상단 '작성일자'의 '월'이 자동 반영됩니다. 합계의 '계산' 버튼은 금액을 공급가액과 세액으로 계산할 수 있습니다.\n </div>\n <div class=\"desc\"><button class=\"btn-add\" @click=${this._onAddInvoiceItem}>품목추가</button> 품목은 최대 16개까지 추가, 삭제 가능</div>\n\n <table>\n <colgroup>\n <col width=\"5%\" />\n <col width=\"5%\" />\n <col width=\"14%\" />\n <col width=\"7%\" />\n <col width=\"7%\" />\n <col width=\"12%\" />\n <col width=\"12%\" />\n <col width=\"12%\" />\n <col width=\"16%\" />\n <col width=\"8%\" />\n </colgroup>\n <tr>\n <th>${i18next.t('field.tax invoice month')}</th>\n <th required>${i18next.t('field.tax invoice day')}</th>\n <th required>${i18next.t('field.tax invoice item name')}</th>\n <th>${i18next.t('field.tax invoice ea')}</th>\n <th required>${i18next.t('field.tax invoice quantity')}</th>\n <th required>${i18next.t('field.tax invoice price')}</th>\n <th>${i18next.t('field.supply amount')}</th>\n <th>${i18next.t('field.tax amount')}</th>\n <th>${i18next.t('field.remark0')}</th>\n <th>${i18next.t('field.delete')}</th>\n </tr>\n\n ${this.taxInvoiceItems.map(\n (item, idx) => html`\n <tr>\n <input type=\"hidden\" name=\"sequence\" value=${item.sequence} />\n <td>${this.taxInvoice.issueDate.split('-')[1]}</td>\n <td><input type=\"text\" numeric maxlength=\"2\" name=\"supplyDate\" @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" name=\"itemName\" .value=${item.itemName} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" name=\"specification\" .value=${item.specification} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" numeric name=\"quantity\" .value=${this._numberFormat(item.quantity)} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" numeric name=\"unitPrice\" .value=${this._numberFormat(item.unitPrice)} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><input type=\"text\" numeric name=\"supplyPrice\" .value=${this._numberFormat(item.supplyPrice)} @input=${e => this._onInputItem(e, idx)} /></td>\n <td>\n <input\n type=\"text\"\n numeric\n name=\"taxPrice\"\n .value=${this._numberFormat(item.taxPrice)}\n @input=${e => this._onInputItem(e, idx)}\n .disabled=${this.isTaxFree}\n />\n </td>\n <td><input type=\"text\" name=\"remark\" .value=${item.remark || ''} @input=${e => this._onInputItem(e, idx)} /></td>\n <td><button class=\"btn-delete\" @click=${e => this._onRemoveInvoiceItem(e, item.sequence)}>삭제</button></td>\n </tr>\n `\n )}\n </table>\n </div>\n\n <div class=\"summary\">\n <table>\n <colgroup>\n <col width=\"25%\" />\n <col width=\"25%\" />\n <col width=\"25%\" />\n <col width=\"25%\" />\n </colgroup>\n <tr>\n <th>${i18next.t('field.tax invoice payment cash')}</th>\n <th>${i18next.t('field.tax invoice payment check')}</th>\n <th>${i18next.t('field.tax invoice payment promissory note')}</th>\n <th>${i18next.t('field.tax invoice payment accounts receivable')}</th>\n </tr>\n <tr>\n <td><input type=\"text\" numeric name=\"paymentAmountCash\" .value=${this.taxInvoice?.paymentAmountCash || ''} @input=${this._onInputTaxInvoice} /></td>\n <td><input type=\"text\" numeric name=\"paymentAmountCheck\" .value=${this.taxInvoice?.paymentAmountCheck || ''} @input=${this._onInputTaxInvoice} /></td>\n <td>\n <input\n type=\"text\"\n numeric\n name=\"paymentAmountPromissoryNote\"\n .value=${this.taxInvoice?.paymentAmountPromissoryNote || ''}\n @input=${this._onInputTaxInvoice}\n />\n </td>\n <td>\n <input\n type=\"text\"\n numeric\n name=\"paymentAmountAccountsReceivable\"\n .value=${this.taxInvoice?.paymentAmountAccountsReceivable || ''}\n @input=${this._onInputTaxInvoice}\n />\n </td>\n </tr>\n </table>\n <div>\n ${i18next.t('text.prev tax invoice description payment') + ' ('}\n <span class=\"type-wrapper\">\n <div>\n <input type=\"radio\" id=\"purpose_20\" name=\"purpose\" .value=${Purpose.INVOICE} @change=${this._onInputTaxInvoice} checked />\n <label for=\"purpose_20\">${PURPOSE[Purpose.INVOICE]}</label>\n </div>\n <div>\n <input type=\"radio\" id=\"purpose_10\" name=\"purpose\" .value=${Purpose.RECEIPT} @change=${this._onInputTaxInvoice} />\n <label for=\"purpose_10\">${PURPOSE[Purpose.RECEIPT]}</label>\n </div>\n </span>\n ${') ' + i18next.t('text.next tax invoice description payment')}\n </div>\n </div>\n </div>\n `\n }\n\n async pageInitialized(lifecycle: any) {\n this._fetchSupplier()\n }\n\n async _fetchSupplier() {\n const response = await client.query({\n query: gql`\n query taxInvoiceDefaultCompany {\n response: taxInvoiceDefaultCompany {\n businessRegistrationNumber\n branchIdentification\n businessName\n representativeName\n address\n businessType\n industryType\n department\n contactName\n contactPhone\n contactEmail\n contactCellPhone\n }\n }\n `\n })\n\n const supplier = response.data.response\n this.supplier = {\n supplierBusinessRegistrationCategory: supplier.businessRegistrationCategory,\n supplierBusinessRegistrationNumber: supplier.businessRegistrationNumber,\n supplierBranchIdentification: supplier.branchIdentification,\n supplierBusinessName: supplier.businessName,\n supplierRepresentativeName: supplier.representativeName,\n supplierAddress: supplier.address,\n supplierBusinessType: supplier.businessType,\n supplierIndustryType: supplier.industryType,\n supplierDepartment: supplier.department,\n supplierContactName: supplier.contactName,\n supplierContactPhone: supplier.contactPhone,\n supplierContactEmail: supplier.contactEmail,\n supplierContactCellPhone: supplier.contactCellPhone\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 _sendTaxInvoice() {\n // 아이템 시퀀스 재 할당 + 날짜, 품목, 규격, 수량이 없으면 필터\n let taxInvoiceItems = this.taxInvoiceItems.map((item, idx) => ({ ...item, sequence: idx + 1, quantity: Number(item.quantity), unitPrice: Number(item.unitPrice) }))\n taxInvoiceItems = taxInvoiceItems.filter(item => item.supplyDate && item.itemName && item.quantity && item.unitPrice)\n\n // taxInvoice 데이터 생성 및 타입 변환\n let taxInvoice = { ...this.taxInvoice, ...this.supplier, ...this.buyer }\n taxInvoice.paymentAmountCash = Number(taxInvoice.paymentAmountCash || 0)\n taxInvoice.paymentAmountCheck = Number(taxInvoice.paymentAmountCheck || 0)\n taxInvoice.paymentAmountPromissoryNote = Number(taxInvoice.paymentAmountPromissoryNote || 0)\n taxInvoice.paymentAmountAccountsReceivable = Number(taxInvoice.paymentAmountAccountsReceivable || 0)\n taxInvoice.supplyAmount = Number(taxInvoice.supplyAmount || 0)\n taxInvoice.taxAmount = Number(taxInvoice.taxAmount || 0)\n taxInvoice.buyerBusinessRegistrationNumber = taxInvoice.buyerBusinessRegistrationNumber.replace(/-/gi, '')\n taxInvoice.supplierBusinessRegistrationNumber = taxInvoice.supplierBusinessRegistrationNumber.replace(/-/gi, '')\n\n // 공급받는자 필수 값 체크\n if (!this.buyer.buyerBusinessRegistrationNumber || !this.buyer.buyerBusinessName || !this.buyer.buyerRepresentativeName) {\n alert('공급받는자 필수 값을 모두 입력해 주세요.')\n return\n }\n\n // 아이템 개수 체크\n if (taxInvoiceItems.length === 0) {\n alert('등록 가능한 아아템의 개수는 1개 이상이여야 합니다.')\n return\n }\n\n // 세금이 없는 타입인데 세금이 있는지 체크\n if (taxInvoice.invoiceType === InvoiceType.SMALL_BUSINESS_TAX_INVOICE && taxInvoice.taxAmount > 0) {\n alert('세금이 0원이 아닙니다.')\n return\n }\n\n // 현금, 수표, 어음, 외상미수금의 합계 = 총 합계금액 체크\n const paymentAmount: number =\n taxInvoice.paymentAmountCash + taxInvoice.paymentAmountCheck + taxInvoice.paymentAmountPromissoryNote + taxInvoice.paymentAmountAccountsReceivable\n if (paymentAmount > 0 && paymentAmount !== taxInvoice.totalAmount) {\n alert('현금, 수표, 어음, 외상미수금의 합계는 총 합계금액과 동일해야 합니다.')\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation SendTaxInvoicesByApi($taxInvoiceSendList: [TaxInvoiceSend!]!) {\n response: sendTaxInvoicesByApi(taxInvoiceSendList: $taxInvoiceSendList)\n }\n `,\n variables: {\n taxInvoiceSendList: [\n {\n taxInvoice,\n taxInvoiceItems\n }\n ]\n }\n })\n\n if (!response.errors) {\n notify({ message: i18next.t('text.success tax send') })\n this.taxInvoice = this.defaultTaxInvoice\n this.supplier = this.defaultSupplier\n this.buyer = this.defaultBuyer\n this.taxInvoiceItems = []\n }\n }\n\n private _numberFormat(value: number): string {\n return !value ? '' : new Intl.NumberFormat('en-US').format(value) || ''\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputTaxInvoice(event: InputEvent) {\n const target = event.target as HTMLInputElement\n\n // 숫자 타입은 다른 문자 입력 제거\n if (target.hasAttribute('numeric')) {\n target.value = target.value.replace(/\\D/g, '')\n }\n\n if (target.name.startsWith('supplier')) {\n this.supplier[target.name] = target.value\n } else if (target.name.startsWith('buyer')) {\n this.buyer[target.name] = target.value\n } else {\n // 날짜 체크가 오늘 날짜를 넘어가면 값 변경 되면 안됨\n if (target.name === 'issueDate' && target.value > this.today) {\n target.value = this.taxInvoice['issueDate']\n alert('작성일자는 현재일까지 입력하시기 바랍니다.')\n return\n }\n\n // 세금이 없는 영세율이 선택 시 모든 아이템의 세금 0원으로 초기화\n if (target.name === 'invoiceType' && target.value === InvoiceType.SMALL_BUSINESS_TAX_INVOICE) {\n this.isTaxFree = true\n this.taxInvoice = { ...this.taxInvoice, taxAmount: 0 }\n this.taxInvoiceItems = this.taxInvoiceItems.map(item => ({ ...item, taxPrice: 0 }))\n }\n\n // 변경시에는 아이템 변경도 리 렌더가 필요해서 데이터 갱신\n this.taxInvoice[target.name] = target.value\n this.taxInvoice = { ...this.taxInvoice }\n }\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputItem(e: InputEvent, idx: number) {\n const target = e.target as HTMLInputElement\n let inputVal: any = target.value\n\n // 숫자 타입은 다른 문자 입력 제거\n if (target.hasAttribute('numeric')) {\n inputVal = Number(inputVal.replace(/\\D/g, ''))\n target.value = inputVal\n }\n\n // 공급일자 케이스 시 => 세금계산서의 작성일자의 YYYY-MM + 아이템의 입력된 DD\n if (target.name === 'supplyDate') {\n const itemDate = this.taxInvoice.issueDate.substring(0, 8) + inputVal.toString().padStart(2, '0')\n if (itemDate > this.taxInvoice.issueDate) {\n alert('품목의 일자는 작성일자보다 클 수 없습니다.')\n target.value = ''\n }\n inputVal = itemDate\n }\n\n // 수량, 단가 수정시 공급가액/세액 자동 계산\n if (target.name == 'quantity' || target.name == 'unitPrice') {\n const supplyPrice = target.name == 'quantity' ? Number(inputVal) * this.taxInvoiceItems[idx]['unitPrice'] : Number(inputVal) * this.taxInvoiceItems[idx]['quantity']\n this.taxInvoiceItems[idx]['supplyPrice'] = supplyPrice\n this.taxInvoiceItems[idx]['taxPrice'] = this.isTaxFree ? 0 : Math.floor(supplyPrice / 10)\n }\n\n // 인풋에 값 넣기\n this.taxInvoiceItems[idx][target.name] = inputVal\n\n // 아이템 금액에 관련된 필드 수정시 합계 계산\n if (['quantity', 'unitPrice', 'supplyPrice', 'taxPrice'].includes(target.name)) {\n this.taxInvoiceItems = [...this.taxInvoiceItems]\n this._setTaxInvoiceSummaryCalc()\n }\n }\n\n private async _openSupplierPopup() {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: taxInvoiceApis(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name: provider\n businessRegistrationNumber\n branchIdentification\n businessName\n representativeName\n address\n businessType\n industryType\n department\n contactName\n contactPhone\n contactEmail\n contactCellPhone\n }\n }\n }\n `\n })\n\n const items = response.data.responses.items || []\n openPopup(\n html`\n <company-list-popup\n .companyList=${items}\n @selected=${e => {\n this.supplier = {\n supplierBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,\n supplierBusinessRegistrationNumber: e.detail.businessRegistrationNumber || '',\n supplierBranchIdentification: e.detail.branchIdentification || '',\n supplierBusinessName: e.detail.businessName || '',\n supplierRepresentativeName: e.detail.representativeName || '',\n supplierAddress: e.detail.address || '',\n supplierBusinessType: e.detail.businessType || '',\n supplierIndustryType: e.detail.industryType || '',\n supplierDepartment: e.detail.department || '',\n supplierContactName: e.detail.contactName || '',\n supplierContactPhone: e.detail.contactPhone || '',\n supplierContactEmail: e.detail.contactEmail || '',\n supplierContactCellPhone: e.detail.contactCellPhone || ''\n }\n\n history.back()\n }}\n >\n </company-list-popup>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.company list popup')\n }\n )\n }\n\n private async _openBuyerPopup() {\n const response = await client.query({\n query: gql`\n query TaxInvoiceBuyerList {\n responses: taxInvoiceBuyerList {\n id\n name\n businessRegistrationNumber\n branchIdentification\n businessName\n representativeName\n address\n businessType\n industryType\n department\n contactName\n contactPhone\n contactEmail\n contactCellPhone\n }\n }\n `\n })\n\n const items = response.data.responses || []\n openPopup(\n html`\n <company-list-popup\n .companyList=${items}\n @selected=${e => {\n this.buyer = {\n buyerBusinessRegistrationCategory: BusinessRegistrationCategory.BUSINESS_REGISTRATION_NUMBER,\n buyerBusinessRegistrationNumber: e.detail.businessRegistrationNumber || '',\n buyerBranchIdentification: e.detail.branchIdentification || '',\n buyerBusinessName: e.detail.businessName || '',\n buyerRepresentativeName: e.detail.representativeName || '',\n buyerAddress: e.detail.address || '',\n buyerBusinessType: e.detail.businessType || '',\n buyerIndustryType: e.detail.industryType || '',\n buyer1stDepartment: e.detail.department || '',\n buyer1stContactName: e.detail.contactName || '',\n buyer1stContactPhone: e.detail.contactPhone || '',\n buyer1stContactEmail: e.detail.contactEmail || '',\n buyer1stContactCellPhone: e.detail.contactCellPhone || ''\n }\n\n history.back()\n }}\n >\n </company-list-popup>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.company list popup')\n }\n )\n }\n\n private _onAddInvoiceItem(e: Event) {\n e.preventDefault()\n if (this.taxInvoiceItems.length >= 16) {\n alert('품목은 최대 16개까지 추가 가능합니다.')\n return\n }\n\n this.taxInvoiceItems = [...this.taxInvoiceItems, { ...this.defaultTaxInvoiceItem, sequence: new Date().getTime() }]\n }\n\n private _onRemoveInvoiceItem(e: Event, sequence: number) {\n e.preventDefault()\n this.taxInvoiceItems = [...this.taxInvoiceItems.filter(item => item.sequence != sequence)]\n this._setTaxInvoiceSummaryCalc()\n }\n\n private _setTaxInvoiceSummaryCalc() {\n const supplyPrice: number = this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.supplyPrice), 0) || 0\n const taxPrice: number = this.isTaxFree ? 0 : this.taxInvoiceItems.reduce((prev, item) => prev + Number(item.taxPrice), 0) || 0\n const totalAmount: number = supplyPrice + taxPrice\n\n this.taxInvoice = { ...this.taxInvoice, supplyAmount: supplyPrice, taxAmount: taxPrice, totalAmount: totalAmount }\n }\n}\n"]}
|