fix(desktop): «платёжка» → «чек об оплате» в UI реестра платежей
Подсказки/лейблы переименованы под каноничную терминологию (чек об оплате — подтверждающий документ, не «платёжка»): - тултипы «Чек об оплате приложен / не приложен» (desktop + mobile) - fileKindLabel PAYMENT_PROOF → «Чек об оплате» - расчётный ПЛАТЁЖ возврата/доплаты (вместо «платёжка») в подсказках/алертах ReportExpenseAdvance + согласование рода - комментарии приведены к новой терминологии (чек / расчётный платёж) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,9 +25,9 @@ async function loadExpenseFilesByItem(
|
||||
return result;
|
||||
}
|
||||
|
||||
// Механика строки расхода (ADVANCE/DIRECT) нужна, чтобы решить, какие документы
|
||||
// прикладывает кассир: по авансу — только платёжка, по оплате организации —
|
||||
// ещё и закрывающие документы (акт/счёт-фактура/накладная).
|
||||
// Механика строки расхода (ADVANCE/DIRECT) нужна, чтобы решить, показывать ли
|
||||
// закрывающие документы: чек об оплате теперь общий (в ядре), а по оплате
|
||||
// организации (DIRECT) — ещё и закрывающие документы (акт/счёт-фактура/накладная).
|
||||
async function loadItemMechanics(
|
||||
proposal_hash: string,
|
||||
item_hash: string,
|
||||
|
||||
+2
-2
@@ -55,11 +55,11 @@ const props = defineProps<{
|
||||
// Хэши исходной СЗ и строки-аванса (item_hash == хэш платежа выдачи аванса).
|
||||
proposalHash: string;
|
||||
itemHash: string;
|
||||
// Сумма этой расчётной платёжки и её направление — чтобы показать кассиру
|
||||
// Сумма этого расчётного платежа и его направление — чтобы показать кассиру
|
||||
// «выдано → заявлено → разница» без поиска исходной строки в реестре.
|
||||
settlementAmount: string;
|
||||
isReturn: boolean;
|
||||
// Описание расхода из самой платёжки (fallback — из позиции СЗ).
|
||||
// Описание расхода из самого платежа (fallback — из позиции СЗ).
|
||||
description?: string;
|
||||
}>();
|
||||
|
||||
|
||||
+6
-6
@@ -98,8 +98,8 @@ const props = withDefaults(
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
// settlementHash — хэш заведённой платёжки расчёта (возврат/доплата), чтобы
|
||||
// реестр сразу раскрыл её с реквизитами; пусто при простом закрытии (факт==аванс).
|
||||
// settlementHash — хэш заведённого расчётного платежа (возврат/доплата), чтобы
|
||||
// реестр сразу раскрыл его с реквизитами; пусто при простом закрытии (факт==аванс).
|
||||
(e: 'reported', settlementHash?: string): void;
|
||||
}>();
|
||||
|
||||
@@ -133,8 +133,8 @@ const deltaHint = computed(() => {
|
||||
`${diff.toFixed(advance.value.precision)} ${advance.value.symbol}`,
|
||||
);
|
||||
return diffMinor < 0
|
||||
? `Недорасход ${diffLabel}: будет создана платёжка возврата — её нужно оплатить кооперативу.`
|
||||
: `Перерасход ${diffLabel}: будет создана платёжка доплаты — кооператив выплатит разницу.`;
|
||||
? `Недорасход ${diffLabel}: будет создан платёж возврата — его нужно оплатить кооперативу.`
|
||||
: `Перерасход ${diffLabel}: будет создан платёж доплаты — кооператив выплатит разницу.`;
|
||||
});
|
||||
|
||||
// Панель — только для аванса под отчёт: по счёту (DIRECT) отчётный документ
|
||||
@@ -284,11 +284,11 @@ async function submitReport(): Promise<void> {
|
||||
: '';
|
||||
if (result?.outcome === Zeus.ExpenseReportOutcome.RETURN_PENDING) {
|
||||
SuccessAlert(
|
||||
`Заведена платёжка возврата на ${settlementLabel}. Оплатите её кооперативу — после подтверждения кассой отчёт закроется.`,
|
||||
`Заведён платёж возврата на ${settlementLabel}. Оплатите его кооперативу — после подтверждения кассой отчёт закроется.`,
|
||||
);
|
||||
} else if (result?.outcome === Zeus.ExpenseReportOutcome.OVERSPEND_PENDING) {
|
||||
SuccessAlert(
|
||||
`Заведена платёжка доплаты на ${settlementLabel}. Кооператив выплатит разницу — после подтверждения кассой отчёт закроется.`,
|
||||
`Заведён платёж доплаты на ${settlementLabel}. Кооператив выплатит разницу — после подтверждения кассой отчёт закроется.`,
|
||||
);
|
||||
} else {
|
||||
SuccessAlert('Отчёт по авансу принят');
|
||||
|
||||
@@ -96,7 +96,7 @@ export function itemStatusVariant(
|
||||
export function fileKindLabel(kind: Zeus.ExpenseFileKind): string {
|
||||
switch (kind) {
|
||||
case Zeus.ExpenseFileKind.PAYMENT_PROOF:
|
||||
return 'Платёжка';
|
||||
return 'Чек об оплате';
|
||||
case Zeus.ExpenseFileKind.REPORT_FILE:
|
||||
return 'Чек';
|
||||
case Zeus.ExpenseFileKind.RETURN_PROOF:
|
||||
|
||||
+13
-13
@@ -51,12 +51,12 @@
|
||||
//- Статус отчёта по авансу (личный стол пайщика) — отдельная ось
|
||||
//- рядом со статусом платежа: требуется / подан / принят.
|
||||
BaseBadge(v-if='reportBadge(row)', :variant='reportBadge(row)?.variant') {{ reportBadge(row)?.label }}
|
||||
//- Кассирская отметка «платёжка приложена» — только на столе совета
|
||||
//- Кассирская отметка «чек об оплате приложен» — только на столе совета
|
||||
//- (пайщику чужая бухгалтерия не показывается).
|
||||
q-icon.proof-icon.proof-icon--ok(v-if='!hideActions && proofState(row) === "attached"', name='receipt_long', size='16px')
|
||||
q-tooltip Платёжка приложена
|
||||
q-tooltip Чек об оплате приложен
|
||||
q-icon.proof-icon.proof-icon--missing(v-else-if='!hideActions && proofState(row) === "missing"', name='receipt_long', size='16px')
|
||||
q-tooltip Платёжка не приложена
|
||||
q-tooltip Чек об оплате не приложен
|
||||
td.col-action(v-if='!hideActions', @click.stop)
|
||||
.cell-actions(v-if='["EXPIRED", "PENDING", "FAILED"].includes(row.status)')
|
||||
SetOrderPaidStatusButton(:id='row.id')
|
||||
@@ -100,7 +100,7 @@
|
||||
:reported-amount='advanceReportedAmount(row)',
|
||||
@reported='onReported'
|
||||
)
|
||||
//- Расчётная платёжка (возврат/доплата): кассиру/пайщику видно
|
||||
//- Расчётный платёж (возврат/доплата): кассиру/пайщику видно
|
||||
//- основание — исходный аванс, заявленный факт и документы.
|
||||
ExpenseSettlementBasisPanel.q-mt-sm(
|
||||
v-if='settlementRef(row)',
|
||||
@@ -132,9 +132,9 @@
|
||||
BaseBadge(:variant='getStatusVariant(row.status)') {{ row.status_label }}
|
||||
BaseBadge(v-if='reportBadge(row)', :variant='reportBadge(row)?.variant') {{ reportBadge(row)?.label }}
|
||||
q-icon.proof-icon.proof-icon--ok(v-if='!hideActions && proofState(row) === "attached"', name='receipt_long', size='16px')
|
||||
q-tooltip Платёжка приложена
|
||||
q-tooltip Чек об оплате приложен
|
||||
q-icon.proof-icon.proof-icon--missing(v-else-if='!hideActions && proofState(row) === "missing"', name='receipt_long', size='16px')
|
||||
q-tooltip Платёжка не приложена
|
||||
q-tooltip Чек об оплате не приложен
|
||||
.pay-card__row
|
||||
span.pay-card__amount
|
||||
q-icon.q-mr-xs(
|
||||
@@ -318,7 +318,7 @@ const getDirectionIcon = (direction?: string | null) => {
|
||||
};
|
||||
|
||||
// Ссылка на позицию СЗ для блока «Подтверждение оплаты»: только у платежей
|
||||
// расхода и только после подтверждения кассиром (платёжка появляется по факту).
|
||||
// расхода и только после подтверждения кассиром (чек появляется по факту).
|
||||
const expenseProofRef = (
|
||||
row: IPaymentRow,
|
||||
): { proposal_hash: string; item_hash: string } | null => {
|
||||
@@ -357,7 +357,7 @@ const advanceReportState = (row: IPaymentRow): string =>
|
||||
const advanceReportedAmount = (row: IPaymentRow): string =>
|
||||
(row.blockchain_data as { reported_amount?: string } | null)?.reported_amount ?? '';
|
||||
|
||||
// Расчётная платёжка (возврат недорасхода / доплата перерасхода) — ссылка на
|
||||
// Расчётный платёж (возврат недорасхода / доплата перерасхода) — ссылка на
|
||||
// исходную позицию-аванс, чтобы кассир видел основание (аванс/факт/документы),
|
||||
// не выискивая исходный платёж среди сотен строк реестра.
|
||||
const settlementRef = (
|
||||
@@ -380,7 +380,7 @@ const settlementRef = (
|
||||
|
||||
// Статус отчёта по авансу — только на личном столе пайщика и только у платежа
|
||||
// выдачи аванса (EXPENSE). Источник — зеркало blockchain_data.report_state;
|
||||
// дефолт «Требуется отчёт», пока пайщик не отчитался. Расчётные платёжки
|
||||
// дефолт «Требуется отчёт», пока пайщик не отчитался. Расчётные платежи
|
||||
// (EXPENSE_RETURN/EXPENSE_OVERSPEND) свой отчёт-бейдж не показывают.
|
||||
const reportBadge = (
|
||||
row: IPaymentRow,
|
||||
@@ -404,7 +404,7 @@ const proofState = (row: IPaymentRow): 'attached' | 'missing' | 'none' => {
|
||||
return count > 0 ? 'attached' : 'missing';
|
||||
};
|
||||
|
||||
// Локально отражаем загруженную платёжку, не перезагружая реестр.
|
||||
// Локально отражаем загруженный чек, не перезагружая реестр.
|
||||
const onProofUploaded = (row: IPaymentRow): void => {
|
||||
const data = (row.blockchain_data ?? {}) as { proof_count?: number };
|
||||
row.blockchain_data = { ...data, proof_count: (data.proof_count ?? 0) + 1 };
|
||||
@@ -493,7 +493,7 @@ const toggleExpand = (id: string | number): void => {
|
||||
expanded.set(id, !expanded.get(id));
|
||||
};
|
||||
|
||||
// После отчёта по авансу с недо-/перерасходом заводится отдельная платёжка
|
||||
// После отчёта по авансу с недо-/перерасходом заводится отдельный платёж
|
||||
// расчёта — перезагружаем реестр и сразу раскрываем её (по хэшу), чтобы пайщик
|
||||
// увидел реквизиты для оплаты, не догадываясь нажать «развернуть».
|
||||
const onReported = async (settlementHash?: string): Promise<void> => {
|
||||
@@ -505,8 +505,8 @@ const onReported = async (settlementHash?: string): Promise<void> => {
|
||||
if (row) expanded.set(row.id, true);
|
||||
};
|
||||
|
||||
// Кассир жмёт «Основание» в расчётной платёжке (возврат/доплата) → раскрываем
|
||||
// платёж выдачи аванса (его hash == item_hash расчётной платёжки) и прокручиваем
|
||||
// Кассир жмёт «Основание» в расчётном платеже (возврат/доплата) → раскрываем
|
||||
// платёж выдачи аванса (его hash == item_hash расчётного платежа) и прокручиваем
|
||||
// к нему. Так видно, сколько выдавалось и что в чеке, без поиска строки вручную.
|
||||
const openSourcePayment = async (itemHash: string): Promise<void> => {
|
||||
const target = items.value.find(
|
||||
|
||||
Reference in New Issue
Block a user