@fayz-ai/plugin-financial 0.23.1 → 0.23.2
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/dist/components/AccountPicker.d.ts +19 -0
- package/dist/components/AccountPicker.d.ts.map +1 -0
- package/dist/components/InstallmentSource.d.ts +0 -7
- package/dist/components/InstallmentSource.d.ts.map +1 -1
- package/dist/components/PaymentFields.d.ts.map +1 -1
- package/dist/components/PaymentModal.d.ts.map +1 -1
- package/dist/index.js +142 -130
- package/dist/index.js.map +1 -1
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/pt-BR.d.ts.map +1 -1
- package/dist/views/InvoiceDetailView.d.ts.map +1 -1
- package/dist/views/InvoiceFormView.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { BankAccount } from '../types';
|
|
3
|
+
/** Account picker with type-to-search — tenants can have many accounts. */
|
|
4
|
+
export declare function AccountPicker({ accounts, value, onChange, disabled, title, placeholder, ariaLabel, clearLabel, className, onManage, manageLabel, variant }: {
|
|
5
|
+
accounts: BankAccount[];
|
|
6
|
+
value?: string;
|
|
7
|
+
onChange: (id: string | undefined) => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
title?: string;
|
|
10
|
+
placeholder: string;
|
|
11
|
+
ariaLabel: string;
|
|
12
|
+
clearLabel: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
onManage?: () => void;
|
|
15
|
+
manageLabel?: string;
|
|
16
|
+
/** `field` draws a full-width form box, for dialogs; `inline` is the dashed word of an installment row. */
|
|
17
|
+
variant?: 'inline' | 'field';
|
|
18
|
+
}): React.JSX.Element;
|
|
19
|
+
//# sourceMappingURL=AccountPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountPicker.d.ts","sourceRoot":"","sources":["../../src/components/AccountPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAS3C,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAkB,EAAE,EAAE;IACtK,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAC7B,qBAoEA"}
|
|
@@ -4,13 +4,6 @@ export interface InstallmentSourceValue {
|
|
|
4
4
|
payMethodTypeId?: string;
|
|
5
5
|
payAccountId?: string;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
8
|
-
* O que falta para esta parcela poder ser paga — `null` quando está pronta.
|
|
9
|
-
*
|
|
10
|
-
* Texto, nunca booleano: é o que o botão **Pagar** vai dizer no `title` em vez
|
|
11
|
-
* de ficar morto em silêncio. Mesma regra do `blockedReason` do diálogo.
|
|
12
|
-
*/
|
|
13
|
-
export declare function useSourceBlockedReason(value: InstallmentSourceValue): string | null;
|
|
14
7
|
export declare function InstallmentSourceFields({ direction, value, onChange, disabled, }: {
|
|
15
8
|
direction: TransactionDirection;
|
|
16
9
|
value: InstallmentSourceValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstallmentSource.d.ts","sourceRoot":"","sources":["../../src/components/InstallmentSource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"InstallmentSource.d.ts","sourceRoot":"","sources":["../../src/components/InstallmentSource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAoCpD,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAgB,GACjB,EAAE;IACD,SAAS,EAAE,oBAAoB,CAAA;IAC/B,KAAK,EAAE,sBAAsB,CAAA;IAC7B,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,qBAwEA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentFields.d.ts","sourceRoot":"","sources":["../../src/components/PaymentFields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAK3D,OAAO,KAAK,EAAE,WAAW,EAAmB,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"PaymentFields.d.ts","sourceRoot":"","sources":["../../src/components/PaymentFields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAK3D,OAAO,KAAK,EAAE,WAAW,EAAmB,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AA4DrG;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,WAAW,EAAE,EAC3B,SAAS,EAAE,oBAAoB,EAC/B,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAClC,WAAW,EAAE,CAkBf;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,qFAAqF;IACrF,SAAS,EAAE,oBAAoB,CAAA;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,KAAK,EAAE,kBAAkB,CAAA;IACzB,6EAA6E;IAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa,CA2ZhF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentModal.d.ts","sourceRoot":"","sources":["../../src/components/PaymentModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAOvC,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAA;AAcnE,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACtE,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,
|
|
1
|
+
{"version":3,"file":"PaymentModal.d.ts","sourceRoot":"","sources":["../../src/components/PaymentModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAOvC,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAA;AAcnE,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACtE,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,qBAoKA"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { recordRailFields, RECORD_GROUP, activeFacet, createConnectionStore, con
|
|
|
4
4
|
import { INLINE_LINK_TONE, SearchSelect, ModalTask, toast, Button, useInModalTaskHost, useSaveBar, tourAnchor, DatePicker, SegmentedControl, SubpageHeader, defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, DataTable, Card, CardContent, Skeleton, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MultiSelect, PageTransition, ModulePage, Badge, TooltipProvider, ConfirmDialog, CurrencyInput, Input, PageHeaderActions, ChoiceSelect, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Checkbox, Hint, ModalDescription, Tooltip, TooltipTrigger, TooltipContent, Popover, PopoverTrigger, PopoverContent, PageTabs, DashboardCanvas, ComingSoon, StatTiles, ListView, DateRangeControl, FilterPanel, FilterPanelField, RequiredFilter, FilterMenuRow, openPrintWindow, printDocument, ChoiceList, ModalFlow, Switch, WizardSteps, KpiCard, ChartWidget, CardHeader, CardTitle, TableWidget, useDashboardNavigate, GoldCard } from '@fayz-ai/ui';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
import { createPluginContext, fayzConnectorOAuth, formatCurrency, RightRailPage, createCrudPage, PluginSettingsPanel, dedup, useCurrency, useUnitFilter, useLimitGuard, usePermissionOptional, useLookupCreate, OrderFormSkeleton, WidgetSlot, OrderFormBlock, TagsField, OrderFormView, OrderFormItemsCard, OrderFormItemRow, adminNavigateTo, OrderFormAddItemStep, CurrencyScope, useUnitStore, OrderDetailSkeleton, PageActions, OrderDetailBlock, TagChip, OrderDetailView, PersonLink, useTenantPluginSettings, useModuleNavigation, usePluginOnboardingGate, useModuleNavAccess, PluginOnboardingGateSkeleton, ModuleActionBar, SettingsGroup, ToggleRow, createArchetypeLookup, invalidateLimit, useAgentSurface, useHouseCurrency, parseViewId, EntitlementGate, UpgradePrompt, useChatStore, revealPage, resolveEntityRoute, useAuth, GetStarted, PermissionGate, createOneShotAsk, askAI, requestChatUpload, toInlineFile, shrinkForVision } from '@fayz-ai/admin';
|
|
7
|
-
import { Landmark, CircleDollarSign, FileText, TriangleAlert, Loader2, Check, X, MoreVertical, Ban, Receipt, Gift, Briefcase, Package, CircleDashed, CircleAlert, CircleCheckBig, CircleEllipsis, Pencil, PackagePlus, CalendarDays, ExternalLink, DollarSign, LayoutList, Layers, Ticket, FileCheck, ArrowRightLeft, CreditCard, QrCode, Banknote, Undo2, Paperclip, Wallet, Plus, AlertTriangle, Filter, TrendingUp, Copy, Trash2, Search, ChevronsUpDown, ChevronsDownUp, ChevronRight, Building2, Image, UploadCloud, Calendar, User, Unlink, BookOpen, Info,
|
|
7
|
+
import { Landmark, CircleDollarSign, FileText, TriangleAlert, Loader2, Check, X, MoreVertical, Ban, Receipt, Gift, Briefcase, Package, CircleDashed, CircleAlert, CircleCheckBig, CircleEllipsis, Pencil, PackagePlus, CalendarDays, ExternalLink, DollarSign, LayoutList, Layers, Ticket, FileCheck, ArrowRightLeft, CreditCard, QrCode, Banknote, Undo2, Paperclip, Wallet, Plus, AlertTriangle, Filter, TrendingUp, Copy, Trash2, Search, ChevronsUpDown, ChevronsDownUp, ChevronRight, Building2, Image, UploadCloud, Calendar, User, Unlink, BookOpen, Info, ChevronDown, Settings, FolderOpen, Folder, RotateCcw, ArrowLeft, ChevronLeft, Eye, Inbox, Clock, ClipboardCheck, Calculator, Square, Play, ChevronUp, Printer, CalendarClock, BadgeCheck, Target, ArrowRight, Users, RefreshCw, Download, Camera, Sparkles, Link2, FileSearch, CheckCheck, Pause, ShoppingCart, Car, Home, Utensils, Zap, Film, HeartPulse, Dumbbell, Music, ShoppingBag, FileDown, ArrowUpRight, ArrowDownRight, EyeOff } from 'lucide-react';
|
|
8
8
|
import { createPortal } from 'react-dom';
|
|
9
9
|
import { createStore as createStore$1 } from 'zustand/vanilla';
|
|
10
10
|
import { useStore } from 'zustand';
|
|
@@ -4520,6 +4520,118 @@ function renderAccountAvatar(item) {
|
|
|
4520
4520
|
if (!r || r.kind !== "card_payable") return null;
|
|
4521
4521
|
return /* @__PURE__ */ jsx(CardVisual, { size: "lg", lastFour: r.lastFour, color: r.color, brandId: r.cardBrandId });
|
|
4522
4522
|
}
|
|
4523
|
+
var METHOD_ICONS = {
|
|
4524
|
+
cash: Banknote,
|
|
4525
|
+
pix: QrCode,
|
|
4526
|
+
credit_card: CreditCard,
|
|
4527
|
+
debit_card: CreditCard,
|
|
4528
|
+
bank_transfer: ArrowRightLeft,
|
|
4529
|
+
check: FileCheck,
|
|
4530
|
+
boleto: Receipt,
|
|
4531
|
+
voucher: Ticket
|
|
4532
|
+
};
|
|
4533
|
+
function MethodIcon({ type }) {
|
|
4534
|
+
const Icon = METHOD_ICONS[type?.transactionType ?? ""] ?? Wallet;
|
|
4535
|
+
return /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
4536
|
+
}
|
|
4537
|
+
function AccountIcon({ account }) {
|
|
4538
|
+
if (!account) return null;
|
|
4539
|
+
if (account.accountType === "card_payable" && (account.lastFour || account.color || account.cardBrandId)) {
|
|
4540
|
+
return /* @__PURE__ */ jsx(CardVisual, { size: "xs", lastFour: account.lastFour ?? void 0, color: account.color ?? void 0, brandId: account.cardBrandId ?? void 0 });
|
|
4541
|
+
}
|
|
4542
|
+
if (account.accountType.startsWith("card_")) return /* @__PURE__ */ jsx(CreditCard, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
4543
|
+
if (account.accountType === "cash_physical" || account.accountType === "cash_session") {
|
|
4544
|
+
return /* @__PURE__ */ jsx(Banknote, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
4545
|
+
}
|
|
4546
|
+
const bank = findBrBank(account.bankCode, account.bankName ?? account.name);
|
|
4547
|
+
return bank?.logo ? /* @__PURE__ */ jsx(BankLogo, { bank, size: 16 }) : /* @__PURE__ */ jsx(Landmark, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
4548
|
+
}
|
|
4549
|
+
var FIELD_CLASS = "mt-1 flex w-full items-center gap-2 rounded-input border border-input bg-card px-3 py-2 text-left text-sm shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus:outline-none focus:ring-2 focus:ring-ring";
|
|
4550
|
+
var norm2 = (v) => v.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
|
|
4551
|
+
function AccountPicker({ accounts, value, onChange, disabled, title, placeholder, ariaLabel, clearLabel, className, onManage, manageLabel, variant = "inline" }) {
|
|
4552
|
+
const [open, setOpen] = React29__default.useState(false);
|
|
4553
|
+
const [q, setQ] = React29__default.useState("");
|
|
4554
|
+
const selected = accounts.find((a) => a.id === value);
|
|
4555
|
+
const list = q ? accounts.filter((a) => norm2(a.name).includes(norm2(q))) : accounts;
|
|
4556
|
+
const pick = (id) => {
|
|
4557
|
+
onChange(id);
|
|
4558
|
+
setOpen(false);
|
|
4559
|
+
setQ("");
|
|
4560
|
+
};
|
|
4561
|
+
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: (o) => {
|
|
4562
|
+
setOpen(o);
|
|
4563
|
+
if (!o) setQ("");
|
|
4564
|
+
}, children: [
|
|
4565
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
4566
|
+
"button",
|
|
4567
|
+
{
|
|
4568
|
+
type: "button",
|
|
4569
|
+
disabled,
|
|
4570
|
+
title,
|
|
4571
|
+
"aria-label": ariaLabel,
|
|
4572
|
+
className: `${variant === "field" ? FIELD_CLASS : "inline-flex max-w-full items-center gap-1 text-xs"} disabled:cursor-not-allowed disabled:opacity-50 ${className ?? ""}`,
|
|
4573
|
+
children: [
|
|
4574
|
+
selected ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4575
|
+
/* @__PURE__ */ jsx(AccountIcon, { account: selected }),
|
|
4576
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: selected.name })
|
|
4577
|
+
] }) : /* @__PURE__ */ jsx("span", { className: variant === "field" ? "text-muted-foreground" : void 0, children: placeholder }),
|
|
4578
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: `${variant === "field" ? "ml-auto h-4 w-4" : "h-3 w-3"} shrink-0 opacity-50`, "aria-hidden": true })
|
|
4579
|
+
]
|
|
4580
|
+
}
|
|
4581
|
+
) }),
|
|
4582
|
+
/* @__PURE__ */ jsxs(PopoverContent, { align: "start", className: variant === "field" ? "w-[var(--radix-popover-trigger-width)] p-1" : "w-64 p-1", children: [
|
|
4583
|
+
/* @__PURE__ */ jsxs("div", { className: "relative mb-1", children: [
|
|
4584
|
+
/* @__PURE__ */ jsx(Search, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground", "aria-hidden": true }),
|
|
4585
|
+
/* @__PURE__ */ jsx(
|
|
4586
|
+
"input",
|
|
4587
|
+
{
|
|
4588
|
+
autoFocus: true,
|
|
4589
|
+
value: q,
|
|
4590
|
+
onChange: (e) => setQ(e.target.value),
|
|
4591
|
+
onKeyDown: (e) => {
|
|
4592
|
+
if (e.key === "Enter" && list[0]) {
|
|
4593
|
+
e.preventDefault();
|
|
4594
|
+
pick(list[0].id);
|
|
4595
|
+
}
|
|
4596
|
+
},
|
|
4597
|
+
placeholder: "Buscar conta\u2026",
|
|
4598
|
+
className: "h-8 w-full rounded-md border-0 bg-muted/50 pl-7 pr-2 text-xs outline-none focus:ring-0"
|
|
4599
|
+
}
|
|
4600
|
+
)
|
|
4601
|
+
] }),
|
|
4602
|
+
/* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-y-auto", children: list.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-xs text-muted-foreground", children: "Nenhuma conta encontrada" }) : list.map((a) => /* @__PURE__ */ jsxs(
|
|
4603
|
+
"button",
|
|
4604
|
+
{
|
|
4605
|
+
type: "button",
|
|
4606
|
+
onClick: () => pick(a.id),
|
|
4607
|
+
className: `flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted ${a.id === value ? "font-medium" : ""}`,
|
|
4608
|
+
children: [
|
|
4609
|
+
/* @__PURE__ */ jsx(AccountIcon, { account: a }),
|
|
4610
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: a.name }),
|
|
4611
|
+
a.id === value && /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true })
|
|
4612
|
+
]
|
|
4613
|
+
},
|
|
4614
|
+
a.id
|
|
4615
|
+
)) }),
|
|
4616
|
+
value && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => pick(void 0), className: "mt-1 w-full rounded-md px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted", children: clearLabel }),
|
|
4617
|
+
onManage && /* @__PURE__ */ jsxs(
|
|
4618
|
+
"button",
|
|
4619
|
+
{
|
|
4620
|
+
type: "button",
|
|
4621
|
+
onClick: () => {
|
|
4622
|
+
setOpen(false);
|
|
4623
|
+
onManage();
|
|
4624
|
+
},
|
|
4625
|
+
className: "mt-1 flex w-full items-center gap-2 rounded-md border-t px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted hover:text-foreground",
|
|
4626
|
+
children: [
|
|
4627
|
+
/* @__PURE__ */ jsx(Settings, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true }),
|
|
4628
|
+
manageLabel
|
|
4629
|
+
]
|
|
4630
|
+
}
|
|
4631
|
+
)
|
|
4632
|
+
] })
|
|
4633
|
+
] });
|
|
4634
|
+
}
|
|
4523
4635
|
var ACCOUNT_TYPES_FOR_TX2 = {
|
|
4524
4636
|
cash: ["cash_physical", "cash_session"],
|
|
4525
4637
|
credit_card: ["card_receivable_credit"],
|
|
@@ -4734,7 +4846,7 @@ function usePaymentFields(options) {
|
|
|
4734
4846
|
)
|
|
4735
4847
|
] }),
|
|
4736
4848
|
selectedTypeId && /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
4737
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
4849
|
+
/* @__PURE__ */ jsxs("div", { className: "stagger-field grid grid-cols-2 items-start gap-3", style: { animationDelay: "0ms" }, children: [
|
|
4738
4850
|
lockAmount ? (
|
|
4739
4851
|
// O extrato mandou o valor. Ele aparece como FATO, e a linha
|
|
4740
4852
|
// abaixo diz por quê — um campo cinza sem explicação faz a
|
|
@@ -4837,10 +4949,18 @@ function usePaymentFields(options) {
|
|
|
4837
4949
|
t2("financial.payment.configureAccounts"),
|
|
4838
4950
|
" \u2192"
|
|
4839
4951
|
] })
|
|
4840
|
-
] }) : /* @__PURE__ */
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4952
|
+
] }) : /* @__PURE__ */ jsx(
|
|
4953
|
+
AccountPicker,
|
|
4954
|
+
{
|
|
4955
|
+
variant: "field",
|
|
4956
|
+
accounts: eligibleAccounts2,
|
|
4957
|
+
value: bankAccountId || void 0,
|
|
4958
|
+
onChange: (id) => setBankAccountId(id ?? ""),
|
|
4959
|
+
placeholder: t2("financial.payment.selectAccount"),
|
|
4960
|
+
ariaLabel: t2("financial.payment.bankAccount"),
|
|
4961
|
+
clearLabel: t2("financial.invoiceForm.clear")
|
|
4962
|
+
}
|
|
4963
|
+
)
|
|
4844
4964
|
] }),
|
|
4845
4965
|
/* @__PURE__ */ jsxs("div", { className: "stagger-field", style: { animationDelay: "150ms" }, children: [
|
|
4846
4966
|
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: t2("financial.payment.notes") }),
|
|
@@ -4927,6 +5047,8 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
|
|
|
4927
5047
|
setPending(command.current.pending);
|
|
4928
5048
|
}
|
|
4929
5049
|
}
|
|
5050
|
+
const receiving = movement.direction === "credit";
|
|
5051
|
+
const title = t2(receiving ? "financial.payment.titleReceive" : "financial.payment.title");
|
|
4930
5052
|
const body = /* @__PURE__ */ jsx("div", { className: "px-5 py-4", children: fields.node });
|
|
4931
5053
|
const footer = /* @__PURE__ */ jsxs("div", { className: "shrink-0 border-t sticky bottom-0 bg-card px-5 py-4 space-y-2", children: [
|
|
4932
5054
|
pending2 && !saving && /* @__PURE__ */ jsxs("p", { role: "status", className: "flex items-start gap-1.5 text-[11px] leading-snug text-muted-foreground", children: [
|
|
@@ -4945,7 +5067,7 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
|
|
|
4945
5067
|
title: fields.blockedReason ?? void 0,
|
|
4946
5068
|
children: [
|
|
4947
5069
|
saving ? /* @__PURE__ */ jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", "aria-hidden": true }) : /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5", "aria-hidden": true }),
|
|
4948
|
-
saving ? t2("financial.payment.processing") : fields.blockedReason && !pending2 ? fields.blockedReason : t2("financial.payment.payAmount", { amount: formatCurrency(fields.value.amount, currency) })
|
|
5070
|
+
saving ? t2("financial.payment.processing") : fields.blockedReason && !pending2 ? fields.blockedReason : t2(receiving ? "financial.payment.receiveAmount" : "financial.payment.payAmount", { amount: formatCurrency(fields.value.amount, currency) })
|
|
4949
5071
|
]
|
|
4950
5072
|
}
|
|
4951
5073
|
)
|
|
@@ -4957,7 +5079,7 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
|
|
|
4957
5079
|
ModalTask,
|
|
4958
5080
|
{
|
|
4959
5081
|
open: true,
|
|
4960
|
-
title
|
|
5082
|
+
title,
|
|
4961
5083
|
hint: `${t2("financial.payment.installment", { number: String(movement.installmentNumber ?? 1) })} \xB7 ${t2("financial.payment.remaining", { amount: formatCurrency(remaining, currency) })}`,
|
|
4962
5084
|
onClose: handleClose,
|
|
4963
5085
|
children: [
|
|
@@ -4986,7 +5108,7 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
|
|
|
4986
5108
|
children: [
|
|
4987
5109
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-5 py-4 border-b sticky top-0 bg-card z-10", children: [
|
|
4988
5110
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
4989
|
-
/* @__PURE__ */ jsx("h3", { className: "text-base font-semibold", children:
|
|
5111
|
+
/* @__PURE__ */ jsx("h3", { className: "text-base font-semibold", children: title }),
|
|
4990
5112
|
/* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
4991
5113
|
t2("financial.payment.installment", { number: String(movement.installmentNumber ?? 1) }),
|
|
4992
5114
|
" \xB7 ",
|
|
@@ -5005,32 +5127,6 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
|
|
|
5005
5127
|
document.body
|
|
5006
5128
|
);
|
|
5007
5129
|
}
|
|
5008
|
-
var METHOD_ICONS = {
|
|
5009
|
-
cash: Banknote,
|
|
5010
|
-
pix: QrCode,
|
|
5011
|
-
credit_card: CreditCard,
|
|
5012
|
-
debit_card: CreditCard,
|
|
5013
|
-
bank_transfer: ArrowRightLeft,
|
|
5014
|
-
check: FileCheck,
|
|
5015
|
-
boleto: Receipt,
|
|
5016
|
-
voucher: Ticket
|
|
5017
|
-
};
|
|
5018
|
-
function MethodIcon({ type }) {
|
|
5019
|
-
const Icon = METHOD_ICONS[type?.transactionType ?? ""] ?? Wallet;
|
|
5020
|
-
return /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
5021
|
-
}
|
|
5022
|
-
function AccountIcon({ account }) {
|
|
5023
|
-
if (!account) return null;
|
|
5024
|
-
if (account.accountType === "card_payable" && (account.lastFour || account.color || account.cardBrandId)) {
|
|
5025
|
-
return /* @__PURE__ */ jsx(CardVisual, { size: "xs", lastFour: account.lastFour ?? void 0, color: account.color ?? void 0, brandId: account.cardBrandId ?? void 0 });
|
|
5026
|
-
}
|
|
5027
|
-
if (account.accountType.startsWith("card_")) return /* @__PURE__ */ jsx(CreditCard, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
5028
|
-
if (account.accountType === "cash_physical" || account.accountType === "cash_session") {
|
|
5029
|
-
return /* @__PURE__ */ jsx(Banknote, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
5030
|
-
}
|
|
5031
|
-
const bank = findBrBank(account.bankCode, account.bankName ?? account.name);
|
|
5032
|
-
return bank?.logo ? /* @__PURE__ */ jsx(BankLogo, { bank, size: 16 }) : /* @__PURE__ */ jsx(Landmark, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
|
|
5033
|
-
}
|
|
5034
5130
|
var NONE = "__none__";
|
|
5035
5131
|
var TRIGGER_CLASS = `h-auto w-auto justify-start gap-1 rounded-none border-0 bg-transparent p-0 text-xs font-normal shadow-none ring-offset-0 focus:ring-0 focus:ring-offset-0 [&>svg]:h-3 [&>svg]:w-3 ${INLINE_LINK_TONE.dashed}`;
|
|
5036
5132
|
function InstallmentSourceFields({
|
|
@@ -5053,7 +5149,7 @@ function InstallmentSourceFields({
|
|
|
5053
5149
|
const conta = elegiveis.length === 1 ? elegiveis[0].id : elegiveis.some((a) => a.id === value.payAccountId) ? value.payAccountId : void 0;
|
|
5054
5150
|
onChange({ payMethodTypeId: typeId || void 0, payAccountId: typeId ? conta : void 0 });
|
|
5055
5151
|
}
|
|
5056
|
-
const tone = (filled) => filled ? "text-foreground" : "text-
|
|
5152
|
+
const tone = (filled) => filled ? "text-foreground" : "text-foreground border-b border-dashed border-foreground/60";
|
|
5057
5153
|
return /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-col items-start gap-0.5", children: [
|
|
5058
5154
|
/* @__PURE__ */ jsxs(
|
|
5059
5155
|
Select,
|
|
@@ -5098,91 +5194,6 @@ function InstallmentSourceFields({
|
|
|
5098
5194
|
)
|
|
5099
5195
|
] });
|
|
5100
5196
|
}
|
|
5101
|
-
var norm2 = (v) => v.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
|
|
5102
|
-
function AccountPicker({ accounts, value, onChange, disabled, title, placeholder, ariaLabel, clearLabel, className, onManage, manageLabel }) {
|
|
5103
|
-
const [open, setOpen] = React29__default.useState(false);
|
|
5104
|
-
const [q, setQ] = React29__default.useState("");
|
|
5105
|
-
const selected = accounts.find((a) => a.id === value);
|
|
5106
|
-
const list = q ? accounts.filter((a) => norm2(a.name).includes(norm2(q))) : accounts;
|
|
5107
|
-
const pick = (id) => {
|
|
5108
|
-
onChange(id);
|
|
5109
|
-
setOpen(false);
|
|
5110
|
-
setQ("");
|
|
5111
|
-
};
|
|
5112
|
-
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: (o) => {
|
|
5113
|
-
setOpen(o);
|
|
5114
|
-
if (!o) setQ("");
|
|
5115
|
-
}, children: [
|
|
5116
|
-
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
5117
|
-
"button",
|
|
5118
|
-
{
|
|
5119
|
-
type: "button",
|
|
5120
|
-
disabled,
|
|
5121
|
-
title,
|
|
5122
|
-
"aria-label": ariaLabel,
|
|
5123
|
-
className: `inline-flex max-w-full items-center gap-1 text-xs disabled:cursor-not-allowed disabled:opacity-50 ${className ?? ""}`,
|
|
5124
|
-
children: [
|
|
5125
|
-
selected ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5126
|
-
/* @__PURE__ */ jsx(AccountIcon, { account: selected }),
|
|
5127
|
-
/* @__PURE__ */ jsx("span", { className: "truncate", children: selected.name })
|
|
5128
|
-
] }) : placeholder,
|
|
5129
|
-
/* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3 shrink-0 opacity-50", "aria-hidden": true })
|
|
5130
|
-
]
|
|
5131
|
-
}
|
|
5132
|
-
) }),
|
|
5133
|
-
/* @__PURE__ */ jsxs(PopoverContent, { align: "start", className: "w-64 p-1", children: [
|
|
5134
|
-
/* @__PURE__ */ jsxs("div", { className: "relative mb-1", children: [
|
|
5135
|
-
/* @__PURE__ */ jsx(Search, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground", "aria-hidden": true }),
|
|
5136
|
-
/* @__PURE__ */ jsx(
|
|
5137
|
-
"input",
|
|
5138
|
-
{
|
|
5139
|
-
autoFocus: true,
|
|
5140
|
-
value: q,
|
|
5141
|
-
onChange: (e) => setQ(e.target.value),
|
|
5142
|
-
onKeyDown: (e) => {
|
|
5143
|
-
if (e.key === "Enter" && list[0]) {
|
|
5144
|
-
e.preventDefault();
|
|
5145
|
-
pick(list[0].id);
|
|
5146
|
-
}
|
|
5147
|
-
},
|
|
5148
|
-
placeholder: "Buscar conta\u2026",
|
|
5149
|
-
className: "h-8 w-full rounded-md border-0 bg-muted/50 pl-7 pr-2 text-xs outline-none focus:ring-0"
|
|
5150
|
-
}
|
|
5151
|
-
)
|
|
5152
|
-
] }),
|
|
5153
|
-
/* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-y-auto", children: list.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-xs text-muted-foreground", children: "Nenhuma conta encontrada" }) : list.map((a) => /* @__PURE__ */ jsxs(
|
|
5154
|
-
"button",
|
|
5155
|
-
{
|
|
5156
|
-
type: "button",
|
|
5157
|
-
onClick: () => pick(a.id),
|
|
5158
|
-
className: `flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted ${a.id === value ? "font-medium" : ""}`,
|
|
5159
|
-
children: [
|
|
5160
|
-
/* @__PURE__ */ jsx(AccountIcon, { account: a }),
|
|
5161
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: a.name }),
|
|
5162
|
-
a.id === value && /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true })
|
|
5163
|
-
]
|
|
5164
|
-
},
|
|
5165
|
-
a.id
|
|
5166
|
-
)) }),
|
|
5167
|
-
value && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => pick(void 0), className: "mt-1 w-full rounded-md px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted", children: clearLabel }),
|
|
5168
|
-
onManage && /* @__PURE__ */ jsxs(
|
|
5169
|
-
"button",
|
|
5170
|
-
{
|
|
5171
|
-
type: "button",
|
|
5172
|
-
onClick: () => {
|
|
5173
|
-
setOpen(false);
|
|
5174
|
-
onManage();
|
|
5175
|
-
},
|
|
5176
|
-
className: "mt-1 flex w-full items-center gap-2 rounded-md border-t px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted hover:text-foreground",
|
|
5177
|
-
children: [
|
|
5178
|
-
/* @__PURE__ */ jsx(Settings, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true }),
|
|
5179
|
-
manageLabel
|
|
5180
|
-
]
|
|
5181
|
-
}
|
|
5182
|
-
)
|
|
5183
|
-
] })
|
|
5184
|
-
] });
|
|
5185
|
-
}
|
|
5186
5197
|
var STATUS = {
|
|
5187
5198
|
open: { bg: "bg-info-soft text-info-soft-foreground", icon: CircleDashed, labelKey: "financial.invoice.statusOpen" },
|
|
5188
5199
|
pending: { bg: "bg-warning-soft text-warning-soft-foreground", icon: CircleDashed, labelKey: "financial.invoice.statusPending" },
|
|
@@ -6412,7 +6423,6 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
|
|
|
6412
6423
|
const fonteTravada = isPaid2 || isPartial;
|
|
6413
6424
|
const formaEscolhida = paymentMethodTypes.find((tp) => tp.id === inst.payMethodTypeId);
|
|
6414
6425
|
const contaEscolhida = bankAccounts.find((a) => a.id === inst.payAccountId);
|
|
6415
|
-
const faltaParaPagar = !inst.payMethodTypeId ? t2("financial.payment.methodRequired") : !inst.payAccountId ? t2("financial.payment.accountRequired") : null;
|
|
6416
6426
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
6417
6427
|
/* @__PURE__ */ jsx(
|
|
6418
6428
|
InstallmentRow,
|
|
@@ -6461,12 +6471,11 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
|
|
|
6461
6471
|
!isPaid2 && (saved || !isEdit && !!contactId && items.length > 0 && inst.amount > 0) && /* @__PURE__ */ jsx(
|
|
6462
6472
|
InstallmentPayButton,
|
|
6463
6473
|
{
|
|
6464
|
-
disabled: saving
|
|
6465
|
-
title: faltaParaPagar ?? void 0,
|
|
6474
|
+
disabled: saving,
|
|
6466
6475
|
onClick: () => {
|
|
6467
6476
|
void pagarParcela(i);
|
|
6468
6477
|
},
|
|
6469
|
-
children: t2("financial.invoice.pay")
|
|
6478
|
+
children: t2(direction === "credit" ? "financial.invoice.receive" : "financial.invoice.pay")
|
|
6470
6479
|
}
|
|
6471
6480
|
)
|
|
6472
6481
|
] })
|
|
@@ -7711,7 +7720,6 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
|
|
|
7711
7720
|
const srcAccountId = srcStr(srcMeta.payAccountId);
|
|
7712
7721
|
const editavel = !hasPaidDetails && invoice.status !== "cancelled";
|
|
7713
7722
|
const canChooseSource = editavel && Math.abs(mov.amount) >= 5e-3;
|
|
7714
|
-
const faltaParaPagar = !srcTypeId ? t2("financial.payment.methodRequired") : !srcAccountId ? t2("financial.payment.accountRequired") : null;
|
|
7715
7723
|
const ativa = invoice.status !== "cancelled";
|
|
7716
7724
|
return /* @__PURE__ */ jsx(
|
|
7717
7725
|
InstallmentRow,
|
|
@@ -7772,10 +7780,8 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
|
|
|
7772
7780
|
InstallmentPayButton,
|
|
7773
7781
|
{
|
|
7774
7782
|
onClick: () => setPayingMovement(mov),
|
|
7775
|
-
disabled: !!faltaParaPagar,
|
|
7776
|
-
title: faltaParaPagar ?? void 0,
|
|
7777
7783
|
children: [
|
|
7778
|
-
t2("financial.invoice.pay"),
|
|
7784
|
+
t2(direction === "credit" ? "financial.invoice.receive" : "financial.invoice.pay"),
|
|
7779
7785
|
" ",
|
|
7780
7786
|
remaining < mov.amount ? formatCurrency(remaining, currency) : ""
|
|
7781
7787
|
]
|
|
@@ -7783,7 +7789,7 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
|
|
|
7783
7789
|
),
|
|
7784
7790
|
isPaid2 && reversiblePayments(instPayments).length > 0 && ativa && /* @__PURE__ */ jsx(InstallmentActionButton, { icon: Undo2, onClick: () => setReversing(reversiblePayments(instPayments).at(-1)), children: t2("financial.invoice.reverse") }),
|
|
7785
7791
|
isPartial && ativa && /* @__PURE__ */ jsxs(InstallmentPayButton, { variant: "outline", onClick: () => setPayingMovement(mov), children: [
|
|
7786
|
-
t2("financial.invoice.pay"),
|
|
7792
|
+
t2(direction === "credit" ? "financial.invoice.receive" : "financial.invoice.pay"),
|
|
7787
7793
|
" ",
|
|
7788
7794
|
formatCurrency(remaining, currency)
|
|
7789
7795
|
] })
|
|
@@ -19897,6 +19903,7 @@ var en = {
|
|
|
19897
19903
|
"financial.invoice.paidLabel": "Paid:",
|
|
19898
19904
|
"financial.invoice.paidOn": "Paid on:",
|
|
19899
19905
|
"financial.invoice.pay": "Pay",
|
|
19906
|
+
"financial.invoice.receive": "Receive",
|
|
19900
19907
|
"financial.invoice.reverse": "Reverse",
|
|
19901
19908
|
"financial.invoice.reverseTitle": "Reverse payment",
|
|
19902
19909
|
"financial.invoice.reverseReason": "Reason for reversal",
|
|
@@ -20300,12 +20307,14 @@ var en = {
|
|
|
20300
20307
|
"financial.payment.notes": "Notes",
|
|
20301
20308
|
"financial.payment.optionalNotes": "Optional notes...",
|
|
20302
20309
|
"financial.payment.payAmount": "Pay {{amount}}",
|
|
20310
|
+
"financial.payment.receiveAmount": "Receive {{amount}}",
|
|
20303
20311
|
"financial.payment.processing": "Processing...",
|
|
20304
20312
|
"financial.payment.remaining": "{{amount}} remaining",
|
|
20305
20313
|
"financial.payment.select": "Select...",
|
|
20306
20314
|
"financial.payment.selectAccount": "Select account...",
|
|
20307
20315
|
"financial.payment.selectBrand": "Select brand...",
|
|
20308
20316
|
"financial.payment.title": "Record Payment",
|
|
20317
|
+
"financial.payment.titleReceive": "Record Receipt",
|
|
20309
20318
|
"financial.payment.changeSource": "Change method and account",
|
|
20310
20319
|
"financial.settings.allowPartial": "Allow partial payments",
|
|
20311
20320
|
"financial.settings.allowPartialDesc": "Accept payments less than the full installment amount",
|
|
@@ -20853,6 +20862,7 @@ var ptBR = {
|
|
|
20853
20862
|
"financial.invoice.paidLabel": "Pago:",
|
|
20854
20863
|
"financial.invoice.paidOn": "Pago em:",
|
|
20855
20864
|
"financial.invoice.pay": "Pagar",
|
|
20865
|
+
"financial.invoice.receive": "Receber",
|
|
20856
20866
|
"financial.invoice.reverse": "Estornar",
|
|
20857
20867
|
"financial.invoice.reverseTitle": "Estornar pagamento",
|
|
20858
20868
|
"financial.invoice.reverseReason": "Motivo do estorno",
|
|
@@ -21259,12 +21269,14 @@ var ptBR = {
|
|
|
21259
21269
|
"financial.payment.notes": "Observa\xE7\xF5es",
|
|
21260
21270
|
"financial.payment.optionalNotes": "Observa\xE7\xF5es opcionais...",
|
|
21261
21271
|
"financial.payment.payAmount": "Pagar {{amount}}",
|
|
21272
|
+
"financial.payment.receiveAmount": "Receber {{amount}}",
|
|
21262
21273
|
"financial.payment.processing": "Processando...",
|
|
21263
21274
|
"financial.payment.remaining": "{{amount}} restante",
|
|
21264
21275
|
"financial.payment.select": "Selecionar...",
|
|
21265
21276
|
"financial.payment.selectAccount": "Selecionar conta...",
|
|
21266
21277
|
"financial.payment.selectBrand": "Selecionar bandeira...",
|
|
21267
21278
|
"financial.payment.title": "Registrar Pagamento",
|
|
21279
|
+
"financial.payment.titleReceive": "Registrar Recebimento",
|
|
21268
21280
|
"financial.payment.changeSource": "Alterar forma e conta",
|
|
21269
21281
|
"financial.settings.allowPartial": "Permitir pagamentos parciais",
|
|
21270
21282
|
"financial.settings.allowPartialDesc": "Aceitar pagamentos menores que o valor total da parcela",
|