shutro-erp 0.3.6 → 0.3.7
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/account_asset/.kosh/bindings.js +1 -1
- package/dist/account_asset/.kosh/schema.d.ts +530 -8
- package/dist/account_asset/i18n/bn.d.ts +2 -0
- package/dist/account_asset/i18n/bn.js +97 -0
- package/dist/account_asset/index.js +2 -0
- package/dist/account_asset/module.d.ts +4899 -1445
- package/dist/account_budget/.kosh/bindings.js +1 -1
- package/dist/account_budget/.kosh/schema.d.ts +1130 -56
- package/dist/account_budget/i18n/bn.d.ts +2 -0
- package/dist/account_budget/i18n/bn.js +63 -0
- package/dist/account_budget/index.js +14 -0
- package/dist/account_budget/module.d.ts +17958 -4532
- package/dist/account_budget/module.js +15 -0
- package/dist/account_portal/.kosh/bindings.js +1 -1
- package/dist/account_portal/.kosh/schema.d.ts +530 -8
- package/dist/account_portal/i18n/bn.d.ts +2 -0
- package/dist/account_portal/i18n/bn.js +6 -0
- package/dist/account_portal/index.js +2 -0
- package/dist/account_portal/module.d.ts +5167 -1693
- package/dist/accounting/.kosh/bindings.js +1 -1
- package/dist/accounting/.kosh/schema.d.ts +530 -8
- package/dist/accounting/closing.js +1 -0
- package/dist/accounting/fiscal.d.ts +578 -0
- package/dist/accounting/fiscal.js +401 -0
- package/dist/accounting/followups.d.ts +618 -0
- package/dist/accounting/followups.js +420 -0
- package/dist/accounting/i18n/bn.d.ts +2 -0
- package/dist/accounting/i18n/bn.js +425 -0
- package/dist/accounting/index.d.ts +2 -0
- package/dist/accounting/index.js +649 -2
- package/dist/accounting/module.d.ts +4998 -1451
- package/dist/accounting/module.js +124 -18
- package/dist/accounting/statements.d.ts +878 -0
- package/dist/accounting/statements.js +728 -0
- package/dist/accounting/web/BankReconcilePage.d.ts +9 -0
- package/dist/accounting/web/BankReconcilePage.js +138 -0
- package/dist/accounting/web/FollowupsPage.d.ts +8 -0
- package/dist/accounting/web/FollowupsPage.js +54 -0
- package/dist/accounting/web/PostingPreview.d.ts +8 -0
- package/dist/accounting/web/PostingPreview.js +26 -0
- package/dist/accounting/web/index.d.ts +3 -0
- package/dist/accounting/web/index.js +9 -0
- package/dist/accounting/web/messages.js +140 -0
- package/dist/approvals/.kosh/bindings.js +1 -1
- package/dist/approvals/.kosh/schema.d.ts +272 -4
- package/dist/approvals/demo.d.ts +7 -0
- package/dist/approvals/demo.js +41 -0
- package/dist/approvals/i18n/bn.d.ts +2 -0
- package/dist/approvals/i18n/bn.js +133 -0
- package/dist/approvals/index.d.ts +19 -1
- package/dist/approvals/index.js +477 -7
- package/dist/approvals/mails.d.ts +7 -2
- package/dist/approvals/mails.js +8 -3
- package/dist/approvals/module.d.ts +2930 -1
- package/dist/approvals/module.js +468 -7
- package/dist/approvals/web/Config.d.ts +12 -0
- package/dist/approvals/web/Config.js +60 -0
- package/dist/approvals/web/Matrix.d.ts +9 -0
- package/dist/approvals/web/Matrix.js +26 -0
- package/dist/approvals/web/index.d.ts +3 -1
- package/dist/approvals/web/index.js +8 -1
- package/dist/approvals/web/messages.js +92 -0
- package/dist/approvals_purchase/.kosh/bindings.js +15 -0
- package/dist/approvals_purchase/.kosh/schema.d.ts +1997 -0
- package/dist/approvals_purchase/i18n/bn.d.ts +2 -0
- package/dist/approvals_purchase/i18n/bn.js +5 -0
- package/dist/approvals_purchase/index.d.ts +3 -0
- package/dist/approvals_purchase/index.js +47 -0
- package/dist/approvals_purchase/module.d.ts +12670 -0
- package/dist/approvals_purchase/module.js +84 -0
- package/dist/attendance/.kosh/bindings.js +1 -1
- package/dist/attendance/.kosh/schema.d.ts +59 -1
- package/dist/attendance/i18n/bn.d.ts +2 -0
- package/dist/attendance/i18n/bn.js +147 -0
- package/dist/attendance/index.js +3 -1
- package/dist/attendance/module.d.ts +452 -8
- package/dist/automation/engine.js +1 -1
- package/dist/calendar/.kosh/bindings.js +1 -1
- package/dist/calendar/.kosh/schema.d.ts +2 -1
- package/dist/calendar/i18n/bn.d.ts +2 -0
- package/dist/calendar/i18n/bn.js +80 -0
- package/dist/calendar/index.js +77 -0
- package/dist/calendar/module.d.ts +26 -0
- package/dist/calendar/module.js +14 -4
- package/dist/cli/apps.js +25 -5
- package/dist/cli/init.js +14 -4
- package/dist/cli/templates.d.ts +1 -1
- package/dist/cli/templates.js +34 -5
- package/dist/contacts/.kosh/bindings.js +1 -1
- package/dist/contacts/.kosh/schema.d.ts +2 -1
- package/dist/contacts/i18n/bn.d.ts +2 -0
- package/dist/contacts/i18n/bn.js +67 -0
- package/dist/contacts/index.js +3 -0
- package/dist/contacts/module.d.ts +42 -0
- package/dist/contacts/module.js +6 -1
- package/dist/crm/.kosh/bindings.js +1 -1
- package/dist/crm/.kosh/schema.d.ts +2 -1
- package/dist/crm/i18n/bn.d.ts +2 -0
- package/dist/crm/i18n/bn.js +80 -0
- package/dist/crm/index.js +22 -0
- package/dist/crm/module.d.ts +20 -0
- package/dist/crm/module.js +4 -2
- package/dist/documents/.kosh/bindings.js +1 -1
- package/dist/documents/.kosh/schema.d.ts +2 -1
- package/dist/documents/i18n/bn.d.ts +2 -0
- package/dist/documents/i18n/bn.js +83 -0
- package/dist/documents/index.js +128 -1
- package/dist/documents/module.d.ts +20 -0
- package/dist/documents/module.js +1 -0
- package/dist/event/.kosh/bindings.js +1 -1
- package/dist/event/.kosh/schema.d.ts +2 -1
- package/dist/event/i18n/bn.d.ts +2 -0
- package/dist/event/i18n/bn.js +101 -0
- package/dist/event/index.js +66 -0
- package/dist/event/module.d.ts +20 -0
- package/dist/event/module.js +8 -1
- package/dist/event_account/.kosh/bindings.js +1 -1
- package/dist/event_account/.kosh/schema.d.ts +530 -8
- package/dist/event_account/i18n/bn.d.ts +2 -0
- package/dist/event_account/i18n/bn.js +5 -0
- package/dist/event_account/index.js +2 -0
- package/dist/event_account/module.d.ts +4905 -1431
- package/dist/expense/.kosh/bindings.js +1 -1
- package/dist/expense/.kosh/schema.d.ts +323 -2
- package/dist/expense/i18n/bn.d.ts +2 -0
- package/dist/expense/i18n/bn.js +155 -0
- package/dist/expense/index.js +8 -1
- package/dist/expense/module.d.ts +2715 -694
- package/dist/expense/module.js +3 -1
- package/dist/expense_account/.kosh/bindings.js +1 -1
- package/dist/expense_account/.kosh/schema.d.ts +587 -8
- package/dist/expense_account/i18n/bn.d.ts +2 -0
- package/dist/expense_account/i18n/bn.js +15 -0
- package/dist/expense_account/index.js +2 -0
- package/dist/expense_account/module.d.ts +8094 -2619
- package/dist/helpdesk/.kosh/bindings.js +1 -1
- package/dist/helpdesk/.kosh/schema.d.ts +2 -1
- package/dist/helpdesk/i18n/bn.d.ts +2 -0
- package/dist/helpdesk/i18n/bn.js +127 -0
- package/dist/helpdesk/index.js +2 -0
- package/dist/helpdesk/module.d.ts +20 -0
- package/dist/hr/.kosh/bindings.js +1 -1
- package/dist/hr/.kosh/schema.d.ts +59 -1
- package/dist/hr/demo.js +11 -1
- package/dist/hr/i18n/bn.d.ts +2 -0
- package/dist/hr/i18n/bn.js +126 -0
- package/dist/hr/index.d.ts +1 -1
- package/dist/hr/index.js +158 -12
- package/dist/hr/module.d.ts +932 -59
- package/dist/hr/module.js +114 -17
- package/dist/{mrp → indent}/.kosh/bindings.js +2 -2
- package/dist/indent/.kosh/schema.d.ts +2084 -0
- package/dist/indent/demo.d.ts +7 -0
- package/dist/indent/demo.js +48 -0
- package/dist/indent/i18n/bn.d.ts +2 -0
- package/dist/indent/i18n/bn.js +143 -0
- package/dist/indent/index.d.ts +3 -0
- package/dist/indent/index.js +450 -0
- package/dist/{mrp → indent}/module.d.ts +7164 -3075
- package/dist/indent/module.js +792 -0
- package/dist/indent_purchase/.kosh/bindings.d.ts +22 -0
- package/dist/indent_purchase/.kosh/bindings.js +15 -0
- package/dist/indent_purchase/.kosh/schema.d.ts +2710 -0
- package/dist/indent_purchase/i18n/bn.d.ts +2 -0
- package/dist/indent_purchase/i18n/bn.js +13 -0
- package/dist/indent_purchase/index.d.ts +3 -0
- package/dist/indent_purchase/index.js +61 -0
- package/dist/indent_purchase/module.d.ts +27950 -0
- package/dist/indent_purchase/module.js +163 -0
- package/dist/l10n_bd/.kosh/bindings.js +1 -1
- package/dist/l10n_bd/.kosh/schema.d.ts +530 -8
- package/dist/l10n_bd/i18n/bn.d.ts +2 -0
- package/dist/l10n_bd/i18n/bn.js +69 -0
- package/dist/l10n_bd/index.js +2 -0
- package/dist/l10n_bd/module.d.ts +5167 -1693
- package/dist/l10n_bd_payroll/.kosh/bindings.js +1 -1
- package/dist/l10n_bd_payroll/.kosh/schema.d.ts +587 -8
- package/dist/l10n_bd_payroll/i18n/bn.d.ts +2 -0
- package/dist/l10n_bd_payroll/i18n/bn.js +4 -0
- package/dist/l10n_bd_payroll/index.js +2 -0
- package/dist/l10n_bd_payroll/module.d.ts +5910 -1548
- package/dist/l10n_bd_pos/.kosh/bindings.d.ts +22 -0
- package/dist/{mrp_account → l10n_bd_pos}/.kosh/bindings.js +2 -2
- package/dist/{mrp_account → l10n_bd_pos}/.kosh/schema.d.ts +693 -651
- package/dist/l10n_bd_pos/i18n/bn.d.ts +2 -0
- package/dist/l10n_bd_pos/i18n/bn.js +32 -0
- package/dist/l10n_bd_pos/index.d.ts +3 -0
- package/dist/l10n_bd_pos/index.js +111 -0
- package/dist/{mrp_account → l10n_bd_pos}/module.d.ts +7402 -7647
- package/dist/l10n_bd_pos/module.js +43 -0
- package/dist/l10n_in/.kosh/bindings.js +1 -1
- package/dist/l10n_in/.kosh/schema.d.ts +530 -8
- package/dist/l10n_in/i18n/bn.d.ts +2 -0
- package/dist/l10n_in/i18n/bn.js +95 -0
- package/dist/l10n_in/index.js +2 -0
- package/dist/l10n_in/module.d.ts +6703 -1652
- package/dist/l10n_in/module.js +25 -5
- package/dist/l10n_in/web/GstSettings.js +2 -2
- package/dist/mail/inbound/handle.js +2 -4
- package/dist/mail/inbound/models.js +5 -3
- package/dist/mail/index.d.ts +12 -1
- package/dist/mail/index.js +139 -2
- package/dist/mail/send.d.ts +56 -0
- package/dist/mail/send.js +394 -0
- package/dist/mail/web/SendButton.d.ts +9 -0
- package/dist/mail/web/SendButton.js +71 -0
- package/dist/mail/web/SendSelected.d.ts +8 -0
- package/dist/mail/web/SendSelected.js +33 -0
- package/dist/mail/web/index.d.ts +2 -0
- package/dist/mail/web/index.js +6 -0
- package/dist/mail/web/messages.js +36 -0
- package/dist/maintenance/.kosh/bindings.js +1 -1
- package/dist/maintenance/.kosh/schema.d.ts +2 -1
- package/dist/maintenance/i18n/bn.d.ts +2 -0
- package/dist/maintenance/i18n/bn.js +132 -0
- package/dist/maintenance/index.js +85 -0
- package/dist/maintenance/module.d.ts +25 -0
- package/dist/maintenance/module.js +27 -9
- package/dist/maintenance_stock/.kosh/bindings.js +1 -1
- package/dist/maintenance_stock/.kosh/schema.d.ts +298 -2
- package/dist/maintenance_stock/i18n/bn.d.ts +2 -0
- package/dist/maintenance_stock/i18n/bn.js +21 -0
- package/dist/maintenance_stock/index.js +2 -0
- package/dist/maintenance_stock/module.d.ts +5302 -1256
- package/dist/maintenance_stock/module.js +1 -0
- package/dist/modules-sdk/apps.d.ts +10 -0
- package/dist/modules-sdk/apps.js +32 -0
- package/dist/modules-sdk/index.d.ts +1 -1
- package/dist/modules-sdk/manifest.d.ts +68 -2
- package/dist/payment/.kosh/bindings.js +1 -1
- package/dist/payment/.kosh/schema.d.ts +530 -8
- package/dist/payment/i18n/bn.d.ts +2 -0
- package/dist/payment/i18n/bn.js +59 -0
- package/dist/payment/index.js +85 -0
- package/dist/payment/module.d.ts +5134 -1660
- package/dist/payment/module.js +17 -3
- package/dist/payment/settle.js +1 -0
- package/dist/payroll/.kosh/bindings.js +1 -1
- package/dist/payroll/.kosh/schema.d.ts +59 -1
- package/dist/payroll/i18n/bn.d.ts +2 -0
- package/dist/payroll/i18n/bn.js +206 -0
- package/dist/payroll/index.js +2 -0
- package/dist/payroll/module.d.ts +936 -48
- package/dist/payroll_account/.kosh/bindings.js +1 -1
- package/dist/payroll_account/.kosh/schema.d.ts +587 -8
- package/dist/payroll_account/i18n/bn.d.ts +2 -0
- package/dist/payroll_account/i18n/bn.js +10 -0
- package/dist/payroll_account/index.js +2 -0
- package/dist/payroll_account/module.d.ts +7534 -3192
- package/dist/permissions/approvals.d.ts +97 -4
- package/dist/permissions/approvals.js +780 -31
- package/dist/permissions/index.d.ts +1 -1
- package/dist/permissions/index.js +2 -2
- package/dist/permissions/models.js +177 -5
- package/dist/permissions/routes.d.ts +3 -0
- package/dist/permissions/routes.js +36 -2
- package/dist/permissions/web/ApprovalPanel.js +43 -5
- package/dist/permissions/web/messages.js +52 -0
- package/dist/portal/.kosh/bindings.js +1 -1
- package/dist/portal/.kosh/schema.d.ts +2 -1
- package/dist/portal/documents.d.ts +3 -0
- package/dist/portal/documents.js +21 -1
- package/dist/portal/i18n/bn.d.ts +2 -0
- package/dist/portal/i18n/bn.js +33 -0
- package/dist/portal/index.js +2 -0
- package/dist/portal/module.d.ts +20 -0
- package/dist/portal/routes-documents.js +76 -0
- package/dist/pos/.kosh/bindings.js +1 -1
- package/dist/pos/.kosh/schema.d.ts +531 -8
- package/dist/pos/i18n/bn.d.ts +2 -0
- package/dist/pos/i18n/bn.js +133 -0
- package/dist/pos/index.js +83 -1
- package/dist/pos/module.d.ts +6888 -1777
- package/dist/pos/module.js +49 -5
- package/dist/pos/routes.js +80 -7
- package/dist/pos/web/Register.js +2 -5
- package/dist/pos_stock/.kosh/bindings.js +1 -1
- package/dist/pos_stock/.kosh/schema.d.ts +626 -9
- package/dist/pos_stock/i18n/bn.d.ts +2 -0
- package/dist/pos_stock/i18n/bn.js +6 -0
- package/dist/pos_stock/index.js +2 -0
- package/dist/pos_stock/module.d.ts +10798 -3276
- package/dist/product/.kosh/bindings.js +1 -1
- package/dist/product/.kosh/schema.d.ts +202 -1
- package/dist/product/i18n/bn.d.ts +2 -0
- package/dist/product/i18n/bn.js +175 -0
- package/dist/product/index.d.ts +1 -0
- package/dist/product/index.js +288 -1
- package/dist/product/module.d.ts +1725 -0
- package/dist/product/module.js +66 -6
- package/dist/product/pricelist.d.ts +575 -0
- package/dist/product/pricelist.js +257 -0
- package/dist/product/variants.d.ts +908 -0
- package/dist/product/variants.js +251 -0
- package/dist/production/.kosh/bindings.d.ts +22 -0
- package/dist/production/.kosh/bindings.js +15 -0
- package/dist/production/.kosh/schema.d.ts +2345 -0
- package/dist/{mrp → production}/demo.d.ts +1 -1
- package/dist/{mrp → production}/demo.js +5 -5
- package/dist/production/depth.d.ts +790 -0
- package/dist/production/depth.js +262 -0
- package/dist/production/i18n/bn.d.ts +2 -0
- package/dist/production/i18n/bn.js +350 -0
- package/dist/production/index.d.ts +6 -0
- package/dist/production/index.js +1256 -0
- package/dist/production/module.d.ts +17327 -0
- package/dist/production/module.js +1333 -0
- package/dist/production/plan.d.ts +921 -0
- package/dist/production/plan.js +511 -0
- package/dist/production/schedule.d.ts +656 -0
- package/dist/production/schedule.js +309 -0
- package/dist/production_account/.kosh/bindings.d.ts +22 -0
- package/dist/production_account/.kosh/bindings.js +15 -0
- package/dist/production_account/.kosh/schema.d.ts +3496 -0
- package/dist/production_account/i18n/bn.d.ts +2 -0
- package/dist/production_account/i18n/bn.js +93 -0
- package/dist/production_account/index.d.ts +4 -0
- package/dist/production_account/index.js +246 -0
- package/dist/production_account/module.d.ts +1192 -0
- package/dist/{mrp_account → production_account}/module.js +72 -18
- package/dist/production_account/overhead.d.ts +1195 -0
- package/dist/production_account/overhead.js +554 -0
- package/dist/project/.kosh/bindings.js +1 -1
- package/dist/project/.kosh/schema.d.ts +65 -2
- package/dist/project/i18n/bn.d.ts +2 -0
- package/dist/project/i18n/bn.js +383 -0
- package/dist/project/index.js +123 -0
- package/dist/project/module.d.ts +20 -0
- package/dist/project/module.js +73 -14
- package/dist/project_account/.kosh/bindings.js +1 -1
- package/dist/project_account/.kosh/schema.d.ts +530 -8
- package/dist/project_account/i18n/bn.d.ts +2 -0
- package/dist/project_account/i18n/bn.js +6 -0
- package/dist/project_account/index.js +2 -0
- package/dist/project_account/module.d.ts +4926 -1452
- package/dist/project_portal/.kosh/bindings.js +1 -1
- package/dist/project_portal/.kosh/schema.d.ts +65 -2
- package/dist/project_portal/i18n/bn.d.ts +2 -0
- package/dist/project_portal/i18n/bn.js +6 -0
- package/dist/project_portal/index.js +2 -0
- package/dist/project_portal/module.d.ts +40 -0
- package/dist/project_purchase/.kosh/bindings.js +1 -1
- package/dist/project_purchase/.kosh/schema.d.ts +1126 -53
- package/dist/project_purchase/i18n/bn.d.ts +2 -0
- package/dist/project_purchase/i18n/bn.js +4 -0
- package/dist/project_purchase/index.js +2 -0
- package/dist/project_purchase/module.d.ts +17912 -4446
- package/dist/purchase/.kosh/bindings.js +1 -1
- package/dist/purchase/.kosh/schema.d.ts +813 -3
- package/dist/purchase/comparison.d.ts +993 -0
- package/dist/purchase/comparison.js +415 -0
- package/dist/purchase/extras.d.ts +1509 -0
- package/dist/purchase/extras.js +445 -0
- package/dist/purchase/i18n/bn.d.ts +2 -0
- package/dist/purchase/i18n/bn.js +413 -0
- package/dist/purchase/index.d.ts +5 -0
- package/dist/purchase/index.js +1280 -4
- package/dist/purchase/module.d.ts +7139 -398
- package/dist/purchase/module.js +295 -11
- package/dist/purchase/request.d.ts +696 -0
- package/dist/purchase/request.js +446 -0
- package/dist/purchase/tender.d.ts +1208 -0
- package/dist/purchase/tender.js +507 -0
- package/dist/purchase/vendorprice.d.ts +340 -0
- package/dist/purchase/vendorprice.js +153 -0
- package/dist/purchase_account/.kosh/bindings.js +1 -1
- package/dist/purchase_account/.kosh/schema.d.ts +1130 -57
- package/dist/purchase_account/i18n/bn.d.ts +2 -0
- package/dist/purchase_account/i18n/bn.js +22 -0
- package/dist/purchase_account/index.js +19 -0
- package/dist/purchase_account/module.d.ts +12276 -2247
- package/dist/purchase_account/module.js +241 -9
- package/dist/purchase_portal/.kosh/bindings.js +1 -1
- package/dist/purchase_portal/.kosh/schema.d.ts +813 -3
- package/dist/purchase_portal/i18n/bn.d.ts +2 -0
- package/dist/purchase_portal/i18n/bn.js +5 -0
- package/dist/purchase_portal/index.js +2 -0
- package/dist/purchase_portal/module.d.ts +6849 -353
- package/dist/purchase_stock/.kosh/bindings.js +1 -1
- package/dist/purchase_stock/.kosh/schema.d.ts +910 -4
- package/dist/purchase_stock/i18n/bn.d.ts +2 -0
- package/dist/purchase_stock/i18n/bn.js +19 -0
- package/dist/purchase_stock/index.d.ts +1 -1
- package/dist/purchase_stock/index.js +29 -0
- package/dist/purchase_stock/module.d.ts +12410 -1864
- package/dist/purchase_stock/module.js +81 -9
- package/dist/purchase_stock/scorecard.d.ts +22 -0
- package/dist/purchase_stock/scorecard.js +77 -0
- package/dist/purchase_stock/web/Scorecard.d.ts +7 -0
- package/dist/purchase_stock/web/Scorecard.js +22 -0
- package/dist/purchase_stock/web/index.d.ts +11 -0
- package/dist/purchase_stock/web/index.js +16 -0
- package/dist/purchase_stock/web/messages.d.ts +2 -0
- package/dist/purchase_stock/web/messages.js +27 -0
- package/dist/purchase_stock_account/.kosh/bindings.js +1 -1
- package/dist/purchase_stock_account/.kosh/schema.d.ts +1286 -58
- package/dist/purchase_stock_account/i18n/bn.d.ts +2 -0
- package/dist/purchase_stock_account/i18n/bn.js +8 -0
- package/dist/purchase_stock_account/index.js +18 -0
- package/dist/purchase_stock_account/module.d.ts +7 -37995
- package/dist/purchase_stock_account/module.js +24 -3
- package/dist/recruitment/.kosh/bindings.js +1 -1
- package/dist/recruitment/.kosh/schema.d.ts +59 -1
- package/dist/recruitment/i18n/bn.d.ts +2 -0
- package/dist/recruitment/i18n/bn.js +93 -0
- package/dist/recruitment/index.js +64 -0
- package/dist/recruitment/module.d.ts +458 -8
- package/dist/recruitment/module.js +11 -3
- package/dist/reporting/documents.d.ts +5 -0
- package/dist/reporting/documents.js +11 -1
- package/dist/reporting/index.d.ts +1 -1
- package/dist/reporting/index.js +1 -1
- package/dist/reporting/web/CalendarView.d.ts +18 -5
- package/dist/reporting/web/CalendarView.js +163 -29
- package/dist/reporting/web/messages.js +18 -0
- package/dist/sale_account/.kosh/bindings.js +1 -1
- package/dist/sale_account/.kosh/schema.d.ts +642 -16
- package/dist/sale_account/i18n/bn.d.ts +2 -0
- package/dist/sale_account/i18n/bn.js +48 -0
- package/dist/sale_account/index.d.ts +1 -1
- package/dist/sale_account/index.js +102 -4
- package/dist/sale_account/module.d.ts +8254 -2212
- package/dist/sale_account/module.js +535 -46
- package/dist/sale_crm/.kosh/bindings.d.ts +22 -0
- package/dist/sale_crm/.kosh/bindings.js +15 -0
- package/dist/{mrp → sale_crm}/.kosh/schema.d.ts +389 -567
- package/dist/sale_crm/i18n/bn.d.ts +2 -0
- package/dist/sale_crm/i18n/bn.js +9 -0
- package/dist/sale_crm/index.d.ts +7 -0
- package/dist/sale_crm/index.js +104 -0
- package/dist/sale_crm/module.d.ts +5609 -0
- package/dist/sale_crm/module.js +73 -0
- package/dist/sale_portal/.kosh/bindings.js +1 -1
- package/dist/sale_portal/.kosh/schema.d.ts +291 -4
- package/dist/sale_portal/i18n/bn.d.ts +2 -0
- package/dist/sale_portal/i18n/bn.js +7 -0
- package/dist/sale_portal/index.js +10 -0
- package/dist/sale_portal/module.d.ts +2564 -294
- package/dist/sale_project/.kosh/bindings.js +1 -1
- package/dist/sale_project/.kosh/schema.d.ts +354 -5
- package/dist/sale_project/i18n/bn.d.ts +2 -0
- package/dist/sale_project/i18n/bn.js +12 -0
- package/dist/sale_project/index.js +2 -0
- package/dist/sale_project/module.d.ts +6249 -2402
- package/dist/sale_stock/.kosh/bindings.js +1 -1
- package/dist/sale_stock/.kosh/schema.d.ts +387 -5
- package/dist/sale_stock/i18n/bn.d.ts +2 -0
- package/dist/sale_stock/i18n/bn.js +15 -0
- package/dist/sale_stock/index.js +2 -0
- package/dist/sale_stock/module.d.ts +8057 -1759
- package/dist/sale_stock/module.js +20 -3
- package/dist/sales/.kosh/bindings.js +1 -1
- package/dist/sales/.kosh/schema.d.ts +291 -4
- package/dist/sales/i18n/bn.d.ts +2 -0
- package/dist/sales/i18n/bn.js +128 -0
- package/dist/sales/index.js +120 -5
- package/dist/sales/module.d.ts +3567 -633
- package/dist/sales/module.js +306 -11
- package/dist/server/api/duplicate.d.ts +14 -0
- package/dist/server/api/duplicate.js +75 -0
- package/dist/server/api/explain.d.ts +70 -0
- package/dist/server/api/explain.js +111 -0
- package/dist/server/api/metadata.d.ts +2 -0
- package/dist/server/api/metadata.js +9 -0
- package/dist/server/api/openapi.js +15 -0
- package/dist/server/api/rest.d.ts +1 -0
- package/dist/server/api/rest.js +76 -12
- package/dist/server/api/views.js +1 -1
- package/dist/server/apps.d.ts +16 -1
- package/dist/server/apps.js +164 -2
- package/dist/server/auth/base.js +2 -0
- package/dist/server/auth/service.d.ts +8 -0
- package/dist/server/auth/service.js +19 -0
- package/dist/server/events.d.ts +13 -0
- package/dist/server/events.js +22 -0
- package/dist/server/i18n.d.ts +27 -0
- package/dist/server/i18n.js +143 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +2 -0
- package/dist/server/server.js +6 -0
- package/dist/settings/company.d.ts +3 -1
- package/dist/settings/company.js +26 -5
- package/dist/settings/routes.d.ts +10 -0
- package/dist/settings/routes.js +19 -3
- package/dist/settings/web/AppsPage.d.ts +3 -2
- package/dist/settings/web/AppsPage.js +26 -8
- package/dist/settings/web/CompaniesPage.js +91 -6
- package/dist/settings/web/messages.js +64 -0
- package/dist/sign/.kosh/bindings.js +1 -1
- package/dist/sign/.kosh/schema.d.ts +2 -1
- package/dist/sign/i18n/bn.d.ts +2 -0
- package/dist/sign/i18n/bn.js +97 -0
- package/dist/sign/index.d.ts +15 -0
- package/dist/sign/index.js +129 -1
- package/dist/sign/module.d.ts +40 -0
- package/dist/sign/module.js +11 -2
- package/dist/stock/.kosh/bindings.js +1 -1
- package/dist/stock/.kosh/schema.d.ts +298 -2
- package/dist/stock/i18n/bn.d.ts +2 -0
- package/dist/stock/i18n/bn.js +311 -0
- package/dist/stock/index.d.ts +3 -1
- package/dist/stock/index.js +442 -3
- package/dist/stock/ledger.d.ts +78 -0
- package/dist/stock/ledger.js +582 -0
- package/dist/stock/module.d.ts +5280 -2044
- package/dist/stock/module.js +222 -23
- package/dist/stock/replenish.js +16 -1
- package/dist/stock/returns.d.ts +157 -0
- package/dist/stock/returns.js +163 -0
- package/dist/stock/web/Ledger.d.ts +9 -0
- package/dist/stock/web/Ledger.js +108 -0
- package/dist/stock/web/Operations.d.ts +8 -0
- package/dist/stock/web/Operations.js +33 -0
- package/dist/stock/web/ReturnButton.d.ts +7 -0
- package/dist/stock/web/ReturnButton.js +62 -0
- package/dist/stock/web/index.d.ts +3 -0
- package/dist/stock/web/index.js +9 -0
- package/dist/stock/web/messages.js +154 -0
- package/dist/stock_account/.kosh/bindings.js +1 -1
- package/dist/stock_account/.kosh/schema.d.ts +682 -9
- package/dist/stock_account/i18n/bn.d.ts +2 -0
- package/dist/stock_account/i18n/bn.js +73 -0
- package/dist/stock_account/index.d.ts +1 -0
- package/dist/stock_account/index.js +131 -3
- package/dist/stock_account/landed.d.ts +429 -0
- package/dist/stock_account/landed.js +335 -0
- package/dist/stock_account/module.d.ts +11247 -3363
- package/dist/stock_account/module.js +135 -6
- package/dist/stock_account/web/LandedPreview.d.ts +7 -0
- package/dist/stock_account/web/LandedPreview.js +23 -0
- package/dist/stock_account/web/index.d.ts +11 -0
- package/dist/stock_account/web/index.js +16 -0
- package/dist/stock_account/web/messages.d.ts +2 -0
- package/dist/stock_account/web/messages.js +27 -0
- package/dist/todo/i18n/bn.d.ts +2 -0
- package/dist/todo/i18n/bn.js +66 -0
- package/dist/todo/index.js +59 -0
- package/dist/todo/module.d.ts +5 -0
- package/dist/todo/module.js +5 -3
- package/dist/trade_finance/.kosh/bindings.js +1 -1
- package/dist/trade_finance/.kosh/schema.d.ts +2 -1
- package/dist/trade_finance/i18n/bn.d.ts +2 -0
- package/dist/trade_finance/i18n/bn.js +162 -0
- package/dist/trade_finance/index.js +93 -0
- package/dist/trade_finance/module.d.ts +26 -0
- package/dist/trade_finance/module.js +27 -8
- package/dist/trade_finance_account/.kosh/bindings.js +1 -1
- package/dist/trade_finance_account/.kosh/schema.d.ts +530 -8
- package/dist/trade_finance_account/i18n/bn.d.ts +2 -0
- package/dist/trade_finance_account/i18n/bn.js +27 -0
- package/dist/trade_finance_account/index.js +2 -0
- package/dist/trade_finance_account/module.d.ts +4906 -1432
- package/dist/trade_finance_account/module.js +1 -0
- package/dist/trade_finance_purchase/.kosh/bindings.js +1 -1
- package/dist/trade_finance_purchase/.kosh/schema.d.ts +813 -3
- package/dist/trade_finance_purchase/i18n/bn.d.ts +2 -0
- package/dist/trade_finance_purchase/i18n/bn.js +6 -0
- package/dist/trade_finance_purchase/index.js +2 -0
- package/dist/trade_finance_purchase/module.d.ts +6909 -413
- package/dist/trade_finance_sale/.kosh/bindings.js +1 -1
- package/dist/trade_finance_sale/.kosh/schema.d.ts +291 -4
- package/dist/trade_finance_sale/i18n/bn.d.ts +2 -0
- package/dist/trade_finance_sale/i18n/bn.js +6 -0
- package/dist/trade_finance_sale/index.js +2 -0
- package/dist/trade_finance_sale/module.d.ts +2601 -331
- package/dist/ui/api.d.ts +2 -0
- package/dist/ui/app.d.ts +9 -0
- package/dist/ui/app.js +24 -4
- package/dist/ui/components/AppIcon.js +2 -2
- package/dist/ui/components/Explain.d.ts +69 -0
- package/dist/ui/components/Explain.js +62 -0
- package/dist/ui/context.d.ts +8 -1
- package/dist/ui/context.js +34 -1
- package/dist/ui/i18n/messages.d.ts +36 -0
- package/dist/ui/i18n/messages.js +72 -0
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.js +1 -0
- package/dist/ui/registry.d.ts +14 -0
- package/dist/ui/registry.js +10 -0
- package/dist/ui/views/FormView.d.ts +6 -0
- package/dist/ui/views/FormView.js +47 -10
- package/dist/ui/views/ListView.d.ts +8 -0
- package/dist/ui/views/ListView.js +10 -3
- package/dist/ui/views/StatsRow.js +2 -1
- package/dist/views/extend.js +12 -0
- package/dist/views/types.d.ts +13 -2
- package/dist/views/validate.js +8 -1
- package/dist/website/.kosh/bindings.js +1 -1
- package/dist/website/.kosh/schema.d.ts +2 -1
- package/dist/website/i18n/bn.d.ts +2 -0
- package/dist/website/i18n/bn.js +113 -0
- package/dist/website/index.js +36 -0
- package/dist/website/module.d.ts +20 -0
- package/dist/website/module.js +29 -5
- package/dist/website_crm/.kosh/bindings.js +1 -1
- package/dist/website_crm/.kosh/schema.d.ts +2 -1
- package/dist/website_crm/i18n/bn.d.ts +2 -0
- package/dist/website_crm/i18n/bn.js +5 -0
- package/dist/website_crm/index.js +2 -0
- package/dist/website_crm/module.d.ts +40 -0
- package/dist/website_sale/.kosh/bindings.js +1 -1
- package/dist/website_sale/.kosh/schema.d.ts +642 -17
- package/dist/website_sale/i18n/bn.d.ts +2 -0
- package/dist/website_sale/i18n/bn.js +132 -0
- package/dist/website_sale/index.js +83 -1
- package/dist/website_sale/module.d.ts +18705 -5550
- package/dist/website_sale/module.js +32 -10
- package/dist/website_sale/shop.js +22 -9
- package/dist/website_sale_stock/.kosh/bindings.js +1 -1
- package/dist/website_sale_stock/.kosh/schema.d.ts +737 -18
- package/dist/website_sale_stock/i18n/bn.d.ts +2 -0
- package/dist/website_sale_stock/i18n/bn.js +4 -0
- package/dist/website_sale_stock/index.js +2 -0
- package/dist/website_sale_stock/module.d.ts +10 -24997
- package/dist/website_sale_stock/module.js +7 -3
- package/package.json +36 -8
- package/dist/mrp/index.d.ts +0 -3
- package/dist/mrp/index.js +0 -393
- package/dist/mrp/module.js +0 -757
- package/dist/mrp_account/index.d.ts +0 -3
- package/dist/mrp_account/index.js +0 -22
- /package/dist/{mrp → approvals_purchase}/.kosh/bindings.d.ts +0 -0
- /package/dist/{mrp_account → indent}/.kosh/bindings.d.ts +0 -0
|
@@ -4,38 +4,123 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
4
4
|
* in it; switching to one; and, for administrators, a new company — its apps' defaults (journals, sequences, taxes…)
|
|
5
5
|
* are installed with it, and the administrators can switch to it at once.
|
|
6
6
|
*/
|
|
7
|
-
import { Alert, ApiError, Avatar, Badge, Button, Dialog, Input, imageUrl, Label, Select, useKosh, } from '../../ui/index.js';
|
|
7
|
+
import { Alert, ApiError, Avatar, Badge, Button, Checkbox, Dialog, Input, imageUrl, Label, Select, Textarea, useKosh, } from '../../ui/index.js';
|
|
8
8
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
9
|
-
import { Building2, Plus } from 'lucide-react';
|
|
9
|
+
import { Building2, CheckCircle2, Info, Plus } from 'lucide-react';
|
|
10
10
|
import { useEffect, useId, useState } from 'react';
|
|
11
11
|
import { useTranslation } from 'react-i18next';
|
|
12
12
|
const message = (error) => (error instanceof ApiError ? error.message : String(error));
|
|
13
|
-
|
|
13
|
+
/** The details of a new company, grouped as people expect them; anything else an app adds goes under "More". */
|
|
14
|
+
const ADDRESS = ['street', 'street2', 'city', 'state', 'zip', 'country', 'countryCode'];
|
|
15
|
+
const CONTACT = ['email', 'phone', 'mobile', 'website'];
|
|
16
|
+
const REGISTRATION = /tax|vat|bin|tin|gst|pan|registration|trade|licen|fiscal|year/i;
|
|
17
|
+
function DetailInput({ id, field, value, onChange, }) {
|
|
18
|
+
if (field.kind === 'boolean')
|
|
19
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Checkbox, { id: id, checked: value === true, onCheckedChange: (c) => onChange(c === true), "aria-describedby": field.help === null ? undefined : `${id}-help` }), _jsx(Label, { htmlFor: id, children: field.label })] }));
|
|
20
|
+
if (field.kind === 'selection' && field.options !== null)
|
|
21
|
+
return (_jsx(Select, { id: id, label: field.label, value: typeof value === 'string' ? value : null, options: field.options, onChange: onChange }));
|
|
22
|
+
if (field.kind === 'text')
|
|
23
|
+
return (_jsx(Textarea, { id: id, rows: 2, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value), "aria-describedby": field.help === null ? undefined : `${id}-help` }));
|
|
24
|
+
return (_jsx(Input, { id: id, type: field.kind === 'integer'
|
|
25
|
+
? 'number'
|
|
26
|
+
: field.key === 'email'
|
|
27
|
+
? 'email'
|
|
28
|
+
: field.key === 'website'
|
|
29
|
+
? 'url'
|
|
30
|
+
: field.key.toLowerCase().includes('phone') || field.key === 'mobile'
|
|
31
|
+
? 'tel'
|
|
32
|
+
: 'text', value: typeof value === 'string' || typeof value === 'number' ? String(value) : '', onChange: (e) => onChange(field.kind === 'integer'
|
|
33
|
+
? e.target.value === ''
|
|
34
|
+
? null
|
|
35
|
+
: Number(e.target.value)
|
|
36
|
+
: e.target.value), "aria-describedby": field.help === null ? undefined : `${id}-help` }));
|
|
37
|
+
}
|
|
38
|
+
function NewCompanyDialog({ api, currencies, fields, open, onOpenChange, }) {
|
|
14
39
|
const { t } = useTranslation('settings');
|
|
40
|
+
const { switchCompany } = useKosh();
|
|
15
41
|
const id = useId();
|
|
16
42
|
const queryClient = useQueryClient();
|
|
17
43
|
const [name, setName] = useState('');
|
|
18
44
|
const [currency, setCurrency] = useState(null);
|
|
45
|
+
const [grouping, setGrouping] = useState('international');
|
|
46
|
+
const [accent, setAccent] = useState('');
|
|
47
|
+
const [details, setDetails] = useState({});
|
|
19
48
|
const create = useMutation({
|
|
20
49
|
mutationFn: () => api.call('POST', '/api/v1/settings/companies', {
|
|
21
50
|
name,
|
|
22
51
|
currency: Number(currency),
|
|
52
|
+
numberGrouping: grouping,
|
|
53
|
+
...(accent === '' ? {} : { accentColor: accent }),
|
|
54
|
+
details: Object.fromEntries(Object.entries(details).filter(([, v]) => v !== '' && v !== null && v !== undefined)),
|
|
23
55
|
}),
|
|
24
56
|
onSuccess: () => {
|
|
25
57
|
void queryClient.invalidateQueries({ queryKey: ['settings', 'companies'] });
|
|
26
58
|
// The switcher lists the user's companies from their details.
|
|
27
59
|
void queryClient.invalidateQueries({ queryKey: ['me'] });
|
|
28
|
-
onOpenChange(false);
|
|
29
60
|
},
|
|
30
61
|
});
|
|
31
62
|
useEffect(() => {
|
|
32
63
|
if (!open) {
|
|
33
64
|
setName('');
|
|
34
65
|
setCurrency(null);
|
|
66
|
+
setGrouping('international');
|
|
67
|
+
setAccent('');
|
|
68
|
+
setDetails({});
|
|
35
69
|
create.reset();
|
|
36
70
|
}
|
|
37
71
|
}, [open, create.reset]);
|
|
38
|
-
|
|
72
|
+
// The lakh and crore grouping suits taka and rupees: suggested when one is chosen (still the person's choice).
|
|
73
|
+
const chooseCurrency = (value) => {
|
|
74
|
+
setCurrency(value);
|
|
75
|
+
const code = currencies.find((c) => String(c.id) === value)?.name ?? '';
|
|
76
|
+
setGrouping(['BDT', 'INR', 'NPR', 'PKR', 'LKR'].includes(code) ? 'lakh' : 'international');
|
|
77
|
+
};
|
|
78
|
+
const set = (key) => (value) => setDetails((d) => ({ ...d, [key]: value }));
|
|
79
|
+
const groups = [
|
|
80
|
+
{
|
|
81
|
+
key: 'address',
|
|
82
|
+
title: t('companies.address'),
|
|
83
|
+
hint: t('companies.addressHint'),
|
|
84
|
+
fields: ADDRESS.flatMap((k) => fields.filter((f) => f.key === k)),
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
key: 'contact',
|
|
88
|
+
title: t('companies.contact'),
|
|
89
|
+
hint: t('companies.contactHint'),
|
|
90
|
+
fields: CONTACT.flatMap((k) => fields.filter((f) => f.key === k)),
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
key: 'registration',
|
|
94
|
+
title: t('companies.registration'),
|
|
95
|
+
hint: t('companies.registrationHint'),
|
|
96
|
+
fields: fields.filter((f) => !ADDRESS.includes(f.key) &&
|
|
97
|
+
!CONTACT.includes(f.key) &&
|
|
98
|
+
REGISTRATION.test(`${f.key} ${f.label}`)),
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: 'more',
|
|
102
|
+
title: t('companies.more'),
|
|
103
|
+
hint: t('companies.moreHint'),
|
|
104
|
+
fields: fields.filter((f) => !ADDRESS.includes(f.key) &&
|
|
105
|
+
!CONTACT.includes(f.key) &&
|
|
106
|
+
!REGISTRATION.test(`${f.key} ${f.label}`)),
|
|
107
|
+
},
|
|
108
|
+
].filter((g) => g.fields.length > 0);
|
|
109
|
+
const done = create.data;
|
|
110
|
+
const field = (f) => {
|
|
111
|
+
const fid = `${id}-${f.key}`;
|
|
112
|
+
return (_jsxs("div", { className: f.kind === 'text' ? 'grid gap-1.5 sm:col-span-2' : 'grid gap-1.5', children: [f.kind === 'boolean' ? null : _jsx(Label, { htmlFor: fid, children: f.label }), _jsx(DetailInput, { id: fid, field: f, value: details[f.key], onChange: set(f.key) }), f.help === null ? null : (_jsx("p", { id: `${fid}-help`, className: "text-xs text-muted-foreground", children: f.help }))] }, f.key));
|
|
113
|
+
};
|
|
114
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, wide: true, title: done === undefined
|
|
115
|
+
? t('companies.newTitle')
|
|
116
|
+
: t('companies.readyTitle', { name: done.name }), description: done === undefined ? t('companies.newHint') : t('companies.readyHint'), footer: done === undefined ? (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => onOpenChange(false), children: t('profile.cancel') }), _jsx(Button, { variant: "primary", busy: create.isPending, disabled: name.trim() === '' || currency === null, onClick: () => create.mutate(), children: t('companies.create') })] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => onOpenChange(false), children: t('companies.close') }), switchCompany === undefined ? null : (_jsx(Button, { variant: "primary", onClick: () => switchCompany(done.id), children: t('companies.switchNow') }))] })), children: done !== undefined ? (_jsxs("div", { className: "grid gap-3", children: [_jsxs("p", { className: "flex items-center gap-2 text-sm font-medium text-success", children: [_jsx(CheckCircle2, { className: "size-4", "aria-hidden": true }), t('companies.created', { name: done.name })] }), done.defaults.length === 0 ? null : (_jsxs("section", { "aria-label": t('companies.setUp'), className: "rounded-md border p-3", children: [_jsx("h3", { className: "mb-2 text-sm font-semibold", children: t('companies.setUp') }), _jsx("ul", { className: "grid gap-1 text-sm", children: done.defaults.map((d) => (_jsxs("li", { className: "flex gap-2", children: [_jsx("span", { className: "min-w-28 font-medium", children: d.module }), _jsx("span", { className: "text-muted-foreground", children: d.summary })] }, d.module))) })] })), _jsx("p", { className: "text-sm text-muted-foreground", children: t('companies.nextSteps') })] })) : (_jsxs("form", { className: "grid gap-6", onSubmit: (e) => {
|
|
117
|
+
e.preventDefault();
|
|
118
|
+
if (name.trim() !== '' && currency !== null)
|
|
119
|
+
create.mutate();
|
|
120
|
+
}, children: [_jsxs("fieldset", { className: "grid gap-4", children: [_jsx("legend", { className: "mb-1 text-sm font-semibold", children: t('companies.identity') }), _jsx("p", { className: "-mt-2 text-xs text-muted-foreground", children: t('companies.identityHint') }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { className: "grid gap-1.5 sm:col-span-2", children: [_jsxs(Label, { htmlFor: `${id}-name`, children: [t('company.name'), ' ', _jsx("span", { "aria-hidden": true, className: "text-danger", children: "*" })] }), _jsx(Input, { id: `${id}-name`, required: true, "aria-required": true, autoFocus: true, value: name, placeholder: t('companies.namePlaceholder'), onChange: (e) => setName(e.target.value) })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsxs(Label, { htmlFor: `${id}-currency`, children: [t('companies.currency'), ' ', _jsx("span", { "aria-hidden": true, className: "text-danger", children: "*" })] }), _jsx(Select, { id: `${id}-currency`, label: t('companies.currency'), value: currency, placeholder: t('companies.chooseCurrency'), options: currencies.map((c) => ({ value: String(c.id), label: c.name })), onChange: chooseCurrency }), _jsx("p", { className: "text-xs text-muted-foreground", children: t('companies.currencyHint') })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: `${id}-grouping`, children: t('company.grouping') }), _jsx(Select, { id: `${id}-grouping`, label: t('company.grouping'), value: grouping, options: [
|
|
121
|
+
{ value: 'international', label: t('company.international') },
|
|
122
|
+
{ value: 'lakh', label: t('company.lakh') },
|
|
123
|
+
], onChange: (v) => setGrouping(v === 'lakh' ? 'lakh' : 'international') })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: `${id}-accent`, children: t('company.brand') }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { type: "color", "aria-label": t('company.picker'), className: "h-9 w-12 cursor-pointer rounded border bg-surface", value: accent === '' ? '#4f46e5' : accent, onChange: (e) => setAccent(e.target.value) }), _jsx(Input, { id: `${id}-accent`, value: accent, placeholder: "#4f46e5", onChange: (e) => setAccent(e.target.value.trim()) })] }), _jsx("p", { className: "text-xs text-muted-foreground", children: t('companies.brandHint') })] })] })] }), groups.map((g) => (_jsxs("fieldset", { className: "grid gap-4 border-t pt-4", children: [_jsx("legend", { className: "mb-1 text-sm font-semibold", children: g.title }), _jsx("p", { className: "-mt-2 text-xs text-muted-foreground", children: g.hint }), _jsx("div", { className: "grid gap-4 sm:grid-cols-2", children: g.fields.map(field) })] }, g.key))), _jsxs("div", { className: "flex items-start gap-2 rounded-md bg-muted/60 p-3 text-xs text-muted-foreground", children: [_jsx(Info, { className: "mt-0.5 size-4 shrink-0", "aria-hidden": true }), _jsx("p", { children: t('companies.whatHappens') })] }), create.error === null ? null : _jsx(Alert, { tone: "danger", children: message(create.error) }), _jsx("button", { type: "submit", hidden: true, "aria-hidden": true, tabIndex: -1 })] })) }));
|
|
39
124
|
}
|
|
40
125
|
export function CompaniesPage({ api }) {
|
|
41
126
|
const { t } = useTranslation('settings');
|
|
@@ -48,5 +133,5 @@ export function CompaniesPage({ api }) {
|
|
|
48
133
|
if (list.error !== null)
|
|
49
134
|
return _jsx(Alert, { tone: "danger", children: message(list.error) });
|
|
50
135
|
const data = list.data;
|
|
51
|
-
return (_jsxs("div", { className: "mx-auto grid max-w-3xl gap-6", children: [_jsxs("header", { className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: t('companies.title') }), _jsx("p", { className: "text-sm text-muted-foreground", children: t('companies.intro') })] }), data?.canCreate === true ? (_jsxs(Button, { variant: "primary", onClick: () => setCreating(true), children: [_jsx(Plus, { className: "size-4", "aria-hidden": true }), t('companies.new')] })) : null] }), data === undefined ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "\u2026" })) : (_jsx("ul", { className: "divide-y rounded-lg border bg-surface", children: data.companies.map((c) => (_jsxs("li", { className: "flex flex-wrap items-center gap-3 px-4 py-3", children: [c.logo === null ? (_jsx("span", { "aria-hidden": true, className: "grid size-9 shrink-0 place-items-center rounded-md bg-muted text-muted-foreground", children: _jsx(Building2, { className: "size-4" }) })) : (_jsx(Avatar, { name: c.name, src: imageUrl('company', c.id, c.logo), shape: "square", className: "size-9 border" })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("p", { className: "flex items-center gap-2 font-medium", children: [_jsx("span", { className: "truncate", children: c.name }), c.current ? _jsx(Badge, { tone: "info", children: t('companies.current') }) : null] }), _jsxs("p", { className: "text-sm text-muted-foreground", children: [c.currency, " \u00B7 ", t('companies.people', { count: c.people })] })] }), c.current || !c.member || switchCompany === undefined ? null : (_jsx(Button, { size: "sm", "aria-label": t('companies.switchTo', { name: c.name }), onClick: () => switchCompany(c.id), children: t('companies.switch') }))] }, c.id))) })), data === undefined ? null : (_jsx(NewCompanyDialog, { api: api, currencies: data.currencies, open: creating, onOpenChange: setCreating }))] }));
|
|
136
|
+
return (_jsxs("div", { className: "mx-auto grid max-w-3xl gap-6", children: [_jsxs("header", { className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: t('companies.title') }), _jsx("p", { className: "text-sm text-muted-foreground", children: t('companies.intro') })] }), data?.canCreate === true ? (_jsxs(Button, { variant: "primary", onClick: () => setCreating(true), children: [_jsx(Plus, { className: "size-4", "aria-hidden": true }), t('companies.new')] })) : null] }), data === undefined ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "\u2026" })) : (_jsx("ul", { className: "divide-y rounded-lg border bg-surface", children: data.companies.map((c) => (_jsxs("li", { className: "flex flex-wrap items-center gap-3 px-4 py-3", children: [c.logo === null ? (_jsx("span", { "aria-hidden": true, className: "grid size-9 shrink-0 place-items-center rounded-md bg-muted text-muted-foreground", children: _jsx(Building2, { className: "size-4" }) })) : (_jsx(Avatar, { name: c.name, src: imageUrl('company', c.id, c.logo), shape: "square", className: "size-9 border" })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("p", { className: "flex items-center gap-2 font-medium", children: [_jsx("span", { className: "truncate", children: c.name }), c.current ? _jsx(Badge, { tone: "info", children: t('companies.current') }) : null] }), _jsxs("p", { className: "text-sm text-muted-foreground", children: [c.currency, " \u00B7 ", t('companies.people', { count: c.people })] })] }), c.current || !c.member || switchCompany === undefined ? null : (_jsx(Button, { size: "sm", "aria-label": t('companies.switchTo', { name: c.name }), onClick: () => switchCompany(c.id), children: t('companies.switch') }))] }, c.id))) })), data === undefined ? null : (_jsx(NewCompanyDialog, { api: api, currencies: data.currencies, fields: data.fields ?? [], open: creating, onOpenChange: setCreating }))] }));
|
|
52
137
|
}
|
|
@@ -357,6 +357,27 @@ export const messages = {
|
|
|
357
357
|
people_other: '{{count}} people',
|
|
358
358
|
switch: 'Switch',
|
|
359
359
|
switchTo: 'Switch to {{name}}',
|
|
360
|
+
identity: 'Identity',
|
|
361
|
+
identityHint: 'How the company is named and counts its money. The currency cannot be changed once it has entries.',
|
|
362
|
+
namePlaceholder: 'e.g. Padma Traders Ltd.',
|
|
363
|
+
currencyHint: 'Its books, prices and reports are in this currency.',
|
|
364
|
+
brandHint: 'The accent of the back-office for everyone working in this company. Empty: the default.',
|
|
365
|
+
address: 'Address',
|
|
366
|
+
addressHint: 'Printed on its invoices, orders and letters, and shown in the customer portal.',
|
|
367
|
+
contact: 'Contact',
|
|
368
|
+
contactHint: 'How customers and vendors reach it; on its documents and emails.',
|
|
369
|
+
registration: 'Registration and tax',
|
|
370
|
+
registrationHint: 'Its identifiers with the authorities, on tax invoices and returns. Fill them in now or later in Settings › Company.',
|
|
371
|
+
more: 'More',
|
|
372
|
+
moreHint: 'What the installed apps ask of a company. Everything here can be changed later in Settings › Company.',
|
|
373
|
+
whatHappens: 'Creating it sets up what each installed app needs — journals, taxes, sequences, defaults — and gives administrators access at once. Give others access in People.',
|
|
374
|
+
readyTitle: '{{name}} is ready',
|
|
375
|
+
readyHint: 'Its apps are set up. Switch to it to start working in it.',
|
|
376
|
+
created: '{{name}} was created.',
|
|
377
|
+
setUp: 'Set up for it',
|
|
378
|
+
nextSteps: 'Next: invite its people in People, then check its App settings.',
|
|
379
|
+
switchNow: 'Switch to it now',
|
|
380
|
+
close: 'Close',
|
|
360
381
|
},
|
|
361
382
|
apiKeys: {
|
|
362
383
|
title: 'API keys',
|
|
@@ -410,6 +431,17 @@ export const messages = {
|
|
|
410
431
|
enable: 'Enable',
|
|
411
432
|
disable: 'Disable',
|
|
412
433
|
upgrade: 'Upgrade',
|
|
434
|
+
uninstall: 'Uninstall',
|
|
435
|
+
doneUninstalled: 'removed {{name}} with its data',
|
|
436
|
+
planTitleUninstall: 'Uninstall {{name}} and remove its data?',
|
|
437
|
+
planUninstall: 'Removed with its data',
|
|
438
|
+
planDrops: 'What is deleted',
|
|
439
|
+
planDropWhat: 'Table or column',
|
|
440
|
+
planDropRows: 'Rows',
|
|
441
|
+
planRemovesData: 'This deletes the app’s data for good. A snapshot is kept for 30 days. To keep the data, disable the app instead.',
|
|
442
|
+
typeName: 'Type {{name}} to confirm',
|
|
443
|
+
authCode: 'Code from your authenticator app',
|
|
444
|
+
confirmUninstall: 'Remove the data',
|
|
413
445
|
installedVersion: 'installed {{version}}',
|
|
414
446
|
planTitleUpgrade: 'Upgrade {{name}}?',
|
|
415
447
|
planUpgrade: 'Will be upgraded',
|
|
@@ -796,6 +828,27 @@ export const messages = {
|
|
|
796
828
|
people_other: '{{count}} জন',
|
|
797
829
|
switch: 'যান',
|
|
798
830
|
switchTo: '{{name}}-এ যান',
|
|
831
|
+
identity: 'পরিচিতি',
|
|
832
|
+
identityHint: 'প্রতিষ্ঠানের নাম ও তার হিসাবের মুদ্রা। লেনদেন হয়ে গেলে মুদ্রা আর বদলানো যায় না।',
|
|
833
|
+
namePlaceholder: 'যেমন: পদ্মা ট্রেডার্স লিমিটেড',
|
|
834
|
+
currencyHint: 'এর হিসাবের খাতা, মূল্য ও প্রতিবেদন এই মুদ্রায় হবে।',
|
|
835
|
+
brandHint: 'এই প্রতিষ্ঠানে যাঁরা কাজ করেন, তাঁদের সবার জন্য ব্যাক-অফিসের রং। খালি রাখলে ডিফল্ট রং।',
|
|
836
|
+
address: 'ঠিকানা',
|
|
837
|
+
addressHint: 'এর চালান, অর্ডার ও চিঠিতে ছাপা হয় এবং গ্রাহক পোর্টালে দেখা যায়।',
|
|
838
|
+
contact: 'যোগাযোগ',
|
|
839
|
+
contactHint: 'গ্রাহক ও সরবরাহকারীরা যেভাবে যোগাযোগ করবেন; এর নথি ও ইমেইলে থাকে।',
|
|
840
|
+
registration: 'নিবন্ধন ও কর',
|
|
841
|
+
registrationHint: 'কর্তৃপক্ষের কাছে এর শনাক্তকরণ নম্বর, কর চালান ও রিটার্নে থাকে। এখন বা পরে সেটিংস › প্রতিষ্ঠান থেকে পূরণ করুন।',
|
|
842
|
+
more: 'আরও',
|
|
843
|
+
moreHint: 'ইনস্টল করা অ্যাপগুলো প্রতিষ্ঠানের কাছে যা জানতে চায়। এখানকার সবকিছু পরে সেটিংস › প্রতিষ্ঠান থেকে বদলানো যায়।',
|
|
844
|
+
whatHappens: 'তৈরি করলে প্রতিটি ইনস্টল করা অ্যাপের যা দরকার — জার্নাল, কর, ক্রম, ডিফল্ট — সব প্রস্তুত হয় এবং অ্যাডমিনিস্ট্রেটররা সাথে সাথে প্রবেশাধিকার পান। অন্যদের প্রবেশাধিকার দিন জনবল অংশে।',
|
|
845
|
+
readyTitle: '{{name}} প্রস্তুত',
|
|
846
|
+
readyHint: 'এর অ্যাপগুলো প্রস্তুত। কাজ শুরু করতে এতে যান।',
|
|
847
|
+
created: '{{name}} তৈরি হয়েছে।',
|
|
848
|
+
setUp: 'এর জন্য যা প্রস্তুত হলো',
|
|
849
|
+
nextSteps: 'এরপর: জনবল অংশে এর লোকজনকে আমন্ত্রণ জানান, তারপর এর অ্যাপ সেটিংস দেখে নিন।',
|
|
850
|
+
switchNow: 'এখনই এতে যান',
|
|
851
|
+
close: 'বন্ধ করুন',
|
|
799
852
|
},
|
|
800
853
|
apiKeys: {
|
|
801
854
|
title: 'এপিআই কী',
|
|
@@ -849,6 +902,17 @@ export const messages = {
|
|
|
849
902
|
enable: 'সক্রিয় করুন',
|
|
850
903
|
disable: 'নিষ্ক্রিয় করুন',
|
|
851
904
|
upgrade: 'আপগ্রেড করুন',
|
|
905
|
+
uninstall: 'আনইনস্টল',
|
|
906
|
+
doneUninstalled: '{{name}} তার ডেটাসহ মুছে ফেলা হয়েছে',
|
|
907
|
+
planTitleUninstall: '{{name}} আনইনস্টল করে এর ডেটা মুছবেন?',
|
|
908
|
+
planUninstall: 'ডেটাসহ মুছে ফেলা হবে',
|
|
909
|
+
planDrops: 'যা মুছে যাবে',
|
|
910
|
+
planDropWhat: 'টেবিল বা কলাম',
|
|
911
|
+
planDropRows: 'সারি',
|
|
912
|
+
planRemovesData: 'এতে অ্যাপের ডেটা চিরতরে মুছে যায়। একটি স্ন্যাপশট ৩০ দিন রাখা হয়। ডেটা রাখতে চাইলে বরং অ্যাপটি নিষ্ক্রিয় করুন।',
|
|
913
|
+
typeName: 'নিশ্চিত করতে {{name}} লিখুন',
|
|
914
|
+
authCode: 'অথেনটিকেটর অ্যাপের কোড',
|
|
915
|
+
confirmUninstall: 'ডেটা মুছে ফেলুন',
|
|
852
916
|
installedVersion: 'ইনস্টল করা {{version}}',
|
|
853
917
|
planTitleUpgrade: '{{name}} আপগ্রেড করবেন?',
|
|
854
918
|
planUpgrade: 'যা আপগ্রেড হবে',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash:
|
|
1
|
+
// GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 8ba09e2d214cd58d
|
|
2
2
|
// Bindings of module `sign`: import the definition API from here to get types scoped to what it can see.
|
|
3
3
|
export { defineModel, defineModule, extendModel, f, replace } from '../../server/orm.js';
|
|
4
4
|
import { definitions } from '../../server/orm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash:
|
|
1
|
+
// GENERATED by `pnpm generate:models` (Shutro’s generator). Do not edit. definitions-hash: 8ba09e2d214cd58d
|
|
2
2
|
// Schema view of module `sign` (RFC 0002 §7.7): the models it owns or depends on, with the extensions it can see.
|
|
3
3
|
import type { F } from '../../server/orm.js';
|
|
4
4
|
|
|
@@ -770,6 +770,7 @@ export interface ResPartner {
|
|
|
770
770
|
readonly parent: F.Many2one<'res.partner'>;
|
|
771
771
|
readonly contacts: F.One2many<'res.partner', { readonly required: true }>;
|
|
772
772
|
readonly email: F.Char;
|
|
773
|
+
readonly lang: F.Selection<'en' | 'bn'>;
|
|
773
774
|
readonly phone: F.Char;
|
|
774
775
|
readonly mobile: F.Char;
|
|
775
776
|
readonly website: F.Char;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/** Bangla for the module's labels, keyed by their English text (RFC 0023 §3.1; `pnpm i18n:extract`). */
|
|
2
|
+
export const bn = {
|
|
3
|
+
'A field is on a page, inside it.': 'ফিল্ড একটি পাতার উপর, তার ভিতরে থাকে।',
|
|
4
|
+
'A request is out for signature once sent, and signed when the last signer is done, which seals the PDF.': 'পাঠানোর পর অনুরোধটি স্বাক্ষরের জন্য পাঠানো অবস্থায় থাকে, আর শেষ স্বাক্ষরকারী স্বাক্ষর করলে এটি স্বাক্ষরিত হয় এবং PDF সিল করা হয়।',
|
|
5
|
+
'A signer has an email address.': 'স্বাক্ষরকারীর একটি ইমেইল ঠিকানা থাকতে হবে।',
|
|
6
|
+
Active: 'সক্রিয়',
|
|
7
|
+
Asked: 'অনুরোধ করা হয়েছে',
|
|
8
|
+
'Asked at': 'অনুরোধের সময়',
|
|
9
|
+
Browser: 'ব্রাউজার',
|
|
10
|
+
Cancel: 'বাতিল করুন',
|
|
11
|
+
'Cancel this request? Its links stop working.': 'এই অনুরোধ বাতিল করবেন? এর লিংকগুলো আর কাজ করবে না।',
|
|
12
|
+
Cancelled: 'বাতিল',
|
|
13
|
+
Checkbox: 'চেকবক্স',
|
|
14
|
+
'Code (hash)': 'কোড (হ্যাশ)',
|
|
15
|
+
'Code Attempts': 'কোডের চেষ্টা',
|
|
16
|
+
'Code expires': 'কোডের মেয়াদ শেষ',
|
|
17
|
+
Company: 'প্রতিষ্ঠান',
|
|
18
|
+
Completed: 'সম্পন্ন',
|
|
19
|
+
'Completed at': 'সম্পন্নের সময়',
|
|
20
|
+
'Created At': 'তৈরির সময়',
|
|
21
|
+
'Created By': 'তৈরি করেছেন',
|
|
22
|
+
'Date signed': 'স্বাক্ষরের তারিখ',
|
|
23
|
+
Description: 'বিবরণ',
|
|
24
|
+
'Display Name': 'প্রদর্শিত নাম',
|
|
25
|
+
Document: 'নথি',
|
|
26
|
+
Draft: 'খসড়া',
|
|
27
|
+
'Each signer gets a link of their own and confirms with a code sent to their email; in order, the next is asked once the one before has signed.': 'প্রত্যেক স্বাক্ষরকারী নিজস্ব লিংক পান এবং ইমেইলে পাঠানো কোড দিয়ে নিশ্চিত করেন; ক্রমানুসারে হলে আগের জন স্বাক্ষর করার পর পরের জনকে অনুরোধ করা হয়।',
|
|
28
|
+
Email: 'ইমেইল',
|
|
29
|
+
Fields: 'ফিল্ড',
|
|
30
|
+
'For (model)': 'যার জন্য (মডেল)',
|
|
31
|
+
'For (record)': 'যার জন্য (রেকর্ড)',
|
|
32
|
+
'Hash after': 'পরের হ্যাশ',
|
|
33
|
+
'Hash before': 'আগের হ্যাশ',
|
|
34
|
+
Height: 'উচ্চতা',
|
|
35
|
+
ID: 'আইডি',
|
|
36
|
+
'In order': 'ক্রমানুসারে',
|
|
37
|
+
Initials: 'আদ্যক্ষর',
|
|
38
|
+
'IP address': 'আইপি ঠিকানা',
|
|
39
|
+
Kind: 'ধরন',
|
|
40
|
+
Label: 'লেবেল',
|
|
41
|
+
'Link (hash)': 'লিংক (হ্যাশ)',
|
|
42
|
+
'Manager (templates)': 'ব্যবস্থাপক (টেমপ্লেট)',
|
|
43
|
+
Message: 'বার্তা',
|
|
44
|
+
Name: 'নাম',
|
|
45
|
+
'Out for signature': 'স্বাক্ষরের জন্য পাঠানো',
|
|
46
|
+
Overview: 'সারসংক্ষেপ',
|
|
47
|
+
Page: 'পাতা',
|
|
48
|
+
'Page {{page}} of {{pages}}': 'পৃষ্ঠা {{page}} / {{pages}}',
|
|
49
|
+
Pages: 'পাতা',
|
|
50
|
+
Partner: 'অংশীদার',
|
|
51
|
+
PDF: 'PDF',
|
|
52
|
+
Productivity: 'উৎপাদনশীলতা',
|
|
53
|
+
Refused: 'নামঞ্জুর',
|
|
54
|
+
'Refused because': 'নামঞ্জুরের কারণ',
|
|
55
|
+
Request: 'অনুরোধ',
|
|
56
|
+
Requests: 'অনুরোধ',
|
|
57
|
+
'Requests by state': 'অবস্থা অনুযায়ী অনুরোধ',
|
|
58
|
+
'Requests by template': 'টেমপ্লেট অনুযায়ী অনুরোধ',
|
|
59
|
+
Required: 'আবশ্যক',
|
|
60
|
+
Role: 'ভূমিকা',
|
|
61
|
+
'Send for signature': 'স্বাক্ষরের জন্য পাঠান',
|
|
62
|
+
Sent: 'পাঠানো',
|
|
63
|
+
Sequence: 'ক্রম',
|
|
64
|
+
Sign: 'স্বাক্ষর',
|
|
65
|
+
'Sign manager': 'স্বাক্ষর ব্যবস্থাপক',
|
|
66
|
+
'Sign user': 'স্বাক্ষর ব্যবহারকারী',
|
|
67
|
+
Signature: 'স্বাক্ষর',
|
|
68
|
+
'Signature request': 'স্বাক্ষরের অনুরোধ',
|
|
69
|
+
'Signatures in order or all at once, one-time codes, a sealed PDF with its certificate': 'ক্রমানুসারে বা একসাথে স্বাক্ষর, এককালীন কোড, সনদসহ সিলমোহরকৃত PDF',
|
|
70
|
+
Signed: 'স্বাক্ষরিত',
|
|
71
|
+
'Signed at': 'স্বাক্ষরের সময়',
|
|
72
|
+
'Signed by everyone': 'সবাই স্বাক্ষর করেছেন',
|
|
73
|
+
'Signed PDF': 'স্বাক্ষরিত PDF',
|
|
74
|
+
Signer: 'স্বাক্ষরকারী',
|
|
75
|
+
Signers: 'স্বাক্ষরকারীরা',
|
|
76
|
+
'Signers in order': 'ক্রমানুসারে স্বাক্ষরকারী',
|
|
77
|
+
'Signing field': 'স্বাক্ষরের ফিল্ড',
|
|
78
|
+
'Signing request': 'স্বাক্ষরের অনুরোধ',
|
|
79
|
+
'Signing template': 'স্বাক্ষরের টেমপ্লেট',
|
|
80
|
+
State: 'অবস্থা',
|
|
81
|
+
Status: 'অবস্থা',
|
|
82
|
+
Template: 'টেমপ্লেট',
|
|
83
|
+
Templates: 'টেমপ্লেট',
|
|
84
|
+
Text: 'লেখা',
|
|
85
|
+
'Updated At': 'হালনাগাদের সময়',
|
|
86
|
+
'Updated By': 'হালনাগাদ করেছেন',
|
|
87
|
+
'Upload the PDF, then place each field: its page, and where it starts and how big it is as fractions of the page.': 'PDF আপলোড করুন, তারপর প্রতিটি ফিল্ড বসান: তার পাতা, আর পাতার ভগ্নাংশ হিসেবে কোথা থেকে শুরু ও কত বড়।',
|
|
88
|
+
'User (send requests)': 'ব্যবহারকারী (অনুরোধ পাঠান)',
|
|
89
|
+
Values: 'মান',
|
|
90
|
+
Waiting: 'অপেক্ষমাণ',
|
|
91
|
+
'Waiting for the signers before them, asked once their link is sent, then signed or refused.': 'আগের স্বাক্ষরকারীদের জন্য অপেক্ষমাণ, লিংক পাঠানো হলে অনুরোধ করা হয়েছে, তারপর স্বাক্ষরিত বা নামঞ্জুর।',
|
|
92
|
+
'What the signer fills in here: a signature, initials, the date signed, a text or a checkbox.': 'স্বাক্ষরকারী এখানে কী পূরণ করবেন: স্বাক্ষর, আদ্যক্ষর, স্বাক্ষরের তারিখ, লেখা বা চেকবক্স।',
|
|
93
|
+
'Why it was refused': 'কেন নামঞ্জুর করা হয়েছে',
|
|
94
|
+
Width: 'প্রস্থ',
|
|
95
|
+
X: 'X',
|
|
96
|
+
Y: 'Y',
|
|
97
|
+
};
|
package/dist/sign/index.d.ts
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* `shutro-erp/sign` (RFC 0024 §2.8): the **Sign** app. Templates (a PDF with fields per signer's role), requests from a
|
|
4
|
+
* template — from any record — with signers in order or all at once, each by email link and a one-time code, signing
|
|
5
|
+
* in the browser (a phone too), and the PDF sealed with the signatures and a certificate page, stored in Documents
|
|
6
|
+
* and on the record. pdf-lib (MIT, no native code) stamps and seals.
|
|
7
|
+
*
|
|
8
|
+
* - `POST /api/v1/sign/templates/:id/pdf` the raw body is the template's PDF (managers)
|
|
9
|
+
* - `POST /api/v1/sign/requests` `{ template, model?, id?, ordered?, signers: [{ role, name, email }] }`
|
|
10
|
+
* - `GET /api/v1/public/sign/:token` the signing page
|
|
11
|
+
* - `GET /api/v1/public/sign/:token/pdf` the PDF to sign
|
|
12
|
+
* - `POST /api/v1/public/sign/:token/code` a one-time code by email
|
|
13
|
+
* - `POST /api/v1/public/sign/:token/sign` `{ code, values: { <field id>: text | true | PNG data URL } }`
|
|
14
|
+
* - `POST /api/v1/public/sign/:token/refuse` `{ code, reason }`
|
|
15
|
+
*/
|
|
1
16
|
import { type Mailer } from '../mail/index.js';
|
|
2
17
|
import { defineModule } from '../modules-sdk/index.js';
|
|
3
18
|
export { SignRequest, SignSigner, SignTemplate, SignTemplateField, signShutro } from './module.js';
|
package/dist/sign/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { documents } from '../documents/index.js';
|
|
|
19
19
|
import { mailerFromEnv } from '../mail/index.js';
|
|
20
20
|
import { messaging } from '../messaging/index.js';
|
|
21
21
|
import { defineModule } from '../modules-sdk/index.js';
|
|
22
|
+
import { reporting } from '../reporting/index.js';
|
|
22
23
|
import { HttpProblem } from '../server/index.js';
|
|
23
24
|
import { storageOf } from '../storage/index.js';
|
|
24
25
|
import { action, form, list, search } from '../views/index.js';
|
|
@@ -218,7 +219,7 @@ export function signModule(options = {}) {
|
|
|
218
219
|
return defineModule({
|
|
219
220
|
shutro: signShutro,
|
|
220
221
|
kosh: '^0.1.0',
|
|
221
|
-
depends: [contacts, messaging, documents],
|
|
222
|
+
depends: [contacts, messaging, documents, reporting],
|
|
222
223
|
app: {
|
|
223
224
|
code: 'sign',
|
|
224
225
|
label: 'Sign',
|
|
@@ -227,6 +228,133 @@ export function signModule(options = {}) {
|
|
|
227
228
|
category: 'Productivity',
|
|
228
229
|
summary: 'Signatures in order or all at once, one-time codes, a sealed PDF with its certificate',
|
|
229
230
|
},
|
|
231
|
+
documents: [
|
|
232
|
+
{
|
|
233
|
+
key: 'signature_request',
|
|
234
|
+
name: 'Signature request',
|
|
235
|
+
model: 'sign.request',
|
|
236
|
+
layout: {
|
|
237
|
+
paper: 'A4',
|
|
238
|
+
header: '{{company.name}}',
|
|
239
|
+
footer: 'Page {{page}} of {{pages}}',
|
|
240
|
+
blocks: [
|
|
241
|
+
{ kind: 'heading', id: 'title', text: '{{name}}', level: 1 },
|
|
242
|
+
{
|
|
243
|
+
kind: 'fields',
|
|
244
|
+
id: 'request',
|
|
245
|
+
items: [
|
|
246
|
+
{ label: 'Template', bind: 'template.name' },
|
|
247
|
+
{ label: 'In order', bind: 'ordered' },
|
|
248
|
+
{ label: 'Completed', bind: 'completedAt' },
|
|
249
|
+
{ label: 'Status', bind: 'state' },
|
|
250
|
+
{ label: 'Refused because', bind: 'refusal' },
|
|
251
|
+
],
|
|
252
|
+
},
|
|
253
|
+
{ kind: 'text', id: 'message', text: '{{message}}' },
|
|
254
|
+
{
|
|
255
|
+
kind: 'table',
|
|
256
|
+
id: 'signers',
|
|
257
|
+
bind: 'signers',
|
|
258
|
+
columns: [
|
|
259
|
+
{ label: 'Role', bind: 'role' },
|
|
260
|
+
{ label: 'Name', bind: 'name' },
|
|
261
|
+
{ label: 'Email', bind: 'email' },
|
|
262
|
+
{ label: 'Sent', bind: 'sentAt' },
|
|
263
|
+
{ label: 'Signed', bind: 'signedAt' },
|
|
264
|
+
{ label: 'Status', bind: 'state' },
|
|
265
|
+
],
|
|
266
|
+
},
|
|
267
|
+
],
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
importTemplates: [
|
|
272
|
+
{
|
|
273
|
+
key: 'sign_template',
|
|
274
|
+
model: 'sign.template',
|
|
275
|
+
label: 'Signing template',
|
|
276
|
+
columns: [
|
|
277
|
+
{ header: 'Name', field: 'name' },
|
|
278
|
+
{ header: 'Pages', field: 'pages' },
|
|
279
|
+
{ header: 'Description', field: 'description' },
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
],
|
|
283
|
+
standard: {
|
|
284
|
+
waive: [
|
|
285
|
+
{
|
|
286
|
+
rule: 'A1',
|
|
287
|
+
reason: 'Demo signature requests need a template made from an uploaded PDF, which the demo cannot ship; the app is tried with a document of your own.',
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
rule: 'I1',
|
|
291
|
+
model: 'sign.request',
|
|
292
|
+
reason: 'Sent from a template to its signers; a file cannot sign.',
|
|
293
|
+
},
|
|
294
|
+
],
|
|
295
|
+
},
|
|
296
|
+
// Bangla for the labels it serves (RFC 0023 §3.1; `pnpm i18n:extract`).
|
|
297
|
+
i18n: { bn: () => import('./i18n/bn.js') },
|
|
298
|
+
overview: {
|
|
299
|
+
cards: [
|
|
300
|
+
{
|
|
301
|
+
id: 'out',
|
|
302
|
+
title: 'Out for signature',
|
|
303
|
+
kind: 'kpi',
|
|
304
|
+
model: 'sign.request',
|
|
305
|
+
measure: 'count',
|
|
306
|
+
filter: { state: 'sent' },
|
|
307
|
+
w: 3,
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
id: 'signed',
|
|
311
|
+
title: 'Signed',
|
|
312
|
+
kind: 'kpi',
|
|
313
|
+
model: 'sign.request',
|
|
314
|
+
measure: 'count',
|
|
315
|
+
filter: { state: 'signed' },
|
|
316
|
+
comparison: { field: 'completedAt', mode: 'previous' },
|
|
317
|
+
w: 3,
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
id: 'refused',
|
|
321
|
+
title: 'Refused',
|
|
322
|
+
kind: 'kpi',
|
|
323
|
+
model: 'sign.request',
|
|
324
|
+
measure: 'count',
|
|
325
|
+
filter: { state: 'refused' },
|
|
326
|
+
w: 3,
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
id: 'templates',
|
|
330
|
+
title: 'Templates',
|
|
331
|
+
kind: 'kpi',
|
|
332
|
+
model: 'sign.template',
|
|
333
|
+
measure: 'count',
|
|
334
|
+
w: 3,
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
id: 'by_state',
|
|
338
|
+
title: 'Requests by state',
|
|
339
|
+
kind: 'chart',
|
|
340
|
+
model: 'sign.request',
|
|
341
|
+
measure: 'count',
|
|
342
|
+
groupBy: 'state',
|
|
343
|
+
chart: 'pie',
|
|
344
|
+
w: 6,
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
id: 'by_template',
|
|
348
|
+
title: 'Requests by template',
|
|
349
|
+
kind: 'chart',
|
|
350
|
+
model: 'sign.request',
|
|
351
|
+
measure: 'count',
|
|
352
|
+
groupBy: 'template',
|
|
353
|
+
chart: 'bar',
|
|
354
|
+
w: 6,
|
|
355
|
+
},
|
|
356
|
+
],
|
|
357
|
+
},
|
|
230
358
|
accessLevels: {
|
|
231
359
|
user: { label: 'User (send requests)', groups: ['sign.user'] },
|
|
232
360
|
manager: { label: 'Manager (templates)', groups: ['sign.manager'], implies: ['user'] },
|
package/dist/sign/module.d.ts
CHANGED
|
@@ -2440,6 +2440,16 @@ export declare const signShutro: import("../server/orm.js").Module<readonly [imp
|
|
|
2440
2440
|
readonly hasDefault: false;
|
|
2441
2441
|
readonly readonly: false;
|
|
2442
2442
|
}, string>;
|
|
2443
|
+
readonly lang: import("../server/orm.js").SelectionField<"bn" | "en", {
|
|
2444
|
+
readonly required: false;
|
|
2445
|
+
readonly computed: false;
|
|
2446
|
+
readonly inverse: false;
|
|
2447
|
+
readonly sequence: false;
|
|
2448
|
+
readonly computeName: undefined;
|
|
2449
|
+
readonly store: true;
|
|
2450
|
+
readonly hasDefault: false;
|
|
2451
|
+
readonly readonly: false;
|
|
2452
|
+
}>;
|
|
2443
2453
|
readonly phone: import("../server/orm.js").CharField<{
|
|
2444
2454
|
readonly required: false;
|
|
2445
2455
|
readonly computed: false;
|
|
@@ -2661,6 +2671,16 @@ export declare const signShutro: import("../server/orm.js").Module<readonly [imp
|
|
|
2661
2671
|
readonly hasDefault: false;
|
|
2662
2672
|
readonly readonly: false;
|
|
2663
2673
|
}, string>;
|
|
2674
|
+
readonly lang: import("../server/orm.js").SelectionField<"bn" | "en", {
|
|
2675
|
+
readonly required: false;
|
|
2676
|
+
readonly computed: false;
|
|
2677
|
+
readonly inverse: false;
|
|
2678
|
+
readonly sequence: false;
|
|
2679
|
+
readonly computeName: undefined;
|
|
2680
|
+
readonly store: true;
|
|
2681
|
+
readonly hasDefault: false;
|
|
2682
|
+
readonly readonly: false;
|
|
2683
|
+
}>;
|
|
2664
2684
|
readonly phone: import("../server/orm.js").CharField<{
|
|
2665
2685
|
readonly required: false;
|
|
2666
2686
|
readonly computed: false;
|
|
@@ -4103,6 +4123,16 @@ export declare const signShutro: import("../server/orm.js").Module<readonly [imp
|
|
|
4103
4123
|
readonly hasDefault: false;
|
|
4104
4124
|
readonly readonly: false;
|
|
4105
4125
|
}, string>;
|
|
4126
|
+
readonly lang: import("../server/orm.js").SelectionField<"bn" | "en", {
|
|
4127
|
+
readonly required: false;
|
|
4128
|
+
readonly computed: false;
|
|
4129
|
+
readonly inverse: false;
|
|
4130
|
+
readonly sequence: false;
|
|
4131
|
+
readonly computeName: undefined;
|
|
4132
|
+
readonly store: true;
|
|
4133
|
+
readonly hasDefault: false;
|
|
4134
|
+
readonly readonly: false;
|
|
4135
|
+
}>;
|
|
4106
4136
|
readonly phone: import("../server/orm.js").CharField<{
|
|
4107
4137
|
readonly required: false;
|
|
4108
4138
|
readonly computed: false;
|
|
@@ -4324,6 +4354,16 @@ export declare const signShutro: import("../server/orm.js").Module<readonly [imp
|
|
|
4324
4354
|
readonly hasDefault: false;
|
|
4325
4355
|
readonly readonly: false;
|
|
4326
4356
|
}, string>;
|
|
4357
|
+
readonly lang: import("../server/orm.js").SelectionField<"bn" | "en", {
|
|
4358
|
+
readonly required: false;
|
|
4359
|
+
readonly computed: false;
|
|
4360
|
+
readonly inverse: false;
|
|
4361
|
+
readonly sequence: false;
|
|
4362
|
+
readonly computeName: undefined;
|
|
4363
|
+
readonly store: true;
|
|
4364
|
+
readonly hasDefault: false;
|
|
4365
|
+
readonly readonly: false;
|
|
4366
|
+
}>;
|
|
4327
4367
|
readonly phone: import("../server/orm.js").CharField<{
|
|
4328
4368
|
readonly required: false;
|
|
4329
4369
|
readonly computed: false;
|