shutro-erp 0.3.3 → 0.3.5
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_portal/.kosh/bindings.js +1 -1
- package/dist/account_portal/.kosh/schema.d.ts +181 -3
- package/dist/account_portal/module.d.ts +359 -6
- package/dist/accounting/.kosh/bindings.js +1 -1
- package/dist/accounting/.kosh/schema.d.ts +181 -3
- package/dist/accounting/index.js +214 -2
- package/dist/accounting/module.d.ts +217 -5
- package/dist/accounting/module.js +23 -2
- package/dist/calendar/.kosh/bindings.d.ts +22 -0
- package/dist/calendar/.kosh/bindings.js +15 -0
- package/dist/calendar/.kosh/schema.d.ts +795 -0
- package/dist/calendar/demo.d.ts +6 -0
- package/dist/calendar/demo.js +24 -0
- package/dist/calendar/index.d.ts +3 -0
- package/dist/calendar/index.js +291 -0
- package/dist/calendar/module.d.ts +1705 -0
- package/dist/calendar/module.js +180 -0
- package/dist/cli/init.js +48 -0
- package/dist/cli/templates.d.ts +1 -1
- package/dist/cli/templates.js +137 -0
- package/dist/contacts/.kosh/bindings.js +1 -1
- package/dist/contacts/.kosh/schema.d.ts +205 -3
- package/dist/contacts/demo.js +30 -1
- package/dist/contacts/index.d.ts +1 -1
- package/dist/contacts/index.js +155 -9
- package/dist/contacts/module.d.ts +338 -2
- package/dist/contacts/module.js +82 -5
- package/dist/crm/.kosh/bindings.d.ts +22 -0
- package/dist/crm/.kosh/bindings.js +15 -0
- package/dist/crm/.kosh/schema.d.ts +799 -0
- package/dist/crm/demo.d.ts +6 -0
- package/dist/crm/demo.js +45 -0
- package/dist/crm/index.d.ts +3 -0
- package/dist/crm/index.js +361 -0
- package/dist/crm/module.d.ts +1843 -0
- package/dist/crm/module.js +207 -0
- package/dist/event/.kosh/bindings.d.ts +22 -0
- package/dist/event/.kosh/bindings.js +15 -0
- package/dist/event/.kosh/schema.d.ts +843 -0
- package/dist/event/demo.d.ts +6 -0
- package/dist/event/demo.js +65 -0
- package/dist/event/index.d.ts +14 -0
- package/dist/event/index.js +333 -0
- package/dist/event/mails.d.ts +15 -0
- package/dist/event/mails.js +112 -0
- package/dist/event/module.d.ts +2800 -0
- package/dist/event/module.js +323 -0
- package/dist/event/web/CheckInBox.d.ts +9 -0
- package/dist/event/web/CheckInBox.js +87 -0
- package/dist/event/web/index.d.ts +11 -0
- package/dist/event/web/index.js +16 -0
- package/dist/event/web/messages.d.ts +2 -0
- package/dist/event/web/messages.js +23 -0
- package/dist/event_account/.kosh/bindings.d.ts +22 -0
- package/dist/event_account/.kosh/bindings.js +15 -0
- package/dist/event_account/.kosh/schema.d.ts +1639 -0
- package/dist/event_account/index.d.ts +3 -0
- package/dist/event_account/index.js +28 -0
- package/dist/event_account/module.d.ts +6968 -0
- package/dist/event_account/module.js +90 -0
- package/dist/hr/.kosh/bindings.d.ts +22 -0
- package/dist/hr/.kosh/bindings.js +15 -0
- package/dist/hr/.kosh/schema.d.ts +878 -0
- package/dist/hr/demo.d.ts +6 -0
- package/dist/hr/demo.js +60 -0
- package/dist/hr/index.d.ts +3 -0
- package/dist/hr/index.js +483 -0
- package/dist/hr/module.d.ts +2611 -0
- package/dist/hr/module.js +350 -0
- package/dist/integrations/index.js +12 -0
- package/dist/integrations/web/OAuthAppsPage.d.ts +9 -0
- package/dist/integrations/web/OAuthAppsPage.js +79 -0
- package/dist/integrations/web/index.d.ts +1 -0
- package/dist/integrations/web/index.js +3 -0
- package/dist/integrations/web/messages.js +58 -0
- package/dist/l10n_bd/.kosh/bindings.js +1 -1
- package/dist/l10n_bd/.kosh/schema.d.ts +181 -3
- package/dist/l10n_bd/module.d.ts +359 -6
- package/dist/l10n_in/.kosh/bindings.js +1 -1
- package/dist/l10n_in/.kosh/schema.d.ts +181 -3
- package/dist/l10n_in/module.d.ts +380 -7
- package/dist/maintenance/.kosh/bindings.d.ts +22 -0
- package/dist/maintenance/.kosh/bindings.js +15 -0
- package/dist/maintenance/.kosh/schema.d.ts +911 -0
- package/dist/maintenance/demo.d.ts +6 -0
- package/dist/maintenance/demo.js +60 -0
- package/dist/maintenance/index.d.ts +3 -0
- package/dist/maintenance/index.js +422 -0
- package/dist/maintenance/module.d.ts +3545 -0
- package/dist/maintenance/module.js +446 -0
- package/dist/maintenance_stock/.kosh/bindings.d.ts +22 -0
- package/dist/maintenance_stock/.kosh/bindings.js +15 -0
- package/dist/maintenance_stock/.kosh/schema.d.ts +1371 -0
- package/dist/maintenance_stock/index.d.ts +9 -0
- package/dist/maintenance_stock/index.js +52 -0
- package/dist/maintenance_stock/module.d.ts +6953 -0
- package/dist/maintenance_stock/module.js +192 -0
- package/dist/messaging/web/index.js +1 -1
- package/dist/modules-sdk/index.d.ts +1 -1
- package/dist/modules-sdk/manifest.d.ts +70 -0
- package/dist/modules-sdk/manifest.js +35 -1
- package/dist/mrp/.kosh/bindings.d.ts +22 -0
- package/dist/mrp/.kosh/bindings.js +15 -0
- package/dist/mrp/.kosh/schema.d.ts +1378 -0
- package/dist/mrp/demo.d.ts +7 -0
- package/dist/mrp/demo.js +42 -0
- package/dist/mrp/index.d.ts +3 -0
- package/dist/mrp/index.js +392 -0
- package/dist/mrp/module.d.ts +8608 -0
- package/dist/mrp/module.js +695 -0
- package/dist/mrp_account/.kosh/bindings.d.ts +22 -0
- package/dist/mrp_account/.kosh/bindings.js +15 -0
- package/dist/mrp_account/.kosh/schema.d.ts +2106 -0
- package/dist/mrp_account/index.d.ts +3 -0
- package/dist/mrp_account/index.js +22 -0
- package/dist/mrp_account/module.d.ts +20840 -0
- package/dist/mrp_account/module.js +123 -0
- package/dist/notify/web/index.js +1 -1
- package/dist/payment/.kosh/bindings.js +1 -1
- package/dist/payment/.kosh/schema.d.ts +181 -3
- package/dist/payment/module.d.ts +359 -6
- package/dist/portal/.kosh/bindings.js +1 -1
- package/dist/portal/.kosh/schema.d.ts +205 -3
- package/dist/portal/module.d.ts +166 -2
- package/dist/pos/.kosh/bindings.d.ts +22 -0
- package/dist/pos/.kosh/bindings.js +15 -0
- package/dist/pos/.kosh/schema.d.ts +1690 -0
- package/dist/pos/accounting.d.ts +10 -0
- package/dist/pos/accounting.js +149 -0
- package/dist/pos/demo.d.ts +6 -0
- package/dist/pos/demo.js +90 -0
- package/dist/pos/index.d.ts +9 -0
- package/dist/pos/index.js +349 -0
- package/dist/pos/module.d.ts +9636 -0
- package/dist/pos/module.js +423 -0
- package/dist/pos/routes.d.ts +39 -0
- package/dist/pos/routes.js +368 -0
- package/dist/pos/web/Register.d.ts +9 -0
- package/dist/pos/web/Register.js +252 -0
- package/dist/pos/web/index.d.ts +11 -0
- package/dist/pos/web/index.js +16 -0
- package/dist/pos/web/messages.d.ts +2 -0
- package/dist/pos/web/messages.js +87 -0
- package/dist/pos_stock/.kosh/bindings.d.ts +22 -0
- package/dist/pos_stock/.kosh/bindings.js +15 -0
- package/dist/pos_stock/.kosh/schema.d.ts +2015 -0
- package/dist/pos_stock/index.d.ts +9 -0
- package/dist/pos_stock/index.js +35 -0
- package/dist/pos_stock/module.d.ts +11935 -0
- package/dist/pos_stock/module.js +115 -0
- package/dist/product/.kosh/bindings.js +1 -1
- package/dist/product/.kosh/schema.d.ts +178 -1
- package/dist/product/index.js +81 -4
- package/dist/product/module.d.ts +43 -1
- package/dist/product/module.js +9 -2
- package/dist/project/.kosh/bindings.js +1 -1
- package/dist/project/.kosh/schema.d.ts +181 -3
- package/dist/project/index.js +147 -7
- package/dist/project/module.d.ts +210 -2
- package/dist/project/module.js +52 -5
- package/dist/project_portal/.kosh/bindings.js +1 -1
- package/dist/project_portal/.kosh/schema.d.ts +181 -3
- package/dist/project_portal/module.d.ts +353 -4
- package/dist/purchase/.kosh/bindings.js +1 -1
- package/dist/purchase/.kosh/schema.d.ts +181 -3
- package/dist/purchase/index.js +163 -3
- package/dist/purchase/module.d.ts +215 -3
- package/dist/purchase/module.js +21 -3
- package/dist/purchase_account/.kosh/bindings.js +1 -1
- package/dist/purchase_account/.kosh/schema.d.ts +182 -3
- package/dist/purchase_account/index.js +26 -1
- package/dist/purchase_account/module.d.ts +393 -7
- package/dist/purchase_portal/.kosh/bindings.js +1 -1
- package/dist/purchase_portal/.kosh/schema.d.ts +181 -3
- package/dist/purchase_portal/module.d.ts +366 -5
- package/dist/purchase_stock/.kosh/bindings.d.ts +22 -0
- package/dist/purchase_stock/.kosh/bindings.js +15 -0
- package/dist/purchase_stock/.kosh/schema.d.ts +1310 -0
- package/dist/purchase_stock/index.d.ts +7 -0
- package/dist/purchase_stock/index.js +91 -0
- package/dist/purchase_stock/module.d.ts +6763 -0
- package/dist/purchase_stock/module.js +144 -0
- package/dist/purchase_stock_account/.kosh/bindings.d.ts +22 -0
- package/dist/purchase_stock_account/.kosh/bindings.js +15 -0
- package/dist/purchase_stock_account/.kosh/schema.d.ts +1959 -0
- package/dist/purchase_stock_account/index.d.ts +3 -0
- package/dist/purchase_stock_account/index.js +24 -0
- package/dist/purchase_stock_account/module.d.ts +35366 -0
- package/dist/purchase_stock_account/module.js +162 -0
- package/dist/recruitment/.kosh/bindings.d.ts +22 -0
- package/dist/recruitment/.kosh/bindings.js +15 -0
- package/dist/recruitment/.kosh/schema.d.ts +990 -0
- package/dist/recruitment/demo.d.ts +6 -0
- package/dist/recruitment/demo.js +45 -0
- package/dist/recruitment/index.d.ts +3 -0
- package/dist/recruitment/index.js +385 -0
- package/dist/recruitment/module.d.ts +3247 -0
- package/dist/recruitment/module.js +193 -0
- package/dist/recruitment/web/HireButton.d.ts +9 -0
- package/dist/recruitment/web/HireButton.js +32 -0
- package/dist/recruitment/web/index.d.ts +11 -0
- package/dist/recruitment/web/index.js +16 -0
- package/dist/recruitment/web/messages.d.ts +2 -0
- package/dist/recruitment/web/messages.js +19 -0
- package/dist/reporting/documents.d.ts +5 -0
- package/dist/reporting/documents.js +28 -1
- package/dist/reporting/index.d.ts +1 -1
- package/dist/reporting/index.js +4 -2
- package/dist/reporting/models.js +9 -0
- package/dist/reporting/overviews.d.ts +16 -0
- package/dist/reporting/overviews.js +56 -0
- package/dist/reporting/routes-documents.js +1 -1
- package/dist/reporting/routes.js +138 -80
- package/dist/reporting/web/DashboardView.d.ts +11 -0
- package/dist/reporting/web/DashboardView.js +2 -2
- package/dist/reporting/web/DesignerView.js +5 -0
- package/dist/reporting/web/Overview.d.ts +9 -0
- package/dist/reporting/web/Overview.js +53 -0
- package/dist/reporting/web/index.d.ts +1 -0
- package/dist/reporting/web/index.js +4 -1
- package/dist/reporting/web/messages.js +9 -0
- package/dist/sale_account/.kosh/bindings.js +1 -1
- package/dist/sale_account/.kosh/schema.d.ts +186 -3
- package/dist/sale_account/index.js +22 -1
- package/dist/sale_account/module.d.ts +461 -7
- package/dist/sale_portal/.kosh/bindings.js +1 -1
- package/dist/sale_portal/.kosh/schema.d.ts +185 -3
- package/dist/sale_portal/module.d.ts +434 -5
- package/dist/sale_project/.kosh/bindings.js +1 -1
- package/dist/sale_project/.kosh/schema.d.ts +187 -3
- package/dist/sale_project/module.d.ts +476 -6
- package/dist/sale_stock/.kosh/bindings.d.ts +22 -0
- package/dist/sale_stock/.kosh/bindings.js +15 -0
- package/dist/sale_stock/.kosh/schema.d.ts +1228 -0
- package/dist/sale_stock/index.d.ts +7 -0
- package/dist/sale_stock/index.js +84 -0
- package/dist/sale_stock/module.d.ts +6791 -0
- package/dist/sale_stock/module.js +146 -0
- package/dist/sales/.kosh/bindings.js +1 -1
- package/dist/sales/.kosh/schema.d.ts +185 -3
- package/dist/sales/index.js +191 -4
- package/dist/sales/module.d.ts +355 -3
- package/dist/sales/module.js +78 -3
- package/dist/server/api/metadata.d.ts +5 -0
- package/dist/server/api/metadata.js +5 -0
- package/dist/server/api/rest.js +64 -1
- package/dist/server/api/views.js +1 -0
- package/dist/server/app-settings.d.ts +7 -0
- package/dist/server/app-settings.js +10 -0
- package/dist/server/auth/base.js +85 -0
- package/dist/server/auth/oauth.d.ts +21 -0
- package/dist/server/auth/oauth.js +579 -0
- package/dist/server/auth/service.d.ts +4 -0
- package/dist/server/auth/service.js +17 -0
- package/dist/server/identity.d.ts +2 -0
- package/dist/server/images.d.ts +12 -0
- package/dist/server/images.js +139 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +2 -0
- package/dist/server/server.d.ts +4 -0
- package/dist/server/server.js +9 -1
- package/dist/settings/app-settings.d.ts +2 -0
- package/dist/settings/app-settings.js +518 -0
- package/dist/settings/company.js +3 -1
- package/dist/settings/index.d.ts +1 -0
- package/dist/settings/index.js +15 -0
- package/dist/settings/people.js +32 -6
- package/dist/settings/web/AppSettingsPage.d.ts +11 -0
- package/dist/settings/web/AppSettingsPage.js +210 -0
- package/dist/settings/web/CompaniesPage.js +2 -2
- package/dist/settings/web/CompanyPage.js +13 -2
- package/dist/settings/web/ConnectedAppsPage.d.ts +7 -0
- package/dist/settings/web/ConnectedAppsPage.js +33 -0
- package/dist/settings/web/OverviewPage.js +28 -4
- package/dist/settings/web/PeoplePage.js +23 -18
- package/dist/settings/web/ProfilePage.js +9 -7
- package/dist/settings/web/index.d.ts +2 -0
- package/dist/settings/web/index.js +8 -0
- package/dist/settings/web/messages.js +146 -2
- package/dist/stock/.kosh/bindings.d.ts +22 -0
- package/dist/stock/.kosh/bindings.js +15 -0
- package/dist/stock/.kosh/schema.d.ts +1147 -0
- package/dist/stock/demo.d.ts +7 -0
- package/dist/stock/demo.js +55 -0
- package/dist/stock/index.d.ts +3 -0
- package/dist/stock/index.js +674 -0
- package/dist/stock/module.d.ts +6330 -0
- package/dist/stock/module.js +1325 -0
- package/dist/stock/web/ScanBox.d.ts +8 -0
- package/dist/stock/web/ScanBox.js +90 -0
- package/dist/stock/web/index.d.ts +11 -0
- package/dist/stock/web/index.js +16 -0
- package/dist/stock/web/messages.d.ts +2 -0
- package/dist/stock/web/messages.js +25 -0
- package/dist/stock_account/.kosh/bindings.d.ts +22 -0
- package/dist/stock_account/.kosh/bindings.js +15 -0
- package/dist/stock_account/.kosh/schema.d.ts +1875 -0
- package/dist/stock_account/index.d.ts +3 -0
- package/dist/stock_account/index.js +130 -0
- package/dist/stock_account/module.d.ts +10655 -0
- package/dist/stock_account/module.js +339 -0
- package/dist/storage/attachments.d.ts +5 -0
- package/dist/storage/attachments.js +12 -1
- package/dist/storage/models.js +3 -0
- package/dist/storage/routes.js +13 -2
- package/dist/todo/.kosh/bindings.d.ts +22 -0
- package/dist/todo/.kosh/bindings.js +15 -0
- package/dist/todo/.kosh/schema.d.ts +732 -0
- package/dist/todo/demo.d.ts +6 -0
- package/dist/todo/demo.js +35 -0
- package/dist/todo/index.d.ts +3 -0
- package/dist/todo/index.js +187 -0
- package/dist/todo/module.d.ts +1180 -0
- package/dist/todo/module.js +130 -0
- package/dist/trade_finance/.kosh/bindings.d.ts +22 -0
- package/dist/trade_finance/.kosh/bindings.js +15 -0
- package/dist/trade_finance/.kosh/schema.d.ts +884 -0
- package/dist/trade_finance/demo.d.ts +6 -0
- package/dist/trade_finance/demo.js +63 -0
- package/dist/trade_finance/index.d.ts +3 -0
- package/dist/trade_finance/index.js +413 -0
- package/dist/trade_finance/module.d.ts +3779 -0
- package/dist/trade_finance/module.js +505 -0
- package/dist/trade_finance_account/.kosh/bindings.d.ts +22 -0
- package/dist/trade_finance_account/.kosh/bindings.js +15 -0
- package/dist/trade_finance_account/.kosh/schema.d.ts +1711 -0
- package/dist/trade_finance_account/index.d.ts +3 -0
- package/dist/trade_finance_account/index.js +92 -0
- package/dist/trade_finance_account/module.d.ts +7928 -0
- package/dist/trade_finance_account/module.js +244 -0
- package/dist/trade_finance_purchase/.kosh/bindings.d.ts +22 -0
- package/dist/trade_finance_purchase/.kosh/bindings.js +15 -0
- package/dist/trade_finance_purchase/.kosh/schema.d.ts +1153 -0
- package/dist/trade_finance_purchase/index.d.ts +8 -0
- package/dist/trade_finance_purchase/index.js +50 -0
- package/dist/trade_finance_purchase/module.d.ts +4252 -0
- package/dist/trade_finance_purchase/module.js +44 -0
- package/dist/trade_finance_sale/.kosh/bindings.d.ts +22 -0
- package/dist/trade_finance_sale/.kosh/bindings.js +15 -0
- package/dist/trade_finance_sale/.kosh/schema.d.ts +1071 -0
- package/dist/trade_finance_sale/index.d.ts +8 -0
- package/dist/trade_finance_sale/index.js +50 -0
- package/dist/trade_finance_sale/module.d.ts +4280 -0
- package/dist/trade_finance_sale/module.js +44 -0
- package/dist/ui/api.d.ts +6 -1
- package/dist/ui/api.js +2 -1
- package/dist/ui/app.js +51 -17
- package/dist/ui/components/AppIcon.js +33 -1
- package/dist/ui/components/Avatar.d.ts +21 -0
- package/dist/ui/components/Avatar.js +71 -0
- package/dist/ui/components/primitives.d.ts +2 -0
- package/dist/ui/components/primitives.js +7 -1
- package/dist/ui/i18n/messages.d.ts +53 -0
- package/dist/ui/i18n/messages.js +98 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +2 -0
- package/dist/ui/offline/queue.d.ts +5 -1
- package/dist/ui/offline/queue.js +2 -0
- package/dist/ui/registry.d.ts +12 -1
- package/dist/ui/registry.js +10 -1
- package/dist/ui/search/ViewTabs.d.ts +14 -0
- package/dist/ui/search/ViewTabs.js +42 -0
- package/dist/ui/shell/Consent.d.ts +5 -0
- package/dist/ui/shell/Consent.js +35 -0
- package/dist/ui/shell/Home.js +136 -16
- package/dist/ui/shell/Sidebar.js +15 -22
- package/dist/ui/views/FormView.js +98 -17
- package/dist/ui/views/KanbanView.d.ts +2 -0
- package/dist/ui/views/KanbanView.js +32 -3
- package/dist/ui/views/ListView.js +155 -31
- package/dist/ui/views/StatsRow.d.ts +14 -0
- package/dist/ui/views/StatsRow.js +88 -0
- package/dist/ui/views/widgets.d.ts +2 -1
- package/dist/ui/views/widgets.js +194 -1
- package/dist/views/builders.d.ts +19 -2
- package/dist/views/builders.js +21 -1
- package/dist/views/condition.d.ts +6 -0
- package/dist/views/condition.js +20 -0
- package/dist/views/documents.d.ts +8 -0
- package/dist/views/extend.d.ts +2 -2
- package/dist/views/extend.js +11 -1
- package/dist/views/index.d.ts +2 -2
- package/dist/views/index.js +2 -2
- package/dist/views/types.d.ts +52 -5
- package/dist/views/validate.js +39 -1
- package/dist/website/.kosh/bindings.d.ts +22 -0
- package/dist/website/.kosh/bindings.js +15 -0
- package/dist/website/.kosh/schema.d.ts +881 -0
- package/dist/website/demo.d.ts +6 -0
- package/dist/website/demo.js +115 -0
- package/dist/website/index.d.ts +9 -0
- package/dist/website/index.js +250 -0
- package/dist/website/module.d.ts +2987 -0
- package/dist/website/module.js +281 -0
- package/dist/website/render.d.ts +45 -0
- package/dist/website/render.js +102 -0
- package/dist/website/routes.d.ts +12 -0
- package/dist/website/routes.js +246 -0
- package/dist/website/web/PagePreview.d.ts +7 -0
- package/dist/website/web/PagePreview.js +33 -0
- package/dist/website/web/index.d.ts +11 -0
- package/dist/website/web/index.js +16 -0
- package/dist/website/web/messages.d.ts +2 -0
- package/dist/website/web/messages.js +15 -0
- package/dist/website_crm/.kosh/bindings.d.ts +22 -0
- package/dist/website_crm/.kosh/bindings.js +15 -0
- package/dist/website_crm/.kosh/schema.d.ts +966 -0
- package/dist/website_crm/index.d.ts +3 -0
- package/dist/website_crm/index.js +39 -0
- package/dist/website_crm/module.d.ts +2955 -0
- package/dist/website_crm/module.js +44 -0
- package/package.json +118 -1
package/dist/sales/module.d.ts
CHANGED
|
@@ -161,6 +161,26 @@ export declare const SaleOrder: import("../server/orm.js").Model<"sale.order", {
|
|
|
161
161
|
readonly hasDefault: false;
|
|
162
162
|
readonly readonly: true;
|
|
163
163
|
}>;
|
|
164
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
165
|
+
readonly required: false;
|
|
166
|
+
readonly computed: true;
|
|
167
|
+
readonly inverse: false;
|
|
168
|
+
readonly sequence: false;
|
|
169
|
+
readonly computeName: undefined;
|
|
170
|
+
readonly store: true;
|
|
171
|
+
readonly hasDefault: false;
|
|
172
|
+
readonly readonly: true;
|
|
173
|
+
}>;
|
|
174
|
+
readonly marginPercent: import("../server/orm.js").DecimalField<{
|
|
175
|
+
readonly required: false;
|
|
176
|
+
readonly computed: true;
|
|
177
|
+
readonly inverse: false;
|
|
178
|
+
readonly sequence: false;
|
|
179
|
+
readonly computeName: undefined;
|
|
180
|
+
readonly store: true;
|
|
181
|
+
readonly hasDefault: false;
|
|
182
|
+
readonly readonly: true;
|
|
183
|
+
}>;
|
|
164
184
|
readonly state: import("../server/orm.js").StateField<"cancel" | "done" | "draft" | "sale" | "sent", {
|
|
165
185
|
readonly send: {
|
|
166
186
|
readonly from: readonly ["draft"];
|
|
@@ -318,6 +338,27 @@ export declare const SaleOrder: import("../server/orm.js").Model<"sale.order", {
|
|
|
318
338
|
readonly hasDefault: false;
|
|
319
339
|
readonly readonly: true;
|
|
320
340
|
}>;
|
|
341
|
+
/** RFC 0022 step 2: what the order earns — the lines' untaxed amounts less their products' cost. */
|
|
342
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
343
|
+
readonly required: false;
|
|
344
|
+
readonly computed: true;
|
|
345
|
+
readonly inverse: false;
|
|
346
|
+
readonly sequence: false;
|
|
347
|
+
readonly computeName: undefined;
|
|
348
|
+
readonly store: true;
|
|
349
|
+
readonly hasDefault: false;
|
|
350
|
+
readonly readonly: true;
|
|
351
|
+
}>;
|
|
352
|
+
readonly marginPercent: import("../server/orm.js").DecimalField<{
|
|
353
|
+
readonly required: false;
|
|
354
|
+
readonly computed: true;
|
|
355
|
+
readonly inverse: false;
|
|
356
|
+
readonly sequence: false;
|
|
357
|
+
readonly computeName: undefined;
|
|
358
|
+
readonly store: true;
|
|
359
|
+
readonly hasDefault: false;
|
|
360
|
+
readonly readonly: true;
|
|
361
|
+
}>;
|
|
321
362
|
readonly state: import("../server/orm.js").StateField<"cancel" | "done" | "draft" | "sale" | "sent", {
|
|
322
363
|
readonly send: {
|
|
323
364
|
readonly from: readonly ["draft"];
|
|
@@ -355,6 +396,29 @@ export declare const SaleOrder: import("../server/orm.js").Model<"sale.order", {
|
|
|
355
396
|
sequence: false;
|
|
356
397
|
}>;
|
|
357
398
|
}>>;
|
|
399
|
+
/** The company's quotation settings (RFC 0020): how long quotations stay valid, and their default terms. */
|
|
400
|
+
export declare const CompanySales: import("../server/orm.js").Extension<"res.company", {
|
|
401
|
+
readonly saleValidityDays: import("../server/orm.js").ScalarField<"integer", number, number, {
|
|
402
|
+
readonly required: false;
|
|
403
|
+
readonly computed: false;
|
|
404
|
+
readonly inverse: false;
|
|
405
|
+
readonly sequence: false;
|
|
406
|
+
readonly computeName: undefined;
|
|
407
|
+
readonly store: true;
|
|
408
|
+
readonly hasDefault: true;
|
|
409
|
+
readonly readonly: false;
|
|
410
|
+
}>;
|
|
411
|
+
readonly saleTerms: import("../server/orm.js").ScalarField<"text", string, string, {
|
|
412
|
+
readonly required: false;
|
|
413
|
+
readonly computed: false;
|
|
414
|
+
readonly inverse: false;
|
|
415
|
+
readonly sequence: false;
|
|
416
|
+
readonly computeName: undefined;
|
|
417
|
+
readonly store: true;
|
|
418
|
+
readonly hasDefault: false;
|
|
419
|
+
readonly readonly: false;
|
|
420
|
+
}>;
|
|
421
|
+
}, Record<never, never>>;
|
|
358
422
|
export declare const SaleOrderLine: import("../server/orm.js").Model<"sale.order.line", {
|
|
359
423
|
readonly id: import("../server/orm.js").IdField<"sale.order.line">;
|
|
360
424
|
readonly createdAt: import("../server/orm.js").ScalarField<'datetime', Date, Date, {
|
|
@@ -507,6 +571,16 @@ export declare const SaleOrderLine: import("../server/orm.js").Model<"sale.order
|
|
|
507
571
|
readonly hasDefault: false;
|
|
508
572
|
readonly readonly: true;
|
|
509
573
|
}>;
|
|
574
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
575
|
+
readonly required: false;
|
|
576
|
+
readonly computed: true;
|
|
577
|
+
readonly inverse: false;
|
|
578
|
+
readonly sequence: false;
|
|
579
|
+
readonly computeName: undefined;
|
|
580
|
+
readonly store: true;
|
|
581
|
+
readonly hasDefault: false;
|
|
582
|
+
readonly readonly: true;
|
|
583
|
+
}>;
|
|
510
584
|
readonly taxAmount: import("../server/orm.js").MonetaryField<"currency", {
|
|
511
585
|
readonly required: false;
|
|
512
586
|
readonly computed: true;
|
|
@@ -632,6 +706,17 @@ export declare const SaleOrderLine: import("../server/orm.js").Model<"sale.order
|
|
|
632
706
|
readonly hasDefault: false;
|
|
633
707
|
readonly readonly: true;
|
|
634
708
|
}>;
|
|
709
|
+
/** The line's untaxed amount less its product's cost at the time (RFC 0022 step 2). */
|
|
710
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
711
|
+
readonly required: false;
|
|
712
|
+
readonly computed: true;
|
|
713
|
+
readonly inverse: false;
|
|
714
|
+
readonly sequence: false;
|
|
715
|
+
readonly computeName: undefined;
|
|
716
|
+
readonly store: true;
|
|
717
|
+
readonly hasDefault: false;
|
|
718
|
+
readonly readonly: true;
|
|
719
|
+
}>;
|
|
635
720
|
readonly taxAmount: import("../server/orm.js").MonetaryField<"currency", {
|
|
636
721
|
readonly required: false;
|
|
637
722
|
readonly computed: true;
|
|
@@ -806,6 +891,26 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
806
891
|
readonly hasDefault: false;
|
|
807
892
|
readonly readonly: true;
|
|
808
893
|
}>;
|
|
894
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
895
|
+
readonly required: false;
|
|
896
|
+
readonly computed: true;
|
|
897
|
+
readonly inverse: false;
|
|
898
|
+
readonly sequence: false;
|
|
899
|
+
readonly computeName: undefined;
|
|
900
|
+
readonly store: true;
|
|
901
|
+
readonly hasDefault: false;
|
|
902
|
+
readonly readonly: true;
|
|
903
|
+
}>;
|
|
904
|
+
readonly marginPercent: import("../server/orm.js").DecimalField<{
|
|
905
|
+
readonly required: false;
|
|
906
|
+
readonly computed: true;
|
|
907
|
+
readonly inverse: false;
|
|
908
|
+
readonly sequence: false;
|
|
909
|
+
readonly computeName: undefined;
|
|
910
|
+
readonly store: true;
|
|
911
|
+
readonly hasDefault: false;
|
|
912
|
+
readonly readonly: true;
|
|
913
|
+
}>;
|
|
809
914
|
readonly state: import("../server/orm.js").StateField<"cancel" | "done" | "draft" | "sale" | "sent", {
|
|
810
915
|
readonly send: {
|
|
811
916
|
readonly from: readonly ["draft"];
|
|
@@ -963,6 +1068,27 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
963
1068
|
readonly hasDefault: false;
|
|
964
1069
|
readonly readonly: true;
|
|
965
1070
|
}>;
|
|
1071
|
+
/** RFC 0022 step 2: what the order earns — the lines' untaxed amounts less their products' cost. */
|
|
1072
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
1073
|
+
readonly required: false;
|
|
1074
|
+
readonly computed: true;
|
|
1075
|
+
readonly inverse: false;
|
|
1076
|
+
readonly sequence: false;
|
|
1077
|
+
readonly computeName: undefined;
|
|
1078
|
+
readonly store: true;
|
|
1079
|
+
readonly hasDefault: false;
|
|
1080
|
+
readonly readonly: true;
|
|
1081
|
+
}>;
|
|
1082
|
+
readonly marginPercent: import("../server/orm.js").DecimalField<{
|
|
1083
|
+
readonly required: false;
|
|
1084
|
+
readonly computed: true;
|
|
1085
|
+
readonly inverse: false;
|
|
1086
|
+
readonly sequence: false;
|
|
1087
|
+
readonly computeName: undefined;
|
|
1088
|
+
readonly store: true;
|
|
1089
|
+
readonly hasDefault: false;
|
|
1090
|
+
readonly readonly: true;
|
|
1091
|
+
}>;
|
|
966
1092
|
readonly state: import("../server/orm.js").StateField<"cancel" | "done" | "draft" | "sale" | "sent", {
|
|
967
1093
|
readonly send: {
|
|
968
1094
|
readonly from: readonly ["draft"];
|
|
@@ -1151,6 +1277,16 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
1151
1277
|
readonly hasDefault: false;
|
|
1152
1278
|
readonly readonly: true;
|
|
1153
1279
|
}>;
|
|
1280
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
1281
|
+
readonly required: false;
|
|
1282
|
+
readonly computed: true;
|
|
1283
|
+
readonly inverse: false;
|
|
1284
|
+
readonly sequence: false;
|
|
1285
|
+
readonly computeName: undefined;
|
|
1286
|
+
readonly store: true;
|
|
1287
|
+
readonly hasDefault: false;
|
|
1288
|
+
readonly readonly: true;
|
|
1289
|
+
}>;
|
|
1154
1290
|
readonly taxAmount: import("../server/orm.js").MonetaryField<"currency", {
|
|
1155
1291
|
readonly required: false;
|
|
1156
1292
|
readonly computed: true;
|
|
@@ -1276,6 +1412,17 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
1276
1412
|
readonly hasDefault: false;
|
|
1277
1413
|
readonly readonly: true;
|
|
1278
1414
|
}>;
|
|
1415
|
+
/** The line's untaxed amount less its product's cost at the time (RFC 0022 step 2). */
|
|
1416
|
+
readonly margin: import("../server/orm.js").MonetaryField<"currency", {
|
|
1417
|
+
readonly required: false;
|
|
1418
|
+
readonly computed: true;
|
|
1419
|
+
readonly inverse: false;
|
|
1420
|
+
readonly sequence: false;
|
|
1421
|
+
readonly computeName: undefined;
|
|
1422
|
+
readonly store: true;
|
|
1423
|
+
readonly hasDefault: false;
|
|
1424
|
+
readonly readonly: true;
|
|
1425
|
+
}>;
|
|
1279
1426
|
readonly taxAmount: import("../server/orm.js").MonetaryField<"currency", {
|
|
1280
1427
|
readonly required: false;
|
|
1281
1428
|
readonly computed: true;
|
|
@@ -1286,7 +1433,70 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
1286
1433
|
readonly hasDefault: false;
|
|
1287
1434
|
readonly readonly: true;
|
|
1288
1435
|
}>;
|
|
1289
|
-
}>>], readonly [import("../server/orm.js").Module<readonly [import("../server/orm.js").Model<"res.partner", {
|
|
1436
|
+
}>>], readonly [import("../server/orm.js").Module<readonly [import("../server/orm.js").Model<"res.partner.tag", {
|
|
1437
|
+
readonly id: import("../server/orm.js").IdField<"res.partner.tag">;
|
|
1438
|
+
readonly createdAt: import("../server/orm.js").ScalarField<'datetime', Date, Date, {
|
|
1439
|
+
required: true;
|
|
1440
|
+
readonly: true;
|
|
1441
|
+
computed: false;
|
|
1442
|
+
inverse: false;
|
|
1443
|
+
hasDefault: false;
|
|
1444
|
+
sequence: false;
|
|
1445
|
+
}>;
|
|
1446
|
+
readonly updatedAt: import("../server/orm.js").ScalarField<'datetime', Date, Date, {
|
|
1447
|
+
required: true;
|
|
1448
|
+
readonly: true;
|
|
1449
|
+
computed: false;
|
|
1450
|
+
inverse: false;
|
|
1451
|
+
hasDefault: false;
|
|
1452
|
+
sequence: false;
|
|
1453
|
+
}>;
|
|
1454
|
+
readonly createdBy: import("../server/orm.js").Many2oneField<'res.users', {
|
|
1455
|
+
required: false;
|
|
1456
|
+
readonly: true;
|
|
1457
|
+
computed: false;
|
|
1458
|
+
inverse: false;
|
|
1459
|
+
hasDefault: false;
|
|
1460
|
+
sequence: false;
|
|
1461
|
+
}>;
|
|
1462
|
+
readonly updatedBy: import("../server/orm.js").Many2oneField<'res.users', {
|
|
1463
|
+
required: false;
|
|
1464
|
+
readonly: true;
|
|
1465
|
+
computed: false;
|
|
1466
|
+
inverse: false;
|
|
1467
|
+
hasDefault: false;
|
|
1468
|
+
sequence: false;
|
|
1469
|
+
}>;
|
|
1470
|
+
readonly displayName: import("../server/orm.js").CharField<{
|
|
1471
|
+
required: true;
|
|
1472
|
+
readonly: true;
|
|
1473
|
+
computed: true;
|
|
1474
|
+
inverse: false;
|
|
1475
|
+
hasDefault: false;
|
|
1476
|
+
sequence: false;
|
|
1477
|
+
}>;
|
|
1478
|
+
readonly name: import("../server/orm.js").CharField<{
|
|
1479
|
+
readonly required: true;
|
|
1480
|
+
readonly computed: false;
|
|
1481
|
+
readonly inverse: false;
|
|
1482
|
+
readonly sequence: false;
|
|
1483
|
+
readonly computeName: undefined;
|
|
1484
|
+
readonly store: true;
|
|
1485
|
+
readonly hasDefault: false;
|
|
1486
|
+
readonly readonly: false;
|
|
1487
|
+
}, string>;
|
|
1488
|
+
}, {} & import("../server/orm.js").TransitionMethods<{
|
|
1489
|
+
readonly name: import("../server/orm.js").CharField<{
|
|
1490
|
+
readonly required: true;
|
|
1491
|
+
readonly computed: false;
|
|
1492
|
+
readonly inverse: false;
|
|
1493
|
+
readonly sequence: false;
|
|
1494
|
+
readonly computeName: undefined;
|
|
1495
|
+
readonly store: true;
|
|
1496
|
+
readonly hasDefault: false;
|
|
1497
|
+
readonly readonly: false;
|
|
1498
|
+
}, string>;
|
|
1499
|
+
}>>, import("../server/orm.js").Model<"res.partner", {
|
|
1290
1500
|
readonly id: import("../server/orm.js").IdField<"res.partner">;
|
|
1291
1501
|
readonly createdAt: import("../server/orm.js").ScalarField<'datetime', Date, Date, {
|
|
1292
1502
|
required: true;
|
|
@@ -1340,6 +1550,46 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
1340
1550
|
readonly hasDefault: false;
|
|
1341
1551
|
readonly readonly: false;
|
|
1342
1552
|
}, string>;
|
|
1553
|
+
readonly image: import("../server/orm.js").Many2oneField<"storage.attachment", {
|
|
1554
|
+
readonly required: false;
|
|
1555
|
+
readonly computed: false;
|
|
1556
|
+
readonly inverse: false;
|
|
1557
|
+
readonly sequence: false;
|
|
1558
|
+
readonly computeName: undefined;
|
|
1559
|
+
readonly store: true;
|
|
1560
|
+
readonly hasDefault: false;
|
|
1561
|
+
readonly readonly: false;
|
|
1562
|
+
}>;
|
|
1563
|
+
readonly tags: import("../server/orm.js").Many2manyField<"res.partner.tag", {
|
|
1564
|
+
readonly required: true;
|
|
1565
|
+
readonly computed: false;
|
|
1566
|
+
readonly inverse: false;
|
|
1567
|
+
readonly sequence: false;
|
|
1568
|
+
readonly computeName: undefined;
|
|
1569
|
+
readonly store: true;
|
|
1570
|
+
readonly hasDefault: true;
|
|
1571
|
+
readonly readonly: false;
|
|
1572
|
+
}>;
|
|
1573
|
+
readonly latitude: import("../server/orm.js").DecimalField<{
|
|
1574
|
+
readonly required: false;
|
|
1575
|
+
readonly computed: false;
|
|
1576
|
+
readonly inverse: false;
|
|
1577
|
+
readonly sequence: false;
|
|
1578
|
+
readonly computeName: undefined;
|
|
1579
|
+
readonly store: true;
|
|
1580
|
+
readonly hasDefault: false;
|
|
1581
|
+
readonly readonly: false;
|
|
1582
|
+
}>;
|
|
1583
|
+
readonly longitude: import("../server/orm.js").DecimalField<{
|
|
1584
|
+
readonly required: false;
|
|
1585
|
+
readonly computed: false;
|
|
1586
|
+
readonly inverse: false;
|
|
1587
|
+
readonly sequence: false;
|
|
1588
|
+
readonly computeName: undefined;
|
|
1589
|
+
readonly store: true;
|
|
1590
|
+
readonly hasDefault: false;
|
|
1591
|
+
readonly readonly: false;
|
|
1592
|
+
}>;
|
|
1343
1593
|
readonly isCompany: import("../server/orm.js").ScalarField<"boolean", boolean, boolean, {
|
|
1344
1594
|
readonly required: true;
|
|
1345
1595
|
readonly computed: false;
|
|
@@ -1521,6 +1771,46 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
1521
1771
|
readonly hasDefault: false;
|
|
1522
1772
|
readonly readonly: false;
|
|
1523
1773
|
}, string>;
|
|
1774
|
+
readonly image: import("../server/orm.js").Many2oneField<"storage.attachment", {
|
|
1775
|
+
readonly required: false;
|
|
1776
|
+
readonly computed: false;
|
|
1777
|
+
readonly inverse: false;
|
|
1778
|
+
readonly sequence: false;
|
|
1779
|
+
readonly computeName: undefined;
|
|
1780
|
+
readonly store: true;
|
|
1781
|
+
readonly hasDefault: false;
|
|
1782
|
+
readonly readonly: false;
|
|
1783
|
+
}>;
|
|
1784
|
+
readonly tags: import("../server/orm.js").Many2manyField<"res.partner.tag", {
|
|
1785
|
+
readonly required: true;
|
|
1786
|
+
readonly computed: false;
|
|
1787
|
+
readonly inverse: false;
|
|
1788
|
+
readonly sequence: false;
|
|
1789
|
+
readonly computeName: undefined;
|
|
1790
|
+
readonly store: true;
|
|
1791
|
+
readonly hasDefault: true;
|
|
1792
|
+
readonly readonly: false;
|
|
1793
|
+
}>;
|
|
1794
|
+
readonly latitude: import("../server/orm.js").DecimalField<{
|
|
1795
|
+
readonly required: false;
|
|
1796
|
+
readonly computed: false;
|
|
1797
|
+
readonly inverse: false;
|
|
1798
|
+
readonly sequence: false;
|
|
1799
|
+
readonly computeName: undefined;
|
|
1800
|
+
readonly store: true;
|
|
1801
|
+
readonly hasDefault: false;
|
|
1802
|
+
readonly readonly: false;
|
|
1803
|
+
}>;
|
|
1804
|
+
readonly longitude: import("../server/orm.js").DecimalField<{
|
|
1805
|
+
readonly required: false;
|
|
1806
|
+
readonly computed: false;
|
|
1807
|
+
readonly inverse: false;
|
|
1808
|
+
readonly sequence: false;
|
|
1809
|
+
readonly computeName: undefined;
|
|
1810
|
+
readonly store: true;
|
|
1811
|
+
readonly hasDefault: false;
|
|
1812
|
+
readonly readonly: false;
|
|
1813
|
+
}>;
|
|
1524
1814
|
readonly isCompany: import("../server/orm.js").ScalarField<"boolean", boolean, boolean, {
|
|
1525
1815
|
readonly required: true;
|
|
1526
1816
|
readonly computed: false;
|
|
@@ -1691,7 +1981,28 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
1691
1981
|
readonly hasDefault: false;
|
|
1692
1982
|
readonly readonly: false;
|
|
1693
1983
|
}>;
|
|
1694
|
-
}>>], readonly [import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]
|
|
1984
|
+
}>>], readonly [import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]>, import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]>], readonly [import("../server/orm.js").Extension<"res.company", {
|
|
1985
|
+
readonly contactTaxIdRequired: import("../server/orm.js").ScalarField<"boolean", boolean, boolean, {
|
|
1986
|
+
readonly required: true;
|
|
1987
|
+
readonly computed: false;
|
|
1988
|
+
readonly inverse: false;
|
|
1989
|
+
readonly sequence: false;
|
|
1990
|
+
readonly computeName: undefined;
|
|
1991
|
+
readonly store: true;
|
|
1992
|
+
readonly hasDefault: true;
|
|
1993
|
+
readonly readonly: false;
|
|
1994
|
+
}>;
|
|
1995
|
+
readonly contactUniqueEmail: import("../server/orm.js").ScalarField<"boolean", boolean, boolean, {
|
|
1996
|
+
readonly required: true;
|
|
1997
|
+
readonly computed: false;
|
|
1998
|
+
readonly inverse: false;
|
|
1999
|
+
readonly sequence: false;
|
|
2000
|
+
readonly computeName: undefined;
|
|
2001
|
+
readonly store: true;
|
|
2002
|
+
readonly hasDefault: true;
|
|
2003
|
+
readonly readonly: false;
|
|
2004
|
+
}>;
|
|
2005
|
+
}, Record<never, never>>]>, import("../server/orm.js").Module<readonly [import("../server/orm.js").Model<"uom.uom", {
|
|
1695
2006
|
readonly id: import("../server/orm.js").IdField<"uom.uom">;
|
|
1696
2007
|
readonly createdAt: import("../server/orm.js").ScalarField<'datetime', Date, Date, {
|
|
1697
2008
|
required: true;
|
|
@@ -2225,6 +2536,16 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
2225
2536
|
readonly hasDefault: false;
|
|
2226
2537
|
readonly readonly: false;
|
|
2227
2538
|
}, string>;
|
|
2539
|
+
readonly image: import("../server/orm.js").Many2oneField<"storage.attachment", {
|
|
2540
|
+
readonly required: false;
|
|
2541
|
+
readonly computed: false;
|
|
2542
|
+
readonly inverse: false;
|
|
2543
|
+
readonly sequence: false;
|
|
2544
|
+
readonly computeName: undefined;
|
|
2545
|
+
readonly store: true;
|
|
2546
|
+
readonly hasDefault: false;
|
|
2547
|
+
readonly readonly: false;
|
|
2548
|
+
}>;
|
|
2228
2549
|
readonly listPrice: import("../server/orm.js").DecimalField<{
|
|
2229
2550
|
readonly required: true;
|
|
2230
2551
|
readonly computed: false;
|
|
@@ -2376,6 +2697,16 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
2376
2697
|
readonly hasDefault: false;
|
|
2377
2698
|
readonly readonly: false;
|
|
2378
2699
|
}, string>;
|
|
2700
|
+
readonly image: import("../server/orm.js").Many2oneField<"storage.attachment", {
|
|
2701
|
+
readonly required: false;
|
|
2702
|
+
readonly computed: false;
|
|
2703
|
+
readonly inverse: false;
|
|
2704
|
+
readonly sequence: false;
|
|
2705
|
+
readonly computeName: undefined;
|
|
2706
|
+
readonly store: true;
|
|
2707
|
+
readonly hasDefault: false;
|
|
2708
|
+
readonly readonly: false;
|
|
2709
|
+
}>;
|
|
2379
2710
|
readonly listPrice: import("../server/orm.js").DecimalField<{
|
|
2380
2711
|
readonly required: true;
|
|
2381
2712
|
readonly computed: false;
|
|
@@ -2466,4 +2797,25 @@ export declare const salesShutro: import("../server/orm.js").Module<readonly [im
|
|
|
2466
2797
|
readonly hasDefault: false;
|
|
2467
2798
|
readonly readonly: false;
|
|
2468
2799
|
}>;
|
|
2469
|
-
}>>], readonly [import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]>], readonly []>, import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]>], readonly [
|
|
2800
|
+
}>>], readonly [import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]>, import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]>], readonly []>, import("../server/orm.js").Module<readonly import("../server/orm.js").AnyModel[], readonly import("../server/orm.js").ModuleBase[], readonly import("../server/orm.js").AnyExtension[]>], readonly [import("../server/orm.js").Extension<"res.company", {
|
|
2801
|
+
readonly saleValidityDays: import("../server/orm.js").ScalarField<"integer", number, number, {
|
|
2802
|
+
readonly required: false;
|
|
2803
|
+
readonly computed: false;
|
|
2804
|
+
readonly inverse: false;
|
|
2805
|
+
readonly sequence: false;
|
|
2806
|
+
readonly computeName: undefined;
|
|
2807
|
+
readonly store: true;
|
|
2808
|
+
readonly hasDefault: true;
|
|
2809
|
+
readonly readonly: false;
|
|
2810
|
+
}>;
|
|
2811
|
+
readonly saleTerms: import("../server/orm.js").ScalarField<"text", string, string, {
|
|
2812
|
+
readonly required: false;
|
|
2813
|
+
readonly computed: false;
|
|
2814
|
+
readonly inverse: false;
|
|
2815
|
+
readonly sequence: false;
|
|
2816
|
+
readonly computeName: undefined;
|
|
2817
|
+
readonly store: true;
|
|
2818
|
+
readonly hasDefault: false;
|
|
2819
|
+
readonly readonly: false;
|
|
2820
|
+
}>;
|
|
2821
|
+
}, Record<never, never>>]>;
|
package/dist/sales/module.js
CHANGED
|
@@ -7,12 +7,20 @@ import { contactsShutro } from '../contacts/index.js';
|
|
|
7
7
|
import { messagingShutro } from '../messaging/index.js';
|
|
8
8
|
import { computeTaxes, productShutro, taxRule } from '../product/index.js';
|
|
9
9
|
import { orm } from '../server/orm.js';
|
|
10
|
-
import { check, compute, defineModel, defineModule, f, onchange, records, } from './.kosh/bindings.js';
|
|
10
|
+
import { check, compute, defineModel, defineModule, extendModel, f, onchange, records, } from './.kosh/bindings.js';
|
|
11
11
|
/** A line's taxes through the engine (RFC 0016): its amount after discount, its taxes in order. */
|
|
12
12
|
function taxesOf(l) {
|
|
13
13
|
const amount = l.quantity.times(l.priceUnit).times(orm.toDecimal(100).minus(l.discount)).div(100);
|
|
14
14
|
return computeTaxes(amount, l.quantity, [...l.taxes].map(taxRule));
|
|
15
15
|
}
|
|
16
|
+
/** A monetary value's amount (a Money object or a plain Decimal), or null. */
|
|
17
|
+
function amountOf(value) {
|
|
18
|
+
if (value === null || value === undefined)
|
|
19
|
+
return null;
|
|
20
|
+
if (typeof value === 'object' && 'amount' in value)
|
|
21
|
+
return value.amount;
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
16
24
|
const amounts = compute('sale.order', ['amountUntaxed', 'amountTax', 'amountTotal'], ['lines.subtotal', 'lines.taxAmount'], (orders) => {
|
|
17
25
|
for (const o of orders) {
|
|
18
26
|
// A new order has no currency until its partner is chosen: no amounts yet.
|
|
@@ -64,6 +72,31 @@ export const SaleOrder = defineModel('sale.order', {
|
|
|
64
72
|
amountUntaxed: f.monetary({ currency: 'currency', store: true, label: 'Untaxed', ...amounts }),
|
|
65
73
|
amountTax: f.monetary({ currency: 'currency', store: true, label: 'Taxes', ...amounts }),
|
|
66
74
|
amountTotal: f.monetary({ currency: 'currency', store: true, label: 'Total', ...amounts }),
|
|
75
|
+
/** RFC 0022 step 2: what the order earns — the lines' untaxed amounts less their products' cost. */
|
|
76
|
+
margin: f.monetary({
|
|
77
|
+
currency: 'currency',
|
|
78
|
+
store: true,
|
|
79
|
+
label: 'Margin',
|
|
80
|
+
...compute('sale.order', 'margin', ['lines.margin', 'currency'], (orders) => {
|
|
81
|
+
for (const o of orders)
|
|
82
|
+
o.margin = o.currency === null ? null : o.lines.sum('margin', o.currency);
|
|
83
|
+
}),
|
|
84
|
+
}),
|
|
85
|
+
marginPercent: f.decimal({
|
|
86
|
+
scale: 1,
|
|
87
|
+
store: true,
|
|
88
|
+
label: 'Margin (%)',
|
|
89
|
+
...compute('sale.order', 'marginPercent', ['margin', 'amountUntaxed'], (orders) => {
|
|
90
|
+
for (const o of orders) {
|
|
91
|
+
const untaxed = amountOf(o.amountUntaxed);
|
|
92
|
+
const margin = amountOf(o.margin);
|
|
93
|
+
o.marginPercent =
|
|
94
|
+
untaxed === null || margin === null || untaxed.isZero()
|
|
95
|
+
? null
|
|
96
|
+
: margin.times(100).div(untaxed).toDecimalPlaces(1);
|
|
97
|
+
}
|
|
98
|
+
}),
|
|
99
|
+
}),
|
|
67
100
|
state: f.state({
|
|
68
101
|
states: {
|
|
69
102
|
draft: 'Quotation',
|
|
@@ -98,8 +131,9 @@ export const SaleOrder = defineModel('sale.order', {
|
|
|
98
131
|
}),
|
|
99
132
|
},
|
|
100
133
|
onchange: {
|
|
101
|
-
// The customer's currency, else the company's.
|
|
134
|
+
// The customer's currency, else the company's; an empty validity and terms from the company's settings.
|
|
102
135
|
partner: onchange('sale.order', async (d, env) => {
|
|
136
|
+
await quotationDefaults(d, env);
|
|
103
137
|
const p = await d.record('partner');
|
|
104
138
|
if (p?.currency) {
|
|
105
139
|
d.set('currency', p.currency.id);
|
|
@@ -112,8 +146,33 @@ export const SaleOrder = defineModel('sale.order', {
|
|
|
112
146
|
if (company !== undefined)
|
|
113
147
|
d.set('currency', company.currency.id);
|
|
114
148
|
}),
|
|
149
|
+
// A new order date moves the validity with it.
|
|
150
|
+
dateOrder: onchange('sale.order', async (d, env) => {
|
|
151
|
+
d.set('validityDate', null);
|
|
152
|
+
await quotationDefaults(d, env);
|
|
153
|
+
}),
|
|
115
154
|
},
|
|
116
155
|
});
|
|
156
|
+
/** The company's quotation settings (RFC 0020): how long quotations stay valid, and their default terms. */
|
|
157
|
+
export const CompanySales = extendModel('res.company', {
|
|
158
|
+
fields: {
|
|
159
|
+
saleValidityDays: f.integer({ default: 30, label: 'Quotations valid for (days, 0: no limit)' }),
|
|
160
|
+
saleTerms: f.text({ label: 'Default terms and conditions' }),
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
/** Fills an order's empty validity and terms from its company's settings. */
|
|
164
|
+
async function quotationDefaults(d, env) {
|
|
165
|
+
const [company] = (await env.model('res.company').browse([env.companyId]).load(['saleValidityDays', 'saleTerms'])).read(['saleValidityDays', 'saleTerms']);
|
|
166
|
+
const days = Number(company?.['saleValidityDays'] ?? 0);
|
|
167
|
+
const date = d.get('dateOrder');
|
|
168
|
+
if ((d.get('validityDate') ?? null) === null && days > 0 && typeof date === 'string') {
|
|
169
|
+
const [y, m, day] = date.split('-').map(Number);
|
|
170
|
+
d.set('validityDate', new Date(Date.UTC(y, m - 1, day + days)).toISOString().slice(0, 10));
|
|
171
|
+
}
|
|
172
|
+
const terms = company?.['saleTerms'];
|
|
173
|
+
if ((d.get('note') ?? '') === '' && typeof terms === 'string' && terms !== '')
|
|
174
|
+
d.set('note', terms);
|
|
175
|
+
}
|
|
117
176
|
export const SaleOrderLine = defineModel('sale.order.line', {
|
|
118
177
|
label: 'Order line',
|
|
119
178
|
access: {
|
|
@@ -160,6 +219,21 @@ export const SaleOrderLine = defineModel('sale.order.line', {
|
|
|
160
219
|
l.subtotal = taxesOf(l).untaxed;
|
|
161
220
|
}),
|
|
162
221
|
}),
|
|
222
|
+
/** The line's untaxed amount less its product's cost at the time (RFC 0022 step 2). */
|
|
223
|
+
margin: f.monetary({
|
|
224
|
+
currency: 'currency',
|
|
225
|
+
store: true,
|
|
226
|
+
label: 'Margin',
|
|
227
|
+
...compute('sale.order.line', 'margin', ['subtotal', 'quantity', 'product.standardPrice'], (lines) => {
|
|
228
|
+
for (const l of lines) {
|
|
229
|
+
const untaxed = amountOf(l.subtotal);
|
|
230
|
+
l.margin =
|
|
231
|
+
untaxed === null || l.product === null
|
|
232
|
+
? null
|
|
233
|
+
: untaxed.minus(l.quantity.times(l.product.standardPrice));
|
|
234
|
+
}
|
|
235
|
+
}),
|
|
236
|
+
}),
|
|
163
237
|
taxAmount: f.monetary({
|
|
164
238
|
currency: 'currency',
|
|
165
239
|
store: true,
|
|
@@ -207,7 +281,7 @@ export const SaleOrderLine = defineModel('sale.order.line', {
|
|
|
207
281
|
});
|
|
208
282
|
export const salesShutro = defineModule({
|
|
209
283
|
name: 'sales',
|
|
210
|
-
version: '0.
|
|
284
|
+
version: '0.3.0',
|
|
211
285
|
migrations: [
|
|
212
286
|
{
|
|
213
287
|
version: '0.2.0',
|
|
@@ -231,4 +305,5 @@ export const salesShutro = defineModule({
|
|
|
231
305
|
orm.defineSequence({ code: 'sale.order', prefix: 'SO/{year}/', padding: 5, reset: 'yearly' }),
|
|
232
306
|
],
|
|
233
307
|
models: [SaleOrder, SaleOrderLine],
|
|
308
|
+
extensions: [CompanySales],
|
|
234
309
|
});
|
|
@@ -20,6 +20,8 @@ export interface ApiField {
|
|
|
20
20
|
/** `[value, label]` for selection and state fields with a static list. */
|
|
21
21
|
readonly options: readonly (readonly [string, string])[] | null;
|
|
22
22
|
readonly translate: boolean;
|
|
23
|
+
/** The field's help text, for hints on forms (RFC 0022 §3.4). */
|
|
24
|
+
readonly help: string | null;
|
|
23
25
|
}
|
|
24
26
|
/** A state transition. */
|
|
25
27
|
export interface TransitionSpec {
|
|
@@ -29,6 +31,9 @@ export interface TransitionSpec {
|
|
|
29
31
|
readonly to: string;
|
|
30
32
|
/** A feature permission the user needs (`definePermission`), or `null`. */
|
|
31
33
|
readonly requires: string | null;
|
|
34
|
+
/** The transition's guard (the records that may not go) and the message when it refuses (RFC 0022 §3.4). */
|
|
35
|
+
readonly guard: ((records: unknown) => unknown) | null;
|
|
36
|
+
readonly message: string | null;
|
|
32
37
|
}
|
|
33
38
|
/** One model as the API exposes it. */
|
|
34
39
|
export interface ApiModel {
|
|
@@ -34,6 +34,10 @@ export function apiModels(registry) {
|
|
|
34
34
|
from: Array.isArray(spec['from']) ? spec['from'] : [],
|
|
35
35
|
to: String(spec['to'] ?? ''),
|
|
36
36
|
requires: typeof spec['requires'] === 'string' ? spec['requires'] : null,
|
|
37
|
+
guard: typeof spec['guard'] === 'function'
|
|
38
|
+
? spec['guard']
|
|
39
|
+
: null,
|
|
40
|
+
message: typeof spec['message'] === 'string' ? spec['message'] : null,
|
|
37
41
|
});
|
|
38
42
|
}
|
|
39
43
|
const computedReadonly = d.computed && raw['inverse'] === undefined;
|
|
@@ -41,6 +45,7 @@ export function apiModels(registry) {
|
|
|
41
45
|
key,
|
|
42
46
|
kind: d.kind,
|
|
43
47
|
label: d.label,
|
|
48
|
+
help: d.help ?? null,
|
|
44
49
|
required: d.required,
|
|
45
50
|
readonly: d.readonly || computedReadonly || IMPLICIT_READONLY.has(key) || d.kind === 'state',
|
|
46
51
|
stored: d.column !== null,
|