新增手工开票 MING SONG 公司选项

This commit is contained in:
andy
2026-08-05 23:04:52 +08:00
parent d56587a078
commit 6cc9bb4439
4 changed files with 61 additions and 1 deletions

View File

@@ -527,6 +527,52 @@ describe('ReservationManualInvoiceView', () => {
expect(wrapper.find('a[href="https://oss.example/invoices/manual-91001.pdf"]').exists()).toBe(true)
})
it('prefills MING SONG directory data and submits its stable recipient codes', async () => {
vi.mocked(service.generateManualReservationInvoice).mockResolvedValue(createResult())
const wrapper = mountView()
await wrapper.find('[data-testid="recipient-company-code"]').setValue('MING_SONG')
expect((wrapper.find('[data-testid="recipient-contact-id"]').element as HTMLSelectElement).value).toBe(
'MING_SONG_KHUN_JIN',
)
expect((wrapper.find('[data-testid="recipient-company-input"]').element as HTMLInputElement).value).toBe(
'MING SONG CO.LTD',
)
expect((wrapper.find('[data-testid="recipient-attention-input"]').element as HTMLInputElement).value).toBe(
'KHUN JIN',
)
expect((wrapper.find('[data-testid="recipient-address"]').element as HTMLTextAreaElement).value).toBe(
'290 Soi Lat Phrao 94 (Panjamit), Phlapphla Subdistrict, Wang Thonglang District, Bangkok, TH, 10310',
)
expect((wrapper.find('[data-testid="recipient-telephone"]').element as HTMLInputElement).value).toBe(
'098-2519896',
)
expect((wrapper.find('[data-testid="recipient-email"]').element as HTMLInputElement).value).toBe(
'taiziyoutravel@gmail.com',
)
await fillMinimumInvoiceForm(wrapper)
await wrapper.find('[data-testid="manual-invoice-submit"]').trigger('click')
await flushPromises()
expect(service.generateManualReservationInvoice).toHaveBeenCalledWith(
expect.objectContaining({
invoice_payload: expect.objectContaining({
recipient: expect.objectContaining({
company_code: 'MING_SONG',
contact_id: 'MING_SONG_KHUN_JIN',
company: 'MING SONG CO.LTD',
attention: 'KHUN JIN',
address: '290 Soi Lat Phrao 94 (Panjamit), Phlapphla Subdistrict, Wang Thonglang District, Bangkok, TH, 10310',
telephone: '098-2519896',
email: 'taiziyoutravel@gmail.com',
}),
}),
}),
)
})
it('downloads the generated PDF through a browser blob URL', async () => {
vi.mocked(service.generateManualReservationInvoice).mockResolvedValue(createResult())
const fetchMock = vi.fn().mockResolvedValue({

View File

@@ -870,6 +870,19 @@ const recipientCompanies: RecipientCompanySeed[] = [
},
],
},
{
company_code: 'MING_SONG',
company: 'MING SONG CO.LTD',
contacts: [
{
contact_id: 'MING_SONG_KHUN_JIN',
attention: 'KHUN JIN',
address: '290 Soi Lat Phrao 94 (Panjamit), Phlapphla Subdistrict, Wang Thonglang District, Bangkok, TH, 10310',
telephone: '098-2519896',
email: 'taiziyoutravel@gmail.com',
},
],
},
{
company_code: 'HANATOUR',
company: 'HANATOUR TD CO., LTD.',

View File

@@ -447,7 +447,7 @@ M009 后端 CP2 已实现:页面可不依赖订单或任务,用户手工填
- 从任务进入时,后续可以使用 `GET /api/reservation/tasks/{taskId}``fields[]`、草稿或确认 payload 预填;从订单进入时,需要明确选择具体任务或提示仅使用订单摘要,避免一个订单多任务时字段来源不清。
- Company、Attention、Address、Tel、Email、Booking Date 第一阶段可以按“选择 + Manual 手填”控件处理。
- Company、Attention、Address、Tel、Email 是一组收件方联系人档案,不是五个互相独立字段;选择 Company 后应刷新 Attention 候选,选择 Attention 后应带出 Address、Tel、Email。Booking Date 展示在同一区域,但不属于联系人档案,应作为 `document.booking_date` 独立提交。
- 第一阶段已确认组客户 / 旅行社种子数据:`LIAN_TAI` / `LIAN TAI TRAVEL (THAILAND) CO., LTD.` + `Khun Ann``QBD` / `Q.B.D. TRAVEL GROUP CO., LTD` + `Jitdanun Panaphuchong``HANATOUR` / `HANATOUR TD CO., LTD.` + 7 个联系人。完整数据以 `docs/project/requirements/M009-manual-invoice-generation-v1.md` 为准。
- 第一阶段已确认组客户 / 旅行社种子数据:`LIAN_TAI` / `LIAN TAI TRAVEL (THAILAND) CO., LTD.` + `Khun Ann``QBD` / `Q.B.D. TRAVEL GROUP CO., LTD` + `Jitdanun Panaphuchong``MING_SONG` / `MING SONG CO.LTD` + `KHUN JIN``HANATOUR` / `HANATOUR TD CO., LTD.` + 7 个联系人。完整数据以 `docs/project/requirements/M009-manual-invoice-generation-v1.md` 为准。
- Room Type、Room Rate、Extra Bed 建议也预留“选择 + 可手填 / 可覆盖”能力,后续接 PMS 房型、Rate Code 或价格配置。
- Room Rate / 费用明细 Rate 第一阶段只校验必填、数字格式和非负数,允许 `0`Quantity 和 Nights 仍必须大于 `0`
- No.of Night(s) 前端默认按 `Departure Date - Arrival Date` 自动填入第一条费用明细 Night(s),用户手工修改后保留用户输入,不再因日期变化覆盖。

View File

@@ -113,6 +113,7 @@
| --- | --- | --- | --- | --- | --- | --- |
| `LIAN_TAI` | `LIAN TAI TRAVEL (THAILAND) CO., LTD.` | `LIAN_TAI_KHUN_ANN` | `Khun Ann` | `2/86 Rajpattana Road, Rajpattana, Sapansoong, Bangkok, TH, 10240` | `061-397-2675` | `op.liantaitravel@gmail.com` |
| `QBD` | `Q.B.D. TRAVEL GROUP CO., LTD` | `QBD_JITDANUN_PANAPHUCHONG` | `Jitdanun Panaphuchong` | `2/90 Rajpattana,Rajpattana,Sapansoong, Bangkok, TH, 10240` | `089-032 0176` | `op.qbdtravel@gmail.com` |
| `MING_SONG` | `MING SONG CO.LTD` | `MING_SONG_KHUN_JIN` | `KHUN JIN` | `290 Soi Lat Phrao 94 (Panjamit), Phlapphla Subdistrict, Wang Thonglang District, Bangkok, TH, 10310` | `098-2519896` | `taiziyoutravel@gmail.com` |
| `HANATOUR` | `HANATOUR TD CO., LTD.` | `HANATOUR_WICHIENPRAKARN` | `Wichienprakarn, Nuanphae, Khun.` | `HanaTour Bldg, 41,Insadong 5-gil, Jongno-gu, KR` | `066 124 - 7297` | `HI219@hanatour.com` |
| `HANATOUR` | `HANATOUR TD CO., LTD.` | `HANATOUR_PHONGBUPPA` | `Phongbuppa, Buppachat` | `HanaTour Bldg, 41,Insadong 5-gil, Jongno-gu, KR` | `096 051 3587` | `HI223@hanatour.com` |
| `HANATOUR` | `HANATOUR TD CO., LTD.` | `HANATOUR_KANG_SUNG_HWA` | `Kang,Sung Hwa` | `HanaTour Bldg, 41,Insadong 5-gil, Jongno-gu, KR` | `82 051 804 0707` | `k8040707@nave.com` |