lambda-erp 0.1.29__tar.gz → 0.1.30__tar.gz
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.
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/PKG-INFO +1 -1
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/chat.py +9 -1
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/pyproject.toml +1 -1
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/.gitignore +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/LICENSE +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/README.md +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/attachments.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/auth.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/bootstrap.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/demo_limits.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/deps.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/errors.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/main.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/pdf.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/providers.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/remarks_md.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/accounting.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/admin.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/analytics.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/bank_reconciliation.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/documents.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/masters.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/proposals.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/reports.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/setup.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/services.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/templates/document.html +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/templates/proposal.html +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/docs/agents/README.md +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/frontend/README.md +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/frontend/src/api/client.ts +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/bank_transaction.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/budget.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/chart_of_accounts.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/general_ledger.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/journal_entry.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/payment_entry.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/pos_invoice.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/purchase_invoice.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/revaluation.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/sales_invoice.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/subscription.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/buying/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/buying/purchase_order.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/currency.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/defaults.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/pricing_rule.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/taxes_and_totals.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/database.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/exceptions.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/hooks.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/model.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/proposal.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/quotation.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/sales_order.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/simulation.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/__init__.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/delivery_note.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/purchase_receipt.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/stock_entry.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/stock_ledger.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/utils.py +0 -0
- {lambda_erp-0.1.29 → lambda_erp-0.1.30}/terraform/README.md +0 -0
|
@@ -1708,11 +1708,19 @@ Shape — note it does NOT use `items`:
|
|
|
1708
1708
|
|
|
1709
1709
|
To build one: ensure each offer already exists as its own Quotation (create them first if needed), then call create_document with doctype "proposal" and a data object whose `quotations` array references those quotations by name. Do NOT submit it; link the user to the PDF at `/api/documents/proposal/<name>/pdf` (and the editor at `/app/proposal/<name>`).
|
|
1710
1710
|
|
|
1711
|
+
### Recurring offer lines (quotation line `frequency`)
|
|
1712
|
+
A **Quotation** line item carries an optional `frequency` that controls how it is billed and totalled on the offer:
|
|
1713
|
+
- `One-time` (the default) — a normal one-off line.
|
|
1714
|
+
- `Monthly` / `Quarterly` / `Half-Yearly` / `Yearly` — a recurring line.
|
|
1715
|
+
When a quote mixes one-time and recurring lines, the one-time lines form the headline grand total (the "Gesamttotal"), and each recurring cadence is totalled **separately** (its own net + MWSt) so a monthly fee never inflates the one-time total. To put a recurring service ON the offer as a real line, set that line's `frequency` alongside its item_code / qty / rate — e.g. a CHF 380 line with `frequency` set to `Monthly`. These values match the Subscription billing intervals exactly; the Quotation itself still posts nothing to the ledger.
|
|
1716
|
+
|
|
1717
|
+
Use the line `frequency` for a recurring item that is genuinely part of the quote. For recurring info you only want to SHOW but that is NOT part of the quotation (a "billed separately after implementation" aside), use the `>> … | …` notes markup below instead — that is cosmetic free text, not a line item, and never enters any total.
|
|
1718
|
+
|
|
1711
1719
|
### Notes / Terms markup (the `remarks` field)
|
|
1712
1720
|
The `remarks` (Notes / Terms) field on quotations, sales orders, and invoices renders on the PDF with a small markup vocabulary, so when a user dictates offer notes, conditions, recurring services, or a sign-off you can compose a polished closing block instead of a flat paragraph. Put this ONLY in `remarks` (never in item descriptions):
|
|
1713
1721
|
- `# Heading` at the start of a line -> bold heading
|
|
1714
1722
|
- `*italic*` or `_italic_` -> italic; `**bold**` -> bold
|
|
1715
|
-
-
|
|
1723
|
+
- A line starting with `>>` is a price line, split by the FIRST `|` pipe: the text BEFORE the pipe goes in the left (frequency) column, the text AFTER it in the right (amount) column — both placed literally as you write them, NOT interpreted (it does not know "Monatlich" is a frequency or that "CHF 380" is a number). Omit the pipe to put everything in the amount column. The two columns line up with the line-items table's frequency/amount columns, so use it for a separately- or recurring-billed item, e.g. `>> Monatlich | CHF 380.—`.
|
|
1716
1724
|
- Separate blocks with a blank line; a single newline is just a line break.
|
|
1717
1725
|
Plain text (no special characters) still renders fine, so only reach for the markup when it improves a customer-facing note.
|
|
1718
1726
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|