fix: счёт на оплату кладётся в библиотеку под латинским именем (OCR терял расширение)
Tests / frontend-test (pull_request) Successful in 1m24s
Tests / frontend-test (pull_request) Successful in 1m24s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,7 +8,7 @@ import { WebPartContext } from '@microsoft/sp-webpart-base';
|
|||||||
import { APPROVAL_API_CLIENT_ID, DATA_SITE_URL, DICTIONARY_API_BASE_URL } from '../../../shared/config';
|
import { APPROVAL_API_CLIENT_ID, DATA_SITE_URL, DICTIONARY_API_BASE_URL } from '../../../shared/config';
|
||||||
import { PAYMENT_INVOICES_LIBRARY_TITLE } from '../../../shared/listTitles';
|
import { PAYMENT_INVOICES_LIBRARY_TITLE } from '../../../shared/listTitles';
|
||||||
import { getSP } from '../../../shared/pnp/pnpjs';
|
import { getSP } from '../../../shared/pnp/pnpjs';
|
||||||
import { fileStamp, storedFileName } from '../../../shared/chat/chatFileNames';
|
import { fileStamp } from '../../../shared/chat/chatFileNames';
|
||||||
|
|
||||||
/** Колонка библиотеки, куда OCR кладёт распознанный текст счёта. */
|
/** Колонка библиотеки, куда OCR кладёт распознанный текст счёта. */
|
||||||
const FILE_CONTENT_FIELD = 'file_content';
|
const FILE_CONTENT_FIELD = 'file_content';
|
||||||
@@ -37,10 +37,13 @@ export function validateInvoiceFile(file: File): string | undefined {
|
|||||||
/**
|
/**
|
||||||
* Сохранить файл счёта в библиотеку. Делаем это сразу при выборе файла, до
|
* Сохранить файл счёта в библиотеку. Делаем это сразу при выборе файла, до
|
||||||
* сохранения самой заявки: OCR работает с элементом библиотеки, а не с вложением.
|
* сохранения самой заявки: OCR работает с элементом библиотеки, а не с вложением.
|
||||||
* Отметка времени в имени исключает перезапись счёта с тем же именем из другой заявки.
|
* Имя в библиотеке — только латиница и цифры: OCR-сервис получает имя в multipart и
|
||||||
|
* на кириллице теряет расширение («unsupported file type ''»). Исходное имя
|
||||||
|
* хранится в данных заявки (InvoiceFileName), поэтому в библиотеке оно не нужно.
|
||||||
|
* Метка времени и случайный хвост исключают перезапись счёта другой заявки.
|
||||||
*/
|
*/
|
||||||
export async function storeInvoice(file: File): Promise<IStoredInvoice> {
|
export async function storeInvoice(file: File): Promise<IStoredInvoice> {
|
||||||
const storedName = storedFileName(fileStamp(new Date()), 1, file.name);
|
const storedName = `invoice-${fileStamp(new Date())}-${Math.random().toString(36).slice(2, 8)}.pdf`;
|
||||||
const root = getSP().web.lists.getByTitle(PAYMENT_INVOICES_LIBRARY_TITLE).rootFolder;
|
const root = getSP().web.lists.getByTitle(PAYMENT_INVOICES_LIBRARY_TITLE).rootFolder;
|
||||||
const added = await root.files.addUsingPath(storedName, file);
|
const added = await root.files.addUsingPath(storedName, file);
|
||||||
// Id элемента библиотеки нужен OCR, а addUsingPath отдаёт только сведения о файле.
|
// Id элемента библиотеки нужен OCR, а addUsingPath отдаёт только сведения о файле.
|
||||||
|
|||||||
Reference in New Issue
Block a user